]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'fix' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Mon, 20 Apr 2009 13:03:04 +0000 (14:03 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 20 Apr 2009 13:03:04 +0000 (14:03 +0100)
arch/arm/mach-pxa/include/mach/audio.h
arch/arm/mach-pxa/include/mach/palmasoc.h
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/palmld.c
arch/arm/mach-pxa/palmt5.c
arch/arm/mach-pxa/palmtx.c
arch/arm/mach-pxa/pcm990-baseboard.c
include/sound/pxa2xx-lib.h
sound/arm/pxa2xx-ac97-lib.c
sound/soc/pxa/palm27x.c

index f82f96dd1053c6b6b513a1fdb5bd1955dc495f1d..16eb02552d5def1fff4d61bef51ac84ffa6f333b 100644 (file)
@@ -4,12 +4,22 @@
 #include <sound/core.h>
 #include <sound/pcm.h>
 
+/*
+ * @reset_gpio: AC97 reset gpio (normally gpio113 or gpio95)
+ *              a -1 value means no gpio will be used for reset
+
+ * reset_gpio should only be specified for pxa27x CPUs where a silicon
+ * bug prevents correct operation of the reset line. If not specified,
+ * the default behaviour on these CPUs is to consider gpio 113 as the
+ * AC97 reset line, which is the default on most boards.
+ */
 typedef struct {
        int (*startup)(struct snd_pcm_substream *, void *);
        void (*shutdown)(struct snd_pcm_substream *, void *);
        void (*suspend)(void *);
        void (*resume)(void *);
        void *priv;
+       int reset_gpio;
 } pxa2xx_audio_ops_t;
 
 extern void pxa_set_ac97_info(pxa2xx_audio_ops_t *ops);
index 6c4b1f7de20aa1f7e84bedc127e820e18f50ad21..58afb30d52987d999a4175472cd609856e1237d9 100644 (file)
@@ -1,13 +1,8 @@
 #ifndef _INCLUDE_PALMASOC_H_
 #define _INCLUDE_PALMASOC_H_
+
 struct palm27x_asoc_info {
        int     jack_gpio;
 };
 
-#ifdef CONFIG_SND_PXA2XX_SOC_PALM27X
-void __init palm27x_asoc_set_pdata(struct palm27x_asoc_info *data);
-#else
-static inline void palm27x_asoc_set_pdata(struct palm27x_asoc_info *data) {}
-#endif
-
 #endif
index 9203b069b35c7483a801cb8e7e9ba97753a2853f..ff8052ce0a0567785535a8d3b79bb3aeefb6ec96 100644 (file)
@@ -742,6 +742,10 @@ struct i2c_pxa_platform_data i2c_pdata = {
        .fast_mode = 1,
 };
 
+static pxa2xx_audio_ops_t mioa701_ac97_info = {
+       .reset_gpio = 95,
+};
+
 /*
  * Mio global
  */
@@ -815,7 +819,7 @@ static void __init mioa701_machine_init(void)
        pxa_set_keypad_info(&mioa701_keypad_info);
        wm97xx_bat_set_pdata(&mioa701_battery_data);
        pxa_set_udc_info(&mioa701_udc_info);
-       pxa_set_ac97_info(NULL);
+       pxa_set_ac97_info(&mioa701_ac97_info);
        pm_power_off = mioa701_poweroff;
        arm_pm_restart = mioa701_restart;
        platform_add_devices(devices, ARRAY_SIZE(devices));
index ecf5910e39d770d40a86e5a994f32b8305c2af45..1cec1806f002e270bbdf146cc14d56e5b6f17608 100644 (file)
@@ -477,10 +477,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
 /******************************************************************************
  * aSoC audio
  ******************************************************************************/
-static struct palm27x_asoc_info palm27x_asoc_pdata = {
+static struct palm27x_asoc_info palmld_asoc_pdata = {
        .jack_gpio      = GPIO_NR_PALMLD_EARPHONE_DETECT,
 };
 
+static pxa2xx_audio_ops_t palmld_ac97_pdata = {
+       .reset_gpio     = 95,
+};
+
+static struct platform_device palmld_asoc = {
+       .name = "palm27x-asoc",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &palmld_asoc_pdata,
+       },
+};
+
 /******************************************************************************
  * Framebuffer
  ******************************************************************************/
@@ -544,6 +556,7 @@ static struct platform_device *devices[] __initdata = {
        &palmld_backlight,
        &palmld_leds,
        &power_supply,
+       &palmld_asoc,
 };
 
 static struct map_desc palmld_io_desc[] __initdata = {
@@ -573,11 +586,10 @@ static void __init palmld_init(void)
 
        set_pxa_fb_info(&palmld_lcd_screen);
        pxa_set_mci_info(&palmld_mci_platform_data);
-       pxa_set_ac97_info(NULL);
+       pxa_set_ac97_info(&palmld_ac97_pdata);
        pxa_set_ficp_info(&palmld_ficp_platform_data);
        pxa_set_keypad_info(&palmld_keypad_platform_data);
        wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-       palm27x_asoc_set_pdata(&palm27x_asoc_pdata);
 
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
index d7f81068c6136ee7562d12f15fd38508f06956b5..30662363907b88da99e5d2f7c979849d657f6134 100644 (file)
@@ -420,10 +420,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
 /******************************************************************************
  * aSoC audio
  ******************************************************************************/
-static struct palm27x_asoc_info palm27x_asoc_pdata = {
+static struct palm27x_asoc_info palmt5_asoc_pdata = {
        .jack_gpio      = GPIO_NR_PALMT5_EARPHONE_DETECT,
 };
 
+static pxa2xx_audio_ops_t palmt5_ac97_pdata = {
+       .reset_gpio     = 95,
+};
+
+static struct platform_device palmt5_asoc = {
+       .name = "palm27x-asoc",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &palmt5_asoc_pdata,
+       },
+};
+
 /******************************************************************************
  * Framebuffer
  ******************************************************************************/
@@ -486,6 +498,7 @@ static struct platform_device *devices[] __initdata = {
 #endif
        &palmt5_backlight,
        &power_supply,
+       &palmt5_asoc,
 };
 
 /* setup udc GPIOs initial state */
@@ -504,12 +517,11 @@ static void __init palmt5_init(void)
        set_pxa_fb_info(&palmt5_lcd_screen);
        pxa_set_mci_info(&palmt5_mci_platform_data);
        palmt5_udc_init();
+       pxa_set_ac97_info(&palmt5_ac97_pdata);
        pxa_set_udc_info(&palmt5_udc_info);
-       pxa_set_ac97_info(NULL);
        pxa_set_ficp_info(&palmt5_ficp_platform_data);
        pxa_set_keypad_info(&palmt5_keypad_platform_data);
        wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
-       palm27x_asoc_set_pdata(&palm27x_asoc_pdata);
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
index 14393d0ad8b837d94d8a7f17ad23ccc906f20e25..e2d44b1a8a9b9111c3daeb2f06ba6c682dc224e8 100644 (file)
@@ -40,6 +40,7 @@
 #include <mach/irda.h>
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
+#include <mach/palmasoc.h>
 
 #include "generic.h"
 #include "devices.h"
@@ -433,6 +434,25 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
        .batt_name      = "main-batt",
 };
 
+/******************************************************************************
+ * aSoC audio
+ ******************************************************************************/
+static struct palm27x_asoc_info palmtx_asoc_pdata = {
+       .jack_gpio      = GPIO_NR_PALMTX_EARPHONE_DETECT,
+};
+
+static pxa2xx_audio_ops_t palmtx_ac97_pdata = {
+       .reset_gpio     = 95,
+};
+
+static struct platform_device palmtx_asoc = {
+       .name = "palm27x-asoc",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &palmtx_asoc_pdata,
+       },
+};
+
 /******************************************************************************
  * Framebuffer
  ******************************************************************************/
@@ -495,6 +515,7 @@ static struct platform_device *devices[] __initdata = {
 #endif
        &palmtx_backlight,
        &power_supply,
+       &palmtx_asoc,
 };
 
 static struct map_desc palmtx_io_desc[] __initdata = {
@@ -529,8 +550,8 @@ static void __init palmtx_init(void)
        set_pxa_fb_info(&palmtx_lcd_screen);
        pxa_set_mci_info(&palmtx_mci_platform_data);
        palmtx_udc_init();
+       pxa_set_ac97_info(&palmtx_ac97_pdata);
        pxa_set_udc_info(&palmtx_udc_info);
-       pxa_set_ac97_info(NULL);
        pxa_set_ficp_info(&palmtx_ficp_platform_data);
        pxa_set_keypad_info(&palmtx_keypad_platform_data);
        wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
index 6112740b4ae9c88ac213b7e4f89ad2b7cf7730af..6c12b5a3132f1fc5ddcde76ed241b525464e01a8 100644 (file)
@@ -377,7 +377,7 @@ struct pxacamera_platform_data pcm990_pxacamera_platform_data = {
 #include <linux/i2c/pca953x.h>
 
 static struct pca953x_platform_data pca9536_data = {
-       .gpio_base      = NR_BUILTIN_GPIO + 1,
+       .gpio_base      = NR_BUILTIN_GPIO,
 };
 
 static int gpio_bus_switch;
@@ -405,9 +405,9 @@ static unsigned long pcm990_camera_query_bus_param(struct soc_camera_link *link)
        int ret;
 
        if (!gpio_bus_switch) {
-               ret = gpio_request(NR_BUILTIN_GPIO + 1, "camera");
+               ret = gpio_request(NR_BUILTIN_GPIO, "camera");
                if (!ret) {
-                       gpio_bus_switch = NR_BUILTIN_GPIO + 1;
+                       gpio_bus_switch = NR_BUILTIN_GPIO;
                        gpio_direction_output(gpio_bus_switch, 0);
                } else
                        gpio_bus_switch = -EINVAL;
index 2c894b600e5b972ac3dcbaa617c9e1596f8056e3..2fd3d251d9a54e4896453508fcd3bcd86ebfbf26 100644 (file)
@@ -42,19 +42,4 @@ extern int pxa2xx_ac97_hw_resume(void);
 extern int pxa2xx_ac97_hw_probe(struct platform_device *dev);
 extern void pxa2xx_ac97_hw_remove(struct platform_device *dev);
 
-/* AC97 platform_data */
-/**
- * struct pxa2xx_ac97_platform_data - pxa ac97 platform data
- * @reset_gpio: AC97 reset gpio (normally gpio113 or gpio95)
- *              a -1 value means no gpio will be used for reset
- *
- * Platform data should only be specified for pxa27x CPUs where a silicon bug
- * prevents correct operation of the reset line. If not specified, the default
- * behaviour is to consider gpio 113 as the AC97 reset line, which is the
- * default on most boards.
- */
-struct pxa2xx_ac97_platform_data {
-       int reset_gpio;
-};
-
 #endif
index 0afd1a8226fb9cbe842dac631bd59b6bdc4a1e2d..a2c12d105c9a932e1fd800aaa3704e297d5fc3d1 100644 (file)
@@ -364,7 +364,7 @@ EXPORT_SYMBOL_GPL(pxa2xx_ac97_hw_resume);
 int __devinit pxa2xx_ac97_hw_probe(struct platform_device *dev)
 {
        int ret;
-       struct pxa2xx_ac97_platform_data *pdata = dev->dev.platform_data;
+       pxa2xx_audio_ops_t *pdata = dev->dev.platform_data;
 
        if (pdata) {
                switch (pdata->reset_gpio) {
index 48a73f64500bc6ce78e40b0de21e5ba0413ef521..44fcc4e01e08ea17a2bfc1ebd20eae6e03b2966e 100644 (file)
@@ -200,7 +200,7 @@ static struct snd_soc_device palm27x_snd_devdata = {
 
 static struct platform_device *palm27x_snd_device;
 
-static int __init palm27x_asoc_init(void)
+static int palm27x_asoc_probe(struct platform_device *pdev)
 {
        int ret;
 
@@ -208,6 +208,10 @@ static int __init palm27x_asoc_init(void)
                machine_is_palmld()))
                return -ENODEV;
 
+       if (pdev->dev.platform_data)
+               palm27x_ep_gpio = ((struct palm27x_asoc_info *)
+                       (pdev->dev.platform_data))->jack_gpio;
+
        ret = gpio_request(palm27x_ep_gpio, "Headphone Jack");
        if (ret)
                return ret;
@@ -245,16 +249,31 @@ err_alloc:
        return ret;
 }
 
-static void __exit palm27x_asoc_exit(void)
+static int __devexit palm27x_asoc_remove(struct platform_device *pdev)
 {
        free_irq(gpio_to_irq(palm27x_ep_gpio), NULL);
        gpio_free(palm27x_ep_gpio);
        platform_device_unregister(palm27x_snd_device);
+       return 0;
 }
 
-void __init palm27x_asoc_set_pdata(struct palm27x_asoc_info *data)
+static struct platform_driver palm27x_wm9712_driver = {
+       .probe          = palm27x_asoc_probe,
+       .remove         = __devexit_p(palm27x_asoc_remove),
+       .driver         = {
+               .name           = "palm27x-asoc",
+               .owner          = THIS_MODULE,
+       },
+};
+
+static int __init palm27x_asoc_init(void)
+{
+       return platform_driver_register(&palm27x_wm9712_driver);
+}
+
+static void __exit palm27x_asoc_exit(void)
 {
-       palm27x_ep_gpio = data->jack_gpio;
+       platform_driver_unregister(&palm27x_wm9712_driver);
 }
 
 module_init(palm27x_asoc_init);