Lines Matching defs:iqs7211
1202 static int iqs7211_irq_poll(struct iqs7211_private *iqs7211, u64 timeout_us)
1206 error = readx_poll_timeout(gpiod_get_value_cansleep, iqs7211->irq_gpio,
1212 static int iqs7211_hard_reset(struct iqs7211_private *iqs7211)
1214 if (!iqs7211->reset_gpio)
1217 gpiod_set_value_cansleep(iqs7211->reset_gpio, 1);
1224 if (iqs7211->reset_gpio == iqs7211->irq_gpio)
1229 gpiod_set_value_cansleep(iqs7211->reset_gpio, 0);
1230 if (iqs7211->reset_gpio == iqs7211->irq_gpio)
1233 return iqs7211_irq_poll(iqs7211, IQS7211_START_TIMEOUT_US);
1236 static int iqs7211_force_comms(struct iqs7211_private *iqs7211)
1241 switch (iqs7211->comms_mode) {
1243 return iqs7211_irq_poll(iqs7211, IQS7211_START_TIMEOUT_US);
1268 ret = gpiod_get_value_cansleep(iqs7211->irq_gpio);
1274 ret = i2c_master_send(iqs7211->client, msg_buf, sizeof(msg_buf));
1285 return iqs7211_irq_poll(iqs7211, IQS7211_COMMS_TIMEOUT_US);
1288 static int iqs7211_read_burst(struct iqs7211_private *iqs7211,
1292 struct i2c_client *client = iqs7211->client;
1314 ret = iqs7211_force_comms(iqs7211);
1345 static int iqs7211_read_word(struct iqs7211_private *iqs7211, u8 reg, u16 *val)
1350 error = iqs7211_read_burst(iqs7211, reg, &val_buf, sizeof(val_buf));
1359 static int iqs7211_write_burst(struct iqs7211_private *iqs7211,
1364 struct i2c_client *client = iqs7211->client;
1384 ret = iqs7211_force_comms(iqs7211);
1412 static int iqs7211_write_word(struct iqs7211_private *iqs7211, u8 reg, u16 val)
1416 return iqs7211_write_burst(iqs7211, reg, &val_buf, sizeof(val_buf));
1419 static int iqs7211_start_comms(struct iqs7211_private *iqs7211)
1421 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1422 struct i2c_client *client = iqs7211->client;
1443 iqs7211->comms_init = IQS7211_COMMS_MODE_WAIT;
1450 iqs7211->comms_init = forced_comms ? IQS7211_COMMS_MODE_FORCE
1453 iqs7211->comms_init = forced_comms ? IQS7211_COMMS_MODE_WAIT
1457 iqs7211->comms_mode = iqs7211->comms_init;
1459 error = iqs7211_hard_reset(iqs7211);
1465 error = iqs7211_read_burst(iqs7211, IQS7211_PROD_NUM,
1466 &iqs7211->ver_info,
1467 sizeof(iqs7211->ver_info));
1471 if (le16_to_cpu(iqs7211->ver_info.prod_num) != dev_desc->prod_num) {
1473 le16_to_cpu(iqs7211->ver_info.prod_num));
1477 error = iqs7211_read_word(iqs7211, dev_desc->sys_ctrl + 1,
1487 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1,
1493 iqs7211->comms_mode = IQS7211_COMMS_MODE_FORCE;
1495 iqs7211->comms_mode = IQS7211_COMMS_MODE_FREE;
1497 error = iqs7211_read_burst(iqs7211, dev_desc->exp_file,
1498 iqs7211->exp_file,
1499 sizeof(iqs7211->exp_file));
1503 error = iqs7211_read_burst(iqs7211, dev_desc->tp_config,
1504 &iqs7211->tp_config,
1505 sizeof(iqs7211->tp_config));
1509 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1,
1514 iqs7211->event_mask = comms_setup & ~IQS7211_EVENT_MASK_ALL;
1515 iqs7211->event_mask |= (IQS7211_EVENT_MASK_ATI | IQS7211_EVENT_MODE);
1520 static int iqs7211_init_device(struct iqs7211_private *iqs7211)
1522 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1526 cpu_to_le16(iqs7211->event_mask),
1535 error = iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl,
1540 if (iqs7211->event_mask & dev_desc->comms_req)
1541 iqs7211->comms_mode = IQS7211_COMMS_MODE_FORCE;
1543 iqs7211->comms_mode = IQS7211_COMMS_MODE_FREE;
1550 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl + 1,
1551 iqs7211->event_mask | dev_desc->comms_end);
1555 list_for_each_entry(reg_field, &iqs7211->reg_field_head, list) {
1561 error = iqs7211_read_word(iqs7211, reg_field->addr,
1573 error = iqs7211_write_word(iqs7211, reg_field->addr, new_val);
1578 error = iqs7211_write_burst(iqs7211, dev_desc->tp_config,
1579 &iqs7211->tp_config,
1580 sizeof(iqs7211->tp_config));
1584 if (**iqs7211->cycle_alloc) {
1585 error = iqs7211_write_burst(iqs7211, dev_desc->rx_tx_map,
1586 &iqs7211->rx_tx_map,
1592 error = iqs7211_write_burst(iqs7211,
1594 iqs7211->cycle_alloc[i],
1601 *sys_ctrl = cpu_to_le16(iqs7211->ati_start);
1603 return iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl,
1607 static int iqs7211_add_field(struct iqs7211_private *iqs7211,
1610 struct i2c_client *client = iqs7211->client;
1616 list_for_each_entry(reg_field, &iqs7211->reg_field_head, list) {
1633 list_add(®_field->list, &iqs7211->reg_field_head);
1638 static int iqs7211_parse_props(struct iqs7211_private *iqs7211,
1643 struct i2c_client *client = iqs7211->client;
1649 [iqs7211->dev_desc -
1688 error = iqs7211_add_field(iqs7211, reg_field);
1696 static int iqs7211_parse_event(struct iqs7211_private *iqs7211,
1702 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1703 struct i2c_client *client = iqs7211->client;
1708 error = iqs7211_parse_props(iqs7211, event_node, reg_grp, reg_key);
1728 error = iqs7211_add_field(iqs7211, reg_field);
1749 static int iqs7211_parse_cycles(struct iqs7211_private *iqs7211,
1752 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1753 struct i2c_client *client = iqs7211->client;
1757 u8 total_rx = iqs7211->tp_config.total_rx;
1758 u8 total_tx = iqs7211->tp_config.total_tx;
1778 int slot = iqs7211->rx_tx_map[j] < 4 ? 0 : 1;
1854 iqs7211->cycle_alloc[i][offs++] = 0x05;
1855 iqs7211->cycle_alloc[i][offs++] = cycle_alloc[j][0];
1856 iqs7211->cycle_alloc[i][offs++] = cycle_alloc[j][1];
1865 static int iqs7211_parse_tp(struct iqs7211_private *iqs7211,
1868 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1869 struct i2c_client *client = iqs7211->client;
1897 iqs7211->rx_tx_map[i] = pins[i];
1900 iqs7211->tp_config.total_rx = count;
1924 for (j = 0; j < iqs7211->tp_config.total_rx; j++) {
1925 if (iqs7211->rx_tx_map[j] != pins[i])
1933 iqs7211->rx_tx_map[iqs7211->tp_config.total_rx + i] = pins[i];
1936 iqs7211->tp_config.total_tx = count;
1938 return iqs7211_parse_cycles(iqs7211, tp_node);
1941 static int iqs7211_parse_alp(struct iqs7211_private *iqs7211,
1944 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
1945 struct i2c_client *client = iqs7211->client;
1983 error = iqs7211_add_field(iqs7211, reg_field);
2021 error = iqs7211_add_field(iqs7211, reg_field);
2030 (struct iqs7211_private *iqs7211,
2036 static int iqs7211_parse_reg_grp(struct iqs7211_private *iqs7211,
2040 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2044 error = iqs7211_parse_props(iqs7211, reg_grp_node, reg_grp,
2050 error = iqs7211_parse_extra[reg_grp](iqs7211, reg_grp_node);
2055 iqs7211->ati_start |= dev_desc->ati_start[reg_grp];
2079 error = iqs7211_parse_event(iqs7211, event_node,
2082 &iqs7211->kp_code[i]);
2089 iqs7211->event_mask |= iqs7211_reg_grp_masks[reg_grp];
2092 return iqs7211_add_field(iqs7211, reg_field);
2095 static int iqs7211_register_kp(struct iqs7211_private *iqs7211)
2097 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2098 struct input_dev *kp_idev = iqs7211->kp_idev;
2099 struct i2c_client *client = iqs7211->client;
2103 if (iqs7211->kp_code[i])
2113 iqs7211->kp_idev = kp_idev;
2119 if (iqs7211->kp_code[i])
2120 input_set_capability(iqs7211->kp_idev, EV_KEY,
2121 iqs7211->kp_code[i]);
2131 static int iqs7211_register_tp(struct iqs7211_private *iqs7211)
2133 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2134 struct touchscreen_properties *prop = &iqs7211->prop;
2135 struct input_dev *tp_idev = iqs7211->tp_idev;
2136 struct i2c_client *client = iqs7211->client;
2140 &iqs7211->num_contacts);
2147 } else if (iqs7211->num_contacts > IQS7211_MAX_CONTACTS) {
2149 iqs7211->num_contacts);
2153 iqs7211->tp_config.num_contacts = iqs7211->num_contacts ? : 1;
2155 if (!iqs7211->num_contacts)
2158 iqs7211->event_mask |= IQS7211_EVENT_MASK_MOVE;
2164 iqs7211->tp_idev = tp_idev;
2170 0, le16_to_cpu(iqs7211->tp_config.max_x), 0, 0);
2173 0, le16_to_cpu(iqs7211->tp_config.max_y), 0, 0);
2189 iqs7211->tp_config.max_x = cpu_to_le16(prop->max_x);
2190 iqs7211->tp_config.max_y = cpu_to_le16(prop->max_y);
2192 error = input_mt_init_slots(tp_idev, iqs7211->num_contacts,
2208 static int iqs7211_report(struct iqs7211_private *iqs7211)
2210 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2211 struct i2c_client *client = iqs7211->client;
2217 error = iqs7211_read_burst(iqs7211, dev_desc->sys_stat, status,
2219 iqs7211->num_contacts * sizeof(*touch_data));
2233 iqs7211->comms_mode = iqs7211->comms_init;
2235 return iqs7211_init_device(iqs7211);
2247 for (i = 0; i < iqs7211->num_contacts; i++) {
2254 input_mt_slot(iqs7211->tp_idev, i);
2255 if (input_mt_report_slot_state(iqs7211->tp_idev, MT_TOOL_FINGER,
2257 touchscreen_report_pos(iqs7211->tp_idev, &iqs7211->prop,
2261 input_report_abs(iqs7211->tp_idev, ABS_MT_PRESSURE,
2266 if (iqs7211->num_contacts) {
2267 input_mt_sync_frame(iqs7211->tp_idev);
2268 input_sync(iqs7211->tp_idev);
2271 if (!iqs7211->kp_idev)
2283 input_report_key(iqs7211->kp_idev, *iqs7211->kp_code, 1);
2284 input_sync(iqs7211->kp_idev);
2286 input_report_key(iqs7211->kp_idev, *iqs7211->kp_code, 0);
2293 input_report_key(iqs7211->kp_idev, iqs7211->kp_code[i],
2306 if ((gesture_flags ^ iqs7211->gesture_cache) & mask)
2307 input_report_key(iqs7211->kp_idev, iqs7211->kp_code[i],
2310 iqs7211->gesture_cache &= ~mask;
2319 iqs7211->gesture_cache |= gesture_flags & mask;
2325 input_sync(iqs7211->kp_idev);
2330 input_report_key(iqs7211->kp_idev,
2331 iqs7211->kp_code[i], 0);
2334 input_sync(iqs7211->kp_idev);
2341 struct iqs7211_private *iqs7211 = context;
2343 return iqs7211_report(iqs7211) ? IRQ_NONE : IRQ_HANDLED;
2348 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev);
2349 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2360 disable_irq(gpiod_to_irq(iqs7211->irq_gpio));
2362 error = iqs7211_write_word(iqs7211, dev_desc->sys_ctrl,
2365 enable_irq(gpiod_to_irq(iqs7211->irq_gpio));
2372 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev);
2373 const struct iqs7211_dev_desc *dev_desc = iqs7211->dev_desc;
2376 cpu_to_le16(iqs7211->event_mask),
2383 disable_irq(gpiod_to_irq(iqs7211->irq_gpio));
2389 error = iqs7211_write_burst(iqs7211, dev_desc->sys_ctrl, sys_ctrl,
2392 enable_irq(gpiod_to_irq(iqs7211->irq_gpio));
2402 struct iqs7211_private *iqs7211 = dev_get_drvdata(dev);
2405 le16_to_cpu(iqs7211->ver_info.prod_num),
2406 le32_to_cpu(iqs7211->ver_info.patch),
2407 le16_to_cpu(iqs7211->ver_info.major),
2408 le16_to_cpu(iqs7211->ver_info.minor),
2409 iqs7211->exp_file[1], iqs7211->exp_file[0]);
2418 ATTRIBUTE_GROUPS(iqs7211);
2439 struct iqs7211_private *iqs7211;
2445 iqs7211 = devm_kzalloc(&client->dev, sizeof(*iqs7211), GFP_KERNEL);
2446 if (!iqs7211)
2449 i2c_set_clientdata(client, iqs7211);
2450 iqs7211->client = client;
2452 INIT_LIST_HEAD(&iqs7211->reg_field_head);
2454 iqs7211->dev_desc = device_get_match_data(&client->dev);
2455 if (!iqs7211->dev_desc)
2458 shared_irq = iqs7211->dev_desc->num_ctx == IQS7211_MAX_CTX;
2469 iqs7211->irq_gpio = devm_gpiod_get(&client->dev, "irq",
2472 if (IS_ERR(iqs7211->irq_gpio)) {
2473 error = PTR_ERR(iqs7211->irq_gpio);
2480 iqs7211->reset_gpio = iqs7211->irq_gpio;
2482 iqs7211->reset_gpio = devm_gpiod_get_optional(&client->dev,
2485 if (IS_ERR(iqs7211->reset_gpio)) {
2486 error = PTR_ERR(iqs7211->reset_gpio);
2493 error = iqs7211_start_comms(iqs7211);
2510 error = iqs7211_parse_reg_grp(iqs7211, reg_grp_node, reg_grp);
2516 error = iqs7211_register_kp(iqs7211);
2520 error = iqs7211_register_tp(iqs7211);
2524 error = iqs7211_init_device(iqs7211);
2528 irq = gpiod_to_irq(iqs7211->irq_gpio);
2532 irq_flags = gpiod_is_active_low(iqs7211->irq_gpio) ? IRQF_TRIGGER_LOW
2537 irq_flags, client->name, iqs7211);
2547 .name = "iqs7211",