Lines Matching refs:touch
231 static inline void set_scan_rate(struct synaptics_i2c *touch, int scan_rate) in set_scan_rate() argument
233 touch->scan_ms = MSEC_PER_SEC / scan_rate; in set_scan_rate()
234 touch->scan_rate_param = scan_rate; in set_scan_rate()
336 static bool synaptics_i2c_get_input(struct synaptics_i2c *touch) in synaptics_i2c_get_input() argument
338 struct input_dev *input = touch->input; in synaptics_i2c_get_input()
344 if (synaptics_i2c_check_error(touch->client)) in synaptics_i2c_get_input()
348 data = synaptics_i2c_reg_get(touch->client, DATA_REG0); in synaptics_i2c_get_input()
355 xy_delta = synaptics_i2c_word_get(touch->client, REL_X_REG) & 0xffff; in synaptics_i2c_get_input()
372 static void synaptics_i2c_reschedule_work(struct synaptics_i2c *touch, in synaptics_i2c_reschedule_work() argument
377 spin_lock_irqsave(&touch->lock, flags); in synaptics_i2c_reschedule_work()
379 mod_delayed_work(system_wq, &touch->dwork, delay); in synaptics_i2c_reschedule_work()
381 spin_unlock_irqrestore(&touch->lock, flags); in synaptics_i2c_reschedule_work()
386 struct synaptics_i2c *touch = dev_id; in synaptics_i2c_irq() local
388 synaptics_i2c_reschedule_work(touch, 0); in synaptics_i2c_irq()
393 static void synaptics_i2c_check_params(struct synaptics_i2c *touch) in synaptics_i2c_check_params() argument
397 if (scan_rate != touch->scan_rate_param) in synaptics_i2c_check_params()
398 set_scan_rate(touch, scan_rate); in synaptics_i2c_check_params()
400 if (no_decel != touch->no_decel_param) { in synaptics_i2c_check_params()
401 touch->no_decel_param = no_decel; in synaptics_i2c_check_params()
405 if (no_filter != touch->no_filter_param) { in synaptics_i2c_check_params()
406 touch->no_filter_param = no_filter; in synaptics_i2c_check_params()
410 if (reduce_report != touch->reduce_report_param) { in synaptics_i2c_check_params()
411 touch->reduce_report_param = reduce_report; in synaptics_i2c_check_params()
416 synaptics_i2c_reset_config(touch->client); in synaptics_i2c_check_params()
420 static unsigned long synaptics_i2c_adjust_delay(struct synaptics_i2c *touch, in synaptics_i2c_adjust_delay() argument
426 delay = touch->scan_ms; in synaptics_i2c_adjust_delay()
428 touch->no_data_count = 0; in synaptics_i2c_adjust_delay()
430 nodata_count_thres = NO_DATA_THRES / touch->scan_ms; in synaptics_i2c_adjust_delay()
431 if (touch->no_data_count < nodata_count_thres) in synaptics_i2c_adjust_delay()
432 touch->no_data_count++; in synaptics_i2c_adjust_delay()
447 struct synaptics_i2c *touch = in synaptics_i2c_work_handler() local
451 synaptics_i2c_check_params(touch); in synaptics_i2c_work_handler()
453 have_data = synaptics_i2c_get_input(touch); in synaptics_i2c_work_handler()
454 delay = synaptics_i2c_adjust_delay(touch, have_data); in synaptics_i2c_work_handler()
464 synaptics_i2c_reschedule_work(touch, delay); in synaptics_i2c_work_handler()
469 struct synaptics_i2c *touch = input_get_drvdata(input); in synaptics_i2c_open() local
472 ret = synaptics_i2c_reset_config(touch->client); in synaptics_i2c_open()
477 synaptics_i2c_reschedule_work(touch, in synaptics_i2c_open()
485 struct synaptics_i2c *touch = input_get_drvdata(input); in synaptics_i2c_close() local
488 synaptics_i2c_reg_set(touch->client, INTERRUPT_EN_REG, 0); in synaptics_i2c_close()
490 cancel_delayed_work_sync(&touch->dwork); in synaptics_i2c_close()
493 synaptics_i2c_reg_set(touch->client, DEV_CONTROL_REG, DEEP_SLEEP); in synaptics_i2c_close()
496 static void synaptics_i2c_set_input_params(struct synaptics_i2c *touch) in synaptics_i2c_set_input_params() argument
498 struct input_dev *input = touch->input; in synaptics_i2c_set_input_params()
500 input->name = touch->client->name; in synaptics_i2c_set_input_params()
501 input->phys = touch->client->adapter->name; in synaptics_i2c_set_input_params()
503 input->id.version = synaptics_i2c_word_get(touch->client, in synaptics_i2c_set_input_params()
505 input->dev.parent = &touch->client->dev; in synaptics_i2c_set_input_params()
508 input_set_drvdata(input, touch); in synaptics_i2c_set_input_params()
522 struct synaptics_i2c *touch; in synaptics_i2c_touch_create() local
524 touch = kzalloc(sizeof(struct synaptics_i2c), GFP_KERNEL); in synaptics_i2c_touch_create()
525 if (!touch) in synaptics_i2c_touch_create()
528 touch->client = client; in synaptics_i2c_touch_create()
529 touch->no_decel_param = no_decel; in synaptics_i2c_touch_create()
530 touch->scan_rate_param = scan_rate; in synaptics_i2c_touch_create()
531 set_scan_rate(touch, scan_rate); in synaptics_i2c_touch_create()
532 INIT_DELAYED_WORK(&touch->dwork, synaptics_i2c_work_handler); in synaptics_i2c_touch_create()
533 spin_lock_init(&touch->lock); in synaptics_i2c_touch_create()
535 return touch; in synaptics_i2c_touch_create()
542 struct synaptics_i2c *touch; in synaptics_i2c_probe() local
544 touch = synaptics_i2c_touch_create(client); in synaptics_i2c_probe()
545 if (!touch) in synaptics_i2c_probe()
555 touch->input = input_allocate_device(); in synaptics_i2c_probe()
556 if (!touch->input) { in synaptics_i2c_probe()
561 synaptics_i2c_set_input_params(touch); in synaptics_i2c_probe()
564 dev_dbg(&touch->client->dev, in synaptics_i2c_probe()
565 "Requesting IRQ: %d\n", touch->client->irq); in synaptics_i2c_probe()
567 ret = request_irq(touch->client->irq, synaptics_i2c_irq, in synaptics_i2c_probe()
569 DRIVER_NAME, touch); in synaptics_i2c_probe()
571 dev_warn(&touch->client->dev, in synaptics_i2c_probe()
575 synaptics_i2c_reg_set(touch->client, in synaptics_i2c_probe()
581 dev_dbg(&touch->client->dev, in synaptics_i2c_probe()
585 ret = input_register_device(touch->input); in synaptics_i2c_probe()
592 i2c_set_clientdata(client, touch); in synaptics_i2c_probe()
597 input_free_device(touch->input); in synaptics_i2c_probe()
599 kfree(touch); in synaptics_i2c_probe()
606 struct synaptics_i2c *touch = i2c_get_clientdata(client); in synaptics_i2c_remove() local
609 free_irq(client->irq, touch); in synaptics_i2c_remove()
611 input_unregister_device(touch->input); in synaptics_i2c_remove()
612 kfree(touch); in synaptics_i2c_remove()
620 struct synaptics_i2c *touch = i2c_get_clientdata(client); in synaptics_i2c_suspend() local
622 cancel_delayed_work_sync(&touch->dwork); in synaptics_i2c_suspend()
625 synaptics_i2c_reg_set(touch->client, DEV_CONTROL_REG, DEEP_SLEEP); in synaptics_i2c_suspend()
634 struct synaptics_i2c *touch = i2c_get_clientdata(client); in synaptics_i2c_resume() local
640 synaptics_i2c_reschedule_work(touch, in synaptics_i2c_resume()