Lines Matching full:iqs62x
14 * Link to conversion tool: https://github.com/jlabundy/iqs62x-h2bin.git
27 #include <linux/mfd/iqs62x.h>
110 static int iqs62x_dev_init(struct iqs62x_core *iqs62x) in iqs62x_dev_init() argument
117 list_for_each_entry(fw_blk, &iqs62x->fw_blk_head, list) { in iqs62x_dev_init()
119 ret = regmap_update_bits(iqs62x->regmap, fw_blk->addr, in iqs62x_dev_init()
122 ret = regmap_raw_write(iqs62x->regmap, fw_blk->addr, in iqs62x_dev_init()
128 switch (iqs62x->dev_desc->prod_num) { in iqs62x_dev_init()
131 ret = regmap_read(iqs62x->regmap, in iqs62x_dev_init()
132 iqs62x->dev_desc->prox_settings, &val); in iqs62x_dev_init()
137 iqs62x->ui_sel = IQS62X_UI_SAR1; in iqs62x_dev_init()
142 ret = regmap_write(iqs62x->regmap, IQS620_GLBL_EVENT_MASK, in iqs62x_dev_init()
144 iqs62x->dev_desc->prox_mask | in iqs62x_dev_init()
145 iqs62x->dev_desc->sar_mask | in iqs62x_dev_init()
146 iqs62x->dev_desc->hall_mask | in iqs62x_dev_init()
147 iqs62x->dev_desc->hyst_mask | in iqs62x_dev_init()
148 iqs62x->dev_desc->temp_mask | in iqs62x_dev_init()
149 iqs62x->dev_desc->als_mask | in iqs62x_dev_init()
150 iqs62x->dev_desc->ir_mask); in iqs62x_dev_init()
156 ret = regmap_write(iqs62x->regmap, IQS624_HALL_UI, in iqs62x_dev_init()
173 ret = regmap_read(iqs62x->regmap, IQS624_INTERVAL_DIV, &val); in iqs62x_dev_init()
177 if (val >= iqs62x->dev_desc->interval_div) in iqs62x_dev_init()
180 ret = regmap_write(iqs62x->regmap, IQS624_INTERVAL_DIV, in iqs62x_dev_init()
181 iqs62x->dev_desc->interval_div); in iqs62x_dev_init()
186 ret = regmap_read(iqs62x->regmap, IQS62X_SYS_SETTINGS, &val); in iqs62x_dev_init()
191 clk_div = iqs62x->dev_desc->clk_div; in iqs62x_dev_init()
193 ret = regmap_write(iqs62x->regmap, IQS62X_SYS_SETTINGS, val | in iqs62x_dev_init()
200 ret = regmap_read_poll_timeout(iqs62x->regmap, IQS62X_SYS_FLAGS, val, in iqs62x_dev_init()
212 static int iqs62x_firmware_parse(struct iqs62x_core *iqs62x, in iqs62x_firmware_parse() argument
215 struct i2c_client *client = iqs62x->client; in iqs62x_firmware_parse()
243 if (fw_rec->data == iqs62x->dev_desc->prod_num) in iqs62x_firmware_parse()
254 ret = regmap_write(iqs62x->regmap, in iqs62x_firmware_parse()
260 ret = regmap_read(iqs62x->regmap, in iqs62x_firmware_parse()
324 list_add(&fw_blk->list, &iqs62x->fw_blk_head); in iqs62x_firmware_parse()
443 struct iqs62x_core *iqs62x = context; in iqs62x_irq() local
444 struct i2c_client *client = iqs62x->client; in iqs62x_irq()
458 ret = regmap_raw_read(iqs62x->regmap, IQS62X_SYS_FLAGS, event_map, in iqs62x_irq()
467 event_reg = iqs62x->dev_desc->event_regs[iqs62x->ui_sel][i]; in iqs62x_irq()
492 event_map[i] <<= iqs62x->dev_desc->hyst_shift; in iqs62x_irq()
522 ret = iqs62x_dev_init(iqs62x); in iqs62x_irq()
530 ret = blocking_notifier_call_chain(&iqs62x->nh, event_flags, in iqs62x_irq()
547 struct iqs62x_core *iqs62x = context; in iqs62x_firmware_load() local
548 struct i2c_client *client = iqs62x->client; in iqs62x_firmware_load()
552 ret = iqs62x_firmware_parse(iqs62x, fw); in iqs62x_firmware_load()
560 ret = iqs62x_dev_init(iqs62x); in iqs62x_firmware_load()
568 client->name, iqs62x); in iqs62x_firmware_load()
575 iqs62x->dev_desc->sub_devs, in iqs62x_firmware_load()
576 iqs62x->dev_desc->num_sub_devs, in iqs62x_firmware_load()
582 complete_all(&iqs62x->fw_done); in iqs62x_firmware_load()
587 .name = "iqs62x-keys",
599 .name = "iqs62x-keys",
610 .name = "iqs62x-keys",
618 .name = "iqs62x-keys",
626 .name = "iqs62x-keys",
634 .name = "iqs62x-keys",
881 struct iqs62x_core *iqs62x; in iqs62x_probe() local
888 iqs62x = devm_kzalloc(&client->dev, sizeof(*iqs62x), GFP_KERNEL); in iqs62x_probe()
889 if (!iqs62x) in iqs62x_probe()
892 i2c_set_clientdata(client, iqs62x); in iqs62x_probe()
893 iqs62x->client = client; in iqs62x_probe()
895 BLOCKING_INIT_NOTIFIER_HEAD(&iqs62x->nh); in iqs62x_probe()
896 INIT_LIST_HEAD(&iqs62x->fw_blk_head); in iqs62x_probe()
897 init_completion(&iqs62x->fw_done); in iqs62x_probe()
899 iqs62x->regmap = devm_regmap_init_i2c(client, &iqs62x_map_config); in iqs62x_probe()
900 if (IS_ERR(iqs62x->regmap)) { in iqs62x_probe()
901 ret = PTR_ERR(iqs62x->regmap); in iqs62x_probe()
907 ret = regmap_raw_read(iqs62x->regmap, IQS62X_PROD_NUM, &info, in iqs62x_probe()
929 iqs62x->dev_desc = &iqs62x_devs[i]; in iqs62x_probe()
931 if (info.sw_num < iqs62x->dev_desc->sw_num) in iqs62x_probe()
943 for (j = 0; j < iqs62x->dev_desc->num_cal_regs; j++) { in iqs62x_probe()
944 ret = regmap_read(iqs62x->regmap, in iqs62x_probe()
945 iqs62x->dev_desc->cal_regs[j], &val); in iqs62x_probe()
960 if (j == iqs62x->dev_desc->num_cal_regs) in iqs62x_probe()
964 if (!iqs62x->dev_desc) { in iqs62x_probe()
984 fw_name ? : iqs62x->dev_desc->fw_name, in iqs62x_probe()
985 &client->dev, GFP_KERNEL, iqs62x, in iqs62x_probe()
995 struct iqs62x_core *iqs62x = i2c_get_clientdata(client); in iqs62x_remove() local
997 wait_for_completion(&iqs62x->fw_done); in iqs62x_remove()
1004 struct iqs62x_core *iqs62x = dev_get_drvdata(dev); in iqs62x_suspend() local
1007 wait_for_completion(&iqs62x->fw_done); in iqs62x_suspend()
1013 ret = regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS, in iqs62x_suspend()
1018 return regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS, in iqs62x_suspend()
1025 struct iqs62x_core *iqs62x = dev_get_drvdata(dev); in iqs62x_resume() local
1028 ret = regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS, in iqs62x_resume()
1034 return regmap_update_bits(iqs62x->regmap, IQS62X_PWR_SETTINGS, in iqs62x_resume()
1052 .name = "iqs62x",