Lines Matching full:client

99 	struct i2c_client *client;  member
129 static int iqs5xx_read_burst(struct i2c_client *client, in iqs5xx_read_burst() argument
136 .addr = client->addr, in iqs5xx_read_burst()
142 .addr = client->addr, in iqs5xx_read_burst()
155 ret = i2c_transfer(client->adapter, msg, ARRAY_SIZE(msg)); in iqs5xx_read_burst()
165 dev_err(&client->dev, "Failed to read from address 0x%04X: %d\n", in iqs5xx_read_burst()
171 static int iqs5xx_read_word(struct i2c_client *client, u16 reg, u16 *val) in iqs5xx_read_word() argument
176 error = iqs5xx_read_burst(client, reg, &val_buf, sizeof(val_buf)); in iqs5xx_read_word()
185 static int iqs5xx_read_byte(struct i2c_client *client, u16 reg, u8 *val) in iqs5xx_read_byte() argument
187 return iqs5xx_read_burst(client, reg, val, sizeof(*val)); in iqs5xx_read_byte()
190 static int iqs5xx_write_burst(struct i2c_client *client, in iqs5xx_write_burst() argument
209 ret = i2c_master_send(client, mbuf, mlen); in iqs5xx_write_burst()
219 dev_err(&client->dev, "Failed to write to address 0x%04X: %d\n", in iqs5xx_write_burst()
225 static int iqs5xx_write_word(struct i2c_client *client, u16 reg, u16 val) in iqs5xx_write_word() argument
229 return iqs5xx_write_burst(client, reg, &val_buf, sizeof(val_buf)); in iqs5xx_write_word()
232 static int iqs5xx_write_byte(struct i2c_client *client, u16 reg, u8 val) in iqs5xx_write_byte() argument
234 return iqs5xx_write_burst(client, reg, &val, sizeof(val)); in iqs5xx_write_byte()
237 static void iqs5xx_reset(struct i2c_client *client) in iqs5xx_reset() argument
239 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_reset()
247 static int iqs5xx_bl_cmd(struct i2c_client *client, u8 bl_cmd, u16 bl_addr) in iqs5xx_bl_cmd() argument
253 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_cmd()
273 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_cmd()
299 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_cmd()
305 dev_err(&client->dev, "Unrecognized bootloader ID: 0x%04X\n", in iqs5xx_bl_cmd()
311 dev_err(&client->dev, "Bootloader CRC failed\n"); in iqs5xx_bl_cmd()
322 dev_err(&client->dev, in iqs5xx_bl_cmd()
329 static int iqs5xx_bl_open(struct i2c_client *client) in iqs5xx_bl_open() argument
339 iqs5xx_reset(client); in iqs5xx_bl_open()
342 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0); in iqs5xx_bl_open()
348 dev_err(&client->dev, "Failed to open bootloader: %d\n", error); in iqs5xx_bl_open()
353 static int iqs5xx_bl_write(struct i2c_client *client, in iqs5xx_bl_write() argument
363 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_write()
373 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_write()
386 dev_err(&client->dev, "Failed to write block at address 0x%04X: %d\n", in iqs5xx_bl_write()
392 static int iqs5xx_bl_verify(struct i2c_client *client, in iqs5xx_bl_verify() argument
402 msg.addr = client->addr ^ IQS5XX_BL_ADDR_MASK; in iqs5xx_bl_verify()
408 ret = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_READ, bl_addr + i); in iqs5xx_bl_verify()
412 ret = i2c_transfer(client->adapter, &msg, 1); in iqs5xx_bl_verify()
417 dev_err(&client->dev, in iqs5xx_bl_verify()
430 dev_err(&client->dev, "Failed to read block at address 0x%04X: %d\n", in iqs5xx_bl_verify()
436 static int iqs5xx_set_state(struct i2c_client *client, u8 state) in iqs5xx_set_state() argument
438 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_set_state()
451 disable_irq(client->irq); in iqs5xx_set_state()
453 error1 = iqs5xx_write_byte(client, IQS5XX_SYS_CTRL1, state); in iqs5xx_set_state()
454 error2 = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_set_state()
457 enable_irq(client->irq); in iqs5xx_set_state()
471 return iqs5xx_set_state(iqs5xx->client, IQS5XX_RESUME); in iqs5xx_open()
478 iqs5xx_set_state(iqs5xx->client, IQS5XX_SUSPEND); in iqs5xx_close()
481 static int iqs5xx_axis_init(struct i2c_client *client) in iqs5xx_axis_init() argument
483 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_axis_init()
492 input = devm_input_allocate_device(&client->dev); in iqs5xx_axis_init()
496 input->name = client->name; in iqs5xx_axis_init()
511 error = iqs5xx_read_byte(client, IQS5XX_TOTAL_RX, &val); in iqs5xx_axis_init()
516 error = iqs5xx_read_byte(client, IQS5XX_TOTAL_TX, &val); in iqs5xx_axis_init()
521 error = iqs5xx_read_byte(client, IQS5XX_XY_CFG0, &val); in iqs5xx_axis_init()
537 error = iqs5xx_write_byte(client, IQS5XX_XY_CFG0, val); in iqs5xx_axis_init()
542 dev_err(&client->dev, "Invalid maximum x-coordinate: %u > %u\n", in iqs5xx_axis_init()
546 error = iqs5xx_read_word(client, IQS5XX_X_RES, &max_x); in iqs5xx_axis_init()
559 dev_err(&client->dev, "Invalid maximum y-coordinate: %u > %u\n", in iqs5xx_axis_init()
563 error = iqs5xx_read_word(client, IQS5XX_Y_RES, &max_y); in iqs5xx_axis_init()
580 error = iqs5xx_write_word(client, in iqs5xx_axis_init()
586 error = iqs5xx_write_word(client, in iqs5xx_axis_init()
595 dev_err(&client->dev, "Failed to initialize slots: %d\n", in iqs5xx_axis_init()
601 static int iqs5xx_dev_init(struct i2c_client *client) in iqs5xx_dev_init() argument
603 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_dev_init()
609 error = iqs5xx_read_burst(client, IQS5XX_PROD_NUM, in iqs5xx_dev_init()
612 return iqs5xx_bl_open(client); in iqs5xx_dev_init()
630 dev_err(&client->dev, "Unrecognized product number: %u\n", in iqs5xx_dev_init()
637 dev_err(&client->dev, "Unsupported project number: %u\n", in iqs5xx_dev_init()
639 return iqs5xx_bl_open(client); in iqs5xx_dev_init()
643 dev_err(&client->dev, "Unrecognized project number: %u\n", in iqs5xx_dev_init()
649 dev_err(&client->dev, "Unsupported major version: %u\n", in iqs5xx_dev_init()
651 return iqs5xx_bl_open(client); in iqs5xx_dev_init()
659 dev_err(&client->dev, in iqs5xx_dev_init()
665 error = iqs5xx_axis_init(client); in iqs5xx_dev_init()
669 error = iqs5xx_read_byte(client, IQS5XX_SYS_CFG0, &val); in iqs5xx_dev_init()
675 error = iqs5xx_write_byte(client, IQS5XX_SYS_CFG0, val); in iqs5xx_dev_init()
680 error = iqs5xx_write_byte(client, IQS5XX_SYS_CFG1, val); in iqs5xx_dev_init()
684 error = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_dev_init()
706 struct i2c_client *client = iqs5xx->client; in iqs5xx_irq() local
718 error = iqs5xx_read_burst(client, IQS5XX_ABS_X, in iqs5xx_irq()
740 error = iqs5xx_write_byte(client, IQS5XX_END_COMM, 0); in iqs5xx_irq()
754 static int iqs5xx_fw_file_parse(struct i2c_client *client, in iqs5xx_fw_file_parse() argument
776 error = request_firmware(&fw, fw_file, &client->dev); in iqs5xx_fw_file_parse()
778 dev_err(&client->dev, "Failed to request firmware %s: %d\n", in iqs5xx_fw_file_parse()
785 dev_err(&client->dev, "Insufficient firmware size\n"); in iqs5xx_fw_file_parse()
793 dev_err(&client->dev, "Invalid start at record %u\n", in iqs5xx_fw_file_parse()
801 dev_err(&client->dev, "Invalid header at record %u\n", in iqs5xx_fw_file_parse()
811 dev_err(&client->dev, "Insufficient firmware size\n"); in iqs5xx_fw_file_parse()
819 dev_err(&client->dev, "Invalid data at record %u\n", in iqs5xx_fw_file_parse()
827 dev_err(&client->dev, "Invalid checksum at record %u\n", in iqs5xx_fw_file_parse()
840 dev_err(&client->dev, in iqs5xx_fw_file_parse()
851 dev_err(&client->dev, in iqs5xx_fw_file_parse()
863 dev_err(&client->dev, "Invalid type at record %u\n", in iqs5xx_fw_file_parse()
884 static int iqs5xx_fw_file_write(struct i2c_client *client, const char *fw_file) in iqs5xx_fw_file_write() argument
886 struct iqs5xx_private *iqs5xx = i2c_get_clientdata(client); in iqs5xx_fw_file_write()
897 error = iqs5xx_fw_file_parse(client, fw_file, pmap); in iqs5xx_fw_file_write()
908 disable_irq(client->irq); in iqs5xx_fw_file_write()
912 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_VER, 0); in iqs5xx_fw_file_write()
914 error = iqs5xx_bl_open(client); in iqs5xx_fw_file_write()
919 error = iqs5xx_bl_write(client, IQS5XX_CHKSM, pmap, IQS5XX_PMAP_LEN); in iqs5xx_fw_file_write()
923 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_CRC, 0); in iqs5xx_fw_file_write()
927 error = iqs5xx_bl_verify(client, IQS5XX_CSTM, in iqs5xx_fw_file_write()
933 error = iqs5xx_bl_cmd(client, IQS5XX_BL_CMD_EXEC, 0); in iqs5xx_fw_file_write()
937 iqs5xx_reset(client); in iqs5xx_fw_file_write()
941 error = iqs5xx_dev_init(client); in iqs5xx_fw_file_write()
945 enable_irq(client->irq); in iqs5xx_fw_file_write()
959 struct i2c_client *client = iqs5xx->client; in fw_file_store() local
977 error = iqs5xx_fw_file_write(client, fw_file); in fw_file_store()
988 dev_err(&client->dev, in fw_file_store()
1021 error = iqs5xx_set_state(iqs5xx->client, IQS5XX_SUSPEND); in iqs5xx_suspend()
1040 error = iqs5xx_set_state(iqs5xx->client, IQS5XX_RESUME); in iqs5xx_resume()
1049 static int iqs5xx_probe(struct i2c_client *client, in iqs5xx_probe() argument
1055 iqs5xx = devm_kzalloc(&client->dev, sizeof(*iqs5xx), GFP_KERNEL); in iqs5xx_probe()
1059 i2c_set_clientdata(client, iqs5xx); in iqs5xx_probe()
1060 iqs5xx->client = client; in iqs5xx_probe()
1062 iqs5xx->reset_gpio = devm_gpiod_get(&client->dev, in iqs5xx_probe()
1066 dev_err(&client->dev, "Failed to request GPIO: %d\n", error); in iqs5xx_probe()
1072 iqs5xx_reset(client); in iqs5xx_probe()
1075 error = iqs5xx_dev_init(client); in iqs5xx_probe()
1079 error = devm_request_threaded_irq(&client->dev, client->irq, in iqs5xx_probe()
1081 client->name, iqs5xx); in iqs5xx_probe()
1083 dev_err(&client->dev, "Failed to request IRQ: %d\n", error); in iqs5xx_probe()
1087 error = devm_device_add_group(&client->dev, &iqs5xx_attr_group); in iqs5xx_probe()
1089 dev_err(&client->dev, "Failed to add attributes: %d\n", error); in iqs5xx_probe()
1096 dev_err(&client->dev, in iqs5xx_probe()