Lines Matching defs:iqs62x

14  * Link to conversion tool: https://github.com/jlabundy/iqs62x-h2bin.git
27 #include <linux/mfd/iqs62x.h>
108 static int iqs62x_dev_init(struct iqs62x_core *iqs62x)
114 list_for_each_entry(fw_blk, &iqs62x->fw_blk_head, list) {
124 ret = regmap_update_bits(iqs62x->regmap, fw_blk->addr,
127 ret = regmap_raw_write(iqs62x->regmap, fw_blk->addr,
133 switch (iqs62x->dev_desc->prod_num) {
136 ret = regmap_read(iqs62x->regmap,
137 iqs62x->dev_desc->prox_settings, &val);
142 iqs62x->ui_sel = IQS62X_UI_SAR1;
146 ret = regmap_write(iqs62x->regmap, IQS620_GLBL_EVENT_MASK,
148 iqs62x->dev_desc->prox_mask |
149 iqs62x->dev_desc->sar_mask |
150 iqs62x->dev_desc->hall_mask |
151 iqs62x->dev_desc->hyst_mask |
152 iqs62x->dev_desc->temp_mask |
153 iqs62x->dev_desc->als_mask |
154 iqs62x->dev_desc->ir_mask);
160 ret = regmap_write(iqs62x->regmap, IQS624_HALL_UI,
177 ret = regmap_read(iqs62x->regmap, IQS624_INTERVAL_DIV, &val);
181 if (val >= iqs62x->dev_desc->interval_div)
184 ret = regmap_write(iqs62x->regmap, IQS624_INTERVAL_DIV,
185 iqs62x->dev_desc->interval_div);
200 ret = regmap_update_bits(iqs62x->regmap, IQS62X_SYS_SETTINGS,
220 static int iqs62x_firmware_parse(struct iqs62x_core *iqs62x,
223 struct i2c_client *client = iqs62x->client;
251 if (fw_rec->data == iqs62x->dev_desc->prod_num)
262 ret = regmap_write(iqs62x->regmap,
268 ret = regmap_read(iqs62x->regmap,
332 list_add(&fw_blk->list, &iqs62x->fw_blk_head);
456 struct iqs62x_core *iqs62x = context;
457 struct i2c_client *client = iqs62x->client;
471 ret = regmap_raw_read(iqs62x->regmap, IQS62X_SYS_FLAGS, event_map,
480 event_reg = iqs62x->dev_desc->event_regs[iqs62x->ui_sel][i];
504 event_map[i] <<= iqs62x->dev_desc->hyst_shift;
533 ret = iqs62x_dev_init(iqs62x);
540 iqs62x->event_cache |= BIT(IQS62X_EVENT_SYS_RESET);
541 reinit_completion(&iqs62x->ati_done);
543 iqs62x->event_cache |= BIT(IQS62X_EVENT_SYS_ATI);
544 reinit_completion(&iqs62x->ati_done);
545 } else if (!completion_done(&iqs62x->ati_done)) {
546 ret = regmap_update_bits(iqs62x->regmap, IQS62X_SYS_SETTINGS,
555 complete_all(&iqs62x->ati_done);
563 if (completion_done(&iqs62x->ati_done)) {
564 event_flags |= iqs62x->event_cache;
565 ret = blocking_notifier_call_chain(&iqs62x->nh, event_flags,
570 iqs62x->event_cache = 0;
585 struct iqs62x_core *iqs62x = context;
586 struct i2c_client *client = iqs62x->client;
590 ret = iqs62x_firmware_parse(iqs62x, fw);
598 ret = iqs62x_dev_init(iqs62x);
606 client->name, iqs62x);
612 if (!wait_for_completion_timeout(&iqs62x->ati_done,
619 iqs62x->dev_desc->sub_devs,
620 iqs62x->dev_desc->num_sub_devs,
626 complete_all(&iqs62x->fw_done);
631 .name = "iqs62x-keys",
643 .name = "iqs62x-keys",
654 .name = "iqs62x-keys",
662 .name = "iqs62x-keys",
670 .name = "iqs62x-keys",
678 .name = "iqs62x-keys",
897 struct iqs62x_core *iqs62x;
903 iqs62x = devm_kzalloc(&client->dev, sizeof(*iqs62x), GFP_KERNEL);
904 if (!iqs62x)
907 i2c_set_clientdata(client, iqs62x);
908 iqs62x->client = client;
910 BLOCKING_INIT_NOTIFIER_HEAD(&iqs62x->nh);
911 INIT_LIST_HEAD(&iqs62x->fw_blk_head);
913 init_completion(&iqs62x->ati_done);
914 init_completion(&iqs62x->fw_done);
916 iqs62x->regmap = devm_regmap_init_i2c(client, &iqs62x_regmap_config);
917 if (IS_ERR(iqs62x->regmap)) {
918 ret = PTR_ERR(iqs62x->regmap);
924 ret = regmap_raw_read(iqs62x->regmap, IQS62X_PROD_NUM, &info,
946 iqs62x->dev_desc = &iqs62x_devs[i];
948 if (info.sw_num < iqs62x->dev_desc->sw_num)
951 iqs62x->sw_num = info.sw_num;
952 iqs62x->hw_num = info.hw_num;
961 for (j = 0; j < iqs62x->dev_desc->num_cal_regs; j++) {
962 ret = regmap_read(iqs62x->regmap,
963 iqs62x->dev_desc->cal_regs[j], &val);
978 if (j == iqs62x->dev_desc->num_cal_regs)
982 if (!iqs62x->dev_desc) {
988 if (!iqs62x->sw_num) {
1002 fw_name ? : iqs62x->dev_desc->fw_name,
1003 &client->dev, GFP_KERNEL, iqs62x,
1013 struct iqs62x_core *iqs62x = i2c_get_clientdata(client);
1015 wait_for_completion(&iqs62x->fw_done);
1020 struct iqs62x_core *iqs62x = dev_get_drvdata(dev);
1023 wait_for_completion(&iqs62x->fw_done);
1029 ret = regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS,
1034 return regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS,
1041 struct iqs62x_core *iqs62x = dev_get_drvdata(dev);
1044 ret = regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS,
1050 return regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS,
1068 .name = "iqs62x",