[alsa-devel] [PATCH 0/5] ASoC: Convert pxa machine drivers to use use snd_soc_register_card()
This serial converts some pxa machine drivers to use use snd_soc_register_card().
Note: I don't have these hardware, so I appreciate if someone can test these patches.
Axel Lin (5): ASoC: pxa: Convert e740_wm9705 to use snd_soc_register_card() ASoC: pxa: Convert e750_wm9705 to use snd_soc_register_card() ASoC: pxa: Convert e800_wm9712 to use snd_soc_register_card() ASoC: pxa: Convert imote2 to use snd_soc_register_card() ASoC: pxa: Convert tosa to use snd_soc_register_card()
arch/arm/mach-pxa/eseries.c | 18 +++++++++ arch/arm/mach-pxa/stargate2.c | 6 +++ arch/arm/mach-pxa/tosa.c | 6 +++ sound/soc/pxa/e740_wm9705.c | 75 +++++++++++++++++----------------------- sound/soc/pxa/e750_wm9705.c | 66 ++++++++++++++++------------------ sound/soc/pxa/e800_wm9712.c | 66 ++++++++++++++++------------------ sound/soc/pxa/imote2.c | 41 +++++++++++++--------- sound/soc/pxa/tosa.c | 77 ++++++++++++++++------------------------- 8 files changed, 178 insertions(+), 177 deletions(-)
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin axel.lin@gmail.com --- arch/arm/mach-pxa/eseries.c | 6 +++ sound/soc/pxa/e740_wm9705.c | 75 ++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 43 deletions(-)
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index f79a610..b411779 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c @@ -528,12 +528,18 @@ static struct platform_device e740_t7l66xb_device = { .resource = eseries_tmio_resources, };
+static struct platform_device e740_audio_device = { + .name = "e740-audio", + .id = -1, +}; + /* ----------------------------------------------------------------------- */
static struct platform_device *e740_devices[] __initdata = { &e740_fb_device, &e740_t7l66xb_device, &e7xx_gpio_vbus, + &e740_audio_device, };
static void __init e740_init(void) diff --git a/sound/soc/pxa/e740_wm9705.c b/sound/soc/pxa/e740_wm9705.c index 818dc57..203ab78a 100644 --- a/sound/soc/pxa/e740_wm9705.c +++ b/sound/soc/pxa/e740_wm9705.c @@ -137,66 +137,55 @@ static struct snd_soc_card e740 = { .num_links = ARRAY_SIZE(e740_dai), };
-static struct platform_device *e740_snd_device; +static struct gpio e740_audio_gpios[] = { + { GPIO_E740_MIC_ON, GPIOF_OUT_INIT_LOW, "Mic amp" }, + { GPIO_E740_AMP_ON, GPIOF_OUT_INIT_LOW, "Output amp" }, + { GPIO_E740_WM9705_nAVDD2, GPIOF_OUT_INIT_HIGH, "Audio power" }, +};
-static int __init e740_init(void) +static int __devinit e740_probe(struct platform_device *pdev) { + struct snd_soc_card *card = &e740; int ret;
- if (!machine_is_e740()) - return -ENODEV; - - /* Disable audio */ - ret = gpio_request_one(GPIO_E740_MIC_ON, GPIOF_OUT_INIT_LOW, "Mic amp"); + ret = gpio_request_array(e740_audio_gpios, + ARRAY_SIZE(e740_audio_gpios)); if (ret) return ret;
- ret = gpio_request_one(GPIO_E740_AMP_ON, GPIOF_OUT_INIT_LOW, - "Output amp"); - if (ret) - goto free_mic_amp_gpio; + card->dev = &pdev->dev;
- ret = gpio_request_one(GPIO_E740_WM9705_nAVDD2, GPIOF_OUT_INIT_HIGH, - "Audio power"); - if (ret) - goto free_op_amp_gpio; - - e740_snd_device = platform_device_alloc("soc-audio", -1); - if (!e740_snd_device) { - ret = -ENOMEM; - goto free_apwr_gpio; + ret = snd_soc_register_card(card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", + ret); + gpio_free_array(e740_audio_gpios, ARRAY_SIZE(e740_audio_gpios)); } - - platform_set_drvdata(e740_snd_device, &e740); - ret = platform_device_add(e740_snd_device); - - if (!ret) - return 0; - -/* Fail gracefully */ - platform_device_put(e740_snd_device); -free_apwr_gpio: - gpio_free(GPIO_E740_WM9705_nAVDD2); -free_op_amp_gpio: - gpio_free(GPIO_E740_AMP_ON); -free_mic_amp_gpio: - gpio_free(GPIO_E740_MIC_ON); - return ret; }
-static void __exit e740_exit(void) +static int __devexit e740_remove(struct platform_device *pdev) { - platform_device_unregister(e740_snd_device); - gpio_free(GPIO_E740_WM9705_nAVDD2); - gpio_free(GPIO_E740_AMP_ON); - gpio_free(GPIO_E740_MIC_ON); + struct snd_soc_card *card = platform_get_drvdata(pdev); + + gpio_free_array(e740_audio_gpios, ARRAY_SIZE(e740_audio_gpios)); + snd_soc_unregister_card(card); + return 0; }
-module_init(e740_init); -module_exit(e740_exit); +static struct platform_driver e740_driver = { + .driver = { + .name = "e740-audio", + .owner = THIS_MODULE, + }, + .probe = e740_probe, + .remove = __devexit_p(e740_remove), +}; + +module_platform_driver(e740_driver);
/* Module information */ MODULE_AUTHOR("Ian Molton spyro@f2s.com"); MODULE_DESCRIPTION("ALSA SoC driver for e740"); MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:e740-audio");
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin axel.lin@gmail.com --- arch/arm/mach-pxa/eseries.c | 6 ++++ sound/soc/pxa/e750_wm9705.c | 66 ++++++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index b411779..fe52d5c 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c @@ -728,12 +728,18 @@ static struct platform_device e750_tc6393xb_device = { .resource = eseries_tmio_resources, };
+static struct platform_device e750_audio_device = { + .name = "e750-audio", + .id = -1, +}; + /* ------------------------------------------------------------- */
static struct platform_device *e750_devices[] __initdata = { &e750_fb_device, &e750_tc6393xb_device, &e7xx_gpio_vbus, + &e750_audio_device, };
static void __init e750_init(void) diff --git a/sound/soc/pxa/e750_wm9705.c b/sound/soc/pxa/e750_wm9705.c index 55c53d1..27f90cc 100644 --- a/sound/soc/pxa/e750_wm9705.c +++ b/sound/soc/pxa/e750_wm9705.c @@ -120,58 +120,54 @@ static struct snd_soc_card e750 = { .num_links = ARRAY_SIZE(e750_dai), };
-static struct platform_device *e750_snd_device; +static struct gpio e750_audio_gpios[] = { + { GPIO_E750_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, "Headphone amp" }, + { GPIO_E750_SPK_AMP_OFF, GPIOF_OUT_INIT_HIGH, "Speaker amp" }, +};
-static int __init e750_init(void) +static int __devinit e750_probe(struct platform_device *pdev) { + struct snd_soc_card *card = &e750; int ret;
- if (!machine_is_e750()) - return -ENODEV; - - ret = gpio_request_one(GPIO_E750_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, - "Headphone amp"); + ret = gpio_request_array(e750_audio_gpios, + ARRAY_SIZE(e750_audio_gpios)); if (ret) return ret;
- ret = gpio_request_one(GPIO_E750_SPK_AMP_OFF, GPIOF_OUT_INIT_HIGH, - "Speaker amp"); - if (ret) - goto free_hp_amp_gpio; + card->dev = &pdev->dev;
- e750_snd_device = platform_device_alloc("soc-audio", -1); - if (!e750_snd_device) { - ret = -ENOMEM; - goto free_spk_amp_gpio; + ret = snd_soc_register_card(card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", + ret); + gpio_free_array(e750_audio_gpios, ARRAY_SIZE(e750_audio_gpios)); } - - platform_set_drvdata(e750_snd_device, &e750); - ret = platform_device_add(e750_snd_device); - - if (!ret) - return 0; - -/* Fail gracefully */ - platform_device_put(e750_snd_device); -free_spk_amp_gpio: - gpio_free(GPIO_E750_SPK_AMP_OFF); -free_hp_amp_gpio: - gpio_free(GPIO_E750_HP_AMP_OFF); - return ret; }
-static void __exit e750_exit(void) +static int __devexit e750_remove(struct platform_device *pdev) { - platform_device_unregister(e750_snd_device); - gpio_free(GPIO_E750_SPK_AMP_OFF); - gpio_free(GPIO_E750_HP_AMP_OFF); + struct snd_soc_card *card = platform_get_drvdata(pdev); + + gpio_free_array(e750_audio_gpios, ARRAY_SIZE(e750_audio_gpios)); + snd_soc_unregister_card(card); + return 0; }
-module_init(e750_init); -module_exit(e750_exit); +static struct platform_driver e750_driver = { + .driver = { + .name = "e750-audio", + .owner = THIS_MODULE, + }, + .probe = e750_probe, + .remove = __devexit_p(e750_remove), +}; + +module_platform_driver(e750_driver);
/* Module information */ MODULE_AUTHOR("Ian Molton spyro@f2s.com"); MODULE_DESCRIPTION("ALSA SoC driver for e750"); MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:e750-audio");
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin axel.lin@gmail.com --- arch/arm/mach-pxa/eseries.c | 6 ++++ sound/soc/pxa/e800_wm9712.c | 66 ++++++++++++++++++++---------------------- 2 files changed, 37 insertions(+), 35 deletions(-)
diff --git a/arch/arm/mach-pxa/eseries.c b/arch/arm/mach-pxa/eseries.c index fe52d5c..4cb2391 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c @@ -941,12 +941,18 @@ static struct platform_device e800_tc6393xb_device = { .resource = eseries_tmio_resources, };
+static struct platform_device e800_audio_device = { + .name = "e800-audio", + .id = -1, +}; + /* ----------------------------------------------------------------------- */
static struct platform_device *e800_devices[] __initdata = { &e800_fb_device, &e800_tc6393xb_device, &e800_gpio_vbus, + &e800_audio_device, };
static void __init e800_init(void) diff --git a/sound/soc/pxa/e800_wm9712.c b/sound/soc/pxa/e800_wm9712.c index 478ff19..858bf94 100644 --- a/sound/soc/pxa/e800_wm9712.c +++ b/sound/soc/pxa/e800_wm9712.c @@ -110,58 +110,54 @@ static struct snd_soc_card e800 = { .num_links = ARRAY_SIZE(e800_dai), };
-static struct platform_device *e800_snd_device; +static struct gpio e800_audio_gpios[] = { + { GPIO_E800_SPK_AMP_ON, GPIOF_OUT_INIT_HIGH, "Headphone amp" }, + { GPIO_E800_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, "Speaker amp" }, +};
-static int __init e800_init(void) +static int __devinit e800_probe(struct platform_device *pdev) { + struct snd_soc_card *card = &e800; int ret;
- if (!machine_is_e800()) - return -ENODEV; - - ret = gpio_request_one(GPIO_E800_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, - "Headphone amp"); + ret = gpio_request_array(e800_audio_gpios, + ARRAY_SIZE(e800_audio_gpios)); if (ret) return ret;
- ret = gpio_request_one(GPIO_E800_SPK_AMP_ON, GPIOF_OUT_INIT_HIGH, - "Speaker amp"); - if (ret) - goto free_hp_amp_gpio; + card->dev = &pdev->dev;
- e800_snd_device = platform_device_alloc("soc-audio", -1); - if (!e800_snd_device) { - ret = -ENOMEM; - goto free_spk_amp_gpio; + ret = snd_soc_register_card(card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", + ret); + gpio_free_array(e800_audio_gpios, ARRAY_SIZE(e800_audio_gpios)); } - - platform_set_drvdata(e800_snd_device, &e800); - ret = platform_device_add(e800_snd_device); - - if (!ret) - return 0; - -/* Fail gracefully */ - platform_device_put(e800_snd_device); -free_spk_amp_gpio: - gpio_free(GPIO_E800_SPK_AMP_ON); -free_hp_amp_gpio: - gpio_free(GPIO_E800_HP_AMP_OFF); - return ret; }
-static void __exit e800_exit(void) +static int __devexit e800_remove(struct platform_device *pdev) { - platform_device_unregister(e800_snd_device); - gpio_free(GPIO_E800_SPK_AMP_ON); - gpio_free(GPIO_E800_HP_AMP_OFF); + struct snd_soc_card *card = platform_get_drvdata(pdev); + + gpio_free_array(e800_audio_gpios, ARRAY_SIZE(e800_audio_gpios)); + snd_soc_unregister_card(card); + return 0; }
-module_init(e800_init); -module_exit(e800_exit); +static struct platform_driver e800_driver = { + .driver = { + .name = "e800-audio", + .owner = THIS_MODULE, + }, + .probe = e800_probe, + .remove = __devexit_p(e800_remove), +}; + +module_platform_driver(e800_driver);
/* Module information */ MODULE_AUTHOR("Ian Molton spyro@f2s.com"); MODULE_DESCRIPTION("ALSA SoC driver for e800"); MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:e800-audio");
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin axel.lin@gmail.com --- arch/arm/mach-pxa/stargate2.c | 6 ++++++ sound/soc/pxa/imote2.c | 41 ++++++++++++++++++++++++----------------- 2 files changed, 30 insertions(+), 17 deletions(-)
diff --git a/arch/arm/mach-pxa/stargate2.c b/arch/arm/mach-pxa/stargate2.c index d8a2467..b0656e15 100644 --- a/arch/arm/mach-pxa/stargate2.c +++ b/arch/arm/mach-pxa/stargate2.c @@ -593,10 +593,16 @@ static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = { .udc_command = sg2_udc_command, };
+static struct platform_device imote2_audio_device = { + .name = "imote2-audio", + .id = -1, +}; + static struct platform_device *imote2_devices[] = { &stargate2_flash_device, &imote2_leds, &sht15, + &imote2_audio_device, };
static void __init imote2_init(void) diff --git a/sound/soc/pxa/imote2.c b/sound/soc/pxa/imote2.c index 154fc6f..97d3aec 100644 --- a/sound/soc/pxa/imote2.c +++ b/sound/soc/pxa/imote2.c @@ -70,39 +70,46 @@ static struct snd_soc_dai_link imote2_dai = { .ops = &imote2_asoc_ops, };
-static struct snd_soc_card snd_soc_imote2 = { +static struct snd_soc_card imote2 = { .name = "Imote2", .dai_link = &imote2_dai, .num_links = 1, };
-static struct platform_device *imote2_snd_device; - -static int __init imote2_asoc_init(void) +static int __devinit imote2_probe(struct platform_device *pdev) { + struct snd_soc_card *card = &imote2; int ret;
- if (!machine_is_intelmote2()) - return -ENODEV; - imote2_snd_device = platform_device_alloc("soc-audio", -1); - if (!imote2_snd_device) - return -ENOMEM; + card->dev = &pdev->dev;
- platform_set_drvdata(imote2_snd_device, &snd_soc_imote2); - ret = platform_device_add(imote2_snd_device); + ret = snd_soc_register_card(card); if (ret) - platform_device_put(imote2_snd_device); - + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", + ret); return ret; } -module_init(imote2_asoc_init);
-static void __exit imote2_asoc_exit(void) +static int __devexit imote2_remove(struct platform_device *pdev) { - platform_device_unregister(imote2_snd_device); + struct snd_soc_card *card = platform_get_drvdata(pdev); + + snd_soc_unregister_card(card); + return 0; } -module_exit(imote2_asoc_exit); + +static struct platform_driver imote2_driver = { + .driver = { + .name = "imote2-audio", + .owner = THIS_MODULE, + }, + .probe = imote2_probe, + .remove = __devexit_p(imote2_remove), +}; + +module_platform_driver(imote2_driver);
MODULE_AUTHOR("Jonathan Cameron"); MODULE_DESCRIPTION("ALSA SoC Imote 2"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:imote2-audio");
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin axel.lin@gmail.com --- arch/arm/mach-pxa/tosa.c | 6 +++ sound/soc/pxa/tosa.c | 77 ++++++++++++++++++---------------------------- 2 files changed, 36 insertions(+), 47 deletions(-)
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index 7ce5c43..4d4eb60 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c @@ -889,6 +889,11 @@ static struct platform_device wm9712_device = { .id = -1, };
+static struct platform_device tosa_audio_device = { + .name = "tosa-audio", + .id = -1, +}; + static struct platform_device *devices[] __initdata = { &tosascoop_device, &tosascoop_jc_device, @@ -901,6 +906,7 @@ static struct platform_device *devices[] __initdata = { &sharpsl_rom_device, &wm9712_device, &tosa_gpio_vbus, + &tosa_audio_device, };
static void tosa_poweroff(void) diff --git a/sound/soc/pxa/tosa.c b/sound/soc/pxa/tosa.c index 620fc69..3f394de 100644 --- a/sound/soc/pxa/tosa.c +++ b/sound/soc/pxa/tosa.c @@ -34,8 +34,6 @@ #include "../codecs/wm9712.h" #include "pxa2xx-ac97.h"
-static struct snd_soc_card tosa; - #define TOSA_HP 0 #define TOSA_MIC_INT 1 #define TOSA_HEADSET 2 @@ -236,70 +234,55 @@ static struct snd_soc_dai_link tosa_dai[] = { }, };
-static int tosa_probe(struct snd_soc_card *card) -{ - int ret; - - ret = gpio_request(TOSA_GPIO_L_MUTE, "Headphone Jack"); - if (ret) - return ret; - ret = gpio_direction_output(TOSA_GPIO_L_MUTE, 0); - if (ret) - gpio_free(TOSA_GPIO_L_MUTE); - - return ret; -} - -static int tosa_remove(struct snd_soc_card *card) -{ - gpio_free(TOSA_GPIO_L_MUTE); - return 0; -} - static struct snd_soc_card tosa = { .name = "Tosa", .dai_link = tosa_dai, .num_links = ARRAY_SIZE(tosa_dai), - .probe = tosa_probe, - .remove = tosa_remove, };
-static struct platform_device *tosa_snd_device; - -static int __init tosa_init(void) +static int __devinit tosa_probe(struct platform_device *pdev) { + struct snd_soc_card *card = ⤩ int ret;
- if (!machine_is_tosa()) - return -ENODEV; - - tosa_snd_device = platform_device_alloc("soc-audio", -1); - if (!tosa_snd_device) { - ret = -ENOMEM; - goto err_alloc; - } - - platform_set_drvdata(tosa_snd_device, &tosa); - ret = platform_device_add(tosa_snd_device); - - if (!ret) - return 0; + ret = gpio_request_one(TOSA_GPIO_L_MUTE, GPIOF_OUT_INIT_LOW, + "Headphone Jack"); + if (ret) + return ret;
- platform_device_put(tosa_snd_device); + card->dev = &pdev->dev;
-err_alloc: + ret = snd_soc_register_card(card); + if (ret) { + dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", + ret); + gpio_free(TOSA_GPIO_L_MUTE); + } return ret; }
-static void __exit tosa_exit(void) +static int __devexit tosa_remove(struct platform_device *pdev) { - platform_device_unregister(tosa_snd_device); + struct snd_soc_card *card = platform_get_drvdata(pdev); + + gpio_free(TOSA_GPIO_L_MUTE); + snd_soc_unregister_card(card); + return 0; }
-module_init(tosa_init); -module_exit(tosa_exit); +static struct platform_driver tosa_driver = { + .driver = { + .name = "tosa-audio", + .owner = THIS_MODULE, + }, + .probe = tosa_probe, + .remove = __devexit_p(tosa_remove), +}; + +module_platform_driver(tosa_driver);
/* Module information */ MODULE_AUTHOR("Richard Purdie"); MODULE_DESCRIPTION("ALSA SoC Tosa"); MODULE_LICENSE("GPL"); +MODULE_ALIAS("platform:tosa-audio");
participants (2)
-
Axel Lin
-
Mark Brown