void forced_release(struct wacom_i2c *wac_i2c) { #if defined(CONFIG_SAMSUNG_KERNEL_DEBUG_USER) printk(KERN_DEBUG "epen:%s\n", __func__); #endif input_report_abs(wac_i2c->input_dev, ABS_X, wac_i2c->last_x); input_report_abs(wac_i2c->input_dev, ABS_Y, wac_i2c->last_y); input_report_abs(wac_i2c->input_dev, ABS_PRESSURE, 0); #ifdef WACOM_USE_GAIN input_report_abs(wac_i2c->input_dev, ABS_DISTANCE, 0); #endif input_report_key(wac_i2c->input_dev, BTN_STYLUS, 0); input_report_key(wac_i2c->input_dev, BTN_TOUCH, 0); input_report_key(wac_i2c->input_dev, BTN_TOOL_RUBBER, 0); input_report_key(wac_i2c->input_dev, BTN_TOOL_PEN, 0); input_sync(wac_i2c->input_dev); wac_i2c->last_x = 0; wac_i2c->last_y = 0; wac_i2c->pen_prox = 0; wac_i2c->pen_pressed = 0; wac_i2c->side_pressed = 0; /*wac_i2c->pen_pdct = PDCT_NOSIGNAL;*/ #ifdef WACOM_BOOSTER if (wac_i2c->last_x == 0 && wac_i2c->last_y == 0) wacom_set_dvfs_lock(wac_i2c, 0); #endif }
static void wacom_power_off(struct wacom_i2c *wac_i2c) { mutex_lock(&wac_i2c->lock); if (!wac_i2c->power_enable) { printk(KERN_DEBUG"epen:pass pwr off\n"); goto out_power_off; } #ifdef WACOM_BOOSTER wacom_set_dvfs_lock(wac_i2c, 2); #endif wacom_enable_irq(wac_i2c, false); /* release pen, if it is pressed */ if (wac_i2c->pen_pressed || wac_i2c->side_pressed || wac_i2c->pen_prox) forced_release(wac_i2c); cancel_delayed_work_sync(&wac_i2c->resume_work); #ifdef LCD_FREQ_SYNC cancel_work_sync(&wac_i2c->lcd_freq_work); cancel_delayed_work_sync(&wac_i2c->lcd_freq_done_work); wac_i2c->lcd_freq_wait = false; #endif #ifdef WACOM_USE_SOFTKEY_BLOCK cancel_delayed_work_sync(&wac_i2c->softkey_block_work); wac_i2c->block_softkey = false; #endif if (wake_lock_active(&wac_i2c->fw_wakelock)) { printk(KERN_DEBUG"epen:wake_lock active. pass pwr off\n"); goto out_power_off; } /* power off */ wac_i2c->power_enable = false; wac_i2c->wac_pdata->suspend_platform_hw(); printk(KERN_DEBUG"epen:%s\n", __func__); out_power_off: mutex_unlock(&wac_i2c->lock); }
static int wacom_stop(struct wacom_i2c *wac_i2c) { dev_info(&wac_i2c->client->dev, "%s\n", __func__); if (wac_i2c->wac_pdata->gpio_pen_reset_n > 0) gpio_direction_output(wac_i2c->wac_pdata->gpio_pen_reset_n, 0); gpio_direction_output(wac_i2c->wac_pdata->vdd_en, 0); #ifdef WACOM_BOOSTER if (wac_i2c->dvfs_lock_status) wacom_set_dvfs_lock(wac_i2c, -1); #endif #ifdef USE_WACOM_BLOCK_KEYEVENT wac_i2c->touch_pressed = false; wac_i2c->touchkey_skipped = false; #endif wac_i2c->power_enable = false; return 0; }