• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/input/keyboard/

Lines Matching refs:keypad

2  * Driver for the Cirrus EP93xx matrix keypad controller.
6 * Based on the pxa27x matrix keypad controller by Rodolfo Giometti.
85 struct ep93xx_keypad *keypad = dev_id;
86 struct input_dev *input_dev = keypad->input_dev;
90 status = __raw_readl(keypad->mmio_base + KEY_REG);
93 key1 = keypad->keycodes[keycode];
96 key2 = keypad->keycodes[keycode];
99 if (keypad->key1 && key1 != keypad->key1 && key2 != keypad->key1)
100 input_report_key(input_dev, keypad->key1, 0);
102 if (keypad->key2 && key1 != keypad->key2 && key2 != keypad->key2)
103 input_report_key(input_dev, keypad->key2, 0);
108 keypad->key1 = key1;
109 keypad->key2 = key2;
112 if (keypad->key1 && key1 != keypad->key1)
113 input_report_key(input_dev, keypad->key1, 0);
115 if (keypad->key2 && key1 != keypad->key2)
116 input_report_key(input_dev, keypad->key2, 0);
120 keypad->key1 = key1;
121 keypad->key2 = 0;
124 input_report_key(input_dev, keypad->key1, 0);
125 input_report_key(input_dev, keypad->key2, 0);
127 keypad->key1 = keypad->key2 = 0;
134 static void ep93xx_keypad_config(struct ep93xx_keypad *keypad)
136 struct ep93xx_keypad_platform_data *pdata = keypad->pdata;
140 clk_set_rate(keypad->clk, EP93XX_KEYTCHCLK_DIV4);
142 clk_set_rate(keypad->clk, EP93XX_KEYTCHCLK_DIV16);
157 __raw_writel(val, keypad->mmio_base + KEY_INIT);
162 struct ep93xx_keypad *keypad = input_get_drvdata(pdev);
164 if (!keypad->enabled) {
165 ep93xx_keypad_config(keypad);
166 clk_enable(keypad->clk);
167 keypad->enabled = true;
175 struct ep93xx_keypad *keypad = input_get_drvdata(pdev);
177 if (keypad->enabled) {
178 clk_disable(keypad->clk);
179 keypad->enabled = false;
194 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
195 struct input_dev *input_dev = keypad->input_dev;
199 if (keypad->enabled) {
200 clk_disable(keypad->clk);
201 keypad->enabled = false;
207 enable_irq_wake(keypad->irq);
214 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
215 struct input_dev *input_dev = keypad->input_dev;
218 disable_irq_wake(keypad->irq);
223 if (!keypad->enabled) {
224 ep93xx_keypad_config(keypad);
225 clk_enable(keypad->clk);
226 keypad->enabled = true;
241 struct ep93xx_keypad *keypad;
247 keypad = kzalloc(sizeof(struct ep93xx_keypad), GFP_KERNEL);
248 if (!keypad)
251 keypad->pdata = pdev->dev.platform_data;
252 if (!keypad->pdata) {
257 keymap_data = keypad->pdata->keymap_data;
263 keypad->irq = platform_get_irq(pdev, 0);
264 if (!keypad->irq) {
281 keypad->mmio_base = ioremap(res->start, resource_size(res));
282 if (keypad->mmio_base == NULL) {
291 keypad->clk = clk_get(&pdev->dev, NULL);
292 if (IS_ERR(keypad->clk)) {
293 err = PTR_ERR(keypad->clk);
303 keypad->input_dev = input_dev;
310 input_dev->keycode = keypad->keycodes;
311 input_dev->keycodesize = sizeof(keypad->keycodes[0]);
312 input_dev->keycodemax = ARRAY_SIZE(keypad->keycodes);
314 input_set_drvdata(input_dev, keypad);
317 if (keypad->pdata->flags & EP93XX_KEYPAD_AUTOREPEAT)
322 platform_set_drvdata(pdev, keypad);
324 err = request_irq(keypad->irq, ep93xx_keypad_irq_handler,
325 IRQF_DISABLED, pdev->name, keypad);
338 free_irq(keypad->irq, pdev);
343 clk_put(keypad->clk);
347 iounmap(keypad->mmio_base);
351 kfree(keypad);
357 struct ep93xx_keypad *keypad = platform_get_drvdata(pdev);
360 free_irq(keypad->irq, pdev);
364 if (keypad->enabled)
365 clk_disable(keypad->clk);
366 clk_put(keypad->clk);
368 input_unregister_device(keypad->input_dev);
372 iounmap(keypad->mmio_base);
377 kfree(keypad);
384 .name = "ep93xx-keypad",
409 MODULE_ALIAS("platform:ep93xx-keypad");