Lines Matching refs:kbd

71 	struct spear_kbd *kbd = dev_id;  in spear_kbd_interrupt()  local
72 struct input_dev *input = kbd->input; in spear_kbd_interrupt()
76 sts = readl_relaxed(kbd->io_base + STATUS_REG); in spear_kbd_interrupt()
80 if (kbd->last_key != KEY_RESERVED) { in spear_kbd_interrupt()
81 input_report_key(input, kbd->last_key, 0); in spear_kbd_interrupt()
82 kbd->last_key = KEY_RESERVED; in spear_kbd_interrupt()
86 val = readl_relaxed(kbd->io_base + DATA_REG) & in spear_kbd_interrupt()
88 key = kbd->keycodes[val]; in spear_kbd_interrupt()
94 kbd->last_key = key; in spear_kbd_interrupt()
97 writel_relaxed(0, kbd->io_base + STATUS_REG); in spear_kbd_interrupt()
104 struct spear_kbd *kbd = input_get_drvdata(dev); in spear_kbd_open() local
108 kbd->last_key = KEY_RESERVED; in spear_kbd_open()
110 error = clk_enable(kbd->clk); in spear_kbd_open()
115 val = clk_get_rate(kbd->clk) / 1000000 - 1; in spear_kbd_open()
120 (kbd->mode << MODE_CTL_KEYNUM_SHIFT); in spear_kbd_open()
121 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
122 writel_relaxed(1, kbd->io_base + STATUS_REG); in spear_kbd_open()
125 val = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
127 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_open()
134 struct spear_kbd *kbd = input_get_drvdata(dev); in spear_kbd_close() local
138 val = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_close()
140 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_close()
142 clk_disable(kbd->clk); in spear_kbd_close()
144 kbd->last_key = KEY_RESERVED; in spear_kbd_close()
149 struct spear_kbd *kbd) in spear_kbd_parse_dt() argument
161 kbd->rep = true; in spear_kbd_parse_dt()
164 kbd->suspended_rate = suspended_rate; in spear_kbd_parse_dt()
172 kbd->mode = val; in spear_kbd_parse_dt()
177 struct spear_kbd *kbd) in spear_kbd_parse_dt() argument
187 struct spear_kbd *kbd; in spear_kbd_probe() local
197 kbd = devm_kzalloc(&pdev->dev, sizeof(*kbd), GFP_KERNEL); in spear_kbd_probe()
198 if (!kbd) { in spear_kbd_probe()
209 kbd->input = input_dev; in spear_kbd_probe()
210 kbd->irq = irq; in spear_kbd_probe()
213 error = spear_kbd_parse_dt(pdev, kbd); in spear_kbd_probe()
217 kbd->mode = pdata->mode; in spear_kbd_probe()
218 kbd->rep = pdata->rep; in spear_kbd_probe()
219 kbd->suspended_rate = pdata->suspended_rate; in spear_kbd_probe()
223 kbd->io_base = devm_ioremap_resource(&pdev->dev, res); in spear_kbd_probe()
224 if (IS_ERR(kbd->io_base)) in spear_kbd_probe()
225 return PTR_ERR(kbd->io_base); in spear_kbd_probe()
227 kbd->clk = devm_clk_get(&pdev->dev, NULL); in spear_kbd_probe()
228 if (IS_ERR(kbd->clk)) in spear_kbd_probe()
229 return PTR_ERR(kbd->clk); in spear_kbd_probe()
241 kbd->keycodes, input_dev); in spear_kbd_probe()
247 if (kbd->rep) in spear_kbd_probe()
251 input_set_drvdata(input_dev, kbd); in spear_kbd_probe()
254 "keyboard", kbd); in spear_kbd_probe()
260 error = clk_prepare(kbd->clk); in spear_kbd_probe()
267 clk_unprepare(kbd->clk); in spear_kbd_probe()
272 platform_set_drvdata(pdev, kbd); in spear_kbd_probe()
279 struct spear_kbd *kbd = platform_get_drvdata(pdev); in spear_kbd_remove() local
281 input_unregister_device(kbd->input); in spear_kbd_remove()
282 clk_unprepare(kbd->clk); in spear_kbd_remove()
290 struct spear_kbd *kbd = platform_get_drvdata(pdev); in spear_kbd_suspend() local
291 struct input_dev *input_dev = kbd->input; in spear_kbd_suspend()
297 clk_enable(kbd->clk); in spear_kbd_suspend()
299 mode_ctl_reg = readl_relaxed(kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
302 if (!enable_irq_wake(kbd->irq)) in spear_kbd_suspend()
303 kbd->irq_wake_enabled = true; in spear_kbd_suspend()
309 if (kbd->suspended_rate) in spear_kbd_suspend()
310 rate = kbd->suspended_rate / 1000000 - 1; in spear_kbd_suspend()
312 rate = clk_get_rate(kbd->clk) / 1000000 - 1; in spear_kbd_suspend()
318 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
323 kbd->io_base + MODE_CTL_REG); in spear_kbd_suspend()
324 clk_disable(kbd->clk); in spear_kbd_suspend()
330 kbd->mode_ctl_reg = mode_ctl_reg; in spear_kbd_suspend()
333 clk_disable(kbd->clk); in spear_kbd_suspend()
343 struct spear_kbd *kbd = platform_get_drvdata(pdev); in spear_kbd_resume() local
344 struct input_dev *input_dev = kbd->input; in spear_kbd_resume()
349 if (kbd->irq_wake_enabled) { in spear_kbd_resume()
350 kbd->irq_wake_enabled = false; in spear_kbd_resume()
351 disable_irq_wake(kbd->irq); in spear_kbd_resume()
355 clk_enable(kbd->clk); in spear_kbd_resume()
360 writel_relaxed(kbd->mode_ctl_reg, kbd->io_base + MODE_CTL_REG); in spear_kbd_resume()