aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/misc/mma8450.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/misc/mma8450.c')
-rw-r--r--drivers/input/misc/mma8450.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/input/misc/mma8450.c b/drivers/input/misc/mma8450.c
index 0794778295fc..4d60080bb5d5 100644
--- a/drivers/input/misc/mma8450.c
+++ b/drivers/input/misc/mma8450.c
@@ -88,13 +88,13 @@ static int mma8450_write(struct mma8450 *m, unsigned off, u8 v)
88 return 0; 88 return 0;
89} 89}
90 90
91static int mma8450_read_xyz(struct mma8450 *m, int *x, int *y, int *z) 91static int mma8450_read_block(struct mma8450 *m, unsigned off,
92 u8 *buf, size_t size)
92{ 93{
93 struct i2c_client *c = m->client; 94 struct i2c_client *c = m->client;
94 u8 buff[6];
95 int err; 95 int err;
96 96
97 err = i2c_smbus_read_i2c_block_data(c, MMA8450_OUT_X_LSB, 6, buff); 97 err = i2c_smbus_read_i2c_block_data(c, off, size, buf);
98 if (err < 0) { 98 if (err < 0) {
99 dev_err(&c->dev, 99 dev_err(&c->dev,
100 "failed to read block data at 0x%02x, error %d\n", 100 "failed to read block data at 0x%02x, error %d\n",
@@ -102,10 +102,6 @@ static int mma8450_read_xyz(struct mma8450 *m, int *x, int *y, int *z)
102 return err; 102 return err;
103 } 103 }
104 104
105 *x = ((buff[1] << 4) & 0xff0) | (buff[0] & 0xf);
106 *y = ((buff[3] << 4) & 0xff0) | (buff[2] & 0xf);
107 *z = ((buff[5] << 4) & 0xff0) | (buff[4] & 0xf);
108
109 return 0; 105 return 0;
110} 106}
111 107
@@ -114,7 +110,7 @@ static void mma8450_poll(struct input_polled_dev *dev)
114 struct mma8450 *m = dev->private; 110 struct mma8450 *m = dev->private;
115 int x, y, z; 111 int x, y, z;
116 int ret; 112 int ret;
117 int err; 113 u8 buf[6];
118 114
119 ret = mma8450_read(m, MMA8450_STATUS); 115 ret = mma8450_read(m, MMA8450_STATUS);
120 if (ret < 0) 116 if (ret < 0)
@@ -123,10 +119,14 @@ static void mma8450_poll(struct input_polled_dev *dev)
123 if (!(ret & MMA8450_STATUS_ZXYDR)) 119 if (!(ret & MMA8450_STATUS_ZXYDR))
124 return; 120 return;
125 121
126 err = mma8450_read_xyz(m, &x, &y, &z); 122 ret = mma8450_read_block(m, MMA8450_OUT_X_LSB, buf, sizeof(buf));
127 if (err) 123 if (ret < 0)
128 return; 124 return;
129 125
126 x = ((buf[1] << 4) & 0xff0) | (buf[0] & 0xf);
127 y = ((buf[3] << 4) & 0xff0) | (buf[2] & 0xf);
128 z = ((buf[5] << 4) & 0xff0) | (buf[4] & 0xf);
129
130 input_report_abs(dev->input, ABS_X, x); 130 input_report_abs(dev->input, ABS_X, x);
131 input_report_abs(dev->input, ABS_Y, y); 131 input_report_abs(dev->input, ABS_Y, y);
132 input_report_abs(dev->input, ABS_Z, z); 132 input_report_abs(dev->input, ABS_Z, z);