mfd: max77663: Added chip version reading support
Sumit Sharma [Wed, 6 Feb 2013 10:49:12 +0000 (15:49 +0530)]
Added support for reading chip version

Bug 1220546

Change-Id: I5a5a223ae2f027c9e1423b5c087c28b0fabb2645
Signed-off-by: Sumit Sharma <sumsharma@nvidia.com>
Reviewed-on: http://git-master/r/197931
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>

drivers/mfd/max77663-core.c
include/linux/mfd/max77663-core.h

index c06c721..3b10724 100644 (file)
@@ -59,6 +59,7 @@
 #define MAX77663_REG_GPIO_ALT          0x40
 #define MAX77663_REG_ONOFF_CFG1                0x41
 #define MAX77663_REG_ONOFF_CFG2                0x42
+#define MAX77663_REG_CID4                      0x5C
 #define MAX77663_REG_CID5                      0x5D
 
 #define IRQ_TOP_GLBL_MASK              (1 << 7)
@@ -827,6 +828,21 @@ static bool rd_wr_reg_rtc(struct device *dev, unsigned int reg)
        return false;
 }
 
+int max77663_read_chip_version(struct device *dev, u8 *val)
+{
+       int ret, version;
+
+       version = MAX77663_DRV_NOT_DEFINED;
+       ret = max77663_read(dev, MAX77663_REG_CID4, val, 1, 0);
+
+       if (!ret) {
+               if (*val == 0x24)
+                       version = MAX77663_DRV_24;
+               return version;
+       }
+       return ret;
+}
+
 static const struct regmap_config max77663_regmap_config_power = {
        .reg_bits = 8,
        .val_bits = 8,
@@ -910,6 +926,13 @@ static int max77663_probe(struct i2c_client *client,
                return ret;
        }
 
+       /* Reading chip version */
+       ret = max77663_read_chip_version(chip->dev, &val);
+       if (ret < 0)
+               dev_err(chip->dev, "Failed to read chip version\n");
+       else
+               dev_dbg(chip->dev, "Chip version - 0x%x\n", val);
+
        max77663_irq_init(chip);
        max77663_debugfs_init(chip);
        ret = max77663_sleep(chip, false);
index e53f254..eedbee8 100644 (file)
@@ -111,6 +111,17 @@ enum max77663_gpio_alt {
        GPIO_ALT_DISABLE,
 };
 
+enum max77663_chip_version {
+       MAX77663_DRV_NOT_DEFINED,
+       MAX77663_DRV_10,
+       MAX77663_DRV_12,
+       MAX77663_DRV_1A,
+       MAX77663_DRV_1B,
+       MAX77663_DRV_1E,
+       MAX77663_DRV_20,
+       MAX77663_DRV_22,
+       MAX77663_DRV_24,
+};
 /*
  * Flags
  */
@@ -154,6 +165,7 @@ int max77663_write(struct device *dev, u8 addr, void *values, u32 len,
 int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
                      bool is_rtc);
 int max77663_gpio_set_alternate(int gpio, int alternate);
+int max77663_read_chip_version(struct device *dev, u8 *val);
 #else
 static inline int max77663_read(struct device *dev, u8 addr, void *values,
                                u32 len, bool is_rtc)
@@ -177,6 +189,11 @@ static inline int max77663_gpio_set_alternate(int gpio, int alternate)
 {
        return 0;
 }
+
+static inline int max77663_read_chip_version(struct device *dev, u8 *val)
+{
+       return 0;
+}
 #endif /* defined(CONFIG_MFD_MAX77663) */
 
 #endif /* __LINUX_MFD_MAX77663_CORE_H__ */