Lines Matching refs:ts
135 static int ad7879_read(struct ad7879 *ts, u8 reg)
140 error = regmap_read(ts->regmap, reg, &val);
142 dev_err(ts->dev, "failed to read register %#02x: %d\n",
150 static int ad7879_write(struct ad7879 *ts, u8 reg, u16 val)
154 error = regmap_write(ts->regmap, reg, val);
156 dev_err(ts->dev,
165 static int ad7879_report(struct ad7879 *ts)
167 struct input_dev *input_dev = ts->input;
171 x = ts->conversion_data[AD7879_SEQ_XPOS] & MAX_12BIT;
172 y = ts->conversion_data[AD7879_SEQ_YPOS] & MAX_12BIT;
173 z1 = ts->conversion_data[AD7879_SEQ_Z1] & MAX_12BIT;
174 z2 = ts->conversion_data[AD7879_SEQ_Z2] & MAX_12BIT;
176 if (ts->swap_xy)
193 Rt = (z2 - z1) * x * ts->x_plate_ohms;
210 if (timer_pending(&ts->timer)) {
213 input_report_abs(input_dev, ABS_X, ts->x);
214 input_report_abs(input_dev, ABS_Y, ts->y);
215 input_report_abs(input_dev, ABS_PRESSURE, ts->Rt);
219 ts->x = x;
220 ts->y = y;
221 ts->Rt = Rt;
229 static void ad7879_ts_event_release(struct ad7879 *ts)
231 struct input_dev *input_dev = ts->input;
240 struct ad7879 *ts = from_timer(ts, t, timer);
242 ad7879_ts_event_release(ts);
247 struct ad7879 *ts = handle;
250 error = regmap_bulk_read(ts->regmap, AD7879_REG_XPLUS,
251 ts->conversion_data, AD7879_NR_SENSE);
253 dev_err_ratelimited(ts->dev, "failed to read %#02x: %d\n",
255 else if (!ad7879_report(ts))
256 mod_timer(&ts->timer, jiffies + TS_PEN_UP_TIMEOUT);
261 static void __ad7879_enable(struct ad7879 *ts)
263 ad7879_write(ts, AD7879_REG_CTRL2, ts->cmd_crtl2);
264 ad7879_write(ts, AD7879_REG_CTRL3, ts->cmd_crtl3);
265 ad7879_write(ts, AD7879_REG_CTRL1, ts->cmd_crtl1);
267 enable_irq(ts->irq);
270 static void __ad7879_disable(struct ad7879 *ts)
272 u16 reg = (ts->cmd_crtl2 & ~AD7879_PM(-1)) |
274 disable_irq(ts->irq);
276 if (del_timer_sync(&ts->timer))
277 ad7879_ts_event_release(ts);
279 ad7879_write(ts, AD7879_REG_CTRL2, reg);
285 struct ad7879 *ts = input_get_drvdata(input);
288 if (!ts->disabled && !ts->suspended)
289 __ad7879_enable(ts);
296 struct ad7879 *ts = input_get_drvdata(input);
299 if (!ts->disabled && !ts->suspended)
300 __ad7879_disable(ts);
305 struct ad7879 *ts = dev_get_drvdata(dev);
307 mutex_lock(&ts->input->mutex);
309 if (!ts->suspended && !ts->disabled && input_device_enabled(ts->input))
310 __ad7879_disable(ts);
312 ts->suspended = true;
314 mutex_unlock(&ts->input->mutex);
321 struct ad7879 *ts = dev_get_drvdata(dev);
323 mutex_lock(&ts->input->mutex);
325 if (ts->suspended && !ts->disabled && input_device_enabled(ts->input))
326 __ad7879_enable(ts);
328 ts->suspended = false;
330 mutex_unlock(&ts->input->mutex);
338 static void ad7879_toggle(struct ad7879 *ts, bool disable)
340 mutex_lock(&ts->input->mutex);
342 if (!ts->suspended && input_device_enabled(ts->input)) {
345 if (ts->disabled)
346 __ad7879_enable(ts);
348 if (!ts->disabled)
349 __ad7879_disable(ts);
353 ts->disabled = disable;
355 mutex_unlock(&ts->input->mutex);
361 struct ad7879 *ts = dev_get_drvdata(dev);
363 return sprintf(buf, "%u\n", ts->disabled);
370 struct ad7879 *ts = dev_get_drvdata(dev);
378 ad7879_toggle(ts, val);
404 struct ad7879 *ts = gpiochip_get_data(chip);
407 mutex_lock(&ts->mutex);
408 ts->cmd_crtl2 |= AD7879_GPIO_EN | AD7879_GPIODIR | AD7879_GPIOPOL;
409 err = ad7879_write(ts, AD7879_REG_CTRL2, ts->cmd_crtl2);
410 mutex_unlock(&ts->mutex);
418 struct ad7879 *ts = gpiochip_get_data(chip);
421 mutex_lock(&ts->mutex);
422 ts->cmd_crtl2 &= ~AD7879_GPIODIR;
423 ts->cmd_crtl2 |= AD7879_GPIO_EN | AD7879_GPIOPOL;
425 ts->cmd_crtl2 |= AD7879_GPIO_DATA;
427 ts->cmd_crtl2 &= ~AD7879_GPIO_DATA;
429 err = ad7879_write(ts, AD7879_REG_CTRL2, ts->cmd_crtl2);
430 mutex_unlock(&ts->mutex);
437 struct ad7879 *ts = gpiochip_get_data(chip);
440 mutex_lock(&ts->mutex);
441 val = ad7879_read(ts, AD7879_REG_CTRL2);
442 mutex_unlock(&ts->mutex);
450 struct ad7879 *ts = gpiochip_get_data(chip);
452 mutex_lock(&ts->mutex);
454 ts->cmd_crtl2 |= AD7879_GPIO_DATA;
456 ts->cmd_crtl2 &= ~AD7879_GPIO_DATA;
458 ad7879_write(ts, AD7879_REG_CTRL2, ts->cmd_crtl2);
459 mutex_unlock(&ts->mutex);
462 static int ad7879_gpio_add(struct ad7879 *ts)
466 mutex_init(&ts->mutex);
469 if (!device_property_read_bool(ts->dev, "gpio-controller"))
472 ts->gc.direction_input = ad7879_gpio_direction_input;
473 ts->gc.direction_output = ad7879_gpio_direction_output;
474 ts->gc.get = ad7879_gpio_get_value;
475 ts->gc.set = ad7879_gpio_set_value;
476 ts->gc.can_sleep = 1;
477 ts->gc.base = -1;
478 ts->gc.ngpio = 1;
479 ts->gc.label = "AD7879-GPIO";
480 ts->gc.owner = THIS_MODULE;
481 ts->gc.parent = ts->dev;
483 ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
485 dev_err(ts->dev, "failed to register gpio %d\n",
486 ts->gc.base);
491 static int ad7879_gpio_add(struct ad7879 *ts)
497 static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
507 ts->x_plate_ohms = (u16)tmp;
510 &ts->first_conversion_delay);
512 &ts->acquisition_time);
513 device_property_read_u8(dev, "adi,median-filter-size", &ts->median);
514 device_property_read_u8(dev, "adi,averaging", &ts->averaging);
516 &ts->pen_down_acc_interval);
518 ts->swap_xy = device_property_read_bool(dev, "touchscreen-swapped-x-y");
526 struct ad7879 *ts;
536 ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
537 if (!ts)
540 err = ad7879_parse_dt(dev, ts);
550 ts->dev = dev;
551 ts->input = input_dev;
552 ts->irq = irq;
553 ts->regmap = regmap;
555 timer_setup(&ts->timer, ad7879_timer, 0);
556 snprintf(ts->phys, sizeof(ts->phys), "%s/input0", dev_name(dev));
559 input_dev->phys = ts->phys;
566 input_set_drvdata(input_dev, ts);
579 err = ad7879_write(ts, AD7879_REG_CTRL2, AD7879_RESET);
585 revid = ad7879_read(ts, AD7879_REG_REVID);
594 ts->cmd_crtl3 = AD7879_YPLUS_BIT |
602 ts->cmd_crtl2 = AD7879_PM(AD7879_PM_DYN) | AD7879_DFR |
603 AD7879_AVG(ts->averaging) |
604 AD7879_MFS(ts->median) |
605 AD7879_FCD(ts->first_conversion_delay);
607 ts->cmd_crtl1 = AD7879_MODE_INT | AD7879_MODE_SEQ1 |
608 AD7879_ACQ(ts->acquisition_time) |
609 AD7879_TMR(ts->pen_down_acc_interval);
611 err = devm_request_threaded_irq(dev, ts->irq, NULL, ad7879_irq,
613 dev_name(dev), ts);
619 __ad7879_disable(ts);
621 err = ad7879_gpio_add(ts);
629 dev_set_drvdata(dev, ts);