Lines Matching refs:keypad
71 static void ske_keypad_set_bits(struct ske_keypad *keypad, u16 addr, in ske_keypad_set_bits() argument
76 spin_lock(&keypad->ske_keypad_lock); in ske_keypad_set_bits()
78 ret = readl(keypad->reg_base + addr); in ske_keypad_set_bits()
81 writel(ret, keypad->reg_base + addr); in ske_keypad_set_bits()
83 spin_unlock(&keypad->ske_keypad_lock); in ske_keypad_set_bits()
91 static int __init ske_keypad_chip_init(struct ske_keypad *keypad) in ske_keypad_chip_init() argument
97 while ((readl(keypad->reg_base + SKE_RIS) != 0x00000000) && timeout--) in ske_keypad_chip_init()
108 spin_lock(&keypad->ske_keypad_lock); in ske_keypad_chip_init()
109 value = readl(keypad->reg_base + SKE_DBCR); in ske_keypad_chip_init()
111 value |= ((keypad->board->debounce_ms * 32000)/32768) << 8; in ske_keypad_chip_init()
112 writel(value, keypad->reg_base + SKE_DBCR); in ske_keypad_chip_init()
113 spin_unlock(&keypad->ske_keypad_lock); in ske_keypad_chip_init()
116 ske_keypad_set_bits(keypad, SKE_CR, 0x0, SKE_KPMLT); in ske_keypad_chip_init()
122 value = (keypad->board->kcol - 1) << 3; in ske_keypad_chip_init()
123 ske_keypad_set_bits(keypad, SKE_CR, SKE_KPCN, value); in ske_keypad_chip_init()
126 ske_keypad_set_bits(keypad, SKE_ICR, 0x0, SKE_KPICA | SKE_KPICS); in ske_keypad_chip_init()
129 ske_keypad_set_bits(keypad, SKE_IMSC, 0x0, SKE_KPIMA); in ske_keypad_chip_init()
132 ske_keypad_set_bits(keypad, SKE_CR, 0x0, SKE_KPASEN); in ske_keypad_chip_init()
137 static void ske_keypad_read_data(struct ske_keypad *keypad) in ske_keypad_read_data() argument
139 struct input_dev *input = keypad->input; in ske_keypad_read_data()
152 ske_asr = readl(keypad->reg_base + SKE_ASR0 + (4 * i)); in ske_keypad_read_data()
169 ske_ris = readl(keypad->reg_base + SKE_RIS); in ske_keypad_read_data()
173 input_report_key(input, keypad->keymap[code], key_pressed); in ske_keypad_read_data()
180 struct ske_keypad *keypad = dev_id; in ske_keypad_irq() local
184 ske_keypad_set_bits(keypad, SKE_IMSC, ~SKE_KPIMA, 0x0); in ske_keypad_irq()
185 ske_keypad_set_bits(keypad, SKE_ICR, 0x0, SKE_KPICA); in ske_keypad_irq()
187 while ((readl(keypad->reg_base + SKE_CR) & SKE_KPASON) && --retries) in ske_keypad_irq()
192 ske_keypad_read_data(keypad); in ske_keypad_irq()
196 ske_keypad_set_bits(keypad, SKE_IMSC, 0x0, SKE_KPIMA); in ske_keypad_irq()
204 struct ske_keypad *keypad; in ske_keypad_probe() local
227 keypad = kzalloc(sizeof(struct ske_keypad), GFP_KERNEL); in ske_keypad_probe()
229 if (!keypad || !input) { in ske_keypad_probe()
235 keypad->irq = irq; in ske_keypad_probe()
236 keypad->board = plat; in ske_keypad_probe()
237 keypad->input = input; in ske_keypad_probe()
238 spin_lock_init(&keypad->ske_keypad_lock); in ske_keypad_probe()
246 keypad->reg_base = ioremap(res->start, resource_size(res)); in ske_keypad_probe()
247 if (!keypad->reg_base) { in ske_keypad_probe()
253 keypad->clk = clk_get(&pdev->dev, NULL); in ske_keypad_probe()
254 if (IS_ERR(keypad->clk)) { in ske_keypad_probe()
256 error = PTR_ERR(keypad->clk); in ske_keypad_probe()
264 input->keycode = keypad->keymap; in ske_keypad_probe()
265 input->keycodesize = sizeof(keypad->keymap[0]); in ske_keypad_probe()
266 input->keycodemax = ARRAY_SIZE(keypad->keymap); in ske_keypad_probe()
277 clk_enable(keypad->clk); in ske_keypad_probe()
280 if (keypad->board->init) in ske_keypad_probe()
281 keypad->board->init(); in ske_keypad_probe()
283 error = ske_keypad_chip_init(keypad); in ske_keypad_probe()
289 error = request_threaded_irq(keypad->irq, NULL, ske_keypad_irq, in ske_keypad_probe()
290 IRQF_ONESHOT, "ske-keypad", keypad); in ske_keypad_probe()
292 dev_err(&pdev->dev, "allocate irq %d failed\n", keypad->irq); in ske_keypad_probe()
306 platform_set_drvdata(pdev, keypad); in ske_keypad_probe()
311 free_irq(keypad->irq, keypad); in ske_keypad_probe()
313 clk_disable(keypad->clk); in ske_keypad_probe()
314 clk_put(keypad->clk); in ske_keypad_probe()
316 iounmap(keypad->reg_base); in ske_keypad_probe()
321 kfree(keypad); in ske_keypad_probe()
327 struct ske_keypad *keypad = platform_get_drvdata(pdev); in ske_keypad_remove() local
330 free_irq(keypad->irq, keypad); in ske_keypad_remove()
332 input_unregister_device(keypad->input); in ske_keypad_remove()
334 clk_disable(keypad->clk); in ske_keypad_remove()
335 clk_put(keypad->clk); in ske_keypad_remove()
337 if (keypad->board->exit) in ske_keypad_remove()
338 keypad->board->exit(); in ske_keypad_remove()
340 iounmap(keypad->reg_base); in ske_keypad_remove()
342 kfree(keypad); in ske_keypad_remove()
351 struct ske_keypad *keypad = platform_get_drvdata(pdev); in ske_keypad_suspend() local
357 ske_keypad_set_bits(keypad, SKE_IMSC, ~SKE_KPIMA, 0x0); in ske_keypad_suspend()
365 struct ske_keypad *keypad = platform_get_drvdata(pdev); in ske_keypad_resume() local
371 ske_keypad_set_bits(keypad, SKE_IMSC, 0x0, SKE_KPIMA); in ske_keypad_resume()