Lines Matching full:client
119 struct i2c_client *client; member
128 static int iqs5xx_read_burst(struct i2c_client *client, in iqs5xx_read_burst() argument
135 .addr = client->addr, in iqs5xx_read_burst()
141 .addr = client->addr, in iqs5xx_read_burst()
154 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); in iqs5xx_read_burst()
164 dev_err(&client->dev, "Failed to read from address 0x%04X: %d\n", in iqs5xx_read_burst()
170 static int iqs5xx_read_word(struct i2c_client *client, u16 reg, u16 *val) in iqs5xx_read_word() argument
175 error = iqs5xx_read_burst(client, reg, &val_buf, sizeof(val_buf)); in iqs5xx_read_word()
184 static int iqs5xx_write_burst(struct i2c_client *client, in iqs5xx_write_burst() argument
203 ret = i2c_master_send(client, mbuf, mlen); in iqs5xx_write_burst()
213 dev_err(&client->dev, "Failed to write to address 0x%04X: %d\n", in iqs5xx_write_burst()
219 static int iqs5xx_write_word(struct i2c_client *client, u16 reg, u16 val) in iqs5xx_write_word() argument
223 return iqs5xx_write_burst(client, reg, &val_buf, sizeof(val_buf)); in iqs5xx_write_word()
226 static int iqs5xx_write_byte(struct i2c_client *client, u16 reg, u8 val) in iqs5xx_write_byte() argument
228 return iqs5xx_write_burst(client, reg, &val, sizeof(val)); in iqs5xx_write_byte()
231 static void iqs5xx_reset(struct i2c_client *client) in iqs5xx_reset() argument
233 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_reset()
241 static int iqs5xx_bl_cmd(struct i2c_client *client, u8 bl_cmd, u16 bl_addr) in iqs5xx_bl_cmd() argument
247 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_cmd()
267 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_cmd()
293 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_cmd()
299 dev_err(&client->dev, "Unrecognized bootloader ID: 0x%04X\n", in iqs5xx_bl_cmd()
305 dev_err(&client->dev, "Bootloader CRC failed\n"); in iqs5xx_bl_cmd()
316 dev_err(&client->dev, in iqs5xx_bl_cmd()
323 static int iqs5xx_bl_open(struct i2c_client *client) in iqs5xx_bl_open() argument
333 iqs5xx_reset(client); in iqs5xx_bl_open()
337 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0); in iqs5xx_bl_open()
347 dev_err(&client->dev, "Failed to open bootloader: %d\n", error); in iqs5xx_bl_open()
352 static int iqs5xx_bl_write(struct i2c_client *client, in iqs5xx_bl_write() argument
362 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_write()
372 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_write()
385 dev_err(&client->dev, "Failed to write block at address 0x%04X: %d\n", in iqs5xx_bl_write()
391 static int iqs5xx_bl_verify(struct i2c_client *client, in iqs5xx_bl_verify() argument
401 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_verify()
407 ret = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_READ, bl_addr + i); in iqs5xx_bl_verify()
411 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_verify()
416 dev_err(&client->dev, in iqs5xx_bl_verify()
429 dev_err(&client->dev, "Failed to read block at address 0x%04X: %d\n", in iqs5xx_bl_verify()
435 static int iqs5xx_set_state(struct i2c_client *client, u8 state) in iqs5xx_set_state() argument
437 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_set_state()
450 guard(disable_irq)(&client->irq); in iqs5xx_set_state()
452 error1 = iqs5xx_write_byte(client, IQS5XX_SYS_CTRL1, state); in iqs5xx_set_state()
453 error2 = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_set_state()
464 return iqs5xx_set_state(iqs5xx->client, IQS5XX_RESUME); in iqs5xx_open()
471 iqs5xx_set_state(iqs5xx->client, IQS5XX_SUSPEND); in iqs5xx_close()
474 static int iqs5xx_axis_init(struct i2c_client *client) in iqs5xx_axis_init() argument
476 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_axis_init()
483 input = devm_input_allocate_device(&client->dev); in iqs5xx_axis_init()
487 input->name = client->name; in iqs5xx_axis_init()
496 error = iqs5xx_read_word(client, IQS5XX_X_RES, &max_x); in iqs5xx_axis_init()
500 error = iqs5xx_read_word(client, IQS5XX_Y_RES, &max_y); in iqs5xx_axis_init()
515 dev_err(&client->dev, "Invalid touchscreen size: %u*%u\n", in iqs5xx_axis_init()
521 error = iqs5xx_write_word(client, IQS5XX_X_RES, prop->max_x); in iqs5xx_axis_init()
527 error = iqs5xx_write_word(client, IQS5XX_Y_RES, prop->max_y); in iqs5xx_axis_init()
535 dev_err(&client->dev, "Failed to initialize slots: %d\n", in iqs5xx_axis_init()
541 static int iqs5xx_dev_init(struct i2c_client *client) in iqs5xx_dev_init() argument
543 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_dev_init()
548 error = iqs5xx_read_burst(client, IQS5XX_PROD_NUM, in iqs5xx_dev_init()
551 return iqs5xx_bl_open(client); in iqs5xx_dev_init()
569 dev_err(&client->dev, "Unrecognized product number: %u\n", in iqs5xx_dev_init()
580 dev_err(&client->dev, "Opening bootloader for A000 device\n"); in iqs5xx_dev_init()
581 return iqs5xx_bl_open(client); in iqs5xx_dev_init()
584 error = iqs5xx_read_burst(client, IQS5XX_EXP_FILE, in iqs5xx_dev_init()
589 error = iqs5xx_axis_init(client); in iqs5xx_dev_init()
593 error = iqs5xx_write_byte(client, IQS5XX_SYS_CTRL0, IQS5XX_ACK_RESET); in iqs5xx_dev_init()
597 error = iqs5xx_write_byte(client, IQS5XX_SYS_CFG0, in iqs5xx_dev_init()
603 error = iqs5xx_write_byte(client, IQS5XX_SYS_CFG1, in iqs5xx_dev_init()
608 error = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_dev_init()
629 struct i2c_client *client = iqs5xx->client; in iqs5xx_irq() local
641 error = iqs5xx_read_burst(client, IQS5XX_SYS_INFO0, in iqs5xx_irq()
647 dev_err(&client->dev, "Unexpected device reset\n"); in iqs5xx_irq()
649 error = iqs5xx_dev_init(client); in iqs5xx_irq()
651 dev_err(&client->dev, in iqs5xx_irq()
677 error = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_irq()
691 static int iqs5xx_fw_file_parse(struct i2c_client *client, in iqs5xx_fw_file_parse() argument
712 error = request_firmware(&fw, fw_file, &client->dev); in iqs5xx_fw_file_parse()
714 dev_err(&client->dev, "Failed to request firmware %s: %d\n", in iqs5xx_fw_file_parse()
721 dev_err(&client->dev, "Insufficient firmware size\n"); in iqs5xx_fw_file_parse()
726 dev_err(&client->dev, "Invalid start at record %u\n", in iqs5xx_fw_file_parse()
734 dev_err(&client->dev, "Invalid header at record %u\n", in iqs5xx_fw_file_parse()
750 dev_err(&client->dev, "Insufficient firmware size\n"); in iqs5xx_fw_file_parse()
756 dev_err(&client->dev, "Invalid data at record %u\n", in iqs5xx_fw_file_parse()
764 dev_err(&client->dev, "Invalid checksum at record %u\n", in iqs5xx_fw_file_parse()
778 dev_err(&client->dev, in iqs5xx_fw_file_parse()
790 dev_err(&client->dev, in iqs5xx_fw_file_parse()
804 dev_err(&client->dev, "Invalid type at record %u\n", in iqs5xx_fw_file_parse()
822 struct i2c_client *client = iqs5xx->client; in iqs5xx_update_firmware() local
827 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0); in iqs5xx_update_firmware()
829 error = iqs5xx_bl_open(client); in iqs5xx_update_firmware()
834 error = iqs5xx_bl_write(client, IQS5XX_CHKSM, pmap, IQS5XX_PMAP_LEN); in iqs5xx_update_firmware()
838 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_CRC, 0); in iqs5xx_update_firmware()
842 error = iqs5xx_bl_verify(client, IQS5XX_CSTM, in iqs5xx_update_firmware()
851 static int iqs5xx_fw_file_write(struct i2c_client *client, const char *fw_file) in iqs5xx_fw_file_write() argument
853 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_fw_file_write()
860 error = iqs5xx_fw_file_parse(client, fw_file, pmap); in iqs5xx_fw_file_write()
871 guard(disable_irq)(&client->irq); in iqs5xx_fw_file_write()
875 iqs5xx_reset(client); in iqs5xx_fw_file_write()
878 error_init = iqs5xx_dev_init(client); in iqs5xx_fw_file_write()
890 struct i2c_client *client = iqs5xx->client; in fw_file_store() local
908 error = iqs5xx_fw_file_write(client, fw_file); in fw_file_store()
919 dev_err(&client->dev, in fw_file_store()
984 return iqs5xx_set_state(iqs5xx->client, IQS5XX_SUSPEND); in iqs5xx_suspend()
999 return iqs5xx_set_state(iqs5xx->client, IQS5XX_RESUME); in iqs5xx_resume()
1006 static int iqs5xx_probe(struct i2c_client *client) in iqs5xx_probe() argument
1011 iqs5xx = devm_kzalloc(&client->dev, sizeof(*iqs5xx), GFP_KERNEL); in iqs5xx_probe()
1015 i2c_set_clientdata(client, iqs5xx); in iqs5xx_probe()
1016 iqs5xx->client = client; in iqs5xx_probe()
1018 iqs5xx->reset_gpio = devm_gpiod_get_optional(&client->dev, in iqs5xx_probe()
1022 dev_err(&client->dev, "Failed to request GPIO: %d\n", error); in iqs5xx_probe()
1028 error = iqs5xx_dev_init(client); in iqs5xx_probe()
1032 error = devm_request_threaded_irq(&client->dev, client->irq, in iqs5xx_probe()
1034 client->name, iqs5xx); in iqs5xx_probe()
1036 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); in iqs5xx_probe()
1043 dev_err(&client->dev, in iqs5xx_probe()