mfd: da9063: Add support for production silicon variant code
authorOpensource [Steve Twiss] <stwiss.opensource@diasemi.com>
Fri, 14 Feb 2014 14:08:11 +0000 (14:08 +0000)
committerLee Jones <lee.jones@linaro.org>
Wed, 19 Mar 2014 08:58:19 +0000 (08:58 +0000)
Add the correct silicon variant code ID (0x5) to the driver. This
new code is the 'production' variant code ID for DA9063.

This patch will remove the older variant code ID which matches the
pre-production silicon ID (0x3) for the DA9063 chip.

There is also some small amount of correction done in this patch:
it splits the revision code and correctly names it according to
the hardware specification and moves the dev_info() call before
the variant ID test.

Signed-off-by: Opensource [Steve Twiss] <stwiss.opensource@diasemi.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/da9063-core.c
include/linux/mfd/da9063/core.h

index 26937cd010714b7c1c9e98877603616390b6e952..e70ae315abc775b921c6f4a5c352093867b443ca 100644 (file)
@@ -110,7 +110,7 @@ static const struct mfd_cell da9063_devs[] = {
 int da9063_device_init(struct da9063 *da9063, unsigned int irq)
 {
        struct da9063_pdata *pdata = da9063->dev->platform_data;
-       int model, revision;
+       int model, variant_id, variant_code;
        int ret;
 
        if (pdata) {
@@ -141,23 +141,26 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
                return -ENODEV;
        }
 
-       ret = regmap_read(da9063->regmap, DA9063_REG_CHIP_VARIANT, &revision);
+       ret = regmap_read(da9063->regmap, DA9063_REG_CHIP_VARIANT, &variant_id);
        if (ret < 0) {
-               dev_err(da9063->dev, "Cannot read chip revision id.\n");
+               dev_err(da9063->dev, "Cannot read chip variant id.\n");
                return -EIO;
        }
-       revision >>= DA9063_CHIP_VARIANT_SHIFT;
-       if (revision != 3) {
-               dev_err(da9063->dev, "Unknown chip revision: %d\n", revision);
+
+       variant_code = variant_id >> DA9063_CHIP_VARIANT_SHIFT;
+
+       dev_info(da9063->dev,
+                "Device detected (chip-ID: 0x%02X, var-ID: 0x%02X)\n",
+                model, variant_id);
+
+       if (variant_code != PMIC_DA9063_BB) {
+               dev_err(da9063->dev, "Unknown chip variant code: 0x%02X\n",
+                               variant_code);
                return -ENODEV;
        }
 
        da9063->model = model;
-       da9063->revision = revision;
-
-       dev_info(da9063->dev,
-                "Device detected (model-ID: 0x%02X  rev-ID: 0x%02X)\n",
-                model, revision);
+       da9063->variant_code = variant_code;
 
        ret = da9063_irq_init(da9063);
        if (ret) {
index 2d2a0af675fd3f03f1354268c8afd884a94b2592..00a9aac5d1e87fe5a6fa53a00fc9390392c5b6c9 100644 (file)
@@ -33,6 +33,10 @@ enum da9063_models {
        PMIC_DA9063 = 0x61,
 };
 
+enum da9063_variant_codes {
+       PMIC_DA9063_BB = 0x5
+};
+
 /* Interrupts */
 enum da9063_irqs {
        DA9063_IRQ_ONKEY = 0,
@@ -72,7 +76,7 @@ struct da9063 {
        /* Device */
        struct device   *dev;
        unsigned short  model;
-       unsigned short  revision;
+       unsigned char   variant_code;
        unsigned int    flags;
 
        /* Control interface */