Since LoCoMo driver has been converted to provide proper gpiolib
interface, make poodle ASoC platform driver use gpiolib API.

Signed-off-by: Dmitry Eremin-Solenikov <[email protected]>
---
 sound/soc/pxa/poodle.c | 51 ++++++++++++++++++++++++--------------------------
 1 file changed, 24 insertions(+), 27 deletions(-)

diff --git a/sound/soc/pxa/poodle.c b/sound/soc/pxa/poodle.c
index 21f3400..a593bff 100644
--- a/sound/soc/pxa/poodle.c
+++ b/sound/soc/pxa/poodle.c
@@ -20,12 +20,12 @@
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
+#include <linux/gpio.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/soc.h>
 
 #include <asm/mach-types.h>
-#include <asm/hardware/locomo.h>
 #include <mach/poodle.h>
 #include <mach/audio.h>
 
@@ -48,16 +48,12 @@ static void poodle_ext_control(struct snd_soc_dapm_context 
*dapm)
        /* set up jack connection */
        if (poodle_jack_func == POODLE_HP) {
                /* set = unmute headphone */
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_MUTE_L, 1);
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_MUTE_R, 1);
+               gpio_set_value(POODLE_GPIO_MUTE_L, 1);
+               gpio_set_value(POODLE_GPIO_MUTE_R, 1);
                snd_soc_dapm_enable_pin(dapm, "Headphone Jack");
        } else {
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_MUTE_L, 0);
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_MUTE_R, 0);
+               gpio_set_value(POODLE_GPIO_MUTE_L, 0);
+               gpio_set_value(POODLE_GPIO_MUTE_R, 0);
                snd_soc_dapm_disable_pin(dapm, "Headphone Jack");
        }
 
@@ -85,10 +81,8 @@ static int poodle_startup(struct snd_pcm_substream 
*substream)
 static void poodle_shutdown(struct snd_pcm_substream *substream)
 {
        /* set = unmute headphone */
-       locomo_gpio_write(&poodle_locomo_device.dev,
-               POODLE_LOCOMO_GPIO_MUTE_L, 1);
-       locomo_gpio_write(&poodle_locomo_device.dev,
-               POODLE_LOCOMO_GPIO_MUTE_R, 1);
+       gpio_set_value(POODLE_GPIO_MUTE_L, 1);
+       gpio_set_value(POODLE_GPIO_MUTE_R, 1);
 }
 
 static int poodle_hw_params(struct snd_pcm_substream *substream,
@@ -178,12 +172,7 @@ static int poodle_set_spk(struct snd_kcontrol *kcontrol,
 static int poodle_amp_event(struct snd_soc_dapm_widget *w,
        struct snd_kcontrol *k, int event)
 {
-       if (SND_SOC_DAPM_EVENT_ON(event))
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_AMP_ON, 0);
-       else
-               locomo_gpio_write(&poodle_locomo_device.dev,
-                       POODLE_LOCOMO_GPIO_AMP_ON, 1);
+       gpio_set_value(POODLE_GPIO_AMP_ON, !(SND_SOC_DAPM_EVENT_ON(event)));
 
        return 0;
 }
@@ -263,25 +252,32 @@ static struct snd_soc_card poodle = {
        .num_dapm_routes = ARRAY_SIZE(poodle_audio_map),
 };
 
+struct gpio poodle_gpios[] = {
+       { POODLE_GPIO_AMP_ON, GPIOF_OUT_INIT_HIGH, "Amplifier" },
+       { POODLE_GPIO_MUTE_L, GPIOF_OUT_INIT_LOW, "Mute left" },
+       { POODLE_GPIO_MUTE_R, GPIOF_OUT_INIT_LOW, "Mute right" },
+};
+
 static int poodle_probe(struct platform_device *pdev)
 {
        struct snd_soc_card *card = &poodle;
        int ret;
 
-       locomo_gpio_set_dir(&poodle_locomo_device.dev,
-               POODLE_LOCOMO_GPIO_AMP_ON, 0);
-       /* should we mute HP at startup - burning power ?*/
-       locomo_gpio_set_dir(&poodle_locomo_device.dev,
-               POODLE_LOCOMO_GPIO_MUTE_L, 0);
-       locomo_gpio_set_dir(&poodle_locomo_device.dev,
-               POODLE_LOCOMO_GPIO_MUTE_R, 0);
+       ret = gpio_request_array(poodle_gpios, ARRAY_SIZE(poodle_gpios));
+       if (ret) {
+               dev_err(&pdev->dev, "gpio_request_array() failed: %d\n",
+                               ret);
+               return ret;
+       }
 
        card->dev = &pdev->dev;
 
        ret = snd_soc_register_card(card);
-       if (ret)
+       if (ret) {
                dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
                        ret);
+               gpio_free_array(poodle_gpios, ARRAY_SIZE(poodle_gpios));
+       }
        return ret;
 }
 
@@ -290,6 +286,7 @@ static int poodle_remove(struct platform_device *pdev)
        struct snd_soc_card *card = platform_get_drvdata(pdev);
 
        snd_soc_unregister_card(card);
+       gpio_free_array(poodle_gpios, ARRAY_SIZE(poodle_gpios));
        return 0;
 }
 
-- 
2.1.1

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to