Commit e91fb913 authored by Marek Vasut's avatar Marek Vasut Committed by Eric Miao

[ARM] pxa/palm27x: General fix for Palm27x aSoC driver

Firstly, this patch makes the palm27x asoc driver a little more sane. Also,
since all affected devices use GPIO95 as AC97_nRESET, this patch sets that
properly. Affected are PalmT5, TX and LifeDrive.
Signed-off-by: default avatarMarek Vasut <marek.vasut@gmail.com>
Signed-off-by: default avatarEric Miao <eric.miao@marvell.com>
parent cc8d2730
#ifndef _INCLUDE_PALMASOC_H_ #ifndef _INCLUDE_PALMASOC_H_
#define _INCLUDE_PALMASOC_H_ #define _INCLUDE_PALMASOC_H_
struct palm27x_asoc_info { struct palm27x_asoc_info {
int jack_gpio; 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 #endif
...@@ -477,10 +477,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = { ...@@ -477,10 +477,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
/****************************************************************************** /******************************************************************************
* aSoC audio * 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, .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 * Framebuffer
******************************************************************************/ ******************************************************************************/
...@@ -544,6 +556,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -544,6 +556,7 @@ static struct platform_device *devices[] __initdata = {
&palmld_backlight, &palmld_backlight,
&palmld_leds, &palmld_leds,
&power_supply, &power_supply,
&palmld_asoc,
}; };
static struct map_desc palmld_io_desc[] __initdata = { static struct map_desc palmld_io_desc[] __initdata = {
...@@ -573,11 +586,10 @@ static void __init palmld_init(void) ...@@ -573,11 +586,10 @@ static void __init palmld_init(void)
set_pxa_fb_info(&palmld_lcd_screen); set_pxa_fb_info(&palmld_lcd_screen);
pxa_set_mci_info(&palmld_mci_platform_data); 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_ficp_info(&palmld_ficp_platform_data);
pxa_set_keypad_info(&palmld_keypad_platform_data); pxa_set_keypad_info(&palmld_keypad_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
palm27x_asoc_set_pdata(&palm27x_asoc_pdata);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
} }
......
...@@ -420,10 +420,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = { ...@@ -420,10 +420,22 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
/****************************************************************************** /******************************************************************************
* aSoC audio * 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, .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 * Framebuffer
******************************************************************************/ ******************************************************************************/
...@@ -486,6 +498,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -486,6 +498,7 @@ static struct platform_device *devices[] __initdata = {
#endif #endif
&palmt5_backlight, &palmt5_backlight,
&power_supply, &power_supply,
&palmt5_asoc,
}; };
/* setup udc GPIOs initial state */ /* setup udc GPIOs initial state */
...@@ -504,12 +517,11 @@ static void __init palmt5_init(void) ...@@ -504,12 +517,11 @@ static void __init palmt5_init(void)
set_pxa_fb_info(&palmt5_lcd_screen); set_pxa_fb_info(&palmt5_lcd_screen);
pxa_set_mci_info(&palmt5_mci_platform_data); pxa_set_mci_info(&palmt5_mci_platform_data);
palmt5_udc_init(); palmt5_udc_init();
pxa_set_ac97_info(&palmt5_ac97_pdata);
pxa_set_udc_info(&palmt5_udc_info); pxa_set_udc_info(&palmt5_udc_info);
pxa_set_ac97_info(NULL);
pxa_set_ficp_info(&palmt5_ficp_platform_data); pxa_set_ficp_info(&palmt5_ficp_platform_data);
pxa_set_keypad_info(&palmt5_keypad_platform_data); pxa_set_keypad_info(&palmt5_keypad_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
palm27x_asoc_set_pdata(&palm27x_asoc_pdata);
platform_add_devices(devices, ARRAY_SIZE(devices)); platform_add_devices(devices, ARRAY_SIZE(devices));
} }
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include <mach/irda.h> #include <mach/irda.h>
#include <mach/pxa27x_keypad.h> #include <mach/pxa27x_keypad.h>
#include <mach/udc.h> #include <mach/udc.h>
#include <mach/palmasoc.h>
#include "generic.h" #include "generic.h"
#include "devices.h" #include "devices.h"
...@@ -433,6 +434,25 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = { ...@@ -433,6 +434,25 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
.batt_name = "main-batt", .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 * Framebuffer
******************************************************************************/ ******************************************************************************/
...@@ -495,6 +515,7 @@ static struct platform_device *devices[] __initdata = { ...@@ -495,6 +515,7 @@ static struct platform_device *devices[] __initdata = {
#endif #endif
&palmtx_backlight, &palmtx_backlight,
&power_supply, &power_supply,
&palmtx_asoc,
}; };
static struct map_desc palmtx_io_desc[] __initdata = { static struct map_desc palmtx_io_desc[] __initdata = {
...@@ -529,8 +550,8 @@ static void __init palmtx_init(void) ...@@ -529,8 +550,8 @@ static void __init palmtx_init(void)
set_pxa_fb_info(&palmtx_lcd_screen); set_pxa_fb_info(&palmtx_lcd_screen);
pxa_set_mci_info(&palmtx_mci_platform_data); pxa_set_mci_info(&palmtx_mci_platform_data);
palmtx_udc_init(); palmtx_udc_init();
pxa_set_ac97_info(&palmtx_ac97_pdata);
pxa_set_udc_info(&palmtx_udc_info); pxa_set_udc_info(&palmtx_udc_info);
pxa_set_ac97_info(NULL);
pxa_set_ficp_info(&palmtx_ficp_platform_data); pxa_set_ficp_info(&palmtx_ficp_platform_data);
pxa_set_keypad_info(&palmtx_keypad_platform_data); pxa_set_keypad_info(&palmtx_keypad_platform_data);
wm97xx_bat_set_pdata(&wm97xx_batt_pdata); wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
......
...@@ -200,7 +200,7 @@ static struct snd_soc_device palm27x_snd_devdata = { ...@@ -200,7 +200,7 @@ static struct snd_soc_device palm27x_snd_devdata = {
static struct platform_device *palm27x_snd_device; 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; int ret;
...@@ -208,6 +208,10 @@ static int __init palm27x_asoc_init(void) ...@@ -208,6 +208,10 @@ static int __init palm27x_asoc_init(void)
machine_is_palmld())) machine_is_palmld()))
return -ENODEV; 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"); ret = gpio_request(palm27x_ep_gpio, "Headphone Jack");
if (ret) if (ret)
return ret; return ret;
...@@ -245,16 +249,31 @@ err_alloc: ...@@ -245,16 +249,31 @@ err_alloc:
return ret; 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); free_irq(gpio_to_irq(palm27x_ep_gpio), NULL);
gpio_free(palm27x_ep_gpio); gpio_free(palm27x_ep_gpio);
platform_device_unregister(palm27x_snd_device); 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); module_init(palm27x_asoc_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment