Lines Matching +full:full +full:- +full:pwr +full:- +full:cycle

1 // SPDX-License-Identifier: GPL-2.0+
8 * inductive keys as well as Hall-effect switches, and one for a trackpad that
227 .name = "event-prox",
233 .name = "event-prox-alt",
240 .name = "event-touch",
246 .name = "event-touch-alt",
253 .name = "event-deep",
259 .name = "event-deep-alt",
367 .name = "ulp-0",
378 .name = "trackpad-3x2",
386 .name = "trackpad-3x3",
394 .name = "generic-0",
407 .name = "generic-1",
420 .name = "generic-2",
463 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_parse_events()
464 struct i2c_client *client = iqs626->client; in iqs626_parse_events()
475 thresh = sys_reg->ch_reg_ulp.thresh; in iqs626_parse_events()
476 hyst = &sys_reg->ch_reg_ulp.hyst; in iqs626_parse_events()
481 thresh = &sys_reg->tp_grp_reg.ch_reg_tp[0].thresh; in iqs626_parse_events()
482 hyst = &sys_reg->tp_grp_reg.hyst; in iqs626_parse_events()
488 i = ch_id - IQS626_CH_GEN_0; in iqs626_parse_events()
489 thresh = sys_reg->ch_reg_gen[i].thresh; in iqs626_parse_events()
490 hyst = &sys_reg->ch_reg_gen[i].hyst; in iqs626_parse_events()
494 thresh = &sys_reg->ch_reg_hall.thresh; in iqs626_parse_events()
495 hyst = &sys_reg->ch_reg_hall.hyst; in iqs626_parse_events()
499 return -EINVAL; in iqs626_parse_events()
520 iqs626->kp_code[ch_id][i] = val; in iqs626_parse_events()
523 "linux,input-type", in iqs626_parse_events()
532 dev_err(&client->dev, in iqs626_parse_events()
535 return -EINVAL; in iqs626_parse_events()
538 iqs626->kp_type[ch_id][i] = val; in iqs626_parse_events()
540 sys_reg->event_mask &= ~iqs626_events[i].mask; in iqs626_parse_events()
546 dev_err(&client->dev, in iqs626_parse_events()
549 return -EINVAL; in iqs626_parse_events()
566 dev_err(&client->dev, in iqs626_parse_events()
569 return -EINVAL; in iqs626_parse_events()
586 dev_err(&client->dev, in iqs626_parse_events()
594 dev_err(&client->dev, in iqs626_parse_events()
597 return -EINVAL; in iqs626_parse_events()
600 sys_reg->tp_grp_reg.ch_reg_tp[j].thresh = thresh_tp[j]; in iqs626_parse_events()
611 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_parse_ati_target()
612 struct i2c_client *client = iqs626->client; in iqs626_parse_ati_target()
621 ati_target = &sys_reg->ch_reg_ulp.ati_target; in iqs626_parse_ati_target()
626 ati_target = &sys_reg->tp_grp_reg.ati_target; in iqs626_parse_ati_target()
632 i = ch_id - IQS626_CH_GEN_0; in iqs626_parse_ati_target()
633 ati_target = &sys_reg->ch_reg_gen[i].ati_target; in iqs626_parse_ati_target()
637 ati_target = &sys_reg->ch_reg_hall.ati_target; in iqs626_parse_ati_target()
641 return -EINVAL; in iqs626_parse_ati_target()
644 if (!fwnode_property_read_u32(ch_node, "azoteq,ati-target", &val)) { in iqs626_parse_ati_target()
646 dev_err(&client->dev, in iqs626_parse_ati_target()
649 return -EINVAL; in iqs626_parse_ati_target()
657 !fwnode_property_read_u32(ch_node, "azoteq,ati-base", &val)) { in iqs626_parse_ati_target()
676 dev_err(&client->dev, in iqs626_parse_ati_target()
679 return -EINVAL; in iqs626_parse_ati_target()
688 if (!fwnode_property_present(ch_node, "azoteq,ati-base")) in iqs626_parse_ati_target()
691 error = fwnode_property_read_u32_array(ch_node, "azoteq,ati-base", in iqs626_parse_ati_target()
694 dev_err(&client->dev, in iqs626_parse_ati_target()
703 dev_err(&client->dev, in iqs626_parse_ati_target()
706 return -EINVAL; in iqs626_parse_ati_target()
709 ati_base[i] -= IQS626_TPx_ATI_BASE_MIN; in iqs626_parse_ati_target()
710 sys_reg->tp_grp_reg.ch_reg_tp[i].ati_base = ati_base[i]; in iqs626_parse_ati_target()
720 struct i2c_client *client = iqs626->client; in iqs626_parse_pins()
729 dev_err(&client->dev, in iqs626_parse_pins()
732 return -EINVAL; in iqs626_parse_pins()
734 dev_err(&client->dev, in iqs626_parse_pins()
742 dev_err(&client->dev, in iqs626_parse_pins()
752 dev_err(&client->dev, in iqs626_parse_pins()
755 return -EINVAL; in iqs626_parse_pins()
767 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_parse_trackpad()
768 struct i2c_client *client = iqs626->client; in iqs626_parse_trackpad()
769 u8 *hyst = &sys_reg->tp_grp_reg.hyst; in iqs626_parse_trackpad()
773 if (!fwnode_property_read_u32(ch_node, "azoteq,lta-update", &val)) { in iqs626_parse_trackpad()
775 dev_err(&client->dev, in iqs626_parse_trackpad()
778 return -EINVAL; in iqs626_parse_trackpad()
781 sys_reg->misc_a &= ~IQS626_MISC_A_TPx_LTA_UPDATE_MASK; in iqs626_parse_trackpad()
782 sys_reg->misc_a |= (val << IQS626_MISC_A_TPx_LTA_UPDATE_SHIFT); in iqs626_parse_trackpad()
785 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-trackpad", in iqs626_parse_trackpad()
788 dev_err(&client->dev, in iqs626_parse_trackpad()
791 return -EINVAL; in iqs626_parse_trackpad()
794 sys_reg->misc_b &= ~IQS626_MISC_B_FILT_STR_TPx; in iqs626_parse_trackpad()
795 sys_reg->misc_b |= val; in iqs626_parse_trackpad()
798 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt", in iqs626_parse_trackpad()
801 dev_err(&client->dev, in iqs626_parse_trackpad()
804 return -EINVAL; in iqs626_parse_trackpad()
811 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt", in iqs626_parse_trackpad()
814 dev_err(&client->dev, in iqs626_parse_trackpad()
817 return -EINVAL; in iqs626_parse_trackpad()
829 dev_err(&client->dev, "Too many keycodes present\n"); in iqs626_parse_trackpad()
830 return -EINVAL; in iqs626_parse_trackpad()
832 dev_err(&client->dev, "Failed to count keycodes: %d\n", count); in iqs626_parse_trackpad()
837 iqs626->tp_code, count); in iqs626_parse_trackpad()
839 dev_err(&client->dev, "Failed to read keycodes: %d\n", error); in iqs626_parse_trackpad()
843 sys_reg->misc_b &= ~IQS626_MISC_B_TPx_SWIPE; in iqs626_parse_trackpad()
844 if (fwnode_property_present(ch_node, "azoteq,gesture-swipe")) in iqs626_parse_trackpad()
845 sys_reg->misc_b |= IQS626_MISC_B_TPx_SWIPE; in iqs626_parse_trackpad()
847 if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-tap-ms", in iqs626_parse_trackpad()
850 dev_err(&client->dev, in iqs626_parse_trackpad()
853 return -EINVAL; in iqs626_parse_trackpad()
856 sys_reg->timeout_tap = val / 16; in iqs626_parse_trackpad()
859 if (!fwnode_property_read_u32(ch_node, "azoteq,timeout-swipe-ms", in iqs626_parse_trackpad()
862 dev_err(&client->dev, in iqs626_parse_trackpad()
865 return -EINVAL; in iqs626_parse_trackpad()
868 sys_reg->timeout_swipe = val / 16; in iqs626_parse_trackpad()
871 if (!fwnode_property_read_u32(ch_node, "azoteq,thresh-swipe", in iqs626_parse_trackpad()
874 dev_err(&client->dev, in iqs626_parse_trackpad()
877 return -EINVAL; in iqs626_parse_trackpad()
880 sys_reg->thresh_swipe = val; in iqs626_parse_trackpad()
883 sys_reg->event_mask &= ~IQS626_EVENT_MASK_GESTURE; in iqs626_parse_trackpad()
892 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_parse_channel()
893 struct i2c_client *client = iqs626->client; in iqs626_parse_channel()
901 engine = sys_reg->ch_reg_ulp.engine; in iqs626_parse_channel()
906 engine = sys_reg->tp_grp_reg.engine; in iqs626_parse_channel()
912 i = ch_id - IQS626_CH_GEN_0; in iqs626_parse_channel()
913 engine = sys_reg->ch_reg_gen[i].engine; in iqs626_parse_channel()
917 engine = &sys_reg->ch_reg_hall.engine; in iqs626_parse_channel()
921 return -EINVAL; in iqs626_parse_channel()
925 if (fwnode_property_present(ch_node, "azoteq,meas-cap-decrease")) in iqs626_parse_channel()
929 if (!fwnode_property_read_u32(ch_node, "azoteq,rx-inactive", &val)) { in iqs626_parse_channel()
953 dev_err(&client->dev, in iqs626_parse_channel()
956 return -EINVAL; in iqs626_parse_channel()
965 if (fwnode_property_present(ch_node, "azoteq,dual-direction")) in iqs626_parse_channel()
969 if (fwnode_property_present(ch_node, "azoteq,filt-disable")) in iqs626_parse_channel()
972 if (!fwnode_property_read_u32(ch_node, "azoteq,ati-mode", &val)) { in iqs626_parse_channel()
974 dev_err(&client->dev, in iqs626_parse_channel()
977 return -EINVAL; in iqs626_parse_channel()
988 if (!fwnode_property_read_u32(ch_node, "azoteq,cct-increase", in iqs626_parse_channel()
990 unsigned int orig_val = val--; in iqs626_parse_channel()
993 * In the case of the generic channels, the charge cycle time in iqs626_parse_channel()
1011 dev_err(&client->dev, in iqs626_parse_channel()
1012 "Invalid %s channel charge cycle time: %u\n", in iqs626_parse_channel()
1014 return -EINVAL; in iqs626_parse_channel()
1028 if (!fwnode_property_read_u32(ch_node, "azoteq,proj-bias", &val)) { in iqs626_parse_channel()
1030 dev_err(&client->dev, in iqs626_parse_channel()
1033 return -EINVAL; in iqs626_parse_channel()
1040 if (!fwnode_property_read_u32(ch_node, "azoteq,sense-freq", &val)) { in iqs626_parse_channel()
1042 dev_err(&client->dev, in iqs626_parse_channel()
1045 return -EINVAL; in iqs626_parse_channel()
1053 if (fwnode_property_present(ch_node, "azoteq,ati-band-tighten")) in iqs626_parse_channel()
1060 sys_reg->ch_reg_ulp.hyst &= ~IQS626_ULP_PROJ_ENABLE; in iqs626_parse_channel()
1061 if (fwnode_property_present(ch_node, "azoteq,proj-enable")) in iqs626_parse_channel()
1062 sys_reg->ch_reg_ulp.hyst |= IQS626_ULP_PROJ_ENABLE; in iqs626_parse_channel()
1064 filter = &sys_reg->ch_reg_ulp.filter; in iqs626_parse_channel()
1066 rx_enable = &sys_reg->ch_reg_ulp.rx_enable; in iqs626_parse_channel()
1067 tx_enable = &sys_reg->ch_reg_ulp.tx_enable; in iqs626_parse_channel()
1069 i = ch_id - IQS626_CH_GEN_0; in iqs626_parse_channel()
1070 filter = &sys_reg->ch_reg_gen[i].filter; in iqs626_parse_channel()
1072 rx_enable = &sys_reg->ch_reg_gen[i].rx_enable; in iqs626_parse_channel()
1073 tx_enable = &sys_reg->ch_reg_gen[i].tx_enable; in iqs626_parse_channel()
1076 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-cnt", in iqs626_parse_channel()
1079 dev_err(&client->dev, in iqs626_parse_channel()
1082 return -EINVAL; in iqs626_parse_channel()
1089 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-cnt", in iqs626_parse_channel()
1092 dev_err(&client->dev, in iqs626_parse_channel()
1095 return -EINVAL; in iqs626_parse_channel()
1102 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-np-lta", in iqs626_parse_channel()
1105 dev_err(&client->dev, in iqs626_parse_channel()
1108 return -EINVAL; in iqs626_parse_channel()
1115 if (!fwnode_property_read_u32(ch_node, "azoteq,filt-str-lp-lta", in iqs626_parse_channel()
1118 dev_err(&client->dev, in iqs626_parse_channel()
1121 return -EINVAL; in iqs626_parse_channel()
1128 error = iqs626_parse_pins(iqs626, ch_node, "azoteq,rx-enable", in iqs626_parse_channel()
1133 error = iqs626_parse_pins(iqs626, ch_node, "azoteq,tx-enable", in iqs626_parse_channel()
1142 if (!fwnode_property_read_u32(ch_node, "azoteq,local-cap-size", in iqs626_parse_channel()
1144 unsigned int orig_val = val--; in iqs626_parse_channel()
1147 dev_err(&client->dev, in iqs626_parse_channel()
1150 return -EINVAL; in iqs626_parse_channel()
1159 if (!fwnode_property_read_u32(ch_node, "azoteq,sense-mode", &val)) { in iqs626_parse_channel()
1161 dev_err(&client->dev, in iqs626_parse_channel()
1164 return -EINVAL; in iqs626_parse_channel()
1171 if (!fwnode_property_read_u32(ch_node, "azoteq,tx-freq", &val)) { in iqs626_parse_channel()
1173 dev_err(&client->dev, in iqs626_parse_channel()
1176 return -EINVAL; in iqs626_parse_channel()
1184 if (fwnode_property_present(ch_node, "azoteq,invert-enable")) in iqs626_parse_channel()
1188 if (fwnode_property_present(ch_node, "azoteq,comp-disable")) in iqs626_parse_channel()
1192 if (fwnode_property_present(ch_node, "azoteq,static-enable")) in iqs626_parse_channel()
1195 i = ch_id - IQS626_CH_GEN_0; in iqs626_parse_channel()
1196 assoc_select = &sys_reg->ch_reg_gen[i].assoc_select; in iqs626_parse_channel()
1197 assoc_weight = &sys_reg->ch_reg_gen[i].assoc_weight; in iqs626_parse_channel()
1200 if (!fwnode_property_present(ch_node, "azoteq,assoc-select")) in iqs626_parse_channel()
1204 if (fwnode_property_match_string(ch_node, "azoteq,assoc-select", in iqs626_parse_channel()
1211 if (fwnode_property_read_u32(ch_node, "azoteq,assoc-weight", &val)) in iqs626_parse_channel()
1215 dev_err(&client->dev, in iqs626_parse_channel()
1218 return -EINVAL; in iqs626_parse_channel()
1228 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_parse_prop()
1229 struct i2c_client *client = iqs626->client; in iqs626_parse_prop()
1235 if (!device_property_read_u32(&client->dev, "azoteq,suspend-mode", in iqs626_parse_prop()
1238 dev_err(&client->dev, "Invalid suspend mode: %u\n", in iqs626_parse_prop()
1240 return -EINVAL; in iqs626_parse_prop()
1243 iqs626->suspend_mode = val; in iqs626_parse_prop()
1246 error = regmap_raw_read(iqs626->regmap, IQS626_SYS_SETTINGS, sys_reg, in iqs626_parse_prop()
1251 general = be16_to_cpu(sys_reg->general); in iqs626_parse_prop()
1254 if (device_property_present(&client->dev, "azoteq,clk-div")) in iqs626_parse_prop()
1257 if (device_property_present(&client->dev, "azoteq,ulp-enable")) in iqs626_parse_prop()
1260 if (!device_property_read_u32(&client->dev, "azoteq,ulp-update", in iqs626_parse_prop()
1263 dev_err(&client->dev, "Invalid update rate: %u\n", val); in iqs626_parse_prop()
1264 return -EINVAL; in iqs626_parse_prop()
1271 sys_reg->misc_a &= ~IQS626_MISC_A_ATI_BAND_DISABLE; in iqs626_parse_prop()
1272 if (device_property_present(&client->dev, "azoteq,ati-band-disable")) in iqs626_parse_prop()
1273 sys_reg->misc_a |= IQS626_MISC_A_ATI_BAND_DISABLE; in iqs626_parse_prop()
1275 sys_reg->misc_a &= ~IQS626_MISC_A_ATI_LP_ONLY; in iqs626_parse_prop()
1276 if (device_property_present(&client->dev, "azoteq,ati-lp-only")) in iqs626_parse_prop()
1277 sys_reg->misc_a |= IQS626_MISC_A_ATI_LP_ONLY; in iqs626_parse_prop()
1279 if (!device_property_read_u32(&client->dev, "azoteq,gpio3-select", in iqs626_parse_prop()
1282 dev_err(&client->dev, "Invalid GPIO3 selection: %u\n", in iqs626_parse_prop()
1284 return -EINVAL; in iqs626_parse_prop()
1287 sys_reg->misc_a &= ~IQS626_MISC_A_GPIO3_SELECT_MASK; in iqs626_parse_prop()
1288 sys_reg->misc_a |= val; in iqs626_parse_prop()
1291 if (!device_property_read_u32(&client->dev, "azoteq,reseed-select", in iqs626_parse_prop()
1294 dev_err(&client->dev, "Invalid reseed selection: %u\n", in iqs626_parse_prop()
1296 return -EINVAL; in iqs626_parse_prop()
1299 sys_reg->misc_b &= ~IQS626_MISC_B_RESEED_UI_SEL_MASK; in iqs626_parse_prop()
1300 sys_reg->misc_b |= (val << IQS626_MISC_B_RESEED_UI_SEL_SHIFT); in iqs626_parse_prop()
1303 sys_reg->misc_b &= ~IQS626_MISC_B_THRESH_EXTEND; in iqs626_parse_prop()
1304 if (device_property_present(&client->dev, "azoteq,thresh-extend")) in iqs626_parse_prop()
1305 sys_reg->misc_b |= IQS626_MISC_B_THRESH_EXTEND; in iqs626_parse_prop()
1307 sys_reg->misc_b &= ~IQS626_MISC_B_TRACKING_UI_ENABLE; in iqs626_parse_prop()
1308 if (device_property_present(&client->dev, "azoteq,tracking-enable")) in iqs626_parse_prop()
1309 sys_reg->misc_b |= IQS626_MISC_B_TRACKING_UI_ENABLE; in iqs626_parse_prop()
1311 sys_reg->misc_b &= ~IQS626_MISC_B_RESEED_OFFSET; in iqs626_parse_prop()
1312 if (device_property_present(&client->dev, "azoteq,reseed-offset")) in iqs626_parse_prop()
1313 sys_reg->misc_b |= IQS626_MISC_B_RESEED_OFFSET; in iqs626_parse_prop()
1315 if (!device_property_read_u32(&client->dev, "azoteq,rate-np-ms", in iqs626_parse_prop()
1318 dev_err(&client->dev, "Invalid report rate: %u\n", val); in iqs626_parse_prop()
1319 return -EINVAL; in iqs626_parse_prop()
1322 sys_reg->rate_np = val; in iqs626_parse_prop()
1325 if (!device_property_read_u32(&client->dev, "azoteq,rate-lp-ms", in iqs626_parse_prop()
1328 dev_err(&client->dev, "Invalid report rate: %u\n", val); in iqs626_parse_prop()
1329 return -EINVAL; in iqs626_parse_prop()
1332 sys_reg->rate_lp = val; in iqs626_parse_prop()
1335 if (!device_property_read_u32(&client->dev, "azoteq,rate-ulp-ms", in iqs626_parse_prop()
1338 dev_err(&client->dev, "Invalid report rate: %u\n", val); in iqs626_parse_prop()
1339 return -EINVAL; in iqs626_parse_prop()
1342 sys_reg->rate_ulp = val / 16; in iqs626_parse_prop()
1345 if (!device_property_read_u32(&client->dev, "azoteq,timeout-pwr-ms", in iqs626_parse_prop()
1348 dev_err(&client->dev, "Invalid timeout: %u\n", val); in iqs626_parse_prop()
1349 return -EINVAL; in iqs626_parse_prop()
1352 sys_reg->timeout_pwr = val / 512; in iqs626_parse_prop()
1355 if (!device_property_read_u32(&client->dev, "azoteq,timeout-lta-ms", in iqs626_parse_prop()
1358 dev_err(&client->dev, "Invalid timeout: %u\n", val); in iqs626_parse_prop()
1359 return -EINVAL; in iqs626_parse_prop()
1362 sys_reg->timeout_lta = val / 512; in iqs626_parse_prop()
1365 sys_reg->event_mask = ~((u8)IQS626_EVENT_MASK_SYS); in iqs626_parse_prop()
1366 sys_reg->redo_ati = 0; in iqs626_parse_prop()
1368 sys_reg->reseed = 0; in iqs626_parse_prop()
1369 sys_reg->active = 0; in iqs626_parse_prop()
1372 ch_node = device_get_named_child_node(&client->dev, in iqs626_parse_prop()
1389 if (!fwnode_property_present(ch_node, "azoteq,ati-exclude")) in iqs626_parse_prop()
1390 sys_reg->redo_ati |= iqs626_channels[i].active; in iqs626_parse_prop()
1392 if (!fwnode_property_present(ch_node, "azoteq,reseed-disable")) in iqs626_parse_prop()
1393 sys_reg->reseed |= iqs626_channels[i].active; in iqs626_parse_prop()
1395 sys_reg->active |= iqs626_channels[i].active; in iqs626_parse_prop()
1401 * Enable streaming during normal-power mode if the trackpad is used to in iqs626_parse_prop()
1403 * returns to event mode during low-power mode. in iqs626_parse_prop()
1405 if (sys_reg->active & iqs626_channels[IQS626_CH_TP_2].active && in iqs626_parse_prop()
1406 sys_reg->event_mask & IQS626_EVENT_MASK_GESTURE) in iqs626_parse_prop()
1412 sys_reg->general = cpu_to_be16(general); in iqs626_parse_prop()
1414 error = regmap_raw_write(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_parse_prop()
1415 &iqs626->sys_reg, sizeof(iqs626->sys_reg)); in iqs626_parse_prop()
1426 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_input_init()
1427 struct i2c_client *client = iqs626->client; in iqs626_input_init()
1430 iqs626->keypad = devm_input_allocate_device(&client->dev); in iqs626_input_init()
1431 if (!iqs626->keypad) in iqs626_input_init()
1432 return -ENOMEM; in iqs626_input_init()
1434 iqs626->keypad->keycodemax = ARRAY_SIZE(iqs626->kp_code); in iqs626_input_init()
1435 iqs626->keypad->keycode = iqs626->kp_code; in iqs626_input_init()
1436 iqs626->keypad->keycodesize = sizeof(**iqs626->kp_code); in iqs626_input_init()
1438 iqs626->keypad->name = "iqs626a_keypad"; in iqs626_input_init()
1439 iqs626->keypad->id.bustype = BUS_I2C; in iqs626_input_init()
1442 if (!(sys_reg->active & iqs626_channels[i].active)) in iqs626_input_init()
1446 if (!iqs626->kp_type[i][j]) in iqs626_input_init()
1449 input_set_capability(iqs626->keypad, in iqs626_input_init()
1450 iqs626->kp_type[i][j], in iqs626_input_init()
1451 iqs626->kp_code[i][j]); in iqs626_input_init()
1455 if (!(sys_reg->active & iqs626_channels[IQS626_CH_TP_2].active)) in iqs626_input_init()
1458 iqs626->trackpad = devm_input_allocate_device(&client->dev); in iqs626_input_init()
1459 if (!iqs626->trackpad) in iqs626_input_init()
1460 return -ENOMEM; in iqs626_input_init()
1462 iqs626->trackpad->keycodemax = ARRAY_SIZE(iqs626->tp_code); in iqs626_input_init()
1463 iqs626->trackpad->keycode = iqs626->tp_code; in iqs626_input_init()
1464 iqs626->trackpad->keycodesize = sizeof(*iqs626->tp_code); in iqs626_input_init()
1466 iqs626->trackpad->name = "iqs626a_trackpad"; in iqs626_input_init()
1467 iqs626->trackpad->id.bustype = BUS_I2C; in iqs626_input_init()
1473 if (sys_reg->event_mask & IQS626_EVENT_MASK_GESTURE) { in iqs626_input_init()
1476 input_set_capability(iqs626->trackpad, EV_KEY, BTN_TOUCH); in iqs626_input_init()
1477 input_set_abs_params(iqs626->trackpad, ABS_Y, 0, 255, 0, 0); in iqs626_input_init()
1479 if ((sys_reg->active & tp_mask) == tp_mask) in iqs626_input_init()
1480 input_set_abs_params(iqs626->trackpad, in iqs626_input_init()
1483 input_set_abs_params(iqs626->trackpad, in iqs626_input_init()
1486 touchscreen_parse_properties(iqs626->trackpad, false, in iqs626_input_init()
1487 &iqs626->prop); in iqs626_input_init()
1490 if (iqs626->tp_code[i] != KEY_RESERVED) in iqs626_input_init()
1491 input_set_capability(iqs626->trackpad, EV_KEY, in iqs626_input_init()
1492 iqs626->tp_code[i]); in iqs626_input_init()
1495 error = input_register_device(iqs626->trackpad); in iqs626_input_init()
1497 dev_err(&client->dev, "Failed to register trackpad: %d\n", in iqs626_input_init()
1505 struct iqs626_sys_reg *sys_reg = &iqs626->sys_reg; in iqs626_report()
1506 struct i2c_client *client = iqs626->client; in iqs626_report()
1513 error = regmap_raw_read(iqs626->regmap, IQS626_SYS_FLAGS, &flags, in iqs626_report()
1516 dev_err(&client->dev, "Failed to read device status: %d\n", in iqs626_report()
1527 dev_err(&client->dev, "Unexpected device reset\n"); in iqs626_report()
1529 error = regmap_raw_write(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_report()
1532 dev_err(&client->dev, in iqs626_report()
1533 "Failed to re-initialize device: %d\n", error); in iqs626_report()
1546 if (sys_reg->active & iqs626_channels[IQS626_CH_HALL].active) { in iqs626_report()
1547 error = regmap_raw_read(iqs626->regmap, IQS626_HALL_OUTPUT, in iqs626_report()
1550 dev_err(&client->dev, in iqs626_report()
1561 if (!(sys_reg->active & iqs626_channels[i].active)) in iqs626_report()
1565 if (!iqs626->kp_type[i][j]) in iqs626_report()
1573 input_event(iqs626->keypad, iqs626->kp_type[i][j], in iqs626_report()
1574 iqs626->kp_code[i][j], !!state); in iqs626_report()
1578 input_sync(iqs626->keypad); in iqs626_report()
1584 complete_all(&iqs626->ati_done); in iqs626_report()
1586 if (!(sys_reg->active & iqs626_channels[IQS626_CH_TP_2].active)) in iqs626_report()
1589 if (sys_reg->event_mask & IQS626_EVENT_MASK_GESTURE) { in iqs626_report()
1593 input_report_key(iqs626->trackpad, BTN_TOUCH, state); in iqs626_report()
1596 touchscreen_report_pos(iqs626->trackpad, &iqs626->prop, in iqs626_report()
1601 input_report_key(iqs626->trackpad, iqs626->tp_code[i], in iqs626_report()
1605 input_sync(iqs626->trackpad); in iqs626_report()
1609 * release cycle so as to emulate a full keystroke. in iqs626_report()
1612 input_report_key(iqs626->trackpad, in iqs626_report()
1613 iqs626->tp_code[i], 0); in iqs626_report()
1617 input_sync(iqs626->trackpad); in iqs626_report()
1651 iqs626 = devm_kzalloc(&client->dev, sizeof(*iqs626), GFP_KERNEL); in iqs626_probe()
1653 return -ENOMEM; in iqs626_probe()
1656 iqs626->client = client; in iqs626_probe()
1658 iqs626->regmap = devm_regmap_init_i2c(client, &iqs626_regmap_config); in iqs626_probe()
1659 if (IS_ERR(iqs626->regmap)) { in iqs626_probe()
1660 error = PTR_ERR(iqs626->regmap); in iqs626_probe()
1661 dev_err(&client->dev, "Failed to initialize register map: %d\n", in iqs626_probe()
1666 init_completion(&iqs626->ati_done); in iqs626_probe()
1668 error = regmap_raw_read(iqs626->regmap, IQS626_VER_INFO, &ver_info, in iqs626_probe()
1674 dev_err(&client->dev, "Unrecognized product number: 0x%02X\n", in iqs626_probe()
1676 return -EINVAL; in iqs626_probe()
1687 error = devm_request_threaded_irq(&client->dev, client->irq, in iqs626_probe()
1689 client->name, iqs626); in iqs626_probe()
1691 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); in iqs626_probe()
1695 if (!wait_for_completion_timeout(&iqs626->ati_done, in iqs626_probe()
1697 dev_err(&client->dev, "Failed to complete ATI\n"); in iqs626_probe()
1698 return -ETIMEDOUT; in iqs626_probe()
1705 error = input_register_device(iqs626->keypad); in iqs626_probe()
1707 dev_err(&client->dev, "Failed to register keypad: %d\n", error); in iqs626_probe()
1715 struct i2c_client *client = iqs626->client; in iqs626_suspend()
1719 if (!iqs626->suspend_mode) in iqs626_suspend()
1722 disable_irq(client->irq); in iqs626_suspend()
1727 * transition into normal-power mode. in iqs626_suspend()
1729 error = regmap_update_bits(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_suspend()
1736 * into normal-power mode before a manual mode switch is performed. in iqs626_suspend()
1738 error = regmap_read_poll_timeout(iqs626->regmap, IQS626_SYS_FLAGS, val, in iqs626_suspend()
1745 error = regmap_update_bits(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_suspend()
1747 iqs626->suspend_mode << in iqs626_suspend()
1757 error = regmap_read_poll_timeout(iqs626->regmap, IQS626_SYS_FLAGS, val, in iqs626_suspend()
1759 == (iqs626->suspend_mode << in iqs626_suspend()
1766 enable_irq(client->irq); in iqs626_suspend()
1774 struct i2c_client *client = iqs626->client; in iqs626_resume()
1778 if (!iqs626->suspend_mode) in iqs626_resume()
1781 disable_irq(client->irq); in iqs626_resume()
1783 error = regmap_update_bits(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_resume()
1789 * This check ensures the device has returned to normal-power mode in iqs626_resume()
1790 * before automatic power mode switching is re-enabled. in iqs626_resume()
1792 error = regmap_read_poll_timeout(iqs626->regmap, IQS626_SYS_FLAGS, val, in iqs626_resume()
1799 error = regmap_update_bits(iqs626->regmap, IQS626_SYS_SETTINGS, in iqs626_resume()
1813 enable_irq(client->irq); in iqs626_resume()