Lines Matching +full:reference +full:- +full:div +full:- +full:factor

1 // SPDX-License-Identifier: GPL-2.0-or-later
116 [IQS7222_REG_GRP_CYCLE] = "cycle-%d",
117 [IQS7222_REG_GRP_CHAN] = "channel-%d",
118 [IQS7222_REG_GRP_SLDR] = "slider-%d",
120 [IQS7222_REG_GRP_GPIO] = "gpio-%d",
150 .name = "event-prox",
155 .name = "event-touch",
162 { .name = "event-press", },
164 .name = "event-tap",
171 .name = "event-swipe-pos",
178 .name = "event-swipe-neg",
185 .name = "event-flick-pos",
192 .name = "event-flick-neg",
202 .name = "event-press",
206 .name = "event-tap",
214 .name = "event-swipe-x-pos",
223 .name = "event-swipe-y-pos",
232 .name = "event-swipe-x-neg",
241 .name = "event-swipe-y-neg",
250 .name = "event-flick-x-pos",
259 .name = "event-flick-y-pos",
268 .name = "event-flick-x-neg",
277 .name = "event-flick-y-neg",
822 .name = "azoteq,conv-period",
830 .name = "azoteq,conv-frac",
838 .name = "azoteq,rx-float-inactive",
846 .name = "azoteq,dead-time-enable",
853 .name = "azoteq,tx-freq-fosc",
860 .name = "azoteq,vbias-enable",
867 .name = "azoteq,sense-mode",
876 .name = "azoteq,iref-enable",
883 .name = "azoteq,iref-level",
888 .label = "current reference level",
891 .name = "azoteq,iref-trim",
896 .label = "current reference trim",
899 .name = "azoteq,max-counts",
907 .name = "azoteq,auto-mode",
915 .name = "azoteq,ati-frac-div-fine",
923 .name = "azoteq,ati-frac-div-coarse",
931 .name = "azoteq,ati-comp-select",
939 .name = "azoteq,ati-band",
947 .name = "azoteq,global-halt",
954 .name = "azoteq,invert-enable",
961 .name = "azoteq,dual-direction",
968 .name = "azoteq,samp-cap-double",
975 .name = "azoteq,vref-half",
982 .name = "azoteq,proj-bias",
990 .name = "azoteq,ati-target",
999 .name = "azoteq,ati-base",
1008 .name = "azoteq,ati-mode",
1017 .name = "azoteq,ati-frac-div-fine",
1025 .name = "azoteq,ati-frac-mult-coarse",
1033 .name = "azoteq,ati-frac-div-coarse",
1041 .name = "azoteq,ati-comp-div",
1049 .name = "azoteq,ati-comp-select",
1057 .name = "azoteq,debounce-exit",
1063 .label = "debounce exit factor",
1066 .name = "azoteq,debounce-enter",
1072 .label = "debounce entrance factor",
1103 .name = "azoteq,lta-beta-lp",
1108 .label = "low-power mode long-term average beta",
1111 .name = "azoteq,lta-beta-np",
1116 .label = "normal-power mode long-term average beta",
1119 .name = "azoteq,counts-beta-lp",
1124 .label = "low-power mode counts beta",
1127 .name = "azoteq,counts-beta-np",
1132 .label = "normal-power mode counts beta",
1135 .name = "azoteq,lta-fast-beta-lp",
1140 .label = "low-power mode long-term average fast beta",
1143 .name = "azoteq,lta-fast-beta-np",
1148 .label = "normal-power mode long-term average fast beta",
1151 .name = "azoteq,lower-cal",
1159 .name = "azoteq,static-beta",
1167 .name = "azoteq,bottom-beta",
1176 .name = "azoteq,static-beta",
1184 .name = "azoteq,bottom-beta",
1193 .name = "azoteq,bottom-speed",
1201 .name = "azoteq,upper-cal",
1209 .name = "azoteq,gesture-max-ms",
1219 .name = "azoteq,gesture-max-ms",
1229 .name = "azoteq,gesture-min-ms",
1239 .name = "azoteq,gesture-min-ms",
1249 .name = "azoteq,gesture-dist",
1259 .name = "azoteq,gesture-dist",
1269 .name = "azoteq,gesture-max-ms",
1279 .name = "azoteq,gesture-max-ms",
1289 .name = "azoteq,num-rows",
1299 .name = "azoteq,num-cols",
1309 .name = "azoteq,lower-cal-y",
1317 .name = "azoteq,lower-cal-x",
1325 .name = "azoteq,upper-cal-y",
1333 .name = "azoteq,upper-cal-x",
1341 .name = "azoteq,top-speed",
1350 .name = "azoteq,bottom-speed",
1358 .name = "azoteq,gesture-min-ms",
1368 .name = "azoteq,gesture-max-ms",
1378 .name = "azoteq,gesture-max-ms",
1388 .name = "azoteq,gesture-dist",
1397 .name = "azoteq,gesture-dist",
1406 .name = "drive-open-drain",
1413 .name = "azoteq,timeout-ati-ms",
1422 .name = "azoteq,rate-ati-ms",
1430 .name = "azoteq,timeout-np-ms",
1435 .label = "normal-power mode timeout",
1438 .name = "azoteq,rate-np-ms",
1444 .label = "normal-power mode report rate",
1447 .name = "azoteq,timeout-lp-ms",
1452 .label = "low-power mode timeout",
1455 .name = "azoteq,rate-lp-ms",
1461 .label = "low-power mode report rate",
1464 .name = "azoteq,timeout-ulp-ms",
1469 .label = "ultra-low-power mode timeout",
1472 .name = "azoteq,rate-ulp-ms",
1478 .label = "ultra-low-power mode report rate",
1510 return iqs7222->cycle_setup[row]; in iqs7222_setup()
1513 return iqs7222->glbl_setup; in iqs7222_setup()
1516 return iqs7222->btn_setup[row]; in iqs7222_setup()
1519 return iqs7222->chan_setup[row]; in iqs7222_setup()
1522 return iqs7222->filt_setup; in iqs7222_setup()
1525 return iqs7222->sldr_setup[row]; in iqs7222_setup()
1528 return iqs7222->tpad_setup; in iqs7222_setup()
1531 return iqs7222->gpio_setup[row]; in iqs7222_setup()
1534 return iqs7222->sys_setup; in iqs7222_setup()
1549 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio); in iqs7222_irq_poll()
1556 return -EBUSY; in iqs7222_irq_poll()
1561 struct i2c_client *client = iqs7222->client; in iqs7222_hard_reset()
1564 if (!iqs7222->reset_gpio) in iqs7222_hard_reset()
1567 gpiod_set_value_cansleep(iqs7222->reset_gpio, 1); in iqs7222_hard_reset()
1570 gpiod_set_value_cansleep(iqs7222->reset_gpio, 0); in iqs7222_hard_reset()
1574 dev_err(&client->dev, "Failed to reset device: %d\n", error); in iqs7222_hard_reset()
1586 * pin. Attempts to do so while RDY is deasserted return an ACK; how- in iqs7222_force_comms()
1589 * Unsolicited communication must be preceded by a special force com- in iqs7222_force_comms()
1597 ret = gpiod_get_value_cansleep(iqs7222->irq_gpio); in iqs7222_force_comms()
1603 ret = i2c_master_send(iqs7222->client, msg_buf, sizeof(msg_buf)); in iqs7222_force_comms()
1606 ret = -EIO; in iqs7222_force_comms()
1624 struct i2c_client *client = iqs7222->client; in iqs7222_read_burst()
1627 .addr = client->addr, in iqs7222_read_burst()
1633 .addr = client->addr, in iqs7222_read_burst()
1655 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); in iqs7222_read_burst()
1658 ret = -EIO; in iqs7222_read_burst()
1665 ret = -ENODATA; in iqs7222_read_burst()
1680 dev_err(&client->dev, in iqs7222_read_burst()
1706 struct i2c_client *client = iqs7222->client; in iqs7222_write_burst()
1711 return -ENOMEM; in iqs7222_write_burst()
1737 ret = -EIO; in iqs7222_write_burst()
1752 dev_err(&client->dev, in iqs7222_write_burst()
1767 struct i2c_client *client = iqs7222->client; in iqs7222_ati_trigger()
1785 * Trigger ATI from streaming and normal-power modes so that in iqs7222_ati_trigger()
1817 * Use stream-in-touch mode if either slider reports in iqs7222_ati_trigger()
1820 sys_setup |= test_bit(EV_ABS, iqs7222->keypad->evbit) in iqs7222_ati_trigger()
1829 dev_err(&client->dev, in iqs7222_ati_trigger()
1835 return -ETIMEDOUT; in iqs7222_ati_trigger()
1840 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_dev_init()
1841 int comms_offset = dev_desc->comms_offset; in iqs7222_dev_init()
1850 iqs7222->sys_setup[0] | in iqs7222_dev_init()
1857 * Take advantage of the stop-bit disable function, if available, to in iqs7222_dev_init()
1878 int num_row = dev_desc->reg_grps[i].num_row; in iqs7222_dev_init()
1879 int num_col = dev_desc->reg_grps[i].num_col; in iqs7222_dev_init()
1880 u16 reg = dev_desc->reg_grps[i].base; in iqs7222_dev_init()
1882 u16 val_len = dev_desc->reg_grps[i].val_len ? : num_col * sizeof(*val_buf); in iqs7222_dev_init()
1894 return -ENOMEM; in iqs7222_dev_init()
1913 error = -EINVAL; in iqs7222_dev_init()
1946 iqs7222->sys_setup[0] &= ~IQS7222_SYS_SETUP_INTF_MODE_MASK; in iqs7222_dev_init()
1947 iqs7222->sys_setup[0] &= ~IQS7222_SYS_SETUP_PWR_MODE_MASK; in iqs7222_dev_init()
1956 struct i2c_client *client = iqs7222->client; in iqs7222_dev_info()
1978 iqs7222->dev_desc = &iqs7222_devs[i]; in iqs7222_dev_info()
1983 dev_err(&client->dev, "Unsupported firmware revision: %u.%u\n", in iqs7222_dev_info()
1986 dev_err(&client->dev, "Unrecognized product number: %u\n", in iqs7222_dev_info()
1989 return -EINVAL; in iqs7222_dev_info()
1996 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_gpio_select()
1997 struct i2c_client *client = iqs7222->client; in iqs7222_gpio_select()
1998 int num_gpio = dev_desc->reg_grps[IQS7222_REG_GRP_GPIO].num_row; in iqs7222_gpio_select()
2005 if (!fwnode_property_present(child_node, "azoteq,gpio-select")) in iqs7222_gpio_select()
2008 count = fwnode_property_count_u32(child_node, "azoteq,gpio-select"); in iqs7222_gpio_select()
2010 dev_err(&client->dev, "Invalid number of %s GPIOs\n", in iqs7222_gpio_select()
2012 return -EINVAL; in iqs7222_gpio_select()
2014 dev_err(&client->dev, "Failed to count %s GPIOs: %d\n", in iqs7222_gpio_select()
2020 "azoteq,gpio-select", in iqs7222_gpio_select()
2023 dev_err(&client->dev, "Failed to read %s GPIOs: %d\n", in iqs7222_gpio_select()
2032 dev_err(&client->dev, "Invalid %s GPIO: %u\n", in iqs7222_gpio_select()
2034 return -EINVAL; in iqs7222_gpio_select()
2037 gpio_setup = iqs7222->gpio_setup[gpio_sel[i]]; in iqs7222_gpio_select()
2040 dev_err(&client->dev, in iqs7222_gpio_select()
2043 return -EINVAL; in iqs7222_gpio_select()
2061 struct i2c_client *client = iqs7222->client; in iqs7222_parse_props()
2113 dev_err(&client->dev, "Failed to read %s %s: %d\n", in iqs7222_parse_props()
2119 val_max = GENMASK(reg_width - 1, 0) * val_pitch; in iqs7222_parse_props()
2122 dev_err(&client->dev, "Invalid %s %s: %u\n", in iqs7222_parse_props()
2124 return -EINVAL; in iqs7222_parse_props()
2127 setup[reg_offset] &= ~GENMASK(reg_shift + reg_width - 1, in iqs7222_parse_props()
2144 struct i2c_client *client = iqs7222->client; in iqs7222_parse_event()
2158 if (error == -EINVAL) { in iqs7222_parse_event()
2161 dev_err(&client->dev, "Failed to read %s code: %d\n", in iqs7222_parse_event()
2167 input_set_capability(iqs7222->keypad, EV_KEY, *event_code); in iqs7222_parse_event()
2171 error = fwnode_property_read_u32(event_node, "linux,input-type", in iqs7222_parse_event()
2173 if (error == -EINVAL) { in iqs7222_parse_event()
2176 dev_err(&client->dev, "Failed to read %s input type: %d\n", in iqs7222_parse_event()
2180 dev_err(&client->dev, "Invalid %s input type: %d\n", in iqs7222_parse_event()
2182 return -EINVAL; in iqs7222_parse_event()
2185 input_set_capability(iqs7222->keypad, *event_type, *event_code); in iqs7222_parse_event()
2193 u16 *cycle_setup = iqs7222->cycle_setup[cycle_index]; in iqs7222_parse_cycle()
2194 struct i2c_client *client = iqs7222->client; in iqs7222_parse_cycle()
2205 * CTx pins (CTx0-8). in iqs7222_parse_cycle()
2207 if (!fwnode_property_present(cycle_node, "azoteq,tx-enable")) in iqs7222_parse_cycle()
2210 count = fwnode_property_count_u32(cycle_node, "azoteq,tx-enable"); in iqs7222_parse_cycle()
2212 dev_err(&client->dev, "Failed to count %s CTx pins: %d\n", in iqs7222_parse_cycle()
2216 dev_err(&client->dev, "Invalid number of %s CTx pins\n", in iqs7222_parse_cycle()
2218 return -EINVAL; in iqs7222_parse_cycle()
2221 error = fwnode_property_read_u32_array(cycle_node, "azoteq,tx-enable", in iqs7222_parse_cycle()
2224 dev_err(&client->dev, "Failed to read %s CTx pins: %d\n", in iqs7222_parse_cycle()
2229 cycle_setup[1] &= ~GENMASK(7 + ARRAY_SIZE(pins) - 1, 7); in iqs7222_parse_cycle()
2233 dev_err(&client->dev, "Invalid %s CTx pin: %u\n", in iqs7222_parse_cycle()
2235 return -EINVAL; in iqs7222_parse_cycle()
2247 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_chan()
2248 struct i2c_client *client = iqs7222->client; in iqs7222_parse_chan()
2249 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; in iqs7222_parse_chan()
2250 int ext_chan = dev_desc->ext_chan ? : num_chan; in iqs7222_parse_chan()
2252 u16 *chan_setup = iqs7222->chan_setup[chan_index]; in iqs7222_parse_chan()
2253 u16 *sys_setup = iqs7222->sys_setup; in iqs7222_parse_chan()
2256 if (dev_desc->allow_offset && in iqs7222_parse_chan()
2257 fwnode_property_present(chan_node, "azoteq,ulp-allow")) in iqs7222_parse_chan()
2258 sys_setup[dev_desc->allow_offset] &= ~BIT(chan_index); in iqs7222_parse_chan()
2263 * The reference channel function allows for differential measurements in iqs7222_parse_chan()
2266 if (dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_col > 4 && in iqs7222_parse_chan()
2267 fwnode_property_present(chan_node, "azoteq,ref-select")) { in iqs7222_parse_chan()
2270 error = fwnode_property_read_u32(chan_node, "azoteq,ref-select", in iqs7222_parse_chan()
2273 dev_err(&client->dev, in iqs7222_parse_chan()
2274 "Failed to read %s reference channel: %d\n", in iqs7222_parse_chan()
2280 dev_err(&client->dev, in iqs7222_parse_chan()
2281 "Invalid %s reference channel: %u\n", in iqs7222_parse_chan()
2283 return -EINVAL; in iqs7222_parse_chan()
2286 ref_setup = iqs7222->chan_setup[val]; in iqs7222_parse_chan()
2290 * reference channel. in iqs7222_parse_chan()
2295 error = fwnode_property_read_u32(chan_node, "azoteq,ref-weight", in iqs7222_parse_chan()
2299 dev_err(&client->dev, in iqs7222_parse_chan()
2300 "Invalid %s reference weight: %u\n", in iqs7222_parse_chan()
2302 return -EINVAL; in iqs7222_parse_chan()
2306 } else if (error != -EINVAL) { in iqs7222_parse_chan()
2307 dev_err(&client->dev, in iqs7222_parse_chan()
2308 "Failed to read %s reference weight: %d\n", in iqs7222_parse_chan()
2314 * Configure the selected channel as a reference channel which in iqs7222_parse_chan()
2320 ref_setup[4] = dev_desc->touch_link; in iqs7222_parse_chan()
2321 if (fwnode_property_present(chan_node, "azoteq,use-prox")) in iqs7222_parse_chan()
2322 ref_setup[4] -= 2; in iqs7222_parse_chan()
2323 } else if (dev_desc->reg_grps[IQS7222_REG_GRP_TPAD].num_row && in iqs7222_parse_chan()
2325 "azoteq,counts-filt-enable")) { in iqs7222_parse_chan()
2327 * In the case of IQS7222D, however, the reference mode field in iqs7222_parse_chan()
2333 if (fwnode_property_present(chan_node, "azoteq,rx-enable")) { in iqs7222_parse_chan()
2336 * the channels can use CRx0-3, while the second half can use in iqs7222_parse_chan()
2337 * CRx4-7. in iqs7222_parse_chan()
2343 "azoteq,rx-enable"); in iqs7222_parse_chan()
2345 dev_err(&client->dev, in iqs7222_parse_chan()
2350 dev_err(&client->dev, in iqs7222_parse_chan()
2353 return -EINVAL; in iqs7222_parse_chan()
2357 "azoteq,rx-enable", in iqs7222_parse_chan()
2360 dev_err(&client->dev, in iqs7222_parse_chan()
2366 chan_setup[0] &= ~GENMASK(4 + ARRAY_SIZE(pins) - 1, 4); in iqs7222_parse_chan()
2372 dev_err(&client->dev, in iqs7222_parse_chan()
2375 return -EINVAL; in iqs7222_parse_chan()
2378 chan_setup[0] |= BIT(pins[i] + 4 - min_crx); in iqs7222_parse_chan()
2392 "azoteq,timeout-press-ms", in iqs7222_parse_chan()
2397 * registers as opposed to channel-specific registers. in iqs7222_parse_chan()
2399 u16 *setup = dev_desc->reg_grps in iqs7222_parse_chan()
2401 &iqs7222->btn_setup[chan_index][2] : in iqs7222_parse_chan()
2405 dev_err(&client->dev, in iqs7222_parse_chan()
2408 return -EINVAL; in iqs7222_parse_chan()
2413 } else if (error != -EINVAL) { in iqs7222_parse_chan()
2414 dev_err(&client->dev, in iqs7222_parse_chan()
2424 dev_desc->touch_link - (i ? 0 : 2), in iqs7222_parse_chan()
2425 &iqs7222->kp_type[chan_index][i], in iqs7222_parse_chan()
2426 &iqs7222->kp_code[chan_index][i]); in iqs7222_parse_chan()
2430 if (!dev_desc->event_offset) in iqs7222_parse_chan()
2433 sys_setup[dev_desc->event_offset] |= event_enable; in iqs7222_parse_chan()
2448 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_sldr()
2449 struct i2c_client *client = iqs7222->client; in iqs7222_parse_sldr()
2450 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; in iqs7222_parse_sldr()
2451 int ext_chan = dev_desc->ext_chan ? : num_chan; in iqs7222_parse_sldr()
2453 u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset]; in iqs7222_parse_sldr()
2454 u16 *sldr_setup = iqs7222->sldr_setup[sldr_index]; in iqs7222_parse_sldr()
2462 count = fwnode_property_count_u32(sldr_node, "azoteq,channel-select"); in iqs7222_parse_sldr()
2464 dev_err(&client->dev, "Failed to count %s channels: %d\n", in iqs7222_parse_sldr()
2468 dev_err(&client->dev, "Invalid number of %s channels\n", in iqs7222_parse_sldr()
2470 return -EINVAL; in iqs7222_parse_sldr()
2474 "azoteq,channel-select", in iqs7222_parse_sldr()
2477 dev_err(&client->dev, "Failed to read %s channels: %d\n", in iqs7222_parse_sldr()
2485 * the slider-related register addresses are offset by one. in iqs7222_parse_sldr()
2487 reg_offset = dev_desc->sldr_res < U16_MAX ? 0 : 1; in iqs7222_parse_sldr()
2490 sldr_setup[3 + reg_offset] &= ~GENMASK(ext_chan - 1, 0); in iqs7222_parse_sldr()
2498 dev_err(&client->dev, "Invalid %s channel: %u\n", in iqs7222_parse_sldr()
2500 return -EINVAL; in iqs7222_parse_sldr()
2511 sldr_setup[4 + reg_offset] = dev_desc->touch_link; in iqs7222_parse_sldr()
2512 if (fwnode_property_present(sldr_node, "azoteq,use-prox")) in iqs7222_parse_sldr()
2513 sldr_setup[4 + reg_offset] -= 2; in iqs7222_parse_sldr()
2515 error = fwnode_property_read_u32(sldr_node, "azoteq,slider-size", &val); in iqs7222_parse_sldr()
2517 if (val > dev_desc->sldr_res) { in iqs7222_parse_sldr()
2518 dev_err(&client->dev, "Invalid %s size: %u\n", in iqs7222_parse_sldr()
2520 return -EINVAL; in iqs7222_parse_sldr()
2530 } else if (error != -EINVAL) { in iqs7222_parse_sldr()
2531 dev_err(&client->dev, "Failed to read %s size: %d\n", in iqs7222_parse_sldr()
2538 dev_err(&client->dev, "Undefined %s size\n", in iqs7222_parse_sldr()
2540 return -EINVAL; in iqs7222_parse_sldr()
2543 error = fwnode_property_read_u32(sldr_node, "azoteq,top-speed", &val); in iqs7222_parse_sldr()
2546 dev_err(&client->dev, "Invalid %s top speed: %u\n", in iqs7222_parse_sldr()
2548 return -EINVAL; in iqs7222_parse_sldr()
2557 } else if (error != -EINVAL) { in iqs7222_parse_sldr()
2558 dev_err(&client->dev, "Failed to read %s top speed: %d\n", in iqs7222_parse_sldr()
2565 u16 sldr_max = sldr_setup[3] - 1; in iqs7222_parse_sldr()
2573 sldr_max = sldr_max * 16 - 1; in iqs7222_parse_sldr()
2576 input_set_abs_params(iqs7222->keypad, val, 0, sldr_max, 0, 0); in iqs7222_parse_sldr()
2577 iqs7222->sl_axis[sldr_index] = val; in iqs7222_parse_sldr()
2578 } else if (error != -EINVAL) { in iqs7222_parse_sldr()
2579 dev_err(&client->dev, "Failed to read %s axis: %d\n", in iqs7222_parse_sldr()
2584 if (dev_desc->wheel_enable) { in iqs7222_parse_sldr()
2585 sldr_setup[0] &= ~dev_desc->wheel_enable; in iqs7222_parse_sldr()
2586 if (iqs7222->sl_axis[sldr_index] == ABS_WHEEL) in iqs7222_parse_sldr()
2587 sldr_setup[0] |= dev_desc->wheel_enable; in iqs7222_parse_sldr()
2614 else if (dev_desc->legacy_gesture && in iqs7222_parse_sldr()
2617 else if (dev_desc->legacy_gesture && in iqs7222_parse_sldr()
2635 &iqs7222->sl_code[sldr_index][i]); in iqs7222_parse_sldr()
2642 if (!dev_desc->event_offset) in iqs7222_parse_sldr()
2652 else if (sldr_setup[4 + reg_offset] == dev_desc->touch_link) in iqs7222_parse_sldr()
2664 dev_desc->wheel_enable ? in iqs7222_parse_sldr()
2672 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_tpad()
2673 struct touchscreen_properties *prop = &iqs7222->prop; in iqs7222_parse_tpad()
2674 struct i2c_client *client = iqs7222->client; in iqs7222_parse_tpad()
2675 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; in iqs7222_parse_tpad()
2677 u16 *event_mask = &iqs7222->sys_setup[dev_desc->event_offset]; in iqs7222_parse_tpad()
2678 u16 *tpad_setup = iqs7222->tpad_setup; in iqs7222_parse_tpad()
2687 count = fwnode_property_count_u32(tpad_node, "azoteq,channel-select"); in iqs7222_parse_tpad()
2689 dev_err(&client->dev, "Failed to count %s channels: %d\n", in iqs7222_parse_tpad()
2693 dev_err(&client->dev, "Invalid number of %s channels\n", in iqs7222_parse_tpad()
2695 return -EINVAL; in iqs7222_parse_tpad()
2699 "azoteq,channel-select", in iqs7222_parse_tpad()
2702 dev_err(&client->dev, "Failed to read %s channels: %d\n", in iqs7222_parse_tpad()
2707 tpad_setup[6] &= ~GENMASK(num_chan - 1, 0); in iqs7222_parse_tpad()
2715 dev_err(&client->dev, "Invalid %s channel: %u\n", in iqs7222_parse_tpad()
2717 return -EINVAL; in iqs7222_parse_tpad()
2728 tpad_setup[7] = dev_desc->touch_link; in iqs7222_parse_tpad()
2729 if (fwnode_property_present(tpad_node, "azoteq,use-prox")) in iqs7222_parse_tpad()
2730 tpad_setup[7] -= 2; in iqs7222_parse_tpad()
2745 "azoteq,gesture-angle-tighten")) in iqs7222_parse_tpad()
2755 &iqs7222->tp_code[i]); in iqs7222_parse_tpad()
2759 if (!dev_desc->event_offset) in iqs7222_parse_tpad()
2769 else if (tpad_setup[7] == dev_desc->touch_link) in iqs7222_parse_tpad()
2775 if (!iqs7222->tp_code[0]) in iqs7222_parse_tpad()
2778 input_set_abs_params(iqs7222->keypad, ABS_X, in iqs7222_parse_tpad()
2779 0, (tpad_setup[4] ? : 1) - 1, 0, 0); in iqs7222_parse_tpad()
2781 input_set_abs_params(iqs7222->keypad, ABS_Y, in iqs7222_parse_tpad()
2782 0, (tpad_setup[5] ? : 1) - 1, 0, 0); in iqs7222_parse_tpad()
2784 touchscreen_parse_properties(iqs7222->keypad, false, prop); in iqs7222_parse_tpad()
2786 if (prop->max_x >= U16_MAX || prop->max_y >= U16_MAX) { in iqs7222_parse_tpad()
2787 dev_err(&client->dev, "Invalid trackpad size: %u*%u\n", in iqs7222_parse_tpad()
2788 prop->max_x, prop->max_y); in iqs7222_parse_tpad()
2789 return -EINVAL; in iqs7222_parse_tpad()
2792 tpad_setup[4] = prop->max_x + 1; in iqs7222_parse_tpad()
2793 tpad_setup[5] = prop->max_y + 1; in iqs7222_parse_tpad()
2812 struct i2c_client *client = iqs7222->client; in iqs7222_parse_reg_grp()
2822 reg_grp_node = device_get_named_child_node(&client->dev, in iqs7222_parse_reg_grp()
2825 reg_grp_node = fwnode_handle_get(dev_fwnode(&client->dev)); in iqs7222_parse_reg_grp()
2848 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_parse_all()
2849 const struct iqs7222_reg_grp_desc *reg_grps = dev_desc->reg_grps; in iqs7222_parse_all()
2850 u16 *sys_setup = iqs7222->sys_setup; in iqs7222_parse_all()
2853 if (dev_desc->allow_offset) in iqs7222_parse_all()
2854 sys_setup[dev_desc->allow_offset] = U16_MAX; in iqs7222_parse_all()
2856 if (dev_desc->event_offset) in iqs7222_parse_all()
2857 sys_setup[dev_desc->event_offset] = IQS7222_EVENT_MASK_ATI; in iqs7222_parse_all()
2860 u16 *gpio_setup = iqs7222->gpio_setup[i]; in iqs7222_parse_all()
2880 u16 *chan_setup = iqs7222->chan_setup[i]; in iqs7222_parse_all()
2889 u16 *sldr_setup = iqs7222->sldr_setup[i]; in iqs7222_parse_all()
2907 const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc; in iqs7222_report()
2908 struct i2c_client *client = iqs7222->client; in iqs7222_report()
2909 int num_chan = dev_desc->reg_grps[IQS7222_REG_GRP_CHAN].num_row; in iqs7222_report()
2910 int num_stat = dev_desc->reg_grps[IQS7222_REG_GRP_STAT].num_col; in iqs7222_report()
2920 dev_err(&client->dev, "Unexpected device reset\n"); in iqs7222_report()
2925 dev_err(&client->dev, "Unexpected ATI error\n"); in iqs7222_report()
2933 u16 *chan_setup = iqs7222->chan_setup[i]; in iqs7222_report()
2949 if (!iqs7222->kp_type[i][j]) in iqs7222_report()
2952 input_event(iqs7222->keypad, in iqs7222_report()
2953 iqs7222->kp_type[i][j], in iqs7222_report()
2954 iqs7222->kp_code[i][j], in iqs7222_report()
2959 for (i = 0; i < dev_desc->reg_grps[IQS7222_REG_GRP_SLDR].num_row; i++) { in iqs7222_report()
2960 u16 *sldr_setup = iqs7222->sldr_setup[i]; in iqs7222_report()
2967 if (sldr_pos < dev_desc->sldr_res) in iqs7222_report()
2968 input_report_abs(iqs7222->keypad, iqs7222->sl_axis[i], in iqs7222_report()
2971 input_report_key(iqs7222->keypad, iqs7222->sl_code[i][0], in iqs7222_report()
2972 sldr_pos < dev_desc->sldr_res); in iqs7222_report()
2978 if (dev_desc->sldr_res == U16_MAX) in iqs7222_report()
2992 input_report_key(iqs7222->keypad, in iqs7222_report()
2993 iqs7222->sl_code[i][j], in iqs7222_report()
2997 input_sync(iqs7222->keypad); in iqs7222_report()
3000 input_report_key(iqs7222->keypad, in iqs7222_report()
3001 iqs7222->sl_code[i][j], 0); in iqs7222_report()
3004 for (i = 0; i < dev_desc->reg_grps[IQS7222_REG_GRP_TPAD].num_row; i++) { in iqs7222_report()
3009 input_report_key(iqs7222->keypad, iqs7222->tp_code[0], in iqs7222_report()
3013 touchscreen_report_pos(iqs7222->keypad, &iqs7222->prop, in iqs7222_report()
3027 input_report_key(iqs7222->keypad, in iqs7222_report()
3028 iqs7222->tp_code[j], in iqs7222_report()
3032 input_sync(iqs7222->keypad); in iqs7222_report()
3035 input_report_key(iqs7222->keypad, in iqs7222_report()
3036 iqs7222->tp_code[j], 0); in iqs7222_report()
3039 input_sync(iqs7222->keypad); in iqs7222_report()
3057 iqs7222 = devm_kzalloc(&client->dev, sizeof(*iqs7222), GFP_KERNEL); in iqs7222_probe()
3059 return -ENOMEM; in iqs7222_probe()
3062 iqs7222->client = client; in iqs7222_probe()
3064 iqs7222->keypad = devm_input_allocate_device(&client->dev); in iqs7222_probe()
3065 if (!iqs7222->keypad) in iqs7222_probe()
3066 return -ENOMEM; in iqs7222_probe()
3068 iqs7222->keypad->name = client->name; in iqs7222_probe()
3069 iqs7222->keypad->id.bustype = BUS_I2C; in iqs7222_probe()
3076 iqs7222->irq_gpio = devm_gpiod_get(&client->dev, "irq", GPIOD_IN); in iqs7222_probe()
3077 if (IS_ERR(iqs7222->irq_gpio)) { in iqs7222_probe()
3078 error = PTR_ERR(iqs7222->irq_gpio); in iqs7222_probe()
3079 dev_err(&client->dev, "Failed to request IRQ GPIO: %d\n", in iqs7222_probe()
3084 iqs7222->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in iqs7222_probe()
3086 if (IS_ERR(iqs7222->reset_gpio)) { in iqs7222_probe()
3087 error = PTR_ERR(iqs7222->reset_gpio); in iqs7222_probe()
3088 dev_err(&client->dev, "Failed to request reset GPIO: %d\n", in iqs7222_probe()
3117 error = input_register_device(iqs7222->keypad); in iqs7222_probe()
3119 dev_err(&client->dev, "Failed to register device: %d\n", error); in iqs7222_probe()
3123 irq = gpiod_to_irq(iqs7222->irq_gpio); in iqs7222_probe()
3127 irq_flags = gpiod_is_active_low(iqs7222->irq_gpio) ? IRQF_TRIGGER_LOW in iqs7222_probe()
3131 error = devm_request_threaded_irq(&client->dev, irq, NULL, iqs7222_irq, in iqs7222_probe()
3132 irq_flags, client->name, iqs7222); in iqs7222_probe()
3134 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); in iqs7222_probe()