diff options
Diffstat (limited to 'sound/soc/omap/sdp4430.c')
-rw-r--r-- | sound/soc/omap/sdp4430.c | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/sound/soc/omap/sdp4430.c b/sound/soc/omap/sdp4430.c index 4b4463db6ba0..189e03900637 100644 --- a/sound/soc/omap/sdp4430.c +++ b/sound/soc/omap/sdp4430.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include <sound/core.h> | 24 | #include <sound/core.h> |
25 | #include <sound/pcm.h> | 25 | #include <sound/pcm.h> |
26 | #include <sound/soc.h> | 26 | #include <sound/soc.h> |
27 | #include <sound/soc-dapm.h> | 27 | #include <sound/jack.h> |
28 | 28 | ||
29 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
30 | #include <plat/hardware.h> | 30 | #include <plat/hardware.h> |
@@ -66,6 +66,21 @@ static struct snd_soc_ops sdp4430_ops = { | |||
66 | .hw_params = sdp4430_hw_params, | 66 | .hw_params = sdp4430_hw_params, |
67 | }; | 67 | }; |
68 | 68 | ||
69 | /* Headset jack */ | ||
70 | static struct snd_soc_jack hs_jack; | ||
71 | |||
72 | /*Headset jack detection DAPM pins */ | ||
73 | static struct snd_soc_jack_pin hs_jack_pins[] = { | ||
74 | { | ||
75 | .pin = "Headset Mic", | ||
76 | .mask = SND_JACK_MICROPHONE, | ||
77 | }, | ||
78 | { | ||
79 | .pin = "Headset Stereophone", | ||
80 | .mask = SND_JACK_HEADPHONE, | ||
81 | }, | ||
82 | }; | ||
83 | |||
69 | static int sdp4430_get_power_mode(struct snd_kcontrol *kcontrol, | 84 | static int sdp4430_get_power_mode(struct snd_kcontrol *kcontrol, |
70 | struct snd_ctl_elem_value *ucontrol) | 85 | struct snd_ctl_elem_value *ucontrol) |
71 | { | 86 | { |
@@ -102,6 +117,7 @@ static const struct snd_soc_dapm_widget sdp4430_twl6040_dapm_widgets[] = { | |||
102 | SND_SOC_DAPM_MIC("Headset Mic", NULL), | 117 | SND_SOC_DAPM_MIC("Headset Mic", NULL), |
103 | SND_SOC_DAPM_HP("Headset Stereophone", NULL), | 118 | SND_SOC_DAPM_HP("Headset Stereophone", NULL), |
104 | SND_SOC_DAPM_SPK("Earphone Spk", NULL), | 119 | SND_SOC_DAPM_SPK("Earphone Spk", NULL), |
120 | SND_SOC_DAPM_INPUT("Aux/FM Stereo In"), | ||
105 | }; | 121 | }; |
106 | 122 | ||
107 | static const struct snd_soc_dapm_route audio_map[] = { | 123 | static const struct snd_soc_dapm_route audio_map[] = { |
@@ -124,11 +140,16 @@ static const struct snd_soc_dapm_route audio_map[] = { | |||
124 | 140 | ||
125 | /* Earphone speaker */ | 141 | /* Earphone speaker */ |
126 | {"Earphone Spk", NULL, "EP"}, | 142 | {"Earphone Spk", NULL, "EP"}, |
143 | |||
144 | /* Aux/FM Stereo In: AFML, AFMR */ | ||
145 | {"AFML", NULL, "Aux/FM Stereo In"}, | ||
146 | {"AFMR", NULL, "Aux/FM Stereo In"}, | ||
127 | }; | 147 | }; |
128 | 148 | ||
129 | static int sdp4430_twl6040_init(struct snd_soc_pcm_runtime *rtd) | 149 | static int sdp4430_twl6040_init(struct snd_soc_pcm_runtime *rtd) |
130 | { | 150 | { |
131 | struct snd_soc_codec *codec = rtd->codec; | 151 | struct snd_soc_codec *codec = rtd->codec; |
152 | struct snd_soc_dapm_context *dapm = &codec->dapm; | ||
132 | int ret; | 153 | int ret; |
133 | 154 | ||
134 | /* Add SDP4430 specific controls */ | 155 | /* Add SDP4430 specific controls */ |
@@ -138,25 +159,39 @@ static int sdp4430_twl6040_init(struct snd_soc_pcm_runtime *rtd) | |||
138 | return ret; | 159 | return ret; |
139 | 160 | ||
140 | /* Add SDP4430 specific widgets */ | 161 | /* Add SDP4430 specific widgets */ |
141 | ret = snd_soc_dapm_new_controls(codec, sdp4430_twl6040_dapm_widgets, | 162 | ret = snd_soc_dapm_new_controls(dapm, sdp4430_twl6040_dapm_widgets, |
142 | ARRAY_SIZE(sdp4430_twl6040_dapm_widgets)); | 163 | ARRAY_SIZE(sdp4430_twl6040_dapm_widgets)); |
143 | if (ret) | 164 | if (ret) |
144 | return ret; | 165 | return ret; |
145 | 166 | ||
146 | /* Set up SDP4430 specific audio path audio_map */ | 167 | /* Set up SDP4430 specific audio path audio_map */ |
147 | snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); | 168 | snd_soc_dapm_add_routes(dapm, audio_map, ARRAY_SIZE(audio_map)); |
148 | 169 | ||
149 | /* SDP4430 connected pins */ | 170 | /* SDP4430 connected pins */ |
150 | snd_soc_dapm_enable_pin(codec, "Ext Mic"); | 171 | snd_soc_dapm_enable_pin(dapm, "Ext Mic"); |
151 | snd_soc_dapm_enable_pin(codec, "Ext Spk"); | 172 | snd_soc_dapm_enable_pin(dapm, "Ext Spk"); |
152 | snd_soc_dapm_enable_pin(codec, "Headset Mic"); | 173 | snd_soc_dapm_enable_pin(dapm, "AFML"); |
153 | snd_soc_dapm_enable_pin(codec, "Headset Stereophone"); | 174 | snd_soc_dapm_enable_pin(dapm, "AFMR"); |
175 | snd_soc_dapm_enable_pin(dapm, "Headset Mic"); | ||
176 | snd_soc_dapm_enable_pin(dapm, "Headset Stereophone"); | ||
177 | |||
178 | ret = snd_soc_dapm_sync(dapm); | ||
179 | if (ret) | ||
180 | return ret; | ||
181 | |||
182 | /* Headset jack detection */ | ||
183 | ret = snd_soc_jack_new(codec, "Headset Jack", | ||
184 | SND_JACK_HEADSET, &hs_jack); | ||
185 | if (ret) | ||
186 | return ret; | ||
154 | 187 | ||
155 | /* TWL6040 not connected pins */ | 188 | ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), |
156 | snd_soc_dapm_nc_pin(codec, "AFML"); | 189 | hs_jack_pins); |
157 | snd_soc_dapm_nc_pin(codec, "AFMR"); | ||
158 | 190 | ||
159 | ret = snd_soc_dapm_sync(codec); | 191 | if (machine_is_omap_4430sdp()) |
192 | twl6040_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADSET); | ||
193 | else | ||
194 | snd_soc_jack_report(&hs_jack, SND_JACK_HEADSET, SND_JACK_HEADSET); | ||
160 | 195 | ||
161 | return ret; | 196 | return ret; |
162 | } | 197 | } |