예제 #1
0
static ssize_t ps_enable_store(struct device *dev,
                struct device_attribute *attr,
                const char *buf, size_t count)
{
    int ps_en;
    struct al3006_info *lpi = lp_info;

    ps_en = -1;
    sscanf(buf, "%d", &ps_en);

    if (ps_en != 0 && ps_en != 1
        && ps_en != 10 && ps_en != 13 && ps_en != 16)
        return -EINVAL;

    if (ps_en) {
        D("[AL3006] %s: ps_en=%d\n",
            __func__, ps_en);
        psensor_enable(lpi);
    } else
        psensor_disable(lpi);

    D("[AL3006] %s\n", __func__);

    return count;
}
예제 #2
0
static void al3006_early_suspend(struct early_suspend *h)
{
	struct al3006_info *lpi = lp_info;

	D("[AL3006] %s\n", __func__);

#if 0
	if (lpi->als_enable)
		lightsensor_disable(lpi);
	if (lpi->ps_enable)
		psensor_disable(lpi);
#endif
    if(lpi->als_enable && !lpi->ps_enable)
    {
	    cancel_delayed_work(&polling_work);
    }
    if(lpi->ps_enable)/*Need ps interrupt to wake up phone*/{
        D("3006 suspend ps enabled\n");
        al3006_i2c_write(0x0,0x01);
#if 1
        if(!lpi->ps_irq_flag)
        {
            enable_irq(lpi->irq);
            lpi->ps_irq_flag = 1;
        }
#endif
    }
    else
        al3006_i2c_write(0x0,0x0b); //0x03 set chip to idle mode

}
예제 #3
0
static long psensor_ioctl(struct file *file, unsigned int cmd,
			unsigned long arg)
{
	int val;
	struct al3006_info *lpi = lp_info;

	D("[AL3006] %s cmd %d\n", __func__, _IOC_NR(cmd));

	switch (cmd) {
	case DYNA_AL3006_PSENSOR_IOCTL_ENABLE:
		if (get_user(val, (unsigned long __user *)arg))
			return -EFAULT;
		if (val)
			return psensor_enable(lpi);
		else
			return psensor_disable(lpi);
		break;
	case DYNA_AL3006_PSENSOR_IOCTL_GET_ENABLED:
		return put_user(lpi->ps_enable, (unsigned long __user *)arg);
		break;
	default:
		pr_err("[AL3006 error]%s: invalid cmd %d\n",
			__func__, _IOC_NR(cmd));
		return -EINVAL;
	}
}
예제 #4
0
static int psensor_release(struct inode *inode, struct file *file)
{
	struct al3006_info *lpi = lp_info;

	D("[AL3006] %s\n", __func__);

	lpi->psensor_opened = 0;

	return psensor_disable(lpi);
}
static void ltr558_early_suspend(struct early_suspend *h)
{
    struct ltr558_info *lpi = lp_info;
    int ret;

	  D("[ltr558] %s\n", __func__);
#ifdef POLLING_PROXIMITY
    if(lpi->als_enable && !lpi->ps_enable)
    {
	      cancel_delayed_work(&polling_work);
    }
#endif
    ret = psensor_disable(lpi);
	  if (ret == 0)
		    ret = lightsensor_disable(lpi);

	 // return ret;

}