iio: accel: mxc6255: Fix chip-id check
authorHans de Goede <hdegoede@redhat.com>
Sun, 11 Sep 2016 16:29:16 +0000 (18:29 +0200)
committerJonathan Cameron <jic23@kernel.org>
Mon, 12 Sep 2016 19:19:16 +0000 (20:19 +0100)
The initial commit adding support for the mxc6225 assumed the
mxc6225 has a chip-id of 0xe5 based on testing on a single Allwinner
A23 tablet with a mxc6225. Testing on a bunch of other Allwinner
tablets have shown that the chip-id for the mxc6225 is not constant.

A datasheet for the MXC6255 which I've found online says that bits
7 and 6 of the chip-id register are undefined (for the mxc6255), testing
on 5 different tablets with a mxc6225 has found the following ids:
0x25, 0x45, 0x65, 0x85, 0xe5. So it seems that for the mxc6225 bits
7, 6 and 5 of the chip-id register are undefined.

This commit adjusts the chip-id check so that the mxc6255 driver
properly recognizes the mxc6225 in all these tablets.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/iio/accel/mxc6255.c

index 50343a7818d6b7cb3a31362408c17f76dfc27f98..0abad69482014d081030ce731b03adbd35de8bf0 100644 (file)
@@ -26,7 +26,6 @@
 #define MXC6255_REG_YOUT               0x01
 #define MXC6255_REG_CHIP_ID            0x08
 
-#define MXC6225_CHIP_ID                        0xe5
 #define MXC6255_CHIP_ID                        0x05
 
 /*
@@ -155,11 +154,7 @@ static int mxc6255_probe(struct i2c_client *client,
                return ret;
        }
 
-       switch (chip_id) {
-       case MXC6225_CHIP_ID:
-       case MXC6255_CHIP_ID:
-               break;
-       default:
+       if ((chip_id & 0x1f) != MXC6255_CHIP_ID) {
                dev_err(&client->dev, "Invalid chip id %x\n", chip_id);
                return -ENODEV;
        }