static irqreturn_t wacom_interrupt_pdct(int irq, void *dev_id) { struct wacom_i2c *wac_i2c = dev_id; if (wac_i2c->query_status == false) return IRQ_HANDLED; wac_i2c->pen_pdct = gpio_get_value(wac_i2c->wac_pdata->gpio_pen_pdct); dev_info(&wac_i2c->client->dev, "%s: pdct %d(%d) [%s]\n", __func__, wac_i2c->pen_pdct, wac_i2c->pen_prox, wac_i2c->pen_pdct ? "Released" : "Pressed"); #ifdef CONFIG_TOUCH_WAKE if (touchwake_is_active() && !wac_i2c->pen_pdct) { #ifdef TOUCHWAKE_DEBUG_PRINT pr_info("[TOUCHWAKE] Wacom Pen pressed\n"); #endif touch_press(); // Yank555.lu - Screen touched by pen } #endif #if 0 if (wac_i2c->pen_pdct == PDCT_NOSIGNAL) { /* If rdy is 1, pen is still working*/ if (wac_i2c->pen_prox == 0) forced_release(wac_i2c); } else if (wac_i2c->pen_prox == 0) forced_hover(wac_i2c); #endif return IRQ_HANDLED; }
void OSIPhone::touches_cancelled() { for (int i = 0; i < MAX_MOUSE_COUNT; i++) { if (touch_list.pressed[i]) { // send a mouse_up outside the screen touch_press(i, -1, -1, false, false); }; }; };
static irqreturn_t touchkey_interrupt_thread(int irq, void *touchkey_devdata) { u8 data; int i; int ret; int scancode; struct cypress_touchkey_devdata *devdata = touchkey_devdata; ret = i2c_touchkey_read_byte(devdata, &data); if (ret || (data & ESD_STATE_MASK)) { ret = recovery_routine(devdata); if (ret) { dev_err(&devdata->client->dev, "%s: touchkey recovery " "failed!\n", __func__); goto err; } } if (devdata->has_legacy_keycode) { scancode = (data & SCANCODE_MASK) - 1; if (scancode < 0 || scancode >= devdata->pdata->keycode_cnt) { dev_err(&devdata->client->dev, "%s: scancode is out of " "range\n", __func__); goto err; } #ifdef CONFIG_TOUCH_WAKE if (!device_is_suspended()) #endif { input_report_key(devdata->input_dev, devdata->pdata->keycode[scancode], !(data & UPDOWN_EVENT_MASK)); } #if defined(CONFIG_TOUCH_WAKE) || defined(CONFIG_BLD) if (!(data & UPDOWN_EVENT_MASK)) { #ifdef CONFIG_BLD touchkey_pressed(); #endif #ifdef CONFIG_TOUCH_WAKE touch_press(); #endif } #endif } else { #ifdef CONFIG_TOUCH_WAKE if (!device_is_suspended()) #endif { for (i = 0; i < devdata->pdata->keycode_cnt; i++) input_report_key(devdata->input_dev, devdata->pdata->keycode[i], !!(data & (1U << i))); } #if defined(CONFIG_TOUCH_WAKE) || defined(CONFIG_BLD) for (i = 0; i < devdata->pdata->keycode_cnt; i++) { if(!!(data & (1U << i))) { #ifdef CONFIG_BLD touchkey_pressed(); #endif #ifdef CONFIG_TOUCH_WAKE touch_press(); #endif break; } } #endif } input_sync(devdata->input_dev); err: return IRQ_HANDLED; }