Lines Matching refs:ts_dev

73 static int titsc_config_wires(struct titsc *ts_dev)  in titsc_config_wires()  argument
84 analog_line[i] = (ts_dev->config_inp[i] & 0xF0) >> 4; in titsc_config_wires()
85 wire_order[i] = ts_dev->config_inp[i] & 0x0F; in titsc_config_wires()
103 ts_dev->bit_xp = bit_cfg; in titsc_config_wires()
104 ts_dev->inp_xp = an_line; in titsc_config_wires()
108 ts_dev->bit_xn = bit_cfg; in titsc_config_wires()
109 ts_dev->inp_xn = an_line; in titsc_config_wires()
113 ts_dev->bit_yp = bit_cfg; in titsc_config_wires()
114 ts_dev->inp_yp = an_line; in titsc_config_wires()
117 ts_dev->bit_yn = bit_cfg; in titsc_config_wires()
118 ts_dev->inp_yn = an_line; in titsc_config_wires()
125 static void titsc_step_config(struct titsc *ts_dev) in titsc_step_config() argument
133 STEPCONFIG_AVG_16 | ts_dev->bit_xp | in titsc_step_config()
135 switch (ts_dev->wires) { in titsc_step_config()
137 config |= STEPCONFIG_INP(ts_dev->inp_yp) | ts_dev->bit_xn; in titsc_step_config()
140 config |= ts_dev->bit_yn | in titsc_step_config()
141 STEPCONFIG_INP_AN4 | ts_dev->bit_xn | in titsc_step_config()
142 ts_dev->bit_yp; in titsc_step_config()
145 config |= STEPCONFIG_INP(ts_dev->inp_yp) | ts_dev->bit_xn; in titsc_step_config()
149 tsc_steps = ts_dev->coordinate_readouts * 2 + 2; in titsc_step_config()
154 for (i = end_step - ts_dev->coordinate_readouts; i < end_step; i++) { in titsc_step_config()
155 titsc_writel(ts_dev, REG_STEPCONFIG(i), config); in titsc_step_config()
156 titsc_writel(ts_dev, REG_STEPDELAY(i), in titsc_step_config()
161 STEPCONFIG_AVG_16 | ts_dev->bit_yn | in titsc_step_config()
163 switch (ts_dev->wires) { in titsc_step_config()
165 config |= ts_dev->bit_yp | STEPCONFIG_INP(ts_dev->inp_xp); in titsc_step_config()
168 config |= ts_dev->bit_xp | STEPCONFIG_INP_AN4 | in titsc_step_config()
172 config |= ts_dev->bit_yp | STEPCONFIG_INP(ts_dev->inp_xp); in titsc_step_config()
177 end_step = first_step + ts_dev->coordinate_readouts; in titsc_step_config()
180 titsc_writel(ts_dev, REG_STEPCONFIG(i), config); in titsc_step_config()
181 titsc_writel(ts_dev, REG_STEPDELAY(i), in titsc_step_config()
187 config = titsc_readl(ts_dev, REG_IDLECONFIG); in titsc_step_config()
188 titsc_writel(ts_dev, REG_CHARGECONFIG, config); in titsc_step_config()
189 titsc_writel(ts_dev, REG_CHARGEDELAY, ts_dev->charge_delay); in titsc_step_config()
193 STEPCONFIG_AVG_16 | ts_dev->bit_yp | in titsc_step_config()
194 ts_dev->bit_xn | STEPCONFIG_INM_ADCREFM | in titsc_step_config()
195 STEPCONFIG_INP(ts_dev->inp_xp); in titsc_step_config()
196 titsc_writel(ts_dev, REG_STEPCONFIG(end_step), config); in titsc_step_config()
197 titsc_writel(ts_dev, REG_STEPDELAY(end_step), in titsc_step_config()
202 STEPCONFIG_AVG_16 | ts_dev->bit_yp | in titsc_step_config()
203 ts_dev->bit_xn | STEPCONFIG_INM_ADCREFM | in titsc_step_config()
204 STEPCONFIG_INP(ts_dev->inp_yn); in titsc_step_config()
205 titsc_writel(ts_dev, REG_STEPCONFIG(end_step), config); in titsc_step_config()
206 titsc_writel(ts_dev, REG_STEPDELAY(end_step), in titsc_step_config()
214 ts_dev->step_mask = stepenable; in titsc_step_config()
215 am335x_tsc_se_set_cache(ts_dev->mfd_tscadc, ts_dev->step_mask); in titsc_step_config()
223 static void titsc_read_coordinates(struct titsc *ts_dev, in titsc_read_coordinates() argument
228 unsigned int creads = ts_dev->coordinate_readouts; in titsc_read_coordinates()
231 yvals[i] = titsc_readl(ts_dev, REG_FIFO0); in titsc_read_coordinates()
235 *z1 = titsc_readl(ts_dev, REG_FIFO0); in titsc_read_coordinates()
237 *z2 = titsc_readl(ts_dev, REG_FIFO0); in titsc_read_coordinates()
241 xvals[i] = titsc_readl(ts_dev, REG_FIFO0); in titsc_read_coordinates()
277 struct titsc *ts_dev = dev; in titsc_irq() local
278 struct input_dev *input_dev = ts_dev->input; in titsc_irq()
283 status = titsc_readl(ts_dev, REG_RAWIRQSTATUS); in titsc_irq()
285 ts_dev->pen_down = true; in titsc_irq()
287 pm_stay_awake(ts_dev->dev); in titsc_irq()
291 fsm = titsc_readl(ts_dev, REG_ADCFSM); in titsc_irq()
293 ts_dev->pen_down = false; in titsc_irq()
297 pm_relax(ts_dev->dev); in titsc_irq()
299 ts_dev->pen_down = true; in titsc_irq()
313 titsc_read_coordinates(ts_dev, &x, &y, &z1, &z2); in titsc_irq()
315 if (ts_dev->pen_down && z1 != 0 && z2 != 0) { in titsc_irq()
323 z *= ts_dev->x_plate_resistance; in titsc_irq()
338 titsc_writel(ts_dev, REG_IRQSTATUS, irqclr); in titsc_irq()
340 am335x_tsc_se_set_cache(ts_dev->mfd_tscadc, in titsc_irq()
341 ts_dev->step_mask); in titsc_irq()
348 struct titsc *ts_dev) in titsc_parse_dt() argument
356 err = of_property_read_u32(node, "ti,wires", &ts_dev->wires); in titsc_parse_dt()
359 switch (ts_dev->wires) { in titsc_parse_dt()
369 &ts_dev->x_plate_resistance); in titsc_parse_dt()
378 &ts_dev->coordinate_readouts); in titsc_parse_dt()
382 &ts_dev->coordinate_readouts); in titsc_parse_dt()
388 if (ts_dev->coordinate_readouts <= 0) { in titsc_parse_dt()
391 ts_dev->coordinate_readouts = 5; in titsc_parse_dt()
392 } else if (ts_dev->coordinate_readouts > 6) { in titsc_parse_dt()
395 ts_dev->coordinate_readouts = 6; in titsc_parse_dt()
399 &ts_dev->charge_delay); in titsc_parse_dt()
405 ts_dev->charge_delay = CHARGEDLY_OPENDLY; in titsc_parse_dt()
410 ts_dev->config_inp, ARRAY_SIZE(ts_dev->config_inp)); in titsc_parse_dt()
419 struct titsc *ts_dev; in titsc_probe() local
425 ts_dev = kzalloc_obj(*ts_dev); in titsc_probe()
427 if (!ts_dev || !input_dev) { in titsc_probe()
433 tscadc_dev->tsc = ts_dev; in titsc_probe()
434 ts_dev->mfd_tscadc = tscadc_dev; in titsc_probe()
435 ts_dev->input = input_dev; in titsc_probe()
436 ts_dev->irq = tscadc_dev->irq; in titsc_probe()
437 ts_dev->dev = &pdev->dev; in titsc_probe()
439 err = titsc_parse_dt(pdev, ts_dev); in titsc_probe()
445 err = request_irq(ts_dev->irq, titsc_irq, in titsc_probe()
446 IRQF_SHARED, pdev->dev.driver->name, ts_dev); in titsc_probe()
453 err = dev_pm_set_wake_irq(&pdev->dev, ts_dev->irq); in titsc_probe()
457 titsc_writel(ts_dev, REG_IRQSTATUS, TSC_IRQENB_MASK); in titsc_probe()
458 titsc_writel(ts_dev, REG_IRQENABLE, IRQENB_FIFO0THRES); in titsc_probe()
459 titsc_writel(ts_dev, REG_IRQENABLE, IRQENB_EOS); in titsc_probe()
460 err = titsc_config_wires(ts_dev); in titsc_probe()
465 titsc_step_config(ts_dev); in titsc_probe()
466 titsc_writel(ts_dev, REG_FIFO0THR, in titsc_probe()
467 ts_dev->coordinate_readouts * 2 + 2 - 1); in titsc_probe()
484 platform_set_drvdata(pdev, ts_dev); in titsc_probe()
490 free_irq(ts_dev->irq, ts_dev); in titsc_probe()
493 kfree(ts_dev); in titsc_probe()
499 struct titsc *ts_dev = platform_get_drvdata(pdev); in titsc_remove() local
504 free_irq(ts_dev->irq, ts_dev); in titsc_remove()
507 steps = 2 * ts_dev->coordinate_readouts + 2; in titsc_remove()
509 am335x_tsc_se_clr(ts_dev->mfd_tscadc, steps); in titsc_remove()
511 input_unregister_device(ts_dev->input); in titsc_remove()
513 kfree(ts_dev); in titsc_remove()
518 struct titsc *ts_dev = dev_get_drvdata(dev); in titsc_suspend() local
522 titsc_writel(ts_dev, REG_IRQSTATUS, TSC_IRQENB_MASK); in titsc_suspend()
523 idle = titsc_readl(ts_dev, REG_IRQENABLE); in titsc_suspend()
524 titsc_writel(ts_dev, REG_IRQENABLE, in titsc_suspend()
526 titsc_writel(ts_dev, REG_IRQWAKEUP, IRQWKUP_ENB); in titsc_suspend()
533 struct titsc *ts_dev = dev_get_drvdata(dev); in titsc_resume() local
536 titsc_writel(ts_dev, REG_IRQWAKEUP, in titsc_resume()
538 titsc_writel(ts_dev, REG_IRQCLR, IRQENB_HW_PEN); in titsc_resume()
541 titsc_step_config(ts_dev); in titsc_resume()
542 titsc_writel(ts_dev, REG_FIFO0THR, in titsc_resume()
543 ts_dev->coordinate_readouts * 2 + 2 - 1); in titsc_resume()