diff options
author | Axel Lin <axel.lin@gmail.com> | 2011-12-14 21:54:25 -0500 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2011-12-17 04:31:31 -0500 |
commit | 1eb0202dc7e45be5996416bc41489ae5a75485e5 (patch) | |
tree | 1527825a28772e184d2b57d9b7dd8f3a78b66ac6 | |
parent | f285b8c83a8dccc70f168bb1eb6f04c8e36450a6 (diff) |
ASoC: pxa: Convert e800_wm9712 to use snd_soc_register_card()
Use snd_soc_register_card() instead of creating a "soc-audio" platform device.
Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
-rw-r--r-- | arch/arm/mach-pxa/eseries.c | 6 | ||||
-rw-r--r-- | 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 3abfdb908d4c..4bbc3facde69 100644 --- a/arch/arm/mach-pxa/eseries.c +++ b/arch/arm/mach-pxa/eseries.c | |||
@@ -936,12 +936,18 @@ static struct platform_device e800_tc6393xb_device = { | |||
936 | .resource = eseries_tmio_resources, | 936 | .resource = eseries_tmio_resources, |
937 | }; | 937 | }; |
938 | 938 | ||
939 | static struct platform_device e800_audio_device = { | ||
940 | .name = "e800-audio", | ||
941 | .id = -1, | ||
942 | }; | ||
943 | |||
939 | /* ----------------------------------------------------------------------- */ | 944 | /* ----------------------------------------------------------------------- */ |
940 | 945 | ||
941 | static struct platform_device *e800_devices[] __initdata = { | 946 | static struct platform_device *e800_devices[] __initdata = { |
942 | &e800_fb_device, | 947 | &e800_fb_device, |
943 | &e800_tc6393xb_device, | 948 | &e800_tc6393xb_device, |
944 | &e800_gpio_vbus, | 949 | &e800_gpio_vbus, |
950 | &e800_audio_device, | ||
945 | }; | 951 | }; |
946 | 952 | ||
947 | static void __init e800_init(void) | 953 | static void __init e800_init(void) |
diff --git a/sound/soc/pxa/e800_wm9712.c b/sound/soc/pxa/e800_wm9712.c index 478ff191ffb4..858bf94160c5 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 = { | |||
110 | .num_links = ARRAY_SIZE(e800_dai), | 110 | .num_links = ARRAY_SIZE(e800_dai), |
111 | }; | 111 | }; |
112 | 112 | ||
113 | static struct platform_device *e800_snd_device; | 113 | static struct gpio e800_audio_gpios[] = { |
114 | { GPIO_E800_SPK_AMP_ON, GPIOF_OUT_INIT_HIGH, "Headphone amp" }, | ||
115 | { GPIO_E800_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, "Speaker amp" }, | ||
116 | }; | ||
114 | 117 | ||
115 | static int __init e800_init(void) | 118 | static int __devinit e800_probe(struct platform_device *pdev) |
116 | { | 119 | { |
120 | struct snd_soc_card *card = &e800; | ||
117 | int ret; | 121 | int ret; |
118 | 122 | ||
119 | if (!machine_is_e800()) | 123 | ret = gpio_request_array(e800_audio_gpios, |
120 | return -ENODEV; | 124 | ARRAY_SIZE(e800_audio_gpios)); |
121 | |||
122 | ret = gpio_request_one(GPIO_E800_HP_AMP_OFF, GPIOF_OUT_INIT_HIGH, | ||
123 | "Headphone amp"); | ||
124 | if (ret) | 125 | if (ret) |
125 | return ret; | 126 | return ret; |
126 | 127 | ||
127 | ret = gpio_request_one(GPIO_E800_SPK_AMP_ON, GPIOF_OUT_INIT_HIGH, | 128 | card->dev = &pdev->dev; |
128 | "Speaker amp"); | ||
129 | if (ret) | ||
130 | goto free_hp_amp_gpio; | ||
131 | 129 | ||
132 | e800_snd_device = platform_device_alloc("soc-audio", -1); | 130 | ret = snd_soc_register_card(card); |
133 | if (!e800_snd_device) { | 131 | if (ret) { |
134 | ret = -ENOMEM; | 132 | dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", |
135 | goto free_spk_amp_gpio; | 133 | ret); |
134 | gpio_free_array(e800_audio_gpios, ARRAY_SIZE(e800_audio_gpios)); | ||
136 | } | 135 | } |
137 | |||
138 | platform_set_drvdata(e800_snd_device, &e800); | ||
139 | ret = platform_device_add(e800_snd_device); | ||
140 | |||
141 | if (!ret) | ||
142 | return 0; | ||
143 | |||
144 | /* Fail gracefully */ | ||
145 | platform_device_put(e800_snd_device); | ||
146 | free_spk_amp_gpio: | ||
147 | gpio_free(GPIO_E800_SPK_AMP_ON); | ||
148 | free_hp_amp_gpio: | ||
149 | gpio_free(GPIO_E800_HP_AMP_OFF); | ||
150 | |||
151 | return ret; | 136 | return ret; |
152 | } | 137 | } |
153 | 138 | ||
154 | static void __exit e800_exit(void) | 139 | static int __devexit e800_remove(struct platform_device *pdev) |
155 | { | 140 | { |
156 | platform_device_unregister(e800_snd_device); | 141 | struct snd_soc_card *card = platform_get_drvdata(pdev); |
157 | gpio_free(GPIO_E800_SPK_AMP_ON); | 142 | |
158 | gpio_free(GPIO_E800_HP_AMP_OFF); | 143 | gpio_free_array(e800_audio_gpios, ARRAY_SIZE(e800_audio_gpios)); |
144 | snd_soc_unregister_card(card); | ||
145 | return 0; | ||
159 | } | 146 | } |
160 | 147 | ||
161 | module_init(e800_init); | 148 | static struct platform_driver e800_driver = { |
162 | module_exit(e800_exit); | 149 | .driver = { |
150 | .name = "e800-audio", | ||
151 | .owner = THIS_MODULE, | ||
152 | }, | ||
153 | .probe = e800_probe, | ||
154 | .remove = __devexit_p(e800_remove), | ||
155 | }; | ||
156 | |||
157 | module_platform_driver(e800_driver); | ||
163 | 158 | ||
164 | /* Module information */ | 159 | /* Module information */ |
165 | MODULE_AUTHOR("Ian Molton <spyro@f2s.com>"); | 160 | MODULE_AUTHOR("Ian Molton <spyro@f2s.com>"); |
166 | MODULE_DESCRIPTION("ALSA SoC driver for e800"); | 161 | MODULE_DESCRIPTION("ALSA SoC driver for e800"); |
167 | MODULE_LICENSE("GPL v2"); | 162 | MODULE_LICENSE("GPL v2"); |
163 | MODULE_ALIAS("platform:e800-audio"); | ||