/******************************************************* Function: Write data to the i2c slave device. Input: client: i2c device. buf[0~1]: write start address. buf[2~len-1]: data buffer len: GTP_ADDR_LENGTH + write bytes count Output: numbers of i2c_msgs to transfer: 1: succeed, otherwise: failed *********************************************************/ s32 gtp_i2c_write(struct i2c_client *client,u8 *buf,s32 len) { struct i2c_msg msg; s32 ret = -1; s32 retries = 0; GTP_DEBUG_FUNC(); msg.flags = !I2C_M_RD; msg.addr = client->addr; msg.len = len; msg.buf = buf; msg.scl_rate = 300 * 1000; // for Rockchip while(retries < 5) { ret = i2c_transfer(client->adapter, &msg, 1); if (ret == 1)break; retries++; } if((retries >= 5)) { #if GTP_SLIDE_WAKEUP if (DOZE_ENABLED == doze_status) { return ret; } #endif GTP_DEBUG("I2C communication timeout, resetting chip..."); gtp_reset_guitar(client, 10); } return ret; }
/******************************************************* Function: Read data from the i2c slave device. Input: client: i2c device. buf[0]:operate address. buf[1]~buf[len]:read data buffer. len:operate length. Output: numbers of i2c_msgs to transfer *********************************************************/ s32 gtp_i2c_read(struct i2c_client *client, u8 *buf, s32 len) { struct i2c_msg msgs[2]; s32 ret=-1; s32 retries = 0; GTP_DEBUG_FUNC(); msgs[0].flags = !I2C_M_RD; msgs[0].addr = client->addr; msgs[0].len = GTP_ADDR_LENGTH; msgs[0].buf = &buf[0]; msgs[1].flags = I2C_M_RD; msgs[1].addr = client->addr; msgs[1].len = len - GTP_ADDR_LENGTH; msgs[1].buf = &buf[GTP_ADDR_LENGTH]; while(retries < 5) { ret = i2c_transfer(client->adapter, msgs, 2); if(ret == 2)break; retries++; } if(retries >= 5) { GTP_DEBUG("I2C retry timeout, reset chip."); gtp_reset_guitar(client, 10); } return ret; }
/******************************************************* Function: write data to the i2c slave device. Input: client: i2c device. buf[0]:operate address. buf[1]~buf[len]:write data buffer. len:operate length. Output: numbers of i2c_msgs to transfer. *********************************************************/ s32 gtp_i2c_write(struct i2c_client *client,u8 *buf,s32 len) { struct i2c_msg msg; s32 ret=-1; s32 retries = 0; GTP_DEBUG_FUNC(); msg.flags = !I2C_M_RD; msg.addr = client->addr; msg.len = len; msg.buf = buf; while(retries < 5) { ret = i2c_transfer(client->adapter, &msg, 1); if (ret == 1)break; retries++; } if(retries >= 5) { GTP_DEBUG("I2C retry timeout, reset chip."); gtp_reset_guitar(client, 10); } return ret; }
int gtp_i2c_write(struct i2c_client *client, u8 *buf, int len) { struct goodix_ts_data *ts = i2c_get_clientdata(client); struct i2c_msg msg; int ret = -EIO; int retries = 0; msg.flags = !I2C_M_RD; msg.addr = client->addr; msg.len = len; msg.buf = buf; while (retries < 5) { ret = i2c_transfer(client->adapter, &msg, 1); if (ret == 1) break; retries++; } if ((retries >= 5)) { #if GTP_SLIDE_WAKEUP if (DOZE_ENABLED == doze_status) return ret; #endif if (init_done) gtp_reset_guitar(ts, 10); else dev_warn(&client->dev, "<GTP> gtp_reset_guitar exit init_done=%d:\n", init_done); } return ret; }
/******************************************************* Function: Read data from the i2c slave device. Input: client: i2c device. buf[0~1]: read start address. buf[2~len-1]: read data buffer. len: GTP_ADDR_LENGTH + read bytes count Output: numbers of i2c_msgs to transfer: 2: succeed, otherwise: failed *********************************************************/ s32 gtp_i2c_read(struct i2c_client *client, u8 *buf, s32 len) { struct i2c_msg msgs[2]; s32 ret=-1; s32 retries = 0; GTP_DEBUG_FUNC(); msgs[0].flags = !I2C_M_RD; msgs[0].addr = client->addr; msgs[0].len = GTP_ADDR_LENGTH; msgs[0].buf = &buf[0]; msgs[0].scl_rate = 300 * 1000; // for Rockchip msgs[1].flags = I2C_M_RD; msgs[1].addr = client->addr; msgs[1].len = len - GTP_ADDR_LENGTH; msgs[1].buf = &buf[GTP_ADDR_LENGTH]; msgs[1].scl_rate = 300 * 1000; while(retries < 5) { ret = i2c_transfer(client->adapter, msgs, 2); if(ret == 2)break; retries++; } if((retries >= 5)) { #if GTP_SLIDE_WAKEUP // reset chip would quit doze mode if (DOZE_ENABLED == doze_status) { return ret; } #endif GTP_DEBUG("I2C communication timeout, resetting chip..."); gtp_reset_guitar(client, 10); } return ret; }
int gtp_i2c_read(struct i2c_client *client, u8 *buf, int len) { struct goodix_ts_data *ts = i2c_get_clientdata(client); struct i2c_msg msgs[2]; int ret = -EIO; int retries = 0; msgs[0].flags = !I2C_M_RD; msgs[0].addr = client->addr; msgs[0].len = GTP_ADDR_LENGTH; msgs[0].buf = &buf[0]; msgs[1].flags = I2C_M_RD; msgs[1].addr = client->addr; msgs[1].len = len - GTP_ADDR_LENGTH; msgs[1].buf = &buf[GTP_ADDR_LENGTH]; while (retries < 5) { ret = i2c_transfer(client->adapter, msgs, 2); if (ret == 2) break; retries++; } if (retries >= 5) { #if GTP_SLIDE_WAKEUP if (DOZE_ENABLED == doze_status) return ret; #endif if (init_done) gtp_reset_guitar(ts, 10); else dev_warn(&client->dev, "<GTP> gtp_reset_guitar exit init_done=%d:\n", init_done); } return ret; }