mfd: mt6360: Fix flow which is used to check ic exist
authorGene Chen <gene_chen@richtek.com>
Mon, 17 May 2021 17:33:12 +0000 (01:33 +0800)
committerLee Jones <lee.jones@linaro.org>
Wed, 2 Jun 2021 09:50:02 +0000 (10:50 +0100)
Fix flow which is used to check ic exist.

Signed-off-by: Gene Chen <gene_chen@richtek.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/mt6360-core.c

index 50a1700..cdd9977 100644 (file)
@@ -293,6 +293,25 @@ static const struct mfd_cell mt6360_devs[] = {
                    NULL, 0, 0, "mediatek,mt6360-tcpc"),
 };
 
+static int mt6360_check_vendor_info(struct mt6360_ddata *ddata)
+{
+       u32 info;
+       int ret;
+
+       ret = regmap_read(ddata->regmap, MT6360_PMU_DEV_INFO, &info);
+       if (ret < 0)
+               return ret;
+
+       if ((info & CHIP_VEN_MASK) != CHIP_VEN_MT6360) {
+               dev_err(ddata->dev, "Device not supported\n");
+               return -ENODEV;
+       }
+
+       ddata->chip_rev = info & CHIP_REV_MASK;
+
+       return 0;
+}
+
 static const unsigned short mt6360_slave_addr[MT6360_SLAVE_MAX] = {
        MT6360_PMU_SLAVEID,
        MT6360_PMIC_SLAVEID,
@@ -303,7 +322,6 @@ static const unsigned short mt6360_slave_addr[MT6360_SLAVE_MAX] = {
 static int mt6360_probe(struct i2c_client *client)
 {
        struct mt6360_ddata *ddata;
-       unsigned int reg_data;
        int i, ret;
 
        ddata = devm_kzalloc(&client->dev, sizeof(*ddata), GFP_KERNEL);
@@ -319,17 +337,9 @@ static int mt6360_probe(struct i2c_client *client)
                return PTR_ERR(ddata->regmap);
        }
 
-       ret = regmap_read(ddata->regmap, MT6360_PMU_DEV_INFO, &reg_data);
-       if (ret) {
-               dev_err(&client->dev, "Device not found\n");
+       ret = mt6360_check_vendor_info(ddata);
+       if (ret)
                return ret;
-       }
-
-       ddata->chip_rev = reg_data & CHIP_REV_MASK;
-       if (ddata->chip_rev != CHIP_VEN_MT6360) {
-               dev_err(&client->dev, "Device not supported\n");
-               return -ENODEV;
-       }
 
        ret = devm_regmap_add_irq_chip(&client->dev, ddata->regmap, client->irq,
                                       0, 0, &mt6360_irq_chip,