Commit b999dbea authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Dmitry Torokhov

Input: st1232 - do not read more bytes than needed

st1232_ts_read_data() already reads ts->read_buf_len bytes (8 or 20
bytes) from the touchscreen controller.  This was fine when it was used
to read touch point coordinates only, but is overkill for reading the
touchscreen resolution, which just needs 3 bytes.

Optimize transfers by passing the wanted number of bytes.

Fixes: 3a54a215 ("Input: st1232 - add support resolution reading")
Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/20201229162601.2154566-3-geert+renesas@glider.beSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 928eedf0
...@@ -47,7 +47,8 @@ struct st1232_ts_data { ...@@ -47,7 +47,8 @@ struct st1232_ts_data {
u8 *read_buf; u8 *read_buf;
}; };
static int st1232_ts_read_data(struct st1232_ts_data *ts, u8 reg) static int st1232_ts_read_data(struct st1232_ts_data *ts, u8 reg,
unsigned int n)
{ {
struct i2c_client *client = ts->client; struct i2c_client *client = ts->client;
struct i2c_msg msg[] = { struct i2c_msg msg[] = {
...@@ -59,7 +60,7 @@ static int st1232_ts_read_data(struct st1232_ts_data *ts, u8 reg) ...@@ -59,7 +60,7 @@ static int st1232_ts_read_data(struct st1232_ts_data *ts, u8 reg)
{ {
.addr = client->addr, .addr = client->addr,
.flags = I2C_M_RD | I2C_M_DMA_SAFE, .flags = I2C_M_RD | I2C_M_DMA_SAFE,
.len = ts->read_buf_len, .len = n,
.buf = ts->read_buf, .buf = ts->read_buf,
} }
}; };
...@@ -79,7 +80,7 @@ static int st1232_ts_read_resolution(struct st1232_ts_data *ts, u16 *max_x, ...@@ -79,7 +80,7 @@ static int st1232_ts_read_resolution(struct st1232_ts_data *ts, u16 *max_x,
int error; int error;
/* select resolution register */ /* select resolution register */
error = st1232_ts_read_data(ts, REG_XY_RESOLUTION); error = st1232_ts_read_data(ts, REG_XY_RESOLUTION, 3);
if (error) if (error)
return error; return error;
...@@ -140,7 +141,7 @@ static irqreturn_t st1232_ts_irq_handler(int irq, void *dev_id) ...@@ -140,7 +141,7 @@ static irqreturn_t st1232_ts_irq_handler(int irq, void *dev_id)
int count; int count;
int error; int error;
error = st1232_ts_read_data(ts, REG_XY_COORDINATES); error = st1232_ts_read_data(ts, REG_XY_COORDINATES, ts->read_buf_len);
if (error) if (error)
goto out; goto out;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment