diff options
author | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 09:48:20 +0200 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.com> | 2012-09-22 14:02:16 +0200 |
commit | 2489007e7d740ccbc3e0a202914e243ad5178787 (patch) | |
tree | b8e6380ea7b1da63474ad68a5dba997e01146043 /drivers/sensor/cm36651.c | |
parent | 5f67568eb31e3a813c7c52461dcf66ade15fc2e7 (diff) | |
download | kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.zip kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.gz kernel_samsung_smdk4412-2489007e7d740ccbc3e0a202914e243ad5178787.tar.bz2 |
merge opensource jb u5
Change-Id: I1aaec157aa196f3448eff8636134fce89a814cf2
Diffstat (limited to 'drivers/sensor/cm36651.c')
-rw-r--r-- | drivers/sensor/cm36651.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/drivers/sensor/cm36651.c b/drivers/sensor/cm36651.c index e607ca5..8cf11ac 100644 --- a/drivers/sensor/cm36651.c +++ b/drivers/sensor/cm36651.c @@ -78,13 +78,18 @@ /* Intelligent Cancelation*/ #define CM36651_CANCELATION #ifdef CM36651_CANCELATION +#ifdef CONFIG_SLP +#define CANCELATION_FILE_PATH "/csa/sensor/prox_cal_data" +#else #define CANCELATION_FILE_PATH "/efs/prox_cal" +#endif #define CANCELATION_THRESHOLD 9 #endif #define PROX_READ_NUM 40 /*lightsnesor log time 6SEC 200mec X 30*/ #define LIGHT_LOG_TIME 30 +#define LIGHT_ADD_STARTTIME 300000000 enum { LIGHT_ENABLED = BIT(0), PROXIMITY_ENABLED = BIT(1), @@ -237,13 +242,21 @@ int cm36651_i2c_write_byte(struct cm36651_data *cm36651, u8 addr, u8 command, static void cm36651_light_enable(struct cm36651_data *cm36651) { /* enable setting */ + int64_t start_add_time = 0; + start_add_time = ktime_to_ns(cm36651->light_poll_delay)\ + + LIGHT_ADD_STARTTIME; cm36651_i2c_write_byte(cm36651, CM36651_ALS, CS_CONF1, als_reg_setting[0][1]); cm36651_i2c_write_byte(cm36651, CM36651_ALS, CS_CONF2, als_reg_setting[1][1]); - +#if defined(CONFIG_MACH_C1_KOR_SKT) || defined(CONFIG_MACH_C1_KOR_KT)\ +|| defined(CONFIG_MACH_C1_KOR_LGT) + hrtimer_start(&cm36651->light_timer, ns_to_ktime(start_add_time), + HRTIMER_MODE_REL); +#else hrtimer_start(&cm36651->light_timer, cm36651->light_poll_delay, - HRTIMER_MODE_REL); + HRTIMER_MODE_REL); +#endif } static void cm36651_light_disable(struct cm36651_data *cm36651) @@ -736,6 +749,9 @@ irqreturn_t cm36651_irq_thread_fn(int irq, void *data) input_report_abs(cm36651->proximity_input_dev, ABS_DISTANCE, val); input_sync(cm36651->proximity_input_dev); wake_lock_timeout(&cm36651->prx_wake_lock, 3 * HZ); +#ifdef CONFIG_SLP + pm_wakeup_event(cm36651->proximity_dev, 0); +#endif pr_info("%s: val = %d, ps_data = %d (close:0, far:1)\n", __func__, val, ps_data); @@ -783,7 +799,7 @@ static int cm36651_setup_reg(struct cm36651_data *cm36651) /* turn off */ cm36651_i2c_write_byte(cm36651, CM36651_ALS, CS_CONF1, 0x01); - cm36651_i2c_write_byte(cm36651, CM36651_ALS, PS_CONF1, 0x01); + cm36651_i2c_write_byte(cm36651, CM36651_PS, PS_CONF1, 0x01); pr_info("%s is success.", __func__); return err; @@ -1164,6 +1180,10 @@ static int cm36651_i2c_probe(struct i2c_client *client, goto err_light_device_create_file4; } +#ifdef CONFIG_SLP + device_init_wakeup(cm36651->proximity_dev, true); +#endif + dev_set_drvdata(cm36651->light_dev, cm36651); pr_info("%s is success.\n", __func__); @@ -1251,6 +1271,10 @@ static int cm36651_i2c_remove(struct i2c_client *client) destroy_workqueue(cm36651->light_wq); destroy_workqueue(cm36651->prox_wq); +#ifdef CONFIG_SLP + device_init_wakeup(cm36651->proximity_dev, false); +#endif + /* sysfs destroy */ device_remove_file(cm36651->light_dev, &dev_attr_name); device_remove_file(cm36651->light_dev, &dev_attr_vendor); |