static irqreturn_t jornada720_kbd_interrupt(int irq, void *dev_id) { struct platform_device *pdev = dev_id; struct jornadakbd *jornadakbd = platform_get_drvdata(pdev); struct input_dev *input = jornadakbd->input; u8 count, kbd_data, scan_code; /* startup ssp with spinlock */ jornada_ssp_start(); if (jornada_ssp_inout(GETSCANKEYCODE) != TXDUMMY) { dev_dbg(&pdev->dev, "GetKeycode command failed with ETIMEDOUT, flushed bus\n"); } else { /* How many keycodes are waiting for us? */ count = jornada_ssp_byte(TXDUMMY); /* Lets drag them out one at a time */ while (count--) { /* Exchange TxDummy for location (keymap[kbddata]) */ kbd_data = jornada_ssp_byte(TXDUMMY); scan_code = kbd_data & 0x7f; input_event(input, EV_MSC, MSC_SCAN, scan_code); input_report_key(input, jornadakbd->keymap[scan_code], !(kbd_data & 0x80)); input_sync(input); } } /* release spinlock and turn off ssp */ jornada_ssp_end(); return IRQ_HANDLED; };
static irqreturn_t jornada720_ts_interrupt(int irq, void *dev_id) { struct platform_device *pdev = dev_id; struct jornada_ts *jornada_ts = platform_get_drvdata(pdev); struct input_dev *input = jornada_ts->dev; int x, y; /* If GPIO_GPIO9 is set to high then report pen up */ if (GPLR & GPIO_GPIO(9)) { input_report_key(input, BTN_TOUCH, 0); input_sync(input); } else { jornada_ssp_start(); /* proper reply to request is always TXDUMMY */ if (jornada_ssp_inout(GETTOUCHSAMPLES) == TXDUMMY) { jornada720_ts_collect_data(jornada_ts); x = jornada720_ts_average(jornada_ts->x_data); y = jornada720_ts_average(jornada_ts->y_data); input_report_key(input, BTN_TOUCH, 1); input_report_abs(input, ABS_X, x); input_report_abs(input, ABS_Y, y); input_sync(input); } jornada_ssp_end(); } return IRQ_HANDLED; }
static irqreturn_t jornada720_kbd_interrupt(int irq, void *dev_id) { struct platform_device *pdev = dev_id; struct jornadakbd *jornadakbd = platform_get_drvdata(pdev); struct input_dev *input = jornadakbd->input; u8 count, kbd_data, scan_code; jornada_ssp_start(); if (jornada_ssp_inout(GETSCANKEYCODE) != TXDUMMY) { printk(KERN_DEBUG "jornada720_kbd: " "GetKeycode command failed with ETIMEDOUT, " "flushed bus\n"); } else { count = jornada_ssp_byte(TXDUMMY); while (count--) { kbd_data = jornada_ssp_byte(TXDUMMY); scan_code = kbd_data & 0x7f; input_event(input, EV_MSC, MSC_SCAN, scan_code); input_report_key(input, jornadakbd->keymap[scan_code], !(kbd_data & 0x80)); input_sync(input); } } jornada_ssp_end(); return IRQ_HANDLED; };