Lines Matching refs:kscandat
82 static void lpc32xx_mod_states(struct lpc32xx_kscan_drv *kscandat, int col) in lpc32xx_mod_states() argument
84 struct input_dev *input = kscandat->input; in lpc32xx_mod_states()
88 key = readl(LPC32XX_KS_DATA(kscandat->kscan_base, col)); in lpc32xx_mod_states()
89 changed = key ^ kscandat->lastkeystates[col]; in lpc32xx_mod_states()
90 kscandat->lastkeystates[col] = key; in lpc32xx_mod_states()
96 kscandat->row_shift); in lpc32xx_mod_states()
97 keycode = kscandat->keymap[scancode]; in lpc32xx_mod_states()
106 struct lpc32xx_kscan_drv *kscandat = dev_id; in lpc32xx_kscan_irq() local
109 for (i = 0; i < kscandat->matrix_sz; i++) in lpc32xx_kscan_irq()
110 lpc32xx_mod_states(kscandat, i); in lpc32xx_kscan_irq()
112 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_irq()
114 input_sync(kscandat->input); in lpc32xx_kscan_irq()
121 struct lpc32xx_kscan_drv *kscandat = input_get_drvdata(dev); in lpc32xx_kscan_open() local
124 error = clk_prepare_enable(kscandat->clk); in lpc32xx_kscan_open()
128 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_open()
135 struct lpc32xx_kscan_drv *kscandat = input_get_drvdata(dev); in lpc32xx_kscan_close() local
137 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_close()
138 clk_disable_unprepare(kscandat->clk); in lpc32xx_kscan_close()
142 struct lpc32xx_kscan_drv *kscandat) in lpc32xx_parse_dt() argument
156 kscandat->matrix_sz = rows; in lpc32xx_parse_dt()
157 kscandat->row_shift = get_count_order(columns); in lpc32xx_parse_dt()
159 of_property_read_u32(np, "nxp,debounce-delay-ms", &kscandat->deb_clks); in lpc32xx_parse_dt()
160 of_property_read_u32(np, "nxp,scan-delay-ms", &kscandat->scan_delay); in lpc32xx_parse_dt()
161 if (!kscandat->deb_clks || !kscandat->scan_delay) { in lpc32xx_parse_dt()
171 struct lpc32xx_kscan_drv *kscandat; in lpc32xx_kscan_probe() local
190 kscandat = devm_kzalloc(&pdev->dev, sizeof(*kscandat), in lpc32xx_kscan_probe()
192 if (!kscandat) in lpc32xx_kscan_probe()
195 error = lpc32xx_parse_dt(&pdev->dev, kscandat); in lpc32xx_kscan_probe()
201 keymap_size = sizeof(kscandat->keymap[0]) * in lpc32xx_kscan_probe()
202 (kscandat->matrix_sz << kscandat->row_shift); in lpc32xx_kscan_probe()
203 kscandat->keymap = devm_kzalloc(&pdev->dev, keymap_size, GFP_KERNEL); in lpc32xx_kscan_probe()
204 if (!kscandat->keymap) in lpc32xx_kscan_probe()
207 kscandat->input = input = devm_input_allocate_device(&pdev->dev); in lpc32xx_kscan_probe()
226 kscandat->matrix_sz, in lpc32xx_kscan_probe()
227 kscandat->matrix_sz, in lpc32xx_kscan_probe()
228 kscandat->keymap, kscandat->input); in lpc32xx_kscan_probe()
234 input_set_drvdata(kscandat->input, kscandat); in lpc32xx_kscan_probe()
236 kscandat->kscan_base = devm_ioremap_resource(&pdev->dev, res); in lpc32xx_kscan_probe()
237 if (IS_ERR(kscandat->kscan_base)) in lpc32xx_kscan_probe()
238 return PTR_ERR(kscandat->kscan_base); in lpc32xx_kscan_probe()
241 kscandat->clk = devm_clk_get(&pdev->dev, NULL); in lpc32xx_kscan_probe()
242 if (IS_ERR(kscandat->clk)) { in lpc32xx_kscan_probe()
244 return PTR_ERR(kscandat->clk); in lpc32xx_kscan_probe()
248 error = clk_prepare_enable(kscandat->clk); in lpc32xx_kscan_probe()
252 writel(kscandat->deb_clks, LPC32XX_KS_DEB(kscandat->kscan_base)); in lpc32xx_kscan_probe()
253 writel(kscandat->scan_delay, LPC32XX_KS_SCAN_CTL(kscandat->kscan_base)); in lpc32xx_kscan_probe()
255 LPC32XX_KS_FAST_TST(kscandat->kscan_base)); in lpc32xx_kscan_probe()
256 writel(kscandat->matrix_sz, in lpc32xx_kscan_probe()
257 LPC32XX_KS_MATRIX_DIM(kscandat->kscan_base)); in lpc32xx_kscan_probe()
258 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_probe()
259 clk_disable_unprepare(kscandat->clk); in lpc32xx_kscan_probe()
262 pdev->name, kscandat); in lpc32xx_kscan_probe()
268 error = input_register_device(kscandat->input); in lpc32xx_kscan_probe()
274 platform_set_drvdata(pdev, kscandat); in lpc32xx_kscan_probe()
283 struct lpc32xx_kscan_drv *kscandat = platform_get_drvdata(pdev); in lpc32xx_kscan_suspend() local
284 struct input_dev *input = kscandat->input; in lpc32xx_kscan_suspend()
290 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_suspend()
291 clk_disable_unprepare(kscandat->clk); in lpc32xx_kscan_suspend()
301 struct lpc32xx_kscan_drv *kscandat = platform_get_drvdata(pdev); in lpc32xx_kscan_resume() local
302 struct input_dev *input = kscandat->input; in lpc32xx_kscan_resume()
309 retval = clk_prepare_enable(kscandat->clk); in lpc32xx_kscan_resume()
311 writel(1, LPC32XX_KS_IRQ(kscandat->kscan_base)); in lpc32xx_kscan_resume()