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; }
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 }
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; } }
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; }