Lines Matching refs:ad714x
127 static void ad714x_use_com_int(struct ad714x_chip *ad714x, in ad714x_use_com_int() argument
135 ad714x->read(ad714x, STG_COM_INT_EN_REG, &data, 1); in ad714x_use_com_int()
137 ad714x->write(ad714x, STG_COM_INT_EN_REG, data); in ad714x_use_com_int()
139 ad714x->read(ad714x, STG_HIGH_INT_EN_REG, &data, 1); in ad714x_use_com_int()
141 ad714x->write(ad714x, STG_HIGH_INT_EN_REG, data); in ad714x_use_com_int()
144 static void ad714x_use_thr_int(struct ad714x_chip *ad714x, in ad714x_use_thr_int() argument
152 ad714x->read(ad714x, STG_COM_INT_EN_REG, &data, 1); in ad714x_use_thr_int()
154 ad714x->write(ad714x, STG_COM_INT_EN_REG, data); in ad714x_use_thr_int()
156 ad714x->read(ad714x, STG_HIGH_INT_EN_REG, &data, 1); in ad714x_use_thr_int()
158 ad714x->write(ad714x, STG_HIGH_INT_EN_REG, data); in ad714x_use_thr_int()
161 static int ad714x_cal_highest_stage(struct ad714x_chip *ad714x, in ad714x_cal_highest_stage() argument
169 if (ad714x->sensor_val[i] > max_res) { in ad714x_cal_highest_stage()
170 max_res = ad714x->sensor_val[i]; in ad714x_cal_highest_stage()
178 static int ad714x_cal_abs_pos(struct ad714x_chip *ad714x, in ad714x_cal_abs_pos() argument
185 a_param = ad714x->sensor_val[start_stage + 1]; in ad714x_cal_abs_pos()
186 b_param = ad714x->sensor_val[start_stage] + in ad714x_cal_abs_pos()
187 ad714x->sensor_val[start_stage + 1]; in ad714x_cal_abs_pos()
189 a_param = ad714x->sensor_val[end_stage] * in ad714x_cal_abs_pos()
191 ad714x->sensor_val[end_stage - 1] * in ad714x_cal_abs_pos()
193 b_param = ad714x->sensor_val[end_stage] + in ad714x_cal_abs_pos()
194 ad714x->sensor_val[end_stage - 1]; in ad714x_cal_abs_pos()
196 a_param = ad714x->sensor_val[highest_stage] * in ad714x_cal_abs_pos()
198 ad714x->sensor_val[highest_stage - 1] * in ad714x_cal_abs_pos()
200 ad714x->sensor_val[highest_stage + 1] * in ad714x_cal_abs_pos()
202 b_param = ad714x->sensor_val[highest_stage] + in ad714x_cal_abs_pos()
203 ad714x->sensor_val[highest_stage - 1] + in ad714x_cal_abs_pos()
204 ad714x->sensor_val[highest_stage + 1]; in ad714x_cal_abs_pos()
214 static void ad714x_button_state_machine(struct ad714x_chip *ad714x, int idx) in ad714x_button_state_machine() argument
216 struct ad714x_button_plat *hw = &ad714x->hw->button[idx]; in ad714x_button_state_machine()
217 struct ad714x_button_drv *sw = &ad714x->sw->button[idx]; in ad714x_button_state_machine()
221 if (((ad714x->h_state & hw->h_mask) == hw->h_mask) && in ad714x_button_state_machine()
222 ((ad714x->l_state & hw->l_mask) == hw->l_mask)) { in ad714x_button_state_machine()
223 dev_dbg(ad714x->dev, "button %d touched\n", idx); in ad714x_button_state_machine()
231 if (((ad714x->h_state & hw->h_mask) != hw->h_mask) || in ad714x_button_state_machine()
232 ((ad714x->l_state & hw->l_mask) != hw->l_mask)) { in ad714x_button_state_machine()
233 dev_dbg(ad714x->dev, "button %d released\n", idx); in ad714x_button_state_machine()
249 static void ad714x_slider_cal_sensor_val(struct ad714x_chip *ad714x, int idx) in ad714x_slider_cal_sensor_val() argument
251 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_cal_sensor_val()
254 ad714x->read(ad714x, CDC_RESULT_S0 + hw->start_stage, in ad714x_slider_cal_sensor_val()
255 &ad714x->adc_reg[hw->start_stage], in ad714x_slider_cal_sensor_val()
259 ad714x->read(ad714x, STAGE0_AMBIENT + i * PER_STAGE_REG_NUM, in ad714x_slider_cal_sensor_val()
260 &ad714x->amb_reg[i], 1); in ad714x_slider_cal_sensor_val()
262 ad714x->sensor_val[i] = in ad714x_slider_cal_sensor_val()
263 abs(ad714x->adc_reg[i] - ad714x->amb_reg[i]); in ad714x_slider_cal_sensor_val()
267 static void ad714x_slider_cal_highest_stage(struct ad714x_chip *ad714x, int idx) in ad714x_slider_cal_highest_stage() argument
269 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_cal_highest_stage()
270 struct ad714x_slider_drv *sw = &ad714x->sw->slider[idx]; in ad714x_slider_cal_highest_stage()
272 sw->highest_stage = ad714x_cal_highest_stage(ad714x, hw->start_stage, in ad714x_slider_cal_highest_stage()
275 dev_dbg(ad714x->dev, "slider %d highest_stage:%d\n", idx, in ad714x_slider_cal_highest_stage()
292 static void ad714x_slider_cal_abs_pos(struct ad714x_chip *ad714x, int idx) in ad714x_slider_cal_abs_pos() argument
294 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_cal_abs_pos()
295 struct ad714x_slider_drv *sw = &ad714x->sw->slider[idx]; in ad714x_slider_cal_abs_pos()
297 sw->abs_pos = ad714x_cal_abs_pos(ad714x, hw->start_stage, hw->end_stage, in ad714x_slider_cal_abs_pos()
300 dev_dbg(ad714x->dev, "slider %d absolute position:%d\n", idx, in ad714x_slider_cal_abs_pos()
314 static void ad714x_slider_cal_flt_pos(struct ad714x_chip *ad714x, int idx) in ad714x_slider_cal_flt_pos() argument
316 struct ad714x_slider_drv *sw = &ad714x->sw->slider[idx]; in ad714x_slider_cal_flt_pos()
321 dev_dbg(ad714x->dev, "slider %d filter position:%d\n", idx, in ad714x_slider_cal_flt_pos()
325 static void ad714x_slider_use_com_int(struct ad714x_chip *ad714x, int idx) in ad714x_slider_use_com_int() argument
327 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_use_com_int()
329 ad714x_use_com_int(ad714x, hw->start_stage, hw->end_stage); in ad714x_slider_use_com_int()
332 static void ad714x_slider_use_thr_int(struct ad714x_chip *ad714x, int idx) in ad714x_slider_use_thr_int() argument
334 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_use_thr_int()
336 ad714x_use_thr_int(ad714x, hw->start_stage, hw->end_stage); in ad714x_slider_use_thr_int()
339 static void ad714x_slider_state_machine(struct ad714x_chip *ad714x, int idx) in ad714x_slider_state_machine() argument
341 struct ad714x_slider_plat *hw = &ad714x->hw->slider[idx]; in ad714x_slider_state_machine()
342 struct ad714x_slider_drv *sw = &ad714x->sw->slider[idx]; in ad714x_slider_state_machine()
348 h_state = ad714x->h_state & mask; in ad714x_slider_state_machine()
349 c_state = ad714x->c_state & mask; in ad714x_slider_state_machine()
358 ad714x_slider_use_com_int(ad714x, idx); in ad714x_slider_state_machine()
359 dev_dbg(ad714x->dev, "slider %d touched\n", idx); in ad714x_slider_state_machine()
365 ad714x_slider_cal_sensor_val(ad714x, idx); in ad714x_slider_state_machine()
366 ad714x_slider_cal_highest_stage(ad714x, idx); in ad714x_slider_state_machine()
367 ad714x_slider_cal_abs_pos(ad714x, idx); in ad714x_slider_state_machine()
376 ad714x_slider_cal_sensor_val(ad714x, idx); in ad714x_slider_state_machine()
377 ad714x_slider_cal_highest_stage(ad714x, idx); in ad714x_slider_state_machine()
378 ad714x_slider_cal_abs_pos(ad714x, idx); in ad714x_slider_state_machine()
379 ad714x_slider_cal_flt_pos(ad714x, idx); in ad714x_slider_state_machine()
386 ad714x_slider_use_thr_int(ad714x, idx); in ad714x_slider_state_machine()
389 dev_dbg(ad714x->dev, "slider %d released\n", in ad714x_slider_state_machine()
408 static void ad714x_wheel_cal_highest_stage(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_cal_highest_stage() argument
410 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_cal_highest_stage()
411 struct ad714x_wheel_drv *sw = &ad714x->sw->wheel[idx]; in ad714x_wheel_cal_highest_stage()
414 sw->highest_stage = ad714x_cal_highest_stage(ad714x, hw->start_stage, in ad714x_wheel_cal_highest_stage()
417 dev_dbg(ad714x->dev, "wheel %d highest_stage:%d\n", idx, in ad714x_wheel_cal_highest_stage()
421 static void ad714x_wheel_cal_sensor_val(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_cal_sensor_val() argument
423 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_cal_sensor_val()
426 ad714x->read(ad714x, CDC_RESULT_S0 + hw->start_stage, in ad714x_wheel_cal_sensor_val()
427 &ad714x->adc_reg[hw->start_stage], in ad714x_wheel_cal_sensor_val()
431 ad714x->read(ad714x, STAGE0_AMBIENT + i * PER_STAGE_REG_NUM, in ad714x_wheel_cal_sensor_val()
432 &ad714x->amb_reg[i], 1); in ad714x_wheel_cal_sensor_val()
433 if (ad714x->adc_reg[i] > ad714x->amb_reg[i]) in ad714x_wheel_cal_sensor_val()
434 ad714x->sensor_val[i] = in ad714x_wheel_cal_sensor_val()
435 ad714x->adc_reg[i] - ad714x->amb_reg[i]; in ad714x_wheel_cal_sensor_val()
437 ad714x->sensor_val[i] = 0; in ad714x_wheel_cal_sensor_val()
450 static void ad714x_wheel_cal_abs_pos(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_cal_abs_pos() argument
452 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_cal_abs_pos()
453 struct ad714x_wheel_drv *sw = &ad714x->sw->wheel[idx]; in ad714x_wheel_cal_abs_pos()
462 a_param = ad714x->sensor_val[highest] * in ad714x_wheel_cal_abs_pos()
464 ad714x->sensor_val[first_before] * in ad714x_wheel_cal_abs_pos()
466 ad714x->sensor_val[first_after] * in ad714x_wheel_cal_abs_pos()
468 b_param = ad714x->sensor_val[highest] + in ad714x_wheel_cal_abs_pos()
469 ad714x->sensor_val[first_before] + in ad714x_wheel_cal_abs_pos()
470 ad714x->sensor_val[first_after]; in ad714x_wheel_cal_abs_pos()
481 static void ad714x_wheel_cal_flt_pos(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_cal_flt_pos() argument
483 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_cal_flt_pos()
484 struct ad714x_wheel_drv *sw = &ad714x->sw->wheel[idx]; in ad714x_wheel_cal_flt_pos()
497 static void ad714x_wheel_use_com_int(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_use_com_int() argument
499 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_use_com_int()
501 ad714x_use_com_int(ad714x, hw->start_stage, hw->end_stage); in ad714x_wheel_use_com_int()
504 static void ad714x_wheel_use_thr_int(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_use_thr_int() argument
506 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_use_thr_int()
508 ad714x_use_thr_int(ad714x, hw->start_stage, hw->end_stage); in ad714x_wheel_use_thr_int()
511 static void ad714x_wheel_state_machine(struct ad714x_chip *ad714x, int idx) in ad714x_wheel_state_machine() argument
513 struct ad714x_wheel_plat *hw = &ad714x->hw->wheel[idx]; in ad714x_wheel_state_machine()
514 struct ad714x_wheel_drv *sw = &ad714x->sw->wheel[idx]; in ad714x_wheel_state_machine()
520 h_state = ad714x->h_state & mask; in ad714x_wheel_state_machine()
521 c_state = ad714x->c_state & mask; in ad714x_wheel_state_machine()
530 ad714x_wheel_use_com_int(ad714x, idx); in ad714x_wheel_state_machine()
531 dev_dbg(ad714x->dev, "wheel %d touched\n", idx); in ad714x_wheel_state_machine()
537 ad714x_wheel_cal_sensor_val(ad714x, idx); in ad714x_wheel_state_machine()
538 ad714x_wheel_cal_highest_stage(ad714x, idx); in ad714x_wheel_state_machine()
539 ad714x_wheel_cal_abs_pos(ad714x, idx); in ad714x_wheel_state_machine()
548 ad714x_wheel_cal_sensor_val(ad714x, idx); in ad714x_wheel_state_machine()
549 ad714x_wheel_cal_highest_stage(ad714x, idx); in ad714x_wheel_state_machine()
550 ad714x_wheel_cal_abs_pos(ad714x, idx); in ad714x_wheel_state_machine()
551 ad714x_wheel_cal_flt_pos(ad714x, idx); in ad714x_wheel_state_machine()
559 ad714x_wheel_use_thr_int(ad714x, idx); in ad714x_wheel_state_machine()
563 dev_dbg(ad714x->dev, "wheel %d released\n", in ad714x_wheel_state_machine()
575 static void touchpad_cal_sensor_val(struct ad714x_chip *ad714x, int idx) in touchpad_cal_sensor_val() argument
577 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_cal_sensor_val()
580 ad714x->read(ad714x, CDC_RESULT_S0 + hw->x_start_stage, in touchpad_cal_sensor_val()
581 &ad714x->adc_reg[hw->x_start_stage], in touchpad_cal_sensor_val()
585 ad714x->read(ad714x, STAGE0_AMBIENT + i * PER_STAGE_REG_NUM, in touchpad_cal_sensor_val()
586 &ad714x->amb_reg[i], 1); in touchpad_cal_sensor_val()
587 if (ad714x->adc_reg[i] > ad714x->amb_reg[i]) in touchpad_cal_sensor_val()
588 ad714x->sensor_val[i] = in touchpad_cal_sensor_val()
589 ad714x->adc_reg[i] - ad714x->amb_reg[i]; in touchpad_cal_sensor_val()
591 ad714x->sensor_val[i] = 0; in touchpad_cal_sensor_val()
595 static void touchpad_cal_highest_stage(struct ad714x_chip *ad714x, int idx) in touchpad_cal_highest_stage() argument
597 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_cal_highest_stage()
598 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in touchpad_cal_highest_stage()
600 sw->x_highest_stage = ad714x_cal_highest_stage(ad714x, in touchpad_cal_highest_stage()
602 sw->y_highest_stage = ad714x_cal_highest_stage(ad714x, in touchpad_cal_highest_stage()
605 dev_dbg(ad714x->dev, in touchpad_cal_highest_stage()
616 static int touchpad_check_second_peak(struct ad714x_chip *ad714x, int idx) in touchpad_check_second_peak() argument
618 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_check_second_peak()
619 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in touchpad_check_second_peak()
623 if ((ad714x->sensor_val[i] - ad714x->sensor_val[i + 1]) in touchpad_check_second_peak()
624 > (ad714x->sensor_val[i + 1] / 10)) in touchpad_check_second_peak()
629 if ((ad714x->sensor_val[i + 1] - ad714x->sensor_val[i]) in touchpad_check_second_peak()
630 > (ad714x->sensor_val[i] / 10)) in touchpad_check_second_peak()
635 if ((ad714x->sensor_val[i] - ad714x->sensor_val[i + 1]) in touchpad_check_second_peak()
636 > (ad714x->sensor_val[i + 1] / 10)) in touchpad_check_second_peak()
641 if ((ad714x->sensor_val[i + 1] - ad714x->sensor_val[i]) in touchpad_check_second_peak()
642 > (ad714x->sensor_val[i] / 10)) in touchpad_check_second_peak()
655 static void touchpad_cal_abs_pos(struct ad714x_chip *ad714x, int idx) in touchpad_cal_abs_pos() argument
657 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_cal_abs_pos()
658 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in touchpad_cal_abs_pos()
660 sw->x_abs_pos = ad714x_cal_abs_pos(ad714x, hw->x_start_stage, in touchpad_cal_abs_pos()
662 sw->y_abs_pos = ad714x_cal_abs_pos(ad714x, hw->y_start_stage, in touchpad_cal_abs_pos()
665 dev_dbg(ad714x->dev, "touchpad %d absolute position:(%d, %d)\n", idx, in touchpad_cal_abs_pos()
669 static void touchpad_cal_flt_pos(struct ad714x_chip *ad714x, int idx) in touchpad_cal_flt_pos() argument
671 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in touchpad_cal_flt_pos()
678 dev_dbg(ad714x->dev, "touchpad %d filter position:(%d, %d)\n", in touchpad_cal_flt_pos()
700 static int touchpad_check_endpoint(struct ad714x_chip *ad714x, int idx) in touchpad_check_endpoint() argument
702 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_check_endpoint()
703 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in touchpad_check_endpoint()
707 percent_sensor_diff = (ad714x->sensor_val[hw->x_start_stage] - in touchpad_check_endpoint()
708 ad714x->sensor_val[hw->x_start_stage + 1]) * 100 / in touchpad_check_endpoint()
709 ad714x->sensor_val[hw->x_start_stage + 1]; in touchpad_check_endpoint()
714 ad714x->sensor_val[hw->x_start_stage + 1]; in touchpad_check_endpoint()
718 (ad714x->sensor_val[hw->x_start_stage + 1] > in touchpad_check_endpoint()
724 percent_sensor_diff = (ad714x->sensor_val[hw->x_end_stage] - in touchpad_check_endpoint()
725 ad714x->sensor_val[hw->x_end_stage - 1]) * 100 / in touchpad_check_endpoint()
726 ad714x->sensor_val[hw->x_end_stage - 1]; in touchpad_check_endpoint()
731 ad714x->sensor_val[hw->x_end_stage - 1]; in touchpad_check_endpoint()
735 (ad714x->sensor_val[hw->x_end_stage - 1] > in touchpad_check_endpoint()
741 percent_sensor_diff = (ad714x->sensor_val[hw->y_start_stage] - in touchpad_check_endpoint()
742 ad714x->sensor_val[hw->y_start_stage + 1]) * 100 / in touchpad_check_endpoint()
743 ad714x->sensor_val[hw->y_start_stage + 1]; in touchpad_check_endpoint()
748 ad714x->sensor_val[hw->y_start_stage + 1]; in touchpad_check_endpoint()
752 (ad714x->sensor_val[hw->y_start_stage + 1] > in touchpad_check_endpoint()
758 percent_sensor_diff = (ad714x->sensor_val[hw->y_end_stage] - in touchpad_check_endpoint()
759 ad714x->sensor_val[hw->y_end_stage - 1]) * 100 / in touchpad_check_endpoint()
760 ad714x->sensor_val[hw->y_end_stage - 1]; in touchpad_check_endpoint()
765 ad714x->sensor_val[hw->y_end_stage - 1]; in touchpad_check_endpoint()
769 (ad714x->sensor_val[hw->y_end_stage - 1] > in touchpad_check_endpoint()
777 static void touchpad_use_com_int(struct ad714x_chip *ad714x, int idx) in touchpad_use_com_int() argument
779 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_use_com_int()
781 ad714x_use_com_int(ad714x, hw->x_start_stage, hw->x_end_stage); in touchpad_use_com_int()
784 static void touchpad_use_thr_int(struct ad714x_chip *ad714x, int idx) in touchpad_use_thr_int() argument
786 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in touchpad_use_thr_int()
788 ad714x_use_thr_int(ad714x, hw->x_start_stage, hw->x_end_stage); in touchpad_use_thr_int()
789 ad714x_use_thr_int(ad714x, hw->y_start_stage, hw->y_end_stage); in touchpad_use_thr_int()
792 static void ad714x_touchpad_state_machine(struct ad714x_chip *ad714x, int idx) in ad714x_touchpad_state_machine() argument
794 struct ad714x_touchpad_plat *hw = &ad714x->hw->touchpad[idx]; in ad714x_touchpad_state_machine()
795 struct ad714x_touchpad_drv *sw = &ad714x->sw->touchpad[idx]; in ad714x_touchpad_state_machine()
804 h_state = ad714x->h_state & mask; in ad714x_touchpad_state_machine()
805 c_state = ad714x->c_state & mask; in ad714x_touchpad_state_machine()
814 touchpad_use_com_int(ad714x, idx); in ad714x_touchpad_state_machine()
815 dev_dbg(ad714x->dev, "touchpad %d touched\n", idx); in ad714x_touchpad_state_machine()
821 touchpad_cal_sensor_val(ad714x, idx); in ad714x_touchpad_state_machine()
822 touchpad_cal_highest_stage(ad714x, idx); in ad714x_touchpad_state_machine()
823 if ((!touchpad_check_second_peak(ad714x, idx)) && in ad714x_touchpad_state_machine()
824 (!touchpad_check_endpoint(ad714x, idx))) { in ad714x_touchpad_state_machine()
825 dev_dbg(ad714x->dev, in ad714x_touchpad_state_machine()
828 touchpad_cal_abs_pos(ad714x, idx); in ad714x_touchpad_state_machine()
839 touchpad_cal_sensor_val(ad714x, idx); in ad714x_touchpad_state_machine()
840 touchpad_cal_highest_stage(ad714x, idx); in ad714x_touchpad_state_machine()
841 if ((!touchpad_check_second_peak(ad714x, idx)) in ad714x_touchpad_state_machine()
842 && (!touchpad_check_endpoint(ad714x, idx))) { in ad714x_touchpad_state_machine()
843 touchpad_cal_abs_pos(ad714x, idx); in ad714x_touchpad_state_machine()
844 touchpad_cal_flt_pos(ad714x, idx); in ad714x_touchpad_state_machine()
856 touchpad_use_thr_int(ad714x, idx); in ad714x_touchpad_state_machine()
859 dev_dbg(ad714x->dev, "touchpad %d released\n", in ad714x_touchpad_state_machine()
871 static int ad714x_hw_detect(struct ad714x_chip *ad714x) in ad714x_hw_detect() argument
875 ad714x->read(ad714x, AD714X_PARTID_REG, &data, 1); in ad714x_hw_detect()
878 ad714x->product = 0x7142; in ad714x_hw_detect()
879 ad714x->version = data & 0xF; in ad714x_hw_detect()
880 dev_info(ad714x->dev, "found AD7142 captouch, rev:%d\n", in ad714x_hw_detect()
881 ad714x->version); in ad714x_hw_detect()
885 ad714x->product = 0x7143; in ad714x_hw_detect()
886 ad714x->version = data & 0xF; in ad714x_hw_detect()
887 dev_info(ad714x->dev, "found AD7143 captouch, rev:%d\n", in ad714x_hw_detect()
888 ad714x->version); in ad714x_hw_detect()
892 ad714x->product = 0x7147; in ad714x_hw_detect()
893 ad714x->version = data & 0xF; in ad714x_hw_detect()
894 dev_info(ad714x->dev, "found AD7147(A) captouch, rev:%d\n", in ad714x_hw_detect()
895 ad714x->version); in ad714x_hw_detect()
899 ad714x->product = 0x7148; in ad714x_hw_detect()
900 ad714x->version = data & 0xF; in ad714x_hw_detect()
901 dev_info(ad714x->dev, "found AD7148 captouch, rev:%d\n", in ad714x_hw_detect()
902 ad714x->version); in ad714x_hw_detect()
906 dev_err(ad714x->dev, in ad714x_hw_detect()
913 static void ad714x_hw_init(struct ad714x_chip *ad714x) in ad714x_hw_init() argument
924 ad714x->write(ad714x, reg_base + j, in ad714x_hw_init()
925 ad714x->hw->stage_cfg_reg[i][j]); in ad714x_hw_init()
929 ad714x->write(ad714x, AD714X_SYSCFG_REG + i, in ad714x_hw_init()
930 ad714x->hw->sys_cfg_reg[i]); in ad714x_hw_init()
932 ad714x->read(ad714x, AD714X_SYSCFG_REG + i, &data, 1); in ad714x_hw_init()
934 ad714x->write(ad714x, AD714X_STG_CAL_EN_REG, 0xFFF); in ad714x_hw_init()
937 ad714x->read(ad714x, STG_LOW_INT_STA_REG, &ad714x->l_state, 3); in ad714x_hw_init()
942 struct ad714x_chip *ad714x = data; in ad714x_interrupt_thread() local
945 mutex_lock(&ad714x->mutex); in ad714x_interrupt_thread()
947 ad714x->read(ad714x, STG_LOW_INT_STA_REG, &ad714x->l_state, 3); in ad714x_interrupt_thread()
949 for (i = 0; i < ad714x->hw->button_num; i++) in ad714x_interrupt_thread()
950 ad714x_button_state_machine(ad714x, i); in ad714x_interrupt_thread()
951 for (i = 0; i < ad714x->hw->slider_num; i++) in ad714x_interrupt_thread()
952 ad714x_slider_state_machine(ad714x, i); in ad714x_interrupt_thread()
953 for (i = 0; i < ad714x->hw->wheel_num; i++) in ad714x_interrupt_thread()
954 ad714x_wheel_state_machine(ad714x, i); in ad714x_interrupt_thread()
955 for (i = 0; i < ad714x->hw->touchpad_num; i++) in ad714x_interrupt_thread()
956 ad714x_touchpad_state_machine(ad714x, i); in ad714x_interrupt_thread()
958 mutex_unlock(&ad714x->mutex); in ad714x_interrupt_thread()
971 struct ad714x_chip *ad714x; in ad714x_probe() local
993 ad714x = devm_kzalloc(dev, sizeof(*ad714x) + sizeof(*ad714x->sw) + in ad714x_probe()
999 if (!ad714x) { in ad714x_probe()
1003 ad714x->hw = plat_data; in ad714x_probe()
1005 drv_mem = ad714x + 1; in ad714x_probe()
1006 ad714x->sw = drv_mem; in ad714x_probe()
1007 drv_mem += sizeof(*ad714x->sw); in ad714x_probe()
1008 ad714x->sw->slider = sd_drv = drv_mem; in ad714x_probe()
1009 drv_mem += sizeof(*sd_drv) * ad714x->hw->slider_num; in ad714x_probe()
1010 ad714x->sw->wheel = wl_drv = drv_mem; in ad714x_probe()
1011 drv_mem += sizeof(*wl_drv) * ad714x->hw->wheel_num; in ad714x_probe()
1012 ad714x->sw->touchpad = tp_drv = drv_mem; in ad714x_probe()
1013 drv_mem += sizeof(*tp_drv) * ad714x->hw->touchpad_num; in ad714x_probe()
1014 ad714x->sw->button = bt_drv = drv_mem; in ad714x_probe()
1015 drv_mem += sizeof(*bt_drv) * ad714x->hw->button_num; in ad714x_probe()
1017 ad714x->read = read; in ad714x_probe()
1018 ad714x->write = write; in ad714x_probe()
1019 ad714x->irq = irq; in ad714x_probe()
1020 ad714x->dev = dev; in ad714x_probe()
1022 error = ad714x_hw_detect(ad714x); in ad714x_probe()
1028 ad714x_hw_init(ad714x); in ad714x_probe()
1029 mutex_init(&ad714x->mutex); in ad714x_probe()
1032 if (ad714x->hw->slider_num > 0) { in ad714x_probe()
1033 struct ad714x_slider_plat *sd_plat = ad714x->hw->slider; in ad714x_probe()
1035 for (i = 0; i < ad714x->hw->slider_num; i++) { in ad714x_probe()
1048 input->id.product = ad714x->product; in ad714x_probe()
1049 input->id.version = ad714x->version; in ad714x_probe()
1062 if (ad714x->hw->wheel_num > 0) { in ad714x_probe()
1063 struct ad714x_wheel_plat *wl_plat = ad714x->hw->wheel; in ad714x_probe()
1065 for (i = 0; i < ad714x->hw->wheel_num; i++) { in ad714x_probe()
1078 input->id.product = ad714x->product; in ad714x_probe()
1079 input->id.version = ad714x->version; in ad714x_probe()
1092 if (ad714x->hw->touchpad_num > 0) { in ad714x_probe()
1093 struct ad714x_touchpad_plat *tp_plat = ad714x->hw->touchpad; in ad714x_probe()
1095 for (i = 0; i < ad714x->hw->touchpad_num; i++) { in ad714x_probe()
1111 input->id.product = ad714x->product; in ad714x_probe()
1112 input->id.version = ad714x->version; in ad714x_probe()
1125 if (ad714x->hw->button_num > 0) { in ad714x_probe()
1126 struct ad714x_button_plat *bt_plat = ad714x->hw->button; in ad714x_probe()
1135 for (i = 0; i < ad714x->hw->button_num; i++) { in ad714x_probe()
1141 input->id.product = ad714x->product; in ad714x_probe()
1142 input->id.version = ad714x->version; in ad714x_probe()
1154 error = devm_request_threaded_irq(dev, ad714x->irq, NULL, in ad714x_probe()
1156 irqflags, "ad714x_captouch", ad714x); in ad714x_probe()
1158 dev_err(dev, "can't allocate irq %d\n", ad714x->irq); in ad714x_probe()
1162 return ad714x; in ad714x_probe()
1167 int ad714x_disable(struct ad714x_chip *ad714x) in ad714x_disable() argument
1171 dev_dbg(ad714x->dev, "%s enter\n", __func__); in ad714x_disable()
1173 mutex_lock(&ad714x->mutex); in ad714x_disable()
1175 data = ad714x->hw->sys_cfg_reg[AD714X_PWR_CTRL] | 0x3; in ad714x_disable()
1176 ad714x->write(ad714x, AD714X_PWR_CTRL, data); in ad714x_disable()
1178 mutex_unlock(&ad714x->mutex); in ad714x_disable()
1184 int ad714x_enable(struct ad714x_chip *ad714x) in ad714x_enable() argument
1186 dev_dbg(ad714x->dev, "%s enter\n", __func__); in ad714x_enable()
1188 mutex_lock(&ad714x->mutex); in ad714x_enable()
1192 ad714x->write(ad714x, AD714X_PWR_CTRL, in ad714x_enable()
1193 ad714x->hw->sys_cfg_reg[AD714X_PWR_CTRL]); in ad714x_enable()
1199 ad714x->read(ad714x, STG_LOW_INT_STA_REG, &ad714x->l_state, 3); in ad714x_enable()
1201 mutex_unlock(&ad714x->mutex); in ad714x_enable()