Lines Matching refs:kbd

70 	struct spear_kbd *kbd = dev_id;  in spear_kbd_interrupt()  local
71 struct input_dev *input = kbd->input; in spear_kbd_interrupt()
75 sts = readl_relaxed(kbd->io_base + STATUS_REG); in spear_kbd_interrupt()
79 if (kbd->last_key != KEY_RESERVED) { in spear_kbd_interrupt()
80 input_report_key(input, kbd->last_key, 0); in spear_kbd_interrupt()
81 kbd->last_key = KEY_RESERVED; in spear_kbd_interrupt()
85 val = readl_relaxed(kbd->io_base + DATA_REG) & in spear_kbd_interrupt()
87 key = kbd->keycodes[val]; in spear_kbd_interrupt()
93 kbd->last_key = key; in spear_kbd_interrupt()
96 writel_relaxed(0, kbd->io_base + STATUS_REG); in spear_kbd_interrupt()
103 struct spear_kbd *kbd = input_get_drvdata(dev); in spear_kbd_open() local
107 kbd->last_key = KEY_RESERVED; in spear_kbd_open()
109 error = clk_enable(kbd->clk); in spear_kbd_open()
114 val = clk_get_rate(kbd->clk) / 1000000 - 1; in spear_kbd_open()
119 (kbd->mode << MODE_CTL_KEYNUM_SHIFT); in spear_kbd_open()
120 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
121 writel_relaxed(1, kbd->io_base + STATUS_REG); in spear_kbd_open()
124 val = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
126 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
133 struct spear_kbd *kbd = input_get_drvdata(dev); in spear_kbd_close() local
137 val = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_close()
139 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_close()
141 clk_disable(kbd->clk); in spear_kbd_close()
143 kbd->last_key = KEY_RESERVED; in spear_kbd_close()
148 struct spear_kbd *kbd) in spear_kbd_parse_dt() argument
160 kbd->rep = true; in spear_kbd_parse_dt()
163 kbd->suspended_rate = suspended_rate; in spear_kbd_parse_dt()
171 kbd->mode = val; in spear_kbd_parse_dt()
176 struct spear_kbd *kbd) in spear_kbd_parse_dt() argument
186 struct spear_kbd *kbd; in spear_kbd_probe() local
195 kbd = devm_kzalloc(&pdev->dev, sizeof(*kbd), GFP_KERNEL); in spear_kbd_probe()
196 if (!kbd) { in spear_kbd_probe()
207 kbd->input = input_dev; in spear_kbd_probe()
208 kbd->irq = irq; in spear_kbd_probe()
211 error = spear_kbd_parse_dt(pdev, kbd); in spear_kbd_probe()
215 kbd->mode = pdata->mode; in spear_kbd_probe()
216 kbd->rep = pdata->rep; in spear_kbd_probe()
217 kbd->suspended_rate = pdata->suspended_rate; in spear_kbd_probe()
220 kbd->io_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL); in spear_kbd_probe()
221 if (IS_ERR(kbd->io_base)) in spear_kbd_probe()
222 return PTR_ERR(kbd->io_base); in spear_kbd_probe()
224 kbd->clk = devm_clk_get_prepared(&pdev->dev, NULL); in spear_kbd_probe()
225 if (IS_ERR(kbd->clk)) in spear_kbd_probe()
226 return PTR_ERR(kbd->clk); in spear_kbd_probe()
238 kbd->keycodes, input_dev); in spear_kbd_probe()
244 if (kbd->rep) in spear_kbd_probe()
248 input_set_drvdata(input_dev, kbd); in spear_kbd_probe()
251 "keyboard", kbd); in spear_kbd_probe()
264 platform_set_drvdata(pdev, kbd); in spear_kbd_probe()
272 struct spear_kbd *kbd = platform_get_drvdata(pdev); in spear_kbd_suspend() local
273 struct input_dev *input_dev = kbd->input; in spear_kbd_suspend()
279 clk_enable(kbd->clk); in spear_kbd_suspend()
281 mode_ctl_reg = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
284 if (!enable_irq_wake(kbd->irq)) in spear_kbd_suspend()
285 kbd->irq_wake_enabled = true; in spear_kbd_suspend()
291 if (kbd->suspended_rate) in spear_kbd_suspend()
292 rate = kbd->suspended_rate / 1000000 - 1; in spear_kbd_suspend()
294 rate = clk_get_rate(kbd->clk) / 1000000 - 1; in spear_kbd_suspend()
300 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
305 kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
306 clk_disable(kbd->clk); in spear_kbd_suspend()
312 kbd->mode_ctl_reg = mode_ctl_reg; in spear_kbd_suspend()
315 clk_disable(kbd->clk); in spear_kbd_suspend()
323 struct spear_kbd *kbd = platform_get_drvdata(pdev); in spear_kbd_resume() local
324 struct input_dev *input_dev = kbd->input; in spear_kbd_resume()
329 if (kbd->irq_wake_enabled) { in spear_kbd_resume()
330 kbd->irq_wake_enabled = false; in spear_kbd_resume()
331 disable_irq_wake(kbd->irq); in spear_kbd_resume()
335 clk_enable(kbd->clk); in spear_kbd_resume()
340 writel_relaxed(kbd->mode_ctl_reg, kbd->io_base + MODE_CTL_REG); in spear_kbd_resume()