Lines Matching +full:gpio +full:- +full:keymap

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * linux/drivers/input/keyboard/omap-keypad.c
8 * Written by Timo Teräs <ext-timo.teras@nokia.com>
24 #include <linux/gpio.h>
25 #include <linux/platform_data/gpio-omap.h>
26 #include <linux/platform_data/keypad-omap.h>
36 static int kp_cur_group = -1;
46 unsigned short keymap[]; member
78 for (col = 0; col < omap_kp->cols; col++) { in omap_kp_scan_keypad()
82 udelay(omap_kp->delay); in omap_kp_scan_keypad()
94 unsigned short *keycodes = omap_kp_data->input->keycode; in omap_kp_tasklet()
95 unsigned int row_shift = get_count_order(omap_kp_data->cols); in omap_kp_tasklet()
103 for (col = 0; col < omap_kp_data->cols; col++) { in omap_kp_tasklet()
109 for (row = 0; row < omap_kp_data->rows; row++) { in omap_kp_tasklet()
114 printk(KERN_INFO "omap-keypad: key %d-%d %s\n", col, in omap_kp_tasklet()
121 kp_cur_group == -1)) in omap_kp_tasklet()
125 input_report_key(omap_kp_data->input, key & ~GROUP_MASK, in omap_kp_tasklet()
130 input_sync(omap_kp_data->input); in omap_kp_tasklet()
134 /* some key is pressed - keep irq disabled and use timer in omap_kp_tasklet()
136 mod_timer(&omap_kp_data->timer, jiffies + HZ / 20); in omap_kp_tasklet()
140 kp_cur_group = -1; in omap_kp_tasklet()
157 return -EINVAL; in omap_kp_enable_store()
160 return -EINVAL; in omap_kp_enable_store()
165 enable_irq(omap_kp->irq); in omap_kp_enable_store()
167 disable_irq(omap_kp->irq); in omap_kp_enable_store()
181 struct omap_kp_platform_data *pdata = dev_get_platdata(&pdev->dev); in omap_kp_probe()
185 if (!pdata->rows || !pdata->cols || !pdata->keymap_data) { in omap_kp_probe()
187 return -EINVAL; in omap_kp_probe()
190 row_shift = get_count_order(pdata->cols); in omap_kp_probe()
191 keycodemax = pdata->rows << row_shift; in omap_kp_probe()
199 return -ENOMEM; in omap_kp_probe()
204 omap_kp->input = input_dev; in omap_kp_probe()
209 if (pdata->delay) in omap_kp_probe()
210 omap_kp->delay = pdata->delay; in omap_kp_probe()
212 if (pdata->row_gpios && pdata->col_gpios) { in omap_kp_probe()
213 row_gpios = pdata->row_gpios; in omap_kp_probe()
214 col_gpios = pdata->col_gpios; in omap_kp_probe()
217 omap_kp->rows = pdata->rows; in omap_kp_probe()
218 omap_kp->cols = pdata->cols; in omap_kp_probe()
223 timer_setup(&omap_kp->timer, omap_kp_timer, 0); in omap_kp_probe()
229 ret = device_create_file(&pdev->dev, &dev_attr_enable); in omap_kp_probe()
234 input_dev->name = "omap-keypad"; in omap_kp_probe()
235 input_dev->phys = "omap-keypad/input0"; in omap_kp_probe()
236 input_dev->dev.parent = &pdev->dev; in omap_kp_probe()
238 input_dev->id.bustype = BUS_HOST; in omap_kp_probe()
239 input_dev->id.vendor = 0x0001; in omap_kp_probe()
240 input_dev->id.product = 0x0001; in omap_kp_probe()
241 input_dev->id.version = 0x0100; in omap_kp_probe()
243 if (pdata->rep) in omap_kp_probe()
244 __set_bit(EV_REP, input_dev->evbit); in omap_kp_probe()
246 ret = matrix_keypad_build_keymap(pdata->keymap_data, NULL, in omap_kp_probe()
247 pdata->rows, pdata->cols, in omap_kp_probe()
248 omap_kp->keymap, input_dev); in omap_kp_probe()
252 ret = input_register_device(omap_kp->input); in omap_kp_probe()
254 printk(KERN_ERR "Unable to register omap-keypad input device\n"); in omap_kp_probe()
258 if (pdata->dbounce) in omap_kp_probe()
263 omap_kp->irq = platform_get_irq(pdev, 0); in omap_kp_probe()
264 if (omap_kp->irq >= 0) { in omap_kp_probe()
265 if (request_irq(omap_kp->irq, omap_kp_interrupt, 0, in omap_kp_probe()
266 "omap-keypad", omap_kp) < 0) in omap_kp_probe()
274 input_unregister_device(omap_kp->input); in omap_kp_probe()
277 device_remove_file(&pdev->dev, &dev_attr_enable); in omap_kp_probe()
279 for (i = row_idx - 1; i >= 0; i--) in omap_kp_probe()
281 for (i = col_idx - 1; i >= 0; i--) in omap_kp_probe()
287 return -EINVAL; in omap_kp_probe()
297 free_irq(omap_kp->irq, omap_kp); in omap_kp_remove()
299 del_timer_sync(&omap_kp->timer); in omap_kp_remove()
303 input_unregister_device(omap_kp->input); in omap_kp_remove()
314 .name = "omap-keypad",
322 MODULE_ALIAS("platform:omap-keypad");