Lines Matching refs:iqs7222

1492 static u16 *iqs7222_setup(struct iqs7222_private *iqs7222,  in iqs7222_setup()  argument
1497 return iqs7222->cycle_setup[row]; in iqs7222_setup()
1500 return iqs7222->glbl_setup; in iqs7222_setup()
1503 return iqs7222->btn_setup[row]; in iqs7222_setup()
1506 return iqs7222->chan_setup[row]; in iqs7222_setup()
1509 return iqs7222->filt_setup; in iqs7222_setup()
1512 return iqs7222->sldr_setup[row]; in iqs7222_setup()
1515 return iqs7222->tpad_setup; in iqs7222_setup()
1518 return iqs7222->gpio_setup[row]; in iqs7222_setup()
1521 return iqs7222->sys_setup; in iqs7222_setup()
1528 static int iqs7222_irq_poll(struct iqs7222_private *iqs7222, u16 timeout_ms) in iqs7222_irq_poll() argument
1536 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio); in iqs7222_irq_poll()
1546 static int iqs7222_hard_reset(struct iqs7222_private *iqs7222) in iqs7222_hard_reset() argument
1548 struct i2c_client *client = iqs7222->client; in iqs7222_hard_reset()
1551 if (!iqs7222->reset_gpio) in iqs7222_hard_reset()
1554 gpiod_set_value_cansleep(iqs7222->reset_gpio, 1); in iqs7222_hard_reset()
1557 gpiod_set_value_cansleep(iqs7222->reset_gpio, 0); in iqs7222_hard_reset()
1559 error = iqs7222_irq_poll(iqs7222, IQS7222_RESET_TIMEOUT_MS); in iqs7222_hard_reset()
1566 static int iqs7222_force_comms(struct iqs7222_private *iqs7222) in iqs7222_force_comms() argument
1584 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio); in iqs7222_force_comms()
1590 ret = i2c_master_send(iqs7222->client, msg_buf, sizeof(msg_buf)); in iqs7222_force_comms()
1603 return iqs7222_irq_poll(iqs7222, IQS7222_COMMS_TIMEOUT_MS); in iqs7222_force_comms()
1606 static int iqs7222_read_burst(struct iqs7222_private *iqs7222, in iqs7222_read_burst() argument
1611 struct i2c_client *client = iqs7222->client; in iqs7222_read_burst()
1638 ret = iqs7222_force_comms(iqs7222); in iqs7222_read_burst()
1673 static int iqs7222_read_word(struct iqs7222_private *iqs7222, u16 reg, u16 *val) in iqs7222_read_word() argument
1678 error = iqs7222_read_burst(iqs7222, reg, &val_buf, 1); in iqs7222_read_word()
1687 static int iqs7222_write_burst(struct iqs7222_private *iqs7222, in iqs7222_write_burst() argument
1694 struct i2c_client *client = iqs7222->client; in iqs7222_write_burst()
1718 ret = iqs7222_force_comms(iqs7222); in iqs7222_write_burst()
1746 static int iqs7222_write_word(struct iqs7222_private *iqs7222, u16 reg, u16 val) in iqs7222_write_word() argument
1750 return iqs7222_write_burst(iqs7222, reg, &val_buf, 1); in iqs7222_write_word()
1753 static int iqs7222_ati_trigger(struct iqs7222_private *iqs7222) in iqs7222_ati_trigger() argument
1755 struct i2c_client *client = iqs7222->client; in iqs7222_ati_trigger()
1767 error = iqs7222_read_word(iqs7222, IQS7222_SYS_SETUP, &sys_setup); in iqs7222_ati_trigger()
1776 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP, in iqs7222_ati_trigger()
1785 error = iqs7222_irq_poll(iqs7222, in iqs7222_ati_trigger()
1790 error = iqs7222_read_word(iqs7222, IQS7222_SYS_STATUS, in iqs7222_ati_trigger()
1808 sys_setup |= test_bit(EV_ABS, iqs7222->keypad->evbit) in iqs7222_ati_trigger()
1813 return iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP, in iqs7222_ati_trigger()
1826 static int iqs7222_dev_init(struct iqs7222_private *iqs7222, int dir) in iqs7222_dev_init() argument
1828 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_dev_init()
1846 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP, in iqs7222_dev_init()
1847 iqs7222->sys_setup[0] | in iqs7222_dev_init()
1852 error = iqs7222_read_word(iqs7222, reg, &filt_setup); in iqs7222_dev_init()
1856 iqs7222->filt_setup[1] &= GENMASK(7, 0); in iqs7222_dev_init()
1857 iqs7222->filt_setup[1] |= (filt_setup & ~GENMASK(7, 0)); in iqs7222_dev_init()
1868 error = iqs7222_read_word(iqs7222, in iqs7222_dev_init()
1874 error = iqs7222_write_word(iqs7222, in iqs7222_dev_init()
1891 val = iqs7222_setup(iqs7222, i, 0); in iqs7222_dev_init()
1902 error = iqs7222_read_burst(iqs7222, reg, in iqs7222_dev_init()
1911 error = iqs7222_write_burst(iqs7222, reg, in iqs7222_dev_init()
1935 error = iqs7222_read_word(iqs7222, in iqs7222_dev_init()
1941 error = iqs7222_write_word(iqs7222, in iqs7222_dev_init()
1949 iqs7222->sys_setup[0] &= ~IQS7222_SYS_SETUP_INTF_MODE_MASK; in iqs7222_dev_init()
1950 iqs7222->sys_setup[0] &= ~IQS7222_SYS_SETUP_PWR_MODE_MASK; in iqs7222_dev_init()
1954 return iqs7222_ati_trigger(iqs7222); in iqs7222_dev_init()
1957 static int iqs7222_dev_info(struct iqs7222_private *iqs7222) in iqs7222_dev_info() argument
1959 struct i2c_client *client = iqs7222->client; in iqs7222_dev_info()
1964 error = iqs7222_read_burst(iqs7222, IQS7222_PROD_NUM, dev_id, in iqs7222_dev_info()
1981 iqs7222->dev_desc = &iqs7222_devs[i]; in iqs7222_dev_info()
1995 static int iqs7222_gpio_select(struct iqs7222_private *iqs7222, in iqs7222_gpio_select() argument
1999 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_gpio_select()
2000 struct i2c_client *client = iqs7222->client; in iqs7222_gpio_select()
2040 gpio_setup = iqs7222->gpio_setup[gpio_sel[i]]; in iqs7222_gpio_select()
2057 static int iqs7222_parse_props(struct iqs7222_private *iqs7222, in iqs7222_parse_props() argument
2063 u16 *setup = iqs7222_setup(iqs7222, reg_grp, reg_grp_index); in iqs7222_parse_props()
2064 struct i2c_client *client = iqs7222->client; in iqs7222_parse_props()
2138 static int iqs7222_parse_event(struct iqs7222_private *iqs7222, in iqs7222_parse_event() argument
2147 struct i2c_client *client = iqs7222->client; in iqs7222_parse_event()
2150 error = iqs7222_parse_props(iqs7222, event_node, reg_grp_index, in iqs7222_parse_event()
2155 error = iqs7222_gpio_select(iqs7222, event_node, event_enable, in iqs7222_parse_event()
2170 input_set_capability(iqs7222->keypad, EV_KEY, *event_code); in iqs7222_parse_event()
2188 input_set_capability(iqs7222->keypad, *event_type, *event_code); in iqs7222_parse_event()
2193 static int iqs7222_parse_cycle(struct iqs7222_private *iqs7222, in iqs7222_parse_cycle() argument
2196 u16 *cycle_setup = iqs7222->cycle_setup[cycle_index]; in iqs7222_parse_cycle()
2197 struct i2c_client *client = iqs7222->client; in iqs7222_parse_cycle()
2247 static int iqs7222_parse_chan(struct iqs7222_private *iqs7222, in iqs7222_parse_chan() argument
2250 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_chan()
2251 struct i2c_client *client = iqs7222->client; in iqs7222_parse_chan()
2255 u16 *chan_setup = iqs7222->chan_setup[chan_index]; in iqs7222_parse_chan()
2256 u16 *sys_setup = iqs7222->sys_setup; in iqs7222_parse_chan()
2289 ref_setup = iqs7222->chan_setup[val]; in iqs7222_parse_chan()
2404 &iqs7222->btn_setup[chan_index][2] : in iqs7222_parse_chan()
2425 error = iqs7222_parse_event(iqs7222, event_node, chan_index, in iqs7222_parse_chan()
2430 &iqs7222->kp_type[chan_index][i], in iqs7222_parse_chan()
2431 &iqs7222->kp_code[chan_index][i]); in iqs7222_parse_chan()
2446 return iqs7222_parse_props(iqs7222, chan_node, chan_index, in iqs7222_parse_chan()
2451 static int iqs7222_parse_sldr(struct iqs7222_private *iqs7222, in iqs7222_parse_sldr() argument
2454 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_sldr()
2455 struct i2c_client *client = iqs7222->client; in iqs7222_parse_sldr()
2459 u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset]; in iqs7222_parse_sldr()
2460 u16 *sldr_setup = iqs7222->sldr_setup[sldr_index]; in iqs7222_parse_sldr()
2582 input_set_abs_params(iqs7222->keypad, val, 0, sldr_max, 0, 0); in iqs7222_parse_sldr()
2583 iqs7222->sl_axis[sldr_index] = val; in iqs7222_parse_sldr()
2592 if (iqs7222->sl_axis[sldr_index] == ABS_WHEEL) in iqs7222_parse_sldr()
2634 error = iqs7222_parse_event(iqs7222, event_node, sldr_index, in iqs7222_parse_sldr()
2641 &iqs7222->sl_code[sldr_index][i]); in iqs7222_parse_sldr()
2669 return iqs7222_parse_props(iqs7222, sldr_node, sldr_index, in iqs7222_parse_sldr()
2676 static int iqs7222_parse_tpad(struct iqs7222_private *iqs7222, in iqs7222_parse_tpad() argument
2679 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_tpad()
2680 struct touchscreen_properties *prop = &iqs7222->prop; in iqs7222_parse_tpad()
2681 struct i2c_client *client = iqs7222->client; in iqs7222_parse_tpad()
2684 u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset]; in iqs7222_parse_tpad()
2685 u16 *tpad_setup = iqs7222->tpad_setup; in iqs7222_parse_tpad()
2688 error = iqs7222_parse_props(iqs7222, tpad_node, tpad_index, in iqs7222_parse_tpad()
2757 error = iqs7222_parse_event(iqs7222, event_node, tpad_index, in iqs7222_parse_tpad()
2762 &iqs7222->tp_code[i]); in iqs7222_parse_tpad()
2783 if (!iqs7222->tp_code[0]) in iqs7222_parse_tpad()
2786 input_set_abs_params(iqs7222->keypad, ABS_X, in iqs7222_parse_tpad()
2789 input_set_abs_params(iqs7222->keypad, ABS_Y, in iqs7222_parse_tpad()
2792 touchscreen_parse_properties(iqs7222->keypad, false, prop); in iqs7222_parse_tpad()
2807 (struct iqs7222_private *iqs7222,
2816 static int iqs7222_parse_reg_grp(struct iqs7222_private *iqs7222, in iqs7222_parse_reg_grp() argument
2820 struct i2c_client *client = iqs7222->client; in iqs7222_parse_reg_grp()
2839 error = iqs7222_parse_props(iqs7222, reg_grp_node, reg_grp_index, in iqs7222_parse_reg_grp()
2843 error = iqs7222_parse_extra[reg_grp](iqs7222, reg_grp_node, in iqs7222_parse_reg_grp()
2851 static int iqs7222_parse_all(struct iqs7222_private *iqs7222) in iqs7222_parse_all() argument
2853 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_all()
2855 u16 *sys_setup = iqs7222->sys_setup; in iqs7222_parse_all()
2865 u16 *gpio_setup = iqs7222->gpio_setup[i]; in iqs7222_parse_all()
2885 u16 *chan_setup = iqs7222->chan_setup[i]; in iqs7222_parse_all()
2894 u16 *sldr_setup = iqs7222->sldr_setup[i]; in iqs7222_parse_all()
2901 error = iqs7222_parse_reg_grp(iqs7222, i, j); in iqs7222_parse_all()
2910 static int iqs7222_report(struct iqs7222_private *iqs7222) in iqs7222_report() argument
2912 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_report()
2913 struct i2c_client *client = iqs7222->client; in iqs7222_report()
2919 error = iqs7222_read_burst(iqs7222, IQS7222_SYS_STATUS, status, in iqs7222_report()
2926 return iqs7222_dev_init(iqs7222, WRITE); in iqs7222_report()
2931 return iqs7222_ati_trigger(iqs7222); in iqs7222_report()
2938 u16 *chan_setup = iqs7222->chan_setup[i]; in iqs7222_report()
2954 if (!iqs7222->kp_type[i][j]) in iqs7222_report()
2957 input_event(iqs7222->keypad, in iqs7222_report()
2958 iqs7222->kp_type[i][j], in iqs7222_report()
2959 iqs7222->kp_code[i][j], in iqs7222_report()
2965 u16 *sldr_setup = iqs7222->sldr_setup[i]; in iqs7222_report()
2973 input_report_abs(iqs7222->keypad, iqs7222->sl_axis[i], in iqs7222_report()
2976 input_report_key(iqs7222->keypad, iqs7222->sl_code[i][0], in iqs7222_report()
2997 input_report_key(iqs7222->keypad, in iqs7222_report()
2998 iqs7222->sl_code[i][j], in iqs7222_report()
3002 input_sync(iqs7222->keypad); in iqs7222_report()
3005 input_report_key(iqs7222->keypad, in iqs7222_report()
3006 iqs7222->sl_code[i][j], 0); in iqs7222_report()
3014 input_report_key(iqs7222->keypad, iqs7222->tp_code[0], in iqs7222_report()
3018 touchscreen_report_pos(iqs7222->keypad, &iqs7222->prop, in iqs7222_report()
3032 input_report_key(iqs7222->keypad, in iqs7222_report()
3033 iqs7222->tp_code[j], in iqs7222_report()
3037 input_sync(iqs7222->keypad); in iqs7222_report()
3040 input_report_key(iqs7222->keypad, in iqs7222_report()
3041 iqs7222->tp_code[j], 0); in iqs7222_report()
3044 input_sync(iqs7222->keypad); in iqs7222_report()
3051 struct iqs7222_private *iqs7222 = context; in iqs7222_irq() local
3053 return iqs7222_report(iqs7222) ? IRQ_NONE : IRQ_HANDLED; in iqs7222_irq()
3058 struct iqs7222_private *iqs7222; in iqs7222_probe() local
3062 iqs7222 = devm_kzalloc(&client->dev, sizeof(*iqs7222), GFP_KERNEL); in iqs7222_probe()
3063 if (!iqs7222) in iqs7222_probe()
3066 i2c_set_clientdata(client, iqs7222); in iqs7222_probe()
3067 iqs7222->client = client; in iqs7222_probe()
3069 iqs7222->keypad = devm_input_allocate_device(&client->dev); in iqs7222_probe()
3070 if (!iqs7222->keypad) in iqs7222_probe()
3073 iqs7222->keypad->name = client->name; in iqs7222_probe()
3074 iqs7222->keypad->id.bustype = BUS_I2C; in iqs7222_probe()
3081 iqs7222->irq_gpio = devm_gpiod_get(&client->dev, "irq", GPIOD_IN); in iqs7222_probe()
3082 if (IS_ERR(iqs7222->irq_gpio)) { in iqs7222_probe()
3083 error = PTR_ERR(iqs7222->irq_gpio); in iqs7222_probe()
3089 iqs7222->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in iqs7222_probe()
3091 if (IS_ERR(iqs7222->reset_gpio)) { in iqs7222_probe()
3092 error = PTR_ERR(iqs7222->reset_gpio); in iqs7222_probe()
3098 error = iqs7222_hard_reset(iqs7222); in iqs7222_probe()
3102 error = iqs7222_dev_info(iqs7222); in iqs7222_probe()
3106 error = iqs7222_dev_init(iqs7222, READ); in iqs7222_probe()
3110 error = iqs7222_parse_all(iqs7222); in iqs7222_probe()
3114 error = iqs7222_dev_init(iqs7222, WRITE); in iqs7222_probe()
3118 error = iqs7222_report(iqs7222); in iqs7222_probe()
3122 error = input_register_device(iqs7222->keypad); in iqs7222_probe()
3128 irq = gpiod_to_irq(iqs7222->irq_gpio); in iqs7222_probe()
3132 irq_flags = gpiod_is_active_low(iqs7222->irq_gpio) ? IRQF_TRIGGER_LOW in iqs7222_probe()
3137 irq_flags, client->name, iqs7222); in iqs7222_probe()