static void pen_insert_work(struct work_struct *work) { struct wacom_i2c *wac_i2c = container_of(work, struct wacom_i2c, pen_insert_dwork.work); #ifdef WACOM_DEBOUNCEINT_BY_ESD pen_insert_state = !gpio_get_value(wac_i2c->gpio_pen_insert); #if defined(CONFIG_MACH_T0) if (wac_i2c->invert_pen_insert) pen_insert_state = !pen_insert_state; #endif if (wac_i2c->pen_insert == pen_insert_state) { printk(KERN_DEBUG "[E-PEN] %s INT: (%d) was skipped\n", __func__, wac_i2c->pen_insert); #ifdef BATTERY_SAVING_MODE if (wac_i2c->pen_insert) { if (wac_i2c->battery_saving_mode) wacom_i2c_disable(wac_i2c); } else { if (firmware_updating_state == true) return; printk(KERN_DEBUG "[E-PEN] %s call WACOM Reset\n", __func__); wac_i2c->wac_pdata->suspend_platform_hw(); msleep(200); wacom_i2c_enable(wac_i2c); } #endif return; } wac_i2c->pen_insert = pen_insert_state; #else wac_i2c->pen_insert = !gpio_get_value(wac_i2c->gpio_pen_insert); #if defined(CONFIG_MACH_T0) if (wac_i2c->invert_pen_insert) wac_i2c->pen_insert = !wac_i2c->pen_insert; #endif #endif printk(KERN_DEBUG "[E-PEN] %s : %d\n", __func__, wac_i2c->pen_insert); input_report_switch(wac_i2c->input_dev, SW_PEN_INSERT, !wac_i2c->pen_insert); input_sync(wac_i2c->input_dev); #ifdef BATTERY_SAVING_MODE if (wac_i2c->pen_insert) { if (wac_i2c->battery_saving_mode) wacom_i2c_disable(wac_i2c); } else wacom_i2c_enable(wac_i2c); #endif }
static void pen_insert_work(struct work_struct *work) { struct wacom_i2c *wac_i2c = container_of(work, struct wacom_i2c, pen_insert_dwork.work); if (wac_i2c->init_fail) return; wac_i2c->pen_insert = !gpio_get_value(wac_i2c->gpio_pen_insert); dev_info(&wac_i2c->client->dev, "%s: pen %s\n", __func__, wac_i2c->pen_insert ? "instert" : "remove"); input_report_switch(wac_i2c->input_dev, SW_PEN_INSERT, !wac_i2c->pen_insert); input_sync(wac_i2c->input_dev); #ifdef BATTERY_SAVING_MODE if (wac_i2c->pen_insert) { if (wac_i2c->battery_saving_mode) wacom_i2c_disable(wac_i2c); } else { wacom_i2c_enable(wac_i2c); } #endif }
static void wacom_i2c_late_resume(struct early_suspend *h) { struct wacom_i2c *wac_i2c = container_of(h, struct wacom_i2c, early_suspend); printk(KERN_DEBUG "[E-PEN] %s.\n", __func__); wacom_i2c_enable(wac_i2c); }
static void wacom_i2c_late_resume(struct early_suspend *h) { struct wacom_i2c *wac_i2c = container_of(h, struct wacom_i2c, early_suspend); dev_info(&wac_i2c->client->dev, "%s\n", __func__); wacom_i2c_enable(wac_i2c); }
static int wacom_i2c_input_open(struct input_dev *dev) { struct wacom_i2c *wac_i2c = input_get_drvdata(dev); dev_info(&wac_i2c->client->dev, "%s\n", __func__); wacom_i2c_enable(wac_i2c); wac_i2c->enabled = true; return 0; }
void touchscreen_pen_enable(void) { #ifdef TOUCHWAKE_DEBUG_PRINT pr_info("[TOUCHWAKE] Wacom enable\n"); #endif if (touchwake_pen_data != NULL) wacom_i2c_enable(touchwake_pen_data); return; }
static void wac_statecheck_work(struct work_struct *work) { int ret, i; char buf, test[10]; struct wacom_i2c *wac_i2c = container_of(work, struct wacom_i2c, wac_statecheck_work.work); buf = COM_QUERY; printk(KERN_DEBUG "[E-PEN] %s\n", __func__); if (firmware_updating_state == true) return; #ifdef BATTERY_SAVING_MODE if (wac_i2c->battery_saving_mode && wac_i2c->pen_insert) { printk(KERN_DEBUG "[E-PEN] escaped from wacom check mode\n"); printk(KERN_DEBUG " becase pen has inserted at lpm\n"); return; } #endif #if defined(CONFIG_TARGET_LOCALE_KOR) #if defined(CONFIG_MACH_T0) && defined(CONFIG_TDMB_ANT_DET) ret = gpio_get_value(wac_i2c->wac_pdata->gpio_esd_check); if (ret == 0) { printk(KERN_DEBUG "[E-PEN] skip wacom state checking\n"); printk(KERN_DEBUG " becase ANT has closed\n"); schedule_delayed_work(&wac_i2c->wac_statecheck_work, HZ * 30); return; } #endif #endif ret = wacom_i2c_send(wac_i2c, &buf, sizeof(buf), false); if (ret > 0) printk(KERN_INFO "[E-PEN] buf:%d, sent:%d\n", buf, ret); else { printk(KERN_ERR "[E-PEN] Digitizer is not active\n"); wac_i2c->wac_pdata->suspend_platform_hw(); msleep(200); wacom_i2c_enable(wac_i2c); printk(KERN_ERR "[E-PEN] wacom reset done\n"); } schedule_delayed_work(&wac_i2c->wac_statecheck_work, HZ * 30); }
static ssize_t epen_saving_mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct wacom_i2c *wac_i2c = dev_get_drvdata(dev); int val; if (sscanf(buf, "%u", &val) == 1) wac_i2c->battery_saving_mode = !!val; if (wac_i2c->battery_saving_mode) { if (wac_i2c->pen_insert) wacom_i2c_disable(wac_i2c); } else wacom_i2c_enable(wac_i2c); return count; }
static ssize_t epen_saving_mode_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct wacom_i2c *wac_i2c = dev_get_drvdata(dev); int val; if (sscanf(buf, "%u", &val) == 1) wac_i2c->battery_saving_mode = !!val; dev_info(&wac_i2c->client->dev, "%s: %s\n", __func__, val ? "checked" : "unchecked"); if (wac_i2c->battery_saving_mode) { if (wac_i2c->pen_insert) wacom_i2c_disable(wac_i2c); } else { if (wac_i2c->enabled) wacom_i2c_enable(wac_i2c); } return count; }