diff options
author | Jyri Sarha <jsarha@ti.com> | 2014-05-27 09:23:51 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-12-01 04:09:56 -0500 |
commit | ab387c1e51d7920a6a5860c010372b73ec173a5c (patch) | |
tree | 5ce1558a26bb509c2d3c25867c34b5fc3e0799a8 /sound/soc/omap | |
parent | 45302d7e1bef631acd946a6f296deb9c709dc5af (diff) |
ASoC: omap: Remove obsolete HDMI audio code and Kconfig options
Removes omap-hdmi DAI driver, omap-hdmi-card driver, the related
Kconfig options, and Makefile entries. The HDMI DAI drivers has been
integrated directly to OMAP4+ HDMI drivers and simple-card driver is
used instead of omap-hdmi-card driver.
Signed-off-by: Jyri Sarha <jsarha@ti.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Reviewed-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'sound/soc/omap')
-rw-r--r-- | sound/soc/omap/Kconfig | 13 | ||||
-rw-r--r-- | sound/soc/omap/Makefile | 4 | ||||
-rw-r--r-- | sound/soc/omap/omap-hdmi-card.c | 87 | ||||
-rw-r--r-- | sound/soc/omap/omap-hdmi.c | 364 | ||||
-rw-r--r-- | sound/soc/omap/omap-hdmi.h | 38 |
5 files changed, 0 insertions, 506 deletions
diff --git a/sound/soc/omap/Kconfig b/sound/soc/omap/Kconfig index 2b32b3e58bf1..3dfcadf00e55 100644 --- a/sound/soc/omap/Kconfig +++ b/sound/soc/omap/Kconfig | |||
@@ -12,9 +12,6 @@ config SND_OMAP_SOC_MCBSP | |||
12 | config SND_OMAP_SOC_MCPDM | 12 | config SND_OMAP_SOC_MCPDM |
13 | tristate | 13 | tristate |
14 | 14 | ||
15 | config SND_OMAP_SOC_HDMI | ||
16 | tristate | ||
17 | |||
18 | config SND_OMAP_SOC_HDMI_AUDIO | 15 | config SND_OMAP_SOC_HDMI_AUDIO |
19 | tristate "HDMI audio support for OMAP4+ based SoCs" | 16 | tristate "HDMI audio support for OMAP4+ based SoCs" |
20 | depends on SND_OMAP_SOC | 17 | depends on SND_OMAP_SOC |
@@ -115,16 +112,6 @@ config SND_OMAP_SOC_OMAP_ABE_TWL6040 | |||
115 | - PandaBoard (4430) | 112 | - PandaBoard (4430) |
116 | - PandaBoardES (4460) | 113 | - PandaBoardES (4460) |
117 | 114 | ||
118 | config SND_OMAP_SOC_OMAP_HDMI | ||
119 | tristate "SoC Audio support for Texas Instruments OMAP HDMI" | ||
120 | depends on SND_OMAP_SOC && OMAP4_DSS_HDMI && OMAP2_DSS | ||
121 | select SND_OMAP_SOC_HDMI | ||
122 | select SND_SOC_HDMI_CODEC | ||
123 | select OMAP4_DSS_HDMI_AUDIO | ||
124 | help | ||
125 | Say Y if you want to add support for SoC HDMI audio on Texas Instruments | ||
126 | OMAP4 chips | ||
127 | |||
128 | config SND_OMAP_SOC_OMAP3_PANDORA | 115 | config SND_OMAP_SOC_OMAP3_PANDORA |
129 | tristate "SoC Audio support for OMAP3 Pandora" | 116 | tristate "SoC Audio support for OMAP3 Pandora" |
130 | depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA | 117 | depends on TWL4030_CORE && SND_OMAP_SOC && MACH_OMAP3_PANDORA |
diff --git a/sound/soc/omap/Makefile b/sound/soc/omap/Makefile index 40688a6e8e98..db36fbd5d1a0 100644 --- a/sound/soc/omap/Makefile +++ b/sound/soc/omap/Makefile | |||
@@ -3,14 +3,12 @@ snd-soc-omap-objs := omap-pcm.o | |||
3 | snd-soc-omap-dmic-objs := omap-dmic.o | 3 | snd-soc-omap-dmic-objs := omap-dmic.o |
4 | snd-soc-omap-mcbsp-objs := omap-mcbsp.o mcbsp.o | 4 | snd-soc-omap-mcbsp-objs := omap-mcbsp.o mcbsp.o |
5 | snd-soc-omap-mcpdm-objs := omap-mcpdm.o | 5 | snd-soc-omap-mcpdm-objs := omap-mcpdm.o |
6 | snd-soc-omap-hdmi-objs := omap-hdmi.o | ||
7 | snd-soc-omap-hdmi-audio-objs := omap-hdmi-audio.o | 6 | snd-soc-omap-hdmi-audio-objs := omap-hdmi-audio.o |
8 | 7 | ||
9 | obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o | 8 | obj-$(CONFIG_SND_OMAP_SOC) += snd-soc-omap.o |
10 | obj-$(CONFIG_SND_OMAP_SOC_DMIC) += snd-soc-omap-dmic.o | 9 | obj-$(CONFIG_SND_OMAP_SOC_DMIC) += snd-soc-omap-dmic.o |
11 | obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o | 10 | obj-$(CONFIG_SND_OMAP_SOC_MCBSP) += snd-soc-omap-mcbsp.o |
12 | obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o | 11 | obj-$(CONFIG_SND_OMAP_SOC_MCPDM) += snd-soc-omap-mcpdm.o |
13 | obj-$(CONFIG_SND_OMAP_SOC_HDMI) += snd-soc-omap-hdmi.o | ||
14 | obj-$(CONFIG_SND_OMAP_SOC_HDMI_AUDIO) += snd-soc-omap-hdmi-audio.o | 12 | obj-$(CONFIG_SND_OMAP_SOC_HDMI_AUDIO) += snd-soc-omap-hdmi-audio.o |
15 | 13 | ||
16 | # OMAP Machine Support | 14 | # OMAP Machine Support |
@@ -22,7 +20,6 @@ snd-soc-am3517evm-objs := am3517evm.o | |||
22 | snd-soc-omap-abe-twl6040-objs := omap-abe-twl6040.o | 20 | snd-soc-omap-abe-twl6040-objs := omap-abe-twl6040.o |
23 | snd-soc-omap-twl4030-objs := omap-twl4030.o | 21 | snd-soc-omap-twl4030-objs := omap-twl4030.o |
24 | snd-soc-omap3pandora-objs := omap3pandora.o | 22 | snd-soc-omap3pandora-objs := omap3pandora.o |
25 | snd-soc-omap-hdmi-card-objs := omap-hdmi-card.o | ||
26 | 23 | ||
27 | obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o | 24 | obj-$(CONFIG_SND_OMAP_SOC_N810) += snd-soc-n810.o |
28 | obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o | 25 | obj-$(CONFIG_SND_OMAP_SOC_RX51) += snd-soc-rx51.o |
@@ -32,4 +29,3 @@ obj-$(CONFIG_SND_OMAP_SOC_AM3517EVM) += snd-soc-am3517evm.o | |||
32 | obj-$(CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040) += snd-soc-omap-abe-twl6040.o | 29 | obj-$(CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040) += snd-soc-omap-abe-twl6040.o |
33 | obj-$(CONFIG_SND_OMAP_SOC_OMAP_TWL4030) += snd-soc-omap-twl4030.o | 30 | obj-$(CONFIG_SND_OMAP_SOC_OMAP_TWL4030) += snd-soc-omap-twl4030.o |
34 | obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o | 31 | obj-$(CONFIG_SND_OMAP_SOC_OMAP3_PANDORA) += snd-soc-omap3pandora.o |
35 | obj-$(CONFIG_SND_OMAP_SOC_OMAP_HDMI) += snd-soc-omap-hdmi-card.o | ||
diff --git a/sound/soc/omap/omap-hdmi-card.c b/sound/soc/omap/omap-hdmi-card.c deleted file mode 100644 index f649fe84b629..000000000000 --- a/sound/soc/omap/omap-hdmi-card.c +++ /dev/null | |||
@@ -1,87 +0,0 @@ | |||
1 | /* | ||
2 | * omap-hdmi-card.c | ||
3 | * | ||
4 | * OMAP ALSA SoC machine driver for TI OMAP HDMI | ||
5 | * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
6 | * Author: Ricardo Neri <ricardo.neri@ti.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or | ||
9 | * modify it under the terms of the GNU General Public License | ||
10 | * version 2 as published by the Free Software Foundation. | ||
11 | * | ||
12 | * This program is distributed in the hope that it will be useful, but | ||
13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
15 | * General Public License for more details. | ||
16 | * | ||
17 | * You should have received a copy of the GNU General Public License | ||
18 | * along with this program; if not, write to the Free Software | ||
19 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
20 | * 02110-1301 USA | ||
21 | * | ||
22 | */ | ||
23 | |||
24 | #include <linux/module.h> | ||
25 | #include <sound/pcm.h> | ||
26 | #include <sound/soc.h> | ||
27 | #include <asm/mach-types.h> | ||
28 | #include <video/omapdss.h> | ||
29 | |||
30 | #define DRV_NAME "omap-hdmi-audio" | ||
31 | |||
32 | static struct snd_soc_dai_link omap_hdmi_dai = { | ||
33 | .name = "HDMI", | ||
34 | .stream_name = "HDMI", | ||
35 | .cpu_dai_name = "omap-hdmi-audio-dai", | ||
36 | .platform_name = "omap-hdmi-audio-dai", | ||
37 | .codec_name = "hdmi-audio-codec", | ||
38 | .codec_dai_name = "hdmi-hifi", | ||
39 | }; | ||
40 | |||
41 | static struct snd_soc_card snd_soc_omap_hdmi = { | ||
42 | .name = "OMAPHDMI", | ||
43 | .owner = THIS_MODULE, | ||
44 | .dai_link = &omap_hdmi_dai, | ||
45 | .num_links = 1, | ||
46 | }; | ||
47 | |||
48 | static int omap_hdmi_probe(struct platform_device *pdev) | ||
49 | { | ||
50 | struct snd_soc_card *card = &snd_soc_omap_hdmi; | ||
51 | int ret; | ||
52 | |||
53 | card->dev = &pdev->dev; | ||
54 | |||
55 | ret = snd_soc_register_card(card); | ||
56 | if (ret) { | ||
57 | dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret); | ||
58 | card->dev = NULL; | ||
59 | return ret; | ||
60 | } | ||
61 | return 0; | ||
62 | } | ||
63 | |||
64 | static int omap_hdmi_remove(struct platform_device *pdev) | ||
65 | { | ||
66 | struct snd_soc_card *card = platform_get_drvdata(pdev); | ||
67 | |||
68 | snd_soc_unregister_card(card); | ||
69 | card->dev = NULL; | ||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | static struct platform_driver omap_hdmi_driver = { | ||
74 | .driver = { | ||
75 | .name = DRV_NAME, | ||
76 | .owner = THIS_MODULE, | ||
77 | }, | ||
78 | .probe = omap_hdmi_probe, | ||
79 | .remove = omap_hdmi_remove, | ||
80 | }; | ||
81 | |||
82 | module_platform_driver(omap_hdmi_driver); | ||
83 | |||
84 | MODULE_AUTHOR("Ricardo Neri <ricardo.neri@ti.com>"); | ||
85 | MODULE_DESCRIPTION("OMAP HDMI machine ASoC driver"); | ||
86 | MODULE_LICENSE("GPL"); | ||
87 | MODULE_ALIAS("platform:" DRV_NAME); | ||
diff --git a/sound/soc/omap/omap-hdmi.c b/sound/soc/omap/omap-hdmi.c deleted file mode 100644 index eb9c39299f81..000000000000 --- a/sound/soc/omap/omap-hdmi.c +++ /dev/null | |||
@@ -1,364 +0,0 @@ | |||
1 | /* | ||
2 | * omap-hdmi.c | ||
3 | * | ||
4 | * OMAP ALSA SoC DAI driver for HDMI audio on OMAP4 processors. | ||
5 | * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
6 | * Authors: Jorge Candelaria <jorge.candelaria@ti.com> | ||
7 | * Ricardo Neri <ricardo.neri@ti.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * version 2 as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
21 | * 02110-1301 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #include <linux/init.h> | ||
26 | #include <linux/module.h> | ||
27 | #include <linux/device.h> | ||
28 | #include <sound/core.h> | ||
29 | #include <sound/pcm.h> | ||
30 | #include <sound/pcm_params.h> | ||
31 | #include <sound/initval.h> | ||
32 | #include <sound/soc.h> | ||
33 | #include <sound/asound.h> | ||
34 | #include <sound/asoundef.h> | ||
35 | #include <sound/dmaengine_pcm.h> | ||
36 | #include <video/omapdss.h> | ||
37 | #include <sound/omap-pcm.h> | ||
38 | |||
39 | #include "omap-hdmi.h" | ||
40 | |||
41 | #define DRV_NAME "omap-hdmi-audio-dai" | ||
42 | |||
43 | struct hdmi_priv { | ||
44 | struct snd_dmaengine_dai_dma_data dma_data; | ||
45 | unsigned int dma_req; | ||
46 | struct omap_dss_audio dss_audio; | ||
47 | struct snd_aes_iec958 iec; | ||
48 | struct snd_cea_861_aud_if cea; | ||
49 | struct omap_dss_device *dssdev; | ||
50 | }; | ||
51 | |||
52 | static int omap_hdmi_dai_startup(struct snd_pcm_substream *substream, | ||
53 | struct snd_soc_dai *dai) | ||
54 | { | ||
55 | struct hdmi_priv *priv = snd_soc_dai_get_drvdata(dai); | ||
56 | int err; | ||
57 | /* | ||
58 | * Make sure that the period bytes are multiple of the DMA packet size. | ||
59 | * Largest packet size we use is 32 32-bit words = 128 bytes | ||
60 | */ | ||
61 | err = snd_pcm_hw_constraint_step(substream->runtime, 0, | ||
62 | SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 128); | ||
63 | if (err < 0) { | ||
64 | dev_err(dai->dev, "could not apply constraint\n"); | ||
65 | return err; | ||
66 | } | ||
67 | |||
68 | if (!priv->dssdev->driver->audio_supported(priv->dssdev)) { | ||
69 | dev_err(dai->dev, "audio not supported\n"); | ||
70 | return -ENODEV; | ||
71 | } | ||
72 | |||
73 | snd_soc_dai_set_dma_data(dai, substream, &priv->dma_data); | ||
74 | |||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static int omap_hdmi_dai_prepare(struct snd_pcm_substream *substream, | ||
79 | struct snd_soc_dai *dai) | ||
80 | { | ||
81 | struct hdmi_priv *priv = snd_soc_dai_get_drvdata(dai); | ||
82 | |||
83 | return priv->dssdev->driver->audio_enable(priv->dssdev); | ||
84 | } | ||
85 | |||
86 | static int omap_hdmi_dai_hw_params(struct snd_pcm_substream *substream, | ||
87 | struct snd_pcm_hw_params *params, | ||
88 | struct snd_soc_dai *dai) | ||
89 | { | ||
90 | struct hdmi_priv *priv = snd_soc_dai_get_drvdata(dai); | ||
91 | struct snd_aes_iec958 *iec = &priv->iec; | ||
92 | struct snd_cea_861_aud_if *cea = &priv->cea; | ||
93 | int err = 0; | ||
94 | |||
95 | switch (params_format(params)) { | ||
96 | case SNDRV_PCM_FORMAT_S16_LE: | ||
97 | priv->dma_data.maxburst = 16; | ||
98 | break; | ||
99 | case SNDRV_PCM_FORMAT_S24_LE: | ||
100 | priv->dma_data.maxburst = 32; | ||
101 | break; | ||
102 | default: | ||
103 | dev_err(dai->dev, "format not supported!\n"); | ||
104 | return -EINVAL; | ||
105 | } | ||
106 | |||
107 | /* | ||
108 | * fill the IEC-60958 channel status word | ||
109 | */ | ||
110 | /* initialize the word bytes */ | ||
111 | memset(iec->status, 0, sizeof(iec->status)); | ||
112 | |||
113 | /* specify IEC-60958-3 (commercial use) */ | ||
114 | iec->status[0] &= ~IEC958_AES0_PROFESSIONAL; | ||
115 | |||
116 | /* specify that the audio is LPCM*/ | ||
117 | iec->status[0] &= ~IEC958_AES0_NONAUDIO; | ||
118 | |||
119 | iec->status[0] |= IEC958_AES0_CON_NOT_COPYRIGHT; | ||
120 | |||
121 | iec->status[0] |= IEC958_AES0_CON_EMPHASIS_NONE; | ||
122 | |||
123 | iec->status[0] |= IEC958_AES1_PRO_MODE_NOTID; | ||
124 | |||
125 | iec->status[1] = IEC958_AES1_CON_GENERAL; | ||
126 | |||
127 | iec->status[2] |= IEC958_AES2_CON_SOURCE_UNSPEC; | ||
128 | |||
129 | iec->status[2] |= IEC958_AES2_CON_CHANNEL_UNSPEC; | ||
130 | |||
131 | switch (params_rate(params)) { | ||
132 | case 32000: | ||
133 | iec->status[3] |= IEC958_AES3_CON_FS_32000; | ||
134 | break; | ||
135 | case 44100: | ||
136 | iec->status[3] |= IEC958_AES3_CON_FS_44100; | ||
137 | break; | ||
138 | case 48000: | ||
139 | iec->status[3] |= IEC958_AES3_CON_FS_48000; | ||
140 | break; | ||
141 | case 88200: | ||
142 | iec->status[3] |= IEC958_AES3_CON_FS_88200; | ||
143 | break; | ||
144 | case 96000: | ||
145 | iec->status[3] |= IEC958_AES3_CON_FS_96000; | ||
146 | break; | ||
147 | case 176400: | ||
148 | iec->status[3] |= IEC958_AES3_CON_FS_176400; | ||
149 | break; | ||
150 | case 192000: | ||
151 | iec->status[3] |= IEC958_AES3_CON_FS_192000; | ||
152 | break; | ||
153 | default: | ||
154 | dev_err(dai->dev, "rate not supported!\n"); | ||
155 | return -EINVAL; | ||
156 | } | ||
157 | |||
158 | /* specify the clock accuracy */ | ||
159 | iec->status[3] |= IEC958_AES3_CON_CLOCK_1000PPM; | ||
160 | |||
161 | /* | ||
162 | * specify the word length. The same word length value can mean | ||
163 | * two different lengths. Hence, we need to specify the maximum | ||
164 | * word length as well. | ||
165 | */ | ||
166 | switch (params_format(params)) { | ||
167 | case SNDRV_PCM_FORMAT_S16_LE: | ||
168 | iec->status[4] |= IEC958_AES4_CON_WORDLEN_20_16; | ||
169 | iec->status[4] &= ~IEC958_AES4_CON_MAX_WORDLEN_24; | ||
170 | break; | ||
171 | case SNDRV_PCM_FORMAT_S24_LE: | ||
172 | iec->status[4] |= IEC958_AES4_CON_WORDLEN_24_20; | ||
173 | iec->status[4] |= IEC958_AES4_CON_MAX_WORDLEN_24; | ||
174 | break; | ||
175 | default: | ||
176 | dev_err(dai->dev, "format not supported!\n"); | ||
177 | return -EINVAL; | ||
178 | } | ||
179 | |||
180 | /* | ||
181 | * Fill the CEA-861 audio infoframe (see spec for details) | ||
182 | */ | ||
183 | |||
184 | cea->db1_ct_cc = (params_channels(params) - 1) | ||
185 | & CEA861_AUDIO_INFOFRAME_DB1CC; | ||
186 | cea->db1_ct_cc |= CEA861_AUDIO_INFOFRAME_DB1CT_FROM_STREAM; | ||
187 | |||
188 | cea->db2_sf_ss = CEA861_AUDIO_INFOFRAME_DB2SF_FROM_STREAM; | ||
189 | cea->db2_sf_ss |= CEA861_AUDIO_INFOFRAME_DB2SS_FROM_STREAM; | ||
190 | |||
191 | cea->db3 = 0; /* not used, all zeros */ | ||
192 | |||
193 | /* | ||
194 | * The OMAP HDMI IP requires to use the 8-channel channel code when | ||
195 | * transmitting more than two channels. | ||
196 | */ | ||
197 | if (params_channels(params) == 2) | ||
198 | cea->db4_ca = 0x0; | ||
199 | else | ||
200 | cea->db4_ca = 0x13; | ||
201 | |||
202 | cea->db5_dminh_lsv = CEA861_AUDIO_INFOFRAME_DB5_DM_INH_PROHIBITED; | ||
203 | /* the expression is trivial but makes clear what we are doing */ | ||
204 | cea->db5_dminh_lsv |= (0 & CEA861_AUDIO_INFOFRAME_DB5_LSV); | ||
205 | |||
206 | priv->dss_audio.iec = iec; | ||
207 | priv->dss_audio.cea = cea; | ||
208 | |||
209 | err = priv->dssdev->driver->audio_config(priv->dssdev, | ||
210 | &priv->dss_audio); | ||
211 | |||
212 | return err; | ||
213 | } | ||
214 | |||
215 | static int omap_hdmi_dai_trigger(struct snd_pcm_substream *substream, int cmd, | ||
216 | struct snd_soc_dai *dai) | ||
217 | { | ||
218 | struct hdmi_priv *priv = snd_soc_dai_get_drvdata(dai); | ||
219 | int err = 0; | ||
220 | |||
221 | switch (cmd) { | ||
222 | case SNDRV_PCM_TRIGGER_START: | ||
223 | case SNDRV_PCM_TRIGGER_RESUME: | ||
224 | case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: | ||
225 | err = priv->dssdev->driver->audio_start(priv->dssdev); | ||
226 | break; | ||
227 | case SNDRV_PCM_TRIGGER_STOP: | ||
228 | case SNDRV_PCM_TRIGGER_SUSPEND: | ||
229 | case SNDRV_PCM_TRIGGER_PAUSE_PUSH: | ||
230 | priv->dssdev->driver->audio_stop(priv->dssdev); | ||
231 | break; | ||
232 | default: | ||
233 | err = -EINVAL; | ||
234 | } | ||
235 | return err; | ||
236 | } | ||
237 | |||
238 | static void omap_hdmi_dai_shutdown(struct snd_pcm_substream *substream, | ||
239 | struct snd_soc_dai *dai) | ||
240 | { | ||
241 | struct hdmi_priv *priv = snd_soc_dai_get_drvdata(dai); | ||
242 | |||
243 | priv->dssdev->driver->audio_disable(priv->dssdev); | ||
244 | } | ||
245 | |||
246 | static const struct snd_soc_dai_ops omap_hdmi_dai_ops = { | ||
247 | .startup = omap_hdmi_dai_startup, | ||
248 | .hw_params = omap_hdmi_dai_hw_params, | ||
249 | .prepare = omap_hdmi_dai_prepare, | ||
250 | .trigger = omap_hdmi_dai_trigger, | ||
251 | .shutdown = omap_hdmi_dai_shutdown, | ||
252 | }; | ||
253 | |||
254 | static struct snd_soc_dai_driver omap_hdmi_dai = { | ||
255 | .playback = { | ||
256 | .channels_min = 2, | ||
257 | .channels_max = 8, | ||
258 | .rates = OMAP_HDMI_RATES, | ||
259 | .formats = OMAP_HDMI_FORMATS, | ||
260 | }, | ||
261 | .ops = &omap_hdmi_dai_ops, | ||
262 | }; | ||
263 | |||
264 | static const struct snd_soc_component_driver omap_hdmi_component = { | ||
265 | .name = DRV_NAME, | ||
266 | }; | ||
267 | |||
268 | static int omap_hdmi_probe(struct platform_device *pdev) | ||
269 | { | ||
270 | int ret; | ||
271 | struct resource *hdmi_rsrc; | ||
272 | struct hdmi_priv *hdmi_data; | ||
273 | bool hdmi_dev_found = false; | ||
274 | |||
275 | hdmi_data = devm_kzalloc(&pdev->dev, sizeof(*hdmi_data), GFP_KERNEL); | ||
276 | if (hdmi_data == NULL) { | ||
277 | dev_err(&pdev->dev, "Cannot allocate memory for HDMI data\n"); | ||
278 | return -ENOMEM; | ||
279 | } | ||
280 | |||
281 | hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
282 | if (!hdmi_rsrc) { | ||
283 | dev_err(&pdev->dev, "Cannot obtain IORESOURCE_MEM HDMI\n"); | ||
284 | return -ENODEV; | ||
285 | } | ||
286 | |||
287 | hdmi_data->dma_data.addr = hdmi_rsrc->start + OMAP_HDMI_AUDIO_DMA_PORT; | ||
288 | |||
289 | hdmi_rsrc = platform_get_resource(pdev, IORESOURCE_DMA, 0); | ||
290 | if (!hdmi_rsrc) { | ||
291 | dev_err(&pdev->dev, "Cannot obtain IORESOURCE_DMA HDMI\n"); | ||
292 | return -ENODEV; | ||
293 | } | ||
294 | |||
295 | hdmi_data->dma_req = hdmi_rsrc->start; | ||
296 | hdmi_data->dma_data.filter_data = &hdmi_data->dma_req; | ||
297 | hdmi_data->dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; | ||
298 | |||
299 | /* | ||
300 | * TODO: We assume that there is only one DSS HDMI device. Future | ||
301 | * OMAP implementations may support more than one HDMI devices and | ||
302 | * we should provided separate audio support for all of them. | ||
303 | */ | ||
304 | /* Find an HDMI device. */ | ||
305 | for_each_dss_dev(hdmi_data->dssdev) { | ||
306 | omap_dss_get_device(hdmi_data->dssdev); | ||
307 | |||
308 | if (!hdmi_data->dssdev->driver) { | ||
309 | omap_dss_put_device(hdmi_data->dssdev); | ||
310 | continue; | ||
311 | } | ||
312 | |||
313 | if (hdmi_data->dssdev->type == OMAP_DISPLAY_TYPE_HDMI) { | ||
314 | hdmi_dev_found = true; | ||
315 | break; | ||
316 | } | ||
317 | } | ||
318 | |||
319 | if (!hdmi_dev_found) { | ||
320 | dev_err(&pdev->dev, "no driver for HDMI display found\n"); | ||
321 | return -ENODEV; | ||
322 | } | ||
323 | |||
324 | dev_set_drvdata(&pdev->dev, hdmi_data); | ||
325 | ret = snd_soc_register_component(&pdev->dev, &omap_hdmi_component, | ||
326 | &omap_hdmi_dai, 1); | ||
327 | |||
328 | if (ret) | ||
329 | return ret; | ||
330 | |||
331 | return omap_pcm_platform_register(&pdev->dev); | ||
332 | } | ||
333 | |||
334 | static int omap_hdmi_remove(struct platform_device *pdev) | ||
335 | { | ||
336 | struct hdmi_priv *hdmi_data = dev_get_drvdata(&pdev->dev); | ||
337 | |||
338 | snd_soc_unregister_component(&pdev->dev); | ||
339 | |||
340 | if (hdmi_data == NULL) { | ||
341 | dev_err(&pdev->dev, "cannot obtain HDMi data\n"); | ||
342 | return -ENODEV; | ||
343 | } | ||
344 | |||
345 | omap_dss_put_device(hdmi_data->dssdev); | ||
346 | return 0; | ||
347 | } | ||
348 | |||
349 | static struct platform_driver hdmi_dai_driver = { | ||
350 | .driver = { | ||
351 | .name = DRV_NAME, | ||
352 | .owner = THIS_MODULE, | ||
353 | }, | ||
354 | .probe = omap_hdmi_probe, | ||
355 | .remove = omap_hdmi_remove, | ||
356 | }; | ||
357 | |||
358 | module_platform_driver(hdmi_dai_driver); | ||
359 | |||
360 | MODULE_AUTHOR("Jorge Candelaria <jorge.candelaria@ti.com>"); | ||
361 | MODULE_AUTHOR("Ricardo Neri <ricardo.neri@ti.com>"); | ||
362 | MODULE_DESCRIPTION("OMAP HDMI SoC Interface"); | ||
363 | MODULE_LICENSE("GPL"); | ||
364 | MODULE_ALIAS("platform:" DRV_NAME); | ||
diff --git a/sound/soc/omap/omap-hdmi.h b/sound/soc/omap/omap-hdmi.h deleted file mode 100644 index 6ad2bf4f2697..000000000000 --- a/sound/soc/omap/omap-hdmi.h +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | /* | ||
2 | * omap-hdmi.h | ||
3 | * | ||
4 | * Definitions for OMAP ALSA SoC DAI driver for HDMI audio on OMAP4 processors. | ||
5 | * Copyright (C) 2010-2011 Texas Instruments Incorporated - http://www.ti.com/ | ||
6 | * Authors: Jorge Candelaria <jorge.candelaria@ti.com> | ||
7 | * Ricardo Neri <ricardo.neri@ti.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * version 2 as published by the Free Software Foundation. | ||
12 | * | ||
13 | * This program is distributed in the hope that it will be useful, but | ||
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
16 | * General Public License for more details. | ||
17 | * | ||
18 | * You should have received a copy of the GNU General Public License | ||
19 | * along with this program; if not, write to the Free Software | ||
20 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
21 | * 02110-1301 USA | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #ifndef __OMAP_HDMI_H__ | ||
26 | #define __OMAP_HDMI_H__ | ||
27 | |||
28 | #define OMAP_HDMI_AUDIO_DMA_PORT 0x8c | ||
29 | |||
30 | #define OMAP_HDMI_RATES (SNDRV_PCM_RATE_32000 | \ | ||
31 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | \ | ||
32 | SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | \ | ||
33 | SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000) | ||
34 | |||
35 | #define OMAP_HDMI_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \ | ||
36 | SNDRV_PCM_FMTBIT_S24_LE) | ||
37 | |||
38 | #endif | ||