ASoC: tpa6130a2: Remove CPVSS and HPVdd supplies
authorJarkko Nikula <jhnikula@gmail.com>
Wed, 19 May 2010 07:52:28 +0000 (10:52 +0300)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Thu, 20 May 2010 09:28:39 +0000 (10:28 +0100)
These pins are for decoupling capacitors for the internal charge pumps
in TPA6130A2 and TPA6140A2 and not for connecting external supply.

Thanks to Eduardo Valentin <eduardo.valentin@nokia.com> for pointing out the
issue with TPA6130A2 and Ilkka Koskinen <ilkka.koskinen@nokia.com> with
TPA6140A2.

Signed-off-by: Jarkko Nikula <jhnikula@gmail.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Reviewed-by: Ilkka Koskinen <ilkka.koskinen@nokia.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>
sound/soc/codecs/tpa6130a2.c

index 8978892..20ac677 100644 (file)
 
 static struct i2c_client *tpa6130a2_client;
 
 
 static struct i2c_client *tpa6130a2_client;
 
-#define TPA6130A2_NUM_SUPPLIES 2
-static const char *tpa6130a2_supply_names[TPA6130A2_NUM_SUPPLIES] = {
-       "CPVSS",
-       "Vdd",
-};
-
-static const char *tpa6140a2_supply_names[TPA6130A2_NUM_SUPPLIES] = {
-       "HPVdd",
-       "AVdd",
-};
-
 /* This struct is used to save the context */
 struct tpa6130a2_data {
        struct mutex mutex;
        unsigned char regs[TPA6130A2_CACHEREGNUM];
 /* This struct is used to save the context */
 struct tpa6130a2_data {
        struct mutex mutex;
        unsigned char regs[TPA6130A2_CACHEREGNUM];
-       struct regulator_bulk_data supplies[TPA6130A2_NUM_SUPPLIES];
+       struct regulator *supply;
        int power_gpio;
        unsigned char power_state;
        enum tpa_model id;
        int power_gpio;
        unsigned char power_state;
        enum tpa_model id;
@@ -135,11 +124,10 @@ static int tpa6130a2_power(int power)
                if (data->power_gpio >= 0)
                        gpio_set_value(data->power_gpio, 1);
 
                if (data->power_gpio >= 0)
                        gpio_set_value(data->power_gpio, 1);
 
-               ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies),
-                                           data->supplies);
+               ret = regulator_enable(data->supply);
                if (ret != 0) {
                        dev_err(&tpa6130a2_client->dev,
                if (ret != 0) {
                        dev_err(&tpa6130a2_client->dev,
-                               "Failed to enable supplies: %d\n", ret);
+                               "Failed to enable supply: %d\n", ret);
                        goto exit;
                }
 
                        goto exit;
                }
 
@@ -160,11 +148,10 @@ static int tpa6130a2_power(int power)
                if (data->power_gpio >= 0)
                        gpio_set_value(data->power_gpio, 0);
 
                if (data->power_gpio >= 0)
                        gpio_set_value(data->power_gpio, 0);
 
-               ret = regulator_bulk_disable(ARRAY_SIZE(data->supplies),
-                                            data->supplies);
+               ret = regulator_disable(data->supply);
                if (ret != 0) {
                        dev_err(&tpa6130a2_client->dev,
                if (ret != 0) {
                        dev_err(&tpa6130a2_client->dev,
-                               "Failed to disable supplies: %d\n", ret);
+                               "Failed to disable supply: %d\n", ret);
                        goto exit;
                }
 
                        goto exit;
                }
 
@@ -411,7 +398,8 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client,
        struct device *dev;
        struct tpa6130a2_data *data;
        struct tpa6130a2_platform_data *pdata;
        struct device *dev;
        struct tpa6130a2_data *data;
        struct tpa6130a2_platform_data *pdata;
-       int i, ret;
+       const char *regulator;
+       int ret;
 
        dev = &client->dev;
 
 
        dev = &client->dev;
 
@@ -453,25 +441,21 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client,
        }
 
        switch (data->id) {
        }
 
        switch (data->id) {
+       default:
+               dev_warn(dev, "Unknown TPA model (%d). Assuming 6130A2\n",
+                        pdata->id);
        case TPA6130A2:
        case TPA6130A2:
-               for (i = 0; i < ARRAY_SIZE(data->supplies); i++)
-                       data->supplies[i].supply = tpa6130a2_supply_names[i];
+               regulator = "Vdd";
                break;
        case TPA6140A2:
                break;
        case TPA6140A2:
-               for (i = 0; i < ARRAY_SIZE(data->supplies); i++)
-                       data->supplies[i].supply = tpa6140a2_supply_names[i];;
+               regulator = "AVdd";
                break;
                break;
-       default:
-               dev_warn(dev, "Unknown TPA model (%d). Assuming 6130A2\n",
-                        pdata->id);
-               for (i = 0; i < ARRAY_SIZE(data->supplies); i++)
-                       data->supplies[i].supply = tpa6130a2_supply_names[i];
        }
 
        }
 
-       ret = regulator_bulk_get(dev, ARRAY_SIZE(data->supplies),
-                                data->supplies);
-       if (ret != 0) {
-               dev_err(dev, "Failed to request supplies: %d\n", ret);
+       data->supply = regulator_get(dev, regulator);
+       if (IS_ERR(data->supply)) {
+               ret = PTR_ERR(data->supply);
+               dev_err(dev, "Failed to request supply: %d\n", ret);
                goto err_regulator;
        }
 
                goto err_regulator;
        }
 
@@ -494,7 +478,7 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client,
        return 0;
 
 err_power:
        return 0;
 
 err_power:
-       regulator_bulk_free(ARRAY_SIZE(data->supplies), data->supplies);
+       regulator_put(data->supply);
 err_regulator:
        if (data->power_gpio >= 0)
                gpio_free(data->power_gpio);
 err_regulator:
        if (data->power_gpio >= 0)
                gpio_free(data->power_gpio);
@@ -515,7 +499,7 @@ static int __devexit tpa6130a2_remove(struct i2c_client *client)
        if (data->power_gpio >= 0)
                gpio_free(data->power_gpio);
 
        if (data->power_gpio >= 0)
                gpio_free(data->power_gpio);
 
-       regulator_bulk_free(ARRAY_SIZE(data->supplies), data->supplies);
+       regulator_put(data->supply);
 
        kfree(data);
        tpa6130a2_client = NULL;
 
        kfree(data);
        tpa6130a2_client = NULL;