Lines Matching full:tsc
80 static void lpc32xx_fifo_clear(struct lpc32xx_tsc *tsc) in lpc32xx_fifo_clear() argument
82 while (!(tsc_readl(tsc, LPC32XX_TSC_STAT) & in lpc32xx_fifo_clear()
84 tsc_readl(tsc, LPC32XX_TSC_FIFO); in lpc32xx_fifo_clear()
91 struct lpc32xx_tsc *tsc = dev_id; in lpc32xx_ts_interrupt() local
92 struct input_dev *input = tsc->dev; in lpc32xx_ts_interrupt()
94 tmp = tsc_readl(tsc, LPC32XX_TSC_STAT); in lpc32xx_ts_interrupt()
98 lpc32xx_fifo_clear(tsc); in lpc32xx_ts_interrupt()
109 !(tsc_readl(tsc, LPC32XX_TSC_STAT) & in lpc32xx_ts_interrupt()
111 tmp = tsc_readl(tsc, LPC32XX_TSC_FIFO); in lpc32xx_ts_interrupt()
135 static void lpc32xx_stop_tsc(struct lpc32xx_tsc *tsc) in lpc32xx_stop_tsc() argument
138 tsc_writel(tsc, LPC32XX_TSC_CON, in lpc32xx_stop_tsc()
139 tsc_readl(tsc, LPC32XX_TSC_CON) & in lpc32xx_stop_tsc()
142 clk_disable_unprepare(tsc->clk); in lpc32xx_stop_tsc()
145 static int lpc32xx_setup_tsc(struct lpc32xx_tsc *tsc) in lpc32xx_setup_tsc() argument
150 err = clk_prepare_enable(tsc->clk); in lpc32xx_setup_tsc()
154 tmp = tsc_readl(tsc, LPC32XX_TSC_CON) & ~LPC32XX_TSC_ADCCON_POWER_UP; in lpc32xx_setup_tsc()
156 /* Set the TSC FIFO depth to 4 samples @ 10-bits per sample (max) */ in lpc32xx_setup_tsc()
160 tsc_writel(tsc, LPC32XX_TSC_CON, tmp); in lpc32xx_setup_tsc()
163 tsc_writel(tsc, LPC32XX_TSC_SEL, LPC32XX_TSC_SEL_DEFVAL); in lpc32xx_setup_tsc()
164 tsc_writel(tsc, LPC32XX_TSC_MIN_X, LPC32XX_TSC_MIN_XY_VAL); in lpc32xx_setup_tsc()
165 tsc_writel(tsc, LPC32XX_TSC_MAX_X, LPC32XX_TSC_MAX_XY_VAL); in lpc32xx_setup_tsc()
166 tsc_writel(tsc, LPC32XX_TSC_MIN_Y, LPC32XX_TSC_MIN_XY_VAL); in lpc32xx_setup_tsc()
167 tsc_writel(tsc, LPC32XX_TSC_MAX_Y, LPC32XX_TSC_MAX_XY_VAL); in lpc32xx_setup_tsc()
170 tsc_writel(tsc, LPC32XX_TSC_AUX_UTR, 0); in lpc32xx_setup_tsc()
171 tsc_writel(tsc, LPC32XX_TSC_AUX_MIN, 0); in lpc32xx_setup_tsc()
172 tsc_writel(tsc, LPC32XX_TSC_AUX_MAX, 0); in lpc32xx_setup_tsc()
180 tsc_writel(tsc, LPC32XX_TSC_RTR, 0x2); in lpc32xx_setup_tsc()
181 tsc_writel(tsc, LPC32XX_TSC_DTR, 0x2); in lpc32xx_setup_tsc()
182 tsc_writel(tsc, LPC32XX_TSC_TTR, 0x10); in lpc32xx_setup_tsc()
183 tsc_writel(tsc, LPC32XX_TSC_DXP, 0x4); in lpc32xx_setup_tsc()
184 tsc_writel(tsc, LPC32XX_TSC_UTR, 88); in lpc32xx_setup_tsc()
186 lpc32xx_fifo_clear(tsc); in lpc32xx_setup_tsc()
189 tsc_writel(tsc, LPC32XX_TSC_CON, tmp | LPC32XX_TSC_ADCCON_AUTO_EN); in lpc32xx_setup_tsc()
196 struct lpc32xx_tsc *tsc = input_get_drvdata(dev); in lpc32xx_ts_open() local
198 return lpc32xx_setup_tsc(tsc); in lpc32xx_ts_open()
203 struct lpc32xx_tsc *tsc = input_get_drvdata(dev); in lpc32xx_ts_close() local
205 lpc32xx_stop_tsc(tsc); in lpc32xx_ts_close()
210 struct lpc32xx_tsc *tsc; in lpc32xx_ts_probe() local
229 tsc = kzalloc(sizeof(*tsc), GFP_KERNEL); in lpc32xx_ts_probe()
231 if (!tsc || !input) { in lpc32xx_ts_probe()
237 tsc->dev = input; in lpc32xx_ts_probe()
238 tsc->irq = irq; in lpc32xx_ts_probe()
243 dev_err(&pdev->dev, "TSC registers are not free\n"); in lpc32xx_ts_probe()
248 tsc->tsc_base = ioremap(res->start, size); in lpc32xx_ts_probe()
249 if (!tsc->tsc_base) { in lpc32xx_ts_probe()
255 tsc->clk = clk_get(&pdev->dev, NULL); in lpc32xx_ts_probe()
256 if (IS_ERR(tsc->clk)) { in lpc32xx_ts_probe()
258 error = PTR_ERR(tsc->clk); in lpc32xx_ts_probe()
279 input_set_drvdata(input, tsc); in lpc32xx_ts_probe()
281 error = request_irq(tsc->irq, lpc32xx_ts_interrupt, in lpc32xx_ts_probe()
282 0, pdev->name, tsc); in lpc32xx_ts_probe()
294 platform_set_drvdata(pdev, tsc); in lpc32xx_ts_probe()
300 free_irq(tsc->irq, tsc); in lpc32xx_ts_probe()
302 clk_put(tsc->clk); in lpc32xx_ts_probe()
304 iounmap(tsc->tsc_base); in lpc32xx_ts_probe()
309 kfree(tsc); in lpc32xx_ts_probe()
316 struct lpc32xx_tsc *tsc = platform_get_drvdata(pdev); in lpc32xx_ts_remove() local
319 free_irq(tsc->irq, tsc); in lpc32xx_ts_remove()
321 input_unregister_device(tsc->dev); in lpc32xx_ts_remove()
323 clk_put(tsc->clk); in lpc32xx_ts_remove()
325 iounmap(tsc->tsc_base); in lpc32xx_ts_remove()
329 kfree(tsc); in lpc32xx_ts_remove()
337 struct lpc32xx_tsc *tsc = dev_get_drvdata(dev); in lpc32xx_ts_suspend() local
338 struct input_dev *input = tsc->dev; in lpc32xx_ts_suspend()
343 * avoid calling the TSC stop and start functions as the TSC in lpc32xx_ts_suspend()
350 enable_irq_wake(tsc->irq); in lpc32xx_ts_suspend()
352 lpc32xx_stop_tsc(tsc); in lpc32xx_ts_suspend()
362 struct lpc32xx_tsc *tsc = dev_get_drvdata(dev); in lpc32xx_ts_resume() local
363 struct input_dev *input = tsc->dev; in lpc32xx_ts_resume()
369 disable_irq_wake(tsc->irq); in lpc32xx_ts_resume()
371 lpc32xx_setup_tsc(tsc); in lpc32xx_ts_resume()
390 { .compatible = "nxp,lpc3220-tsc", },
408 MODULE_DESCRIPTION("LPC32XX TSC Driver");