diff options
author | Peter Ujfalusi <peter.ujfalusi@nokia.com> | 2010-05-07 07:24:10 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-05-07 11:42:23 -0400 |
commit | 826e962c4689172e25acde72eafebc063253b69d (patch) | |
tree | ebba828ec9f32aa5328a30a3a4731cf7c6acd8bc /sound/soc | |
parent | 637d3847ba0ca2c7780e6521cbe75568d19ff0db (diff) |
Revert "ASoC: tpa6130a2: Support for limiting gain"
This reverts commit 6f3991152f20933b77eff30413e893bf1a15e578.
Since core has now support for limiting the volume on controls this
patch is not needed. Furthermore, this patch actually prevents the core
to set new volume on the TPA.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r-- | sound/soc/codecs/tpa6130a2.c | 76 |
1 files changed, 8 insertions, 68 deletions
diff --git a/sound/soc/codecs/tpa6130a2.c b/sound/soc/codecs/tpa6130a2.c index 31f67b527ca1..0cf3e3862e7b 100644 --- a/sound/soc/codecs/tpa6130a2.c +++ b/sound/soc/codecs/tpa6130a2.c | |||
@@ -46,9 +46,6 @@ static const char *tpa6140a2_supply_names[TPA6130A2_NUM_SUPPLIES] = { | |||
46 | "AVdd", | 46 | "AVdd", |
47 | }; | 47 | }; |
48 | 48 | ||
49 | #define TPA6130A2_GAIN_MAX 0x3f | ||
50 | #define TPA6140A2_GAIN_MAX 0x1f | ||
51 | |||
52 | /* This struct is used to save the context */ | 49 | /* This struct is used to save the context */ |
53 | struct tpa6130a2_data { | 50 | struct tpa6130a2_data { |
54 | struct mutex mutex; | 51 | struct mutex mutex; |
@@ -57,7 +54,6 @@ struct tpa6130a2_data { | |||
57 | int power_gpio; | 54 | int power_gpio; |
58 | unsigned char power_state; | 55 | unsigned char power_state; |
59 | enum tpa_model id; | 56 | enum tpa_model id; |
60 | int gain_limit; | ||
61 | }; | 57 | }; |
62 | 58 | ||
63 | static int tpa6130a2_i2c_read(int reg) | 59 | static int tpa6130a2_i2c_read(int reg) |
@@ -180,40 +176,6 @@ exit: | |||
180 | return ret; | 176 | return ret; |
181 | } | 177 | } |
182 | 178 | ||
183 | static int tpa6130a2_info_volsw(struct snd_kcontrol *kcontrol, | ||
184 | struct snd_ctl_elem_info *uinfo) | ||
185 | { | ||
186 | struct soc_mixer_control *mc = | ||
187 | (struct soc_mixer_control *)kcontrol->private_value; | ||
188 | struct tpa6130a2_data *data; | ||
189 | |||
190 | BUG_ON(tpa6130a2_client == NULL); | ||
191 | data = i2c_get_clientdata(tpa6130a2_client); | ||
192 | |||
193 | mutex_lock(&data->mutex); | ||
194 | switch (mc->reg) { | ||
195 | case TPA6130A2_REG_VOL_MUTE: | ||
196 | if (data->gain_limit != mc->max) | ||
197 | mc->max = data->gain_limit; | ||
198 | break; | ||
199 | default: | ||
200 | dev_err(&tpa6130a2_client->dev, | ||
201 | "Invalid register: 0x02%x\n", mc->reg); | ||
202 | goto out; | ||
203 | } | ||
204 | if (unlikely(mc->max == 1)) | ||
205 | uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; | ||
206 | else | ||
207 | uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; | ||
208 | |||
209 | uinfo->count = 1; | ||
210 | uinfo->value.integer.min = 0; | ||
211 | uinfo->value.integer.max = mc->max; | ||
212 | out: | ||
213 | mutex_unlock(&data->mutex); | ||
214 | return 0; | ||
215 | } | ||
216 | |||
217 | static int tpa6130a2_get_reg(struct snd_kcontrol *kcontrol, | 179 | static int tpa6130a2_get_reg(struct snd_kcontrol *kcontrol, |
218 | struct snd_ctl_elem_value *ucontrol) | 180 | struct snd_ctl_elem_value *ucontrol) |
219 | { | 181 | { |
@@ -277,15 +239,6 @@ static int tpa6130a2_set_reg(struct snd_kcontrol *kcontrol, | |||
277 | return 1; | 239 | return 1; |
278 | } | 240 | } |
279 | 241 | ||
280 | #define SOC_SINGLE_EXT_TLV_TPA(xname, xreg, xshift, xmax, xinvert, tlv_array) \ | ||
281 | { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ | ||
282 | .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ | ||
283 | SNDRV_CTL_ELEM_ACCESS_READWRITE,\ | ||
284 | .tlv.p = (tlv_array), \ | ||
285 | .info = tpa6130a2_info_volsw, \ | ||
286 | .get = tpa6130a2_get_reg, .put = tpa6130a2_set_reg, \ | ||
287 | .private_value = SOC_SINGLE_VALUE(xreg, xshift, xmax, xinvert) } | ||
288 | |||
289 | /* | 242 | /* |
290 | * TPA6130 volume. From -59.5 to 4 dB with increasing step size when going | 243 | * TPA6130 volume. From -59.5 to 4 dB with increasing step size when going |
291 | * down in gain. | 244 | * down in gain. |
@@ -305,9 +258,10 @@ static const unsigned int tpa6130_tlv[] = { | |||
305 | }; | 258 | }; |
306 | 259 | ||
307 | static const struct snd_kcontrol_new tpa6130a2_controls[] = { | 260 | static const struct snd_kcontrol_new tpa6130a2_controls[] = { |
308 | SOC_SINGLE_EXT_TLV_TPA("TPA6130A2 Headphone Playback Volume", | 261 | SOC_SINGLE_EXT_TLV("TPA6130A2 Headphone Playback Volume", |
309 | TPA6130A2_REG_VOL_MUTE, 0, TPA6130A2_GAIN_MAX, 0, | 262 | TPA6130A2_REG_VOL_MUTE, 0, 0x3f, 0, |
310 | tpa6130_tlv), | 263 | tpa6130a2_get_reg, tpa6130a2_set_reg, |
264 | tpa6130_tlv), | ||
311 | }; | 265 | }; |
312 | 266 | ||
313 | static const unsigned int tpa6140_tlv[] = { | 267 | static const unsigned int tpa6140_tlv[] = { |
@@ -318,9 +272,10 @@ static const unsigned int tpa6140_tlv[] = { | |||
318 | }; | 272 | }; |
319 | 273 | ||
320 | static const struct snd_kcontrol_new tpa6140a2_controls[] = { | 274 | static const struct snd_kcontrol_new tpa6140a2_controls[] = { |
321 | SOC_SINGLE_EXT_TLV_TPA("TPA6140A2 Headphone Playback Volume", | 275 | SOC_SINGLE_EXT_TLV("TPA6140A2 Headphone Playback Volume", |
322 | TPA6130A2_REG_VOL_MUTE, 1, TPA6140A2_GAIN_MAX, 0, | 276 | TPA6130A2_REG_VOL_MUTE, 1, 0x1f, 0, |
323 | tpa6140_tlv), | 277 | tpa6130a2_get_reg, tpa6130a2_set_reg, |
278 | tpa6140_tlv), | ||
324 | }; | 279 | }; |
325 | 280 | ||
326 | /* | 281 | /* |
@@ -499,31 +454,16 @@ static int __devinit tpa6130a2_probe(struct i2c_client *client, | |||
499 | case TPA6130A2: | 454 | case TPA6130A2: |
500 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) | 455 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) |
501 | data->supplies[i].supply = tpa6130a2_supply_names[i]; | 456 | data->supplies[i].supply = tpa6130a2_supply_names[i]; |
502 | if (pdata->limit_gain > 0 && | ||
503 | pdata->limit_gain < TPA6130A2_GAIN_MAX) | ||
504 | data->gain_limit = pdata->limit_gain; | ||
505 | else | ||
506 | data->gain_limit = TPA6130A2_GAIN_MAX; | ||
507 | break; | 457 | break; |
508 | case TPA6140A2: | 458 | case TPA6140A2: |
509 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) | 459 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) |
510 | data->supplies[i].supply = tpa6140a2_supply_names[i];; | 460 | data->supplies[i].supply = tpa6140a2_supply_names[i];; |
511 | if (pdata->limit_gain > 0 && | ||
512 | pdata->limit_gain < TPA6140A2_GAIN_MAX) | ||
513 | data->gain_limit = pdata->limit_gain; | ||
514 | else | ||
515 | data->gain_limit = TPA6140A2_GAIN_MAX; | ||
516 | break; | 461 | break; |
517 | default: | 462 | default: |
518 | dev_warn(dev, "Unknown TPA model (%d). Assuming 6130A2\n", | 463 | dev_warn(dev, "Unknown TPA model (%d). Assuming 6130A2\n", |
519 | pdata->id); | 464 | pdata->id); |
520 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) | 465 | for (i = 0; i < ARRAY_SIZE(data->supplies); i++) |
521 | data->supplies[i].supply = tpa6130a2_supply_names[i]; | 466 | data->supplies[i].supply = tpa6130a2_supply_names[i]; |
522 | if (pdata->limit_gain > 0 && | ||
523 | pdata->limit_gain < TPA6130A2_GAIN_MAX) | ||
524 | data->gain_limit = pdata->limit_gain; | ||
525 | else | ||
526 | data->gain_limit = TPA6130A2_GAIN_MAX; | ||
527 | } | 467 | } |
528 | 468 | ||
529 | ret = regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), | 469 | ret = regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), |