Lines Matching refs:ts

114 static void tsc200x_update_pen_state(struct tsc200x *ts,
118 touchscreen_report_pos(ts->idev, &ts->prop, x, y, false);
119 input_report_abs(ts->idev, ABS_PRESSURE, pressure);
120 if (!ts->pen_down) {
121 input_report_key(ts->idev, BTN_TOUCH, !!pressure);
122 ts->pen_down = true;
125 input_report_abs(ts->idev, ABS_PRESSURE, 0);
126 if (ts->pen_down) {
127 input_report_key(ts->idev, BTN_TOUCH, 0);
128 ts->pen_down = false;
131 input_sync(ts->idev);
132 dev_dbg(ts->dev, "point(%4d,%4d), pressure (%4d)\n", x, y,
138 struct tsc200x *ts = _ts;
145 error = regmap_bulk_read(ts->regmap, TSC200X_REG_X, &tsdata,
164 if (!ts->pen_down &&
165 ts->in_x == tsdata.x && ts->in_y == tsdata.y &&
166 ts->in_z1 == tsdata.z1 && ts->in_z2 == tsdata.z2) {
174 ts->in_x = tsdata.x;
175 ts->in_y = tsdata.y;
176 ts->in_z1 = tsdata.z1;
177 ts->in_z2 = tsdata.z2;
181 pressure = pressure * ts->x_plate_ohm / 4096;
185 spin_lock_irqsave(&ts->lock, flags);
187 tsc200x_update_pen_state(ts, tsdata.x, tsdata.y, pressure);
188 mod_timer(&ts->penup_timer,
191 spin_unlock_irqrestore(&ts->lock, flags);
193 ts->last_valid_interrupt = jiffies;
200 struct tsc200x *ts = from_timer(ts, t, penup_timer);
203 spin_lock_irqsave(&ts->lock, flags);
204 tsc200x_update_pen_state(ts, 0, 0, 0);
205 spin_unlock_irqrestore(&ts->lock, flags);
208 static void tsc200x_start_scan(struct tsc200x *ts)
210 regmap_write(ts->regmap, TSC200X_REG_CFR0, TSC200X_CFR0_INITVALUE);
211 regmap_write(ts->regmap, TSC200X_REG_CFR1, TSC200X_CFR1_INITVALUE);
212 regmap_write(ts->regmap, TSC200X_REG_CFR2, TSC200X_CFR2_INITVALUE);
213 ts->tsc200x_cmd(ts->dev, TSC200X_CMD_NORMAL);
216 static void tsc200x_stop_scan(struct tsc200x *ts)
218 ts->tsc200x_cmd(ts->dev, TSC200X_CMD_STOP);
221 static void tsc200x_reset(struct tsc200x *ts)
223 if (ts->reset_gpio) {
224 gpiod_set_value_cansleep(ts->reset_gpio, 1);
226 gpiod_set_value_cansleep(ts->reset_gpio, 0);
230 /* must be called with ts->mutex held */
231 static void __tsc200x_disable(struct tsc200x *ts)
233 tsc200x_stop_scan(ts);
235 disable_irq(ts->irq);
236 del_timer_sync(&ts->penup_timer);
238 cancel_delayed_work_sync(&ts->esd_work);
240 enable_irq(ts->irq);
243 /* must be called with ts->mutex held */
244 static void __tsc200x_enable(struct tsc200x *ts)
246 tsc200x_start_scan(ts);
248 if (ts->esd_timeout && ts->reset_gpio) {
249 ts->last_valid_interrupt = jiffies;
250 schedule_delayed_work(&ts->esd_work,
252 msecs_to_jiffies(ts->esd_timeout)));
260 struct tsc200x *ts = dev_get_drvdata(dev);
267 mutex_lock(&ts->mutex);
272 __tsc200x_disable(ts);
274 error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high_orig);
283 error = regmap_write(ts->regmap, TSC200X_REG_TEMP_HIGH, temp_high_test);
290 error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high);
305 tsc200x_reset(ts);
311 error = regmap_read(ts->regmap, TSC200X_REG_TEMP_HIGH, &temp_high);
326 __tsc200x_enable(ts);
327 mutex_unlock(&ts->mutex);
343 struct tsc200x *ts = dev_get_drvdata(dev);
347 if (!ts->reset_gpio)
367 struct tsc200x *ts = container_of(work, struct tsc200x, esd_work.work);
371 if (!mutex_trylock(&ts->mutex)) {
380 if (time_is_after_jiffies(ts->last_valid_interrupt +
381 msecs_to_jiffies(ts->esd_timeout)))
385 error = regmap_read(ts->regmap, TSC200X_REG_CFR0, &r);
396 dev_info(ts->dev, "TSC200X not responding - resetting\n");
398 disable_irq(ts->irq);
399 del_timer_sync(&ts->penup_timer);
401 tsc200x_update_pen_state(ts, 0, 0, 0);
403 tsc200x_reset(ts);
405 enable_irq(ts->irq);
406 tsc200x_start_scan(ts);
409 mutex_unlock(&ts->mutex);
412 schedule_delayed_work(&ts->esd_work,
414 msecs_to_jiffies(ts->esd_timeout)));
419 struct tsc200x *ts = input_get_drvdata(input);
421 mutex_lock(&ts->mutex);
423 if (!ts->suspended)
424 __tsc200x_enable(ts);
426 ts->opened = true;
428 mutex_unlock(&ts->mutex);
435 struct tsc200x *ts = input_get_drvdata(input);
437 mutex_lock(&ts->mutex);
439 if (!ts->suspended)
440 __tsc200x_disable(ts);
442 ts->opened = false;
444 mutex_unlock(&ts->mutex);
451 struct tsc200x *ts;
470 ts = devm_kzalloc(dev, sizeof(*ts), GFP_KERNEL);
471 if (!ts)
478 ts->irq = irq;
479 ts->dev = dev;
480 ts->idev = input_dev;
481 ts->regmap = regmap;
482 ts->tsc200x_cmd = tsc200x_cmd;
485 ts->x_plate_ohm = error ? TSC200X_DEF_RESISTOR : x_plate_ohm;
489 ts->esd_timeout = error ? 0 : esd_timeout;
491 ts->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
492 if (IS_ERR(ts->reset_gpio)) {
493 error = PTR_ERR(ts->reset_gpio);
498 ts->vio = devm_regulator_get(dev, "vio");
499 if (IS_ERR(ts->vio)) {
500 error = PTR_ERR(ts->vio);
505 mutex_init(&ts->mutex);
507 spin_lock_init(&ts->lock);
508 timer_setup(&ts->penup_timer, tsc200x_penup_timer, 0);
510 INIT_DELAYED_WORK(&ts->esd_work, tsc200x_esd_work);
512 snprintf(ts->phys, sizeof(ts->phys),
513 "%s/input-ts", dev_name(dev));
525 input_dev->phys = ts->phys;
531 input_set_drvdata(input_dev, ts);
543 touchscreen_parse_properties(input_dev, false, &ts->prop);
546 tsc200x_stop_scan(ts);
551 "tsc200x", ts);
557 error = regulator_enable(ts->vio);
561 dev_set_drvdata(dev, ts);
563 error = input_register_device(ts->idev);
574 regulator_disable(ts->vio);
581 struct tsc200x *ts = dev_get_drvdata(dev);
583 regulator_disable(ts->vio);
589 struct tsc200x *ts = dev_get_drvdata(dev);
591 mutex_lock(&ts->mutex);
593 if (!ts->suspended && ts->opened)
594 __tsc200x_disable(ts);
596 ts->suspended = true;
598 mutex_unlock(&ts->mutex);
605 struct tsc200x *ts = dev_get_drvdata(dev);
607 mutex_lock(&ts->mutex);
609 if (ts->suspended && ts->opened)
610 __tsc200x_enable(ts);
612 ts->suspended = false;
614 mutex_unlock(&ts->mutex);