max310x: max3109_detect should use indirect addressing in SPI mode for REVID register
authorGregory Hermant <gregory.hermant@calao-systems.com>
Tue, 30 Sep 2014 06:59:17 +0000 (08:59 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Nov 2014 03:24:07 +0000 (19:24 -0800)
This patch allows to read the REV_ID register in SPI mode and consequently
to properly detect the max3109. Indeed in SPI mode, this register is only
accessible by using indirect addressing.

Signed-off-by: Gregory Hermant <gregory.hermant@calao-systems.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/max310x.c

index 0041a64cc86e576b180dfaf0a78630657f9493ca..4cdc555604c9b10121a03ddeaf15ec436a35dcf2 100644 (file)
@@ -346,10 +346,13 @@ static int max3109_detect(struct device *dev)
        unsigned int val = 0;
        int ret;
 
-       ret = regmap_read(s->regmap, MAX310X_REVID_REG, &val);
+       ret = regmap_write(s->regmap, MAX310X_GLOBALCMD_REG,
+                          MAX310X_EXTREG_ENBL);
        if (ret)
                return ret;
 
+       regmap_read(s->regmap, MAX310X_REVID_EXTREG, &val);
+       regmap_write(s->regmap, MAX310X_GLOBALCMD_REG, MAX310X_EXTREG_DSBL);
        if (((val & MAX310x_REV_MASK) != MAX3109_REV_ID)) {
                dev_err(dev,
                        "%s ID 0x%02x does not match\n", s->devtype->name, val);