Lines Matching refs:iqs269
298 static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
301 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
310 mutex_lock(&iqs269->lock);
318 iqs269->ati_current = false;
320 mutex_unlock(&iqs269->lock);
325 static int iqs269_ati_mode_get(struct iqs269_private *iqs269,
328 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
334 mutex_lock(&iqs269->lock);
336 mutex_unlock(&iqs269->lock);
344 static int iqs269_ati_base_set(struct iqs269_private *iqs269,
347 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
374 mutex_lock(&iqs269->lock);
382 iqs269->ati_current = false;
384 mutex_unlock(&iqs269->lock);
389 static int iqs269_ati_base_get(struct iqs269_private *iqs269,
392 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
398 mutex_lock(&iqs269->lock);
400 mutex_unlock(&iqs269->lock);
424 static int iqs269_ati_target_set(struct iqs269_private *iqs269,
427 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
436 mutex_lock(&iqs269->lock);
444 iqs269->ati_current = false;
446 mutex_unlock(&iqs269->lock);
451 static int iqs269_ati_target_get(struct iqs269_private *iqs269,
454 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
460 mutex_lock(&iqs269->lock);
462 mutex_unlock(&iqs269->lock);
498 static int iqs269_parse_chan(struct iqs269_private *iqs269,
501 struct i2c_client *client = iqs269->client;
518 iqs269->sys_reg.active |= BIT(reg);
520 iqs269->sys_reg.reseed |= BIT(reg);
523 iqs269->sys_reg.blocking |= BIT(reg);
526 iqs269->sys_reg.slider_select[0] |= BIT(reg);
529 iqs269->sys_reg.slider_select[1] |= BIT(reg);
531 ch_reg = &iqs269->sys_reg.ch_reg[reg];
631 error = iqs269_ati_mode_set(iqs269, reg, val);
640 error = iqs269_ati_base_set(iqs269, reg, val);
649 error = iqs269_ati_target_set(iqs269, reg, val);
730 if (iqs269->hall_enable) {
731 iqs269->switches[i].code = val;
732 iqs269->switches[i].enabled = true;
737 if (iqs269->hall_enable)
742 iqs269->keycode[i * IQS269_NUM_CH + reg] = val;
745 iqs269->sys_reg.event_mask &= ~iqs269_events[i].mask;
751 static int iqs269_parse_prop(struct iqs269_private *iqs269)
753 struct iqs269_sys_reg *sys_reg = &iqs269->sys_reg;
754 struct i2c_client *client = iqs269->client;
760 iqs269->hall_enable = device_property_present(&client->dev,
763 error = regmap_raw_read(iqs269->regmap, IQS269_SYS_SETTINGS, sys_reg,
958 error = iqs269_parse_chan(iqs269, ch_node);
1029 static int iqs269_dev_init(struct iqs269_private *iqs269)
1033 mutex_lock(&iqs269->lock);
1035 error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI,
1037 iqs269->hall_enable ? ~0 : 0);
1041 error = regmap_raw_write(iqs269->regmap, IQS269_SYS_SETTINGS,
1042 &iqs269->sys_reg, sizeof(iqs269->sys_reg));
1052 iqs269->ati_current = true;
1055 mutex_unlock(&iqs269->lock);
1060 static int iqs269_input_init(struct iqs269_private *iqs269)
1062 struct i2c_client *client = iqs269->client;
1066 iqs269->keypad = devm_input_allocate_device(&client->dev);
1067 if (!iqs269->keypad)
1070 iqs269->keypad->keycodemax = ARRAY_SIZE(iqs269->keycode);
1071 iqs269->keypad->keycode = iqs269->keycode;
1072 iqs269->keypad->keycodesize = sizeof(*iqs269->keycode);
1074 iqs269->keypad->name = "iqs269a_keypad";
1075 iqs269->keypad->id.bustype = BUS_I2C;
1078 sw_code = iqs269->switches[i].code;
1081 keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
1089 if (iqs269->hall_enable &&
1090 iqs269->switches[i].enabled)
1091 input_set_capability(iqs269->keypad,
1096 if (iqs269->hall_enable)
1102 input_set_capability(iqs269->keypad,
1109 if (!iqs269->sys_reg.slider_select[i])
1112 iqs269->slider[i] = devm_input_allocate_device(&client->dev);
1113 if (!iqs269->slider[i])
1116 iqs269->slider[i]->name = i ? "iqs269a_slider_1"
1118 iqs269->slider[i]->id.bustype = BUS_I2C;
1120 input_set_capability(iqs269->slider[i], EV_KEY, BTN_TOUCH);
1121 input_set_abs_params(iqs269->slider[i], ABS_X, 0, 255, 0, 0);
1123 error = input_register_device(iqs269->slider[i]);
1134 static int iqs269_report(struct iqs269_private *iqs269)
1136 struct i2c_client *client = iqs269->client;
1143 error = regmap_raw_read(iqs269->regmap, IQS269_SYS_FLAGS, &flags,
1159 error = iqs269_dev_init(iqs269);
1170 error = regmap_raw_read(iqs269->regmap, IQS269_SLIDER_X, slider_x,
1179 if (!iqs269->sys_reg.slider_select[i])
1187 iqs269->sys_reg.slider_select[i]) {
1188 input_report_key(iqs269->slider[i], BTN_TOUCH, 1);
1189 input_report_abs(iqs269->slider[i], ABS_X, slider_x[i]);
1191 input_report_key(iqs269->slider[i], BTN_TOUCH, 0);
1194 input_sync(iqs269->slider[i]);
1204 sw_code = iqs269->switches[i].code;
1207 keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
1211 if (iqs269->hall_enable &&
1212 iqs269->switches[i].enabled)
1213 input_report_switch(iqs269->keypad,
1219 if (iqs269->hall_enable)
1224 input_report_key(iqs269->keypad, keycode,
1230 input_sync(iqs269->keypad);
1236 complete_all(&iqs269->ati_done);
1243 struct iqs269_private *iqs269 = context;
1245 if (iqs269_report(iqs269))
1261 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1262 struct i2c_client *client = iqs269->client;
1266 if (!iqs269->ati_current || iqs269->hall_enable)
1269 if (!completion_done(&iqs269->ati_done))
1279 error = regmap_raw_read(iqs269->regmap,
1280 IQS269_CHx_COUNTS + iqs269->ch_num * 2,
1295 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1296 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1297 struct i2c_client *client = iqs269->client;
1303 error = regmap_read(iqs269->regmap, IQS269_CAL_DATA_A, &val);
1333 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1335 return scnprintf(buf, PAGE_SIZE, "%u\n", iqs269->hall_enable);
1342 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1350 mutex_lock(&iqs269->lock);
1352 iqs269->hall_enable = val;
1353 iqs269->ati_current = false;
1355 mutex_unlock(&iqs269->lock);
1363 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1365 return scnprintf(buf, PAGE_SIZE, "%u\n", iqs269->ch_num);
1372 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1383 iqs269->ch_num = val;
1391 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1392 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1395 ch_reg[iqs269->ch_num].rx_enable);
1402 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1403 struct iqs269_ch_reg *ch_reg = iqs269->sys_reg.ch_reg;
1414 mutex_lock(&iqs269->lock);
1416 ch_reg[iqs269->ch_num].rx_enable = val;
1417 iqs269->ati_current = false;
1419 mutex_unlock(&iqs269->lock);
1427 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1431 error = iqs269_ati_mode_get(iqs269, iqs269->ch_num, &val);
1442 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1450 error = iqs269_ati_mode_set(iqs269, iqs269->ch_num, val);
1460 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1464 error = iqs269_ati_base_get(iqs269, iqs269->ch_num, &val);
1475 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1483 error = iqs269_ati_base_set(iqs269, iqs269->ch_num, val);
1493 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1497 error = iqs269_ati_target_get(iqs269, iqs269->ch_num, &val);
1508 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1516 error = iqs269_ati_target_set(iqs269, iqs269->ch_num, val);
1526 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1529 iqs269->ati_current &&
1530 completion_done(&iqs269->ati_done));
1537 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1538 struct i2c_client *client = iqs269->client;
1550 reinit_completion(&iqs269->ati_done);
1552 error = iqs269_dev_init(iqs269);
1560 if (!wait_for_completion_timeout(&iqs269->ati_done,
1603 struct iqs269_private *iqs269;
1606 iqs269 = devm_kzalloc(&client->dev, sizeof(*iqs269), GFP_KERNEL);
1607 if (!iqs269)
1610 i2c_set_clientdata(client, iqs269);
1611 iqs269->client = client;
1613 iqs269->regmap = devm_regmap_init_i2c(client, &iqs269_regmap_config);
1614 if (IS_ERR(iqs269->regmap)) {
1615 error = PTR_ERR(iqs269->regmap);
1621 mutex_init(&iqs269->lock);
1622 init_completion(&iqs269->ati_done);
1624 error = regmap_raw_read(iqs269->regmap, IQS269_VER_INFO, &ver_info,
1635 error = iqs269_parse_prop(iqs269);
1639 error = iqs269_dev_init(iqs269);
1646 error = iqs269_input_init(iqs269);
1652 client->name, iqs269);
1658 if (!wait_for_completion_timeout(&iqs269->ati_done,
1668 error = input_register_device(iqs269->keypad);
1681 static u16 iqs269_general_get(struct iqs269_private *iqs269)
1683 u16 general = be16_to_cpu(iqs269->sys_reg.general);
1693 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1694 struct i2c_client *client = iqs269->client;
1696 u16 general = iqs269_general_get(iqs269);
1703 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS, general);
1713 struct iqs269_private *iqs269 = dev_get_drvdata(dev);
1714 struct i2c_client *client = iqs269->client;
1716 u16 general = iqs269_general_get(iqs269);
1723 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS,
1726 error = regmap_write(iqs269->regmap, IQS269_SYS_SETTINGS,