ASoC: tegra+wm8903: Use devm_gpio_request_one
authorStephen Warren <swarren@nvidia.com>
Tue, 22 May 2012 22:08:55 +0000 (16:08 -0600)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 3 Jun 2012 12:06:36 +0000 (13:06 +0100)
By using this function, the driver no longer needs to explicitly free
the GPIOs. Hence, we can also remove the flags we use to track whether
we allocated these GPIOs.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/tegra/tegra_wm8903.c

index a8a3103..5ef2063 100644 (file)
 
 #define DRV_NAME "tegra-snd-wm8903"
 
-#define GPIO_SPKR_EN    BIT(0)
-#define GPIO_HP_MUTE    BIT(1)
-#define GPIO_INT_MIC_EN BIT(2)
-#define GPIO_EXT_MIC_EN BIT(3)
 #define GPIO_HP_DET     BIT(4)
 
 struct tegra_wm8903 {
@@ -401,49 +397,41 @@ static __devinit int tegra_wm8903_driver_probe(struct platform_device *pdev)
        }
 
        if (gpio_is_valid(pdata->gpio_spkr_en)) {
-               ret = gpio_request(pdata->gpio_spkr_en, "spkr_en");
+               ret = devm_gpio_request_one(&pdev->dev, pdata->gpio_spkr_en,
+                                           GPIOF_OUT_INIT_LOW, "spkr_en");
                if (ret) {
                        dev_err(card->dev, "cannot get spkr_en gpio\n");
                        return ret;
                }
-               machine->gpio_requested |= GPIO_SPKR_EN;
-
-               gpio_direction_output(pdata->gpio_spkr_en, 0);
        }
 
        if (gpio_is_valid(pdata->gpio_hp_mute)) {
-               ret = gpio_request(pdata->gpio_hp_mute, "hp_mute");
+               ret = devm_gpio_request_one(&pdev->dev, pdata->gpio_hp_mute,
+                                           GPIOF_OUT_INIT_HIGH, "hp_mute");
                if (ret) {
                        dev_err(card->dev, "cannot get hp_mute gpio\n");
                        return ret;
                }
-               machine->gpio_requested |= GPIO_HP_MUTE;
-
-               gpio_direction_output(pdata->gpio_hp_mute, 1);
        }
 
        if (gpio_is_valid(pdata->gpio_int_mic_en)) {
-               ret = gpio_request(pdata->gpio_int_mic_en, "int_mic_en");
+               /* Disable int mic; enable signal is active-high */
+               ret = devm_gpio_request_one(&pdev->dev, pdata->gpio_int_mic_en,
+                                           GPIOF_OUT_INIT_LOW, "int_mic_en");
                if (ret) {
                        dev_err(card->dev, "cannot get int_mic_en gpio\n");
                        return ret;
                }
-               machine->gpio_requested |= GPIO_INT_MIC_EN;
-
-               /* Disable int mic; enable signal is active-high */
-               gpio_direction_output(pdata->gpio_int_mic_en, 0);
        }
 
        if (gpio_is_valid(pdata->gpio_ext_mic_en)) {
-               ret = gpio_request(pdata->gpio_ext_mic_en, "ext_mic_en");
+               /* Enable ext mic; enable signal is active-low */
+               ret = devm_gpio_request_one(&pdev->dev, pdata->gpio_ext_mic_en,
+                                           GPIOF_OUT_INIT_LOW, "ext_mic_en");
                if (ret) {
                        dev_err(card->dev, "cannot get ext_mic_en gpio\n");
                        return ret;
                }
-               machine->gpio_requested |= GPIO_EXT_MIC_EN;
-
-               /* Enable ext mic; enable signal is active-low */
-               gpio_direction_output(pdata->gpio_ext_mic_en, 0);
        }
 
        ret = tegra_asoc_utils_init(&machine->util_data, &pdev->dev);
@@ -469,21 +457,11 @@ static int __devexit tegra_wm8903_driver_remove(struct platform_device *pdev)
 {
        struct snd_soc_card *card = platform_get_drvdata(pdev);
        struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
-       struct tegra_wm8903_platform_data *pdata = &machine->pdata;
 
        if (machine->gpio_requested & GPIO_HP_DET)
                snd_soc_jack_free_gpios(&tegra_wm8903_hp_jack,
                                        1,
                                        &tegra_wm8903_hp_jack_gpio);
-       if (machine->gpio_requested & GPIO_EXT_MIC_EN)
-               gpio_free(pdata->gpio_ext_mic_en);
-       if (machine->gpio_requested & GPIO_INT_MIC_EN)
-               gpio_free(pdata->gpio_int_mic_en);
-       if (machine->gpio_requested & GPIO_HP_MUTE)
-               gpio_free(pdata->gpio_hp_mute);
-       if (machine->gpio_requested & GPIO_SPKR_EN)
-               gpio_free(pdata->gpio_spkr_en);
-       machine->gpio_requested = 0;
 
        snd_soc_unregister_card(card);