Skip to content

Commit

Permalink
ASoC: core: Add support for DAI and machine kcontrols.
Browse files Browse the repository at this point in the history
Currently ASoC can only add kcontrols using codec and platform component device
handles. It's also desirable to add kcontrols for DAIs (i.e. McBSP) and for
SoC card machine drivers too. This allows the kcontrol to have a direct handle to
the parent ASoC component DAI/SoC Card/Platform/Codec device and hence easily
get it's private data.

This change makes snd_soc_add_controls() static and wraps it in the folowing
calls (card and dai are new) :-

snd_soc_add_card_controls()
snd_soc_add_codec_controls()
snd_soc_add_dai_controls()
snd_soc_add_platform_controls()

This patch also does a lot of small mechanical changes in individual codec drivers
to replace snd_soc_add_controls() with snd_soc_add_codec_controls().

It also updates the McBSP DAI driver to use snd_soc_add_dai_controls().

Finally, it updates the existing machine drivers that register controls to either :-

1) Use snd_soc_add_card_controls() where no direct codec control is required.
2) Use snd_soc_add_codec_controls() where there is direct codec control.

In the case of 1) above we also update the machine drivers to get the correct
component data pointers from the kcontrol (rather than getting the machine pointer
via the codec pointer).

Signed-off-by: Liam Girdwood <lrg@ti.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Liam Girdwood authored and Mark Brown committed Feb 4, 2012
1 parent 8334402 commit 022658b
Show file tree
Hide file tree
Showing 60 changed files with 203 additions and 173 deletions.
6 changes: 5 additions & 1 deletion include/sound/soc.h
Original file line number Diff line number Diff line change
Expand Up @@ -368,10 +368,14 @@ void snd_soc_free_ac97_codec(struct snd_soc_codec *codec);
struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
void *data, char *long_name,
const char *prefix);
int snd_soc_add_controls(struct snd_soc_codec *codec,
int snd_soc_add_codec_controls(struct snd_soc_codec *codec,
const struct snd_kcontrol_new *controls, int num_controls);
int snd_soc_add_platform_controls(struct snd_soc_platform *platform,
const struct snd_kcontrol_new *controls, int num_controls);
int snd_soc_add_card_controls(struct snd_soc_card *soc_card,
const struct snd_kcontrol_new *controls, int num_controls);
int snd_soc_add_dai_controls(struct snd_soc_dai *dai,
const struct snd_kcontrol_new *controls, int num_controls);
int snd_soc_info_enum_double(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo);
int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
Expand Down
6 changes: 3 additions & 3 deletions sound/soc/codecs/ad1836.c
Original file line number Diff line number Diff line change
Expand Up @@ -277,19 +277,19 @@ static int ad1836_probe(struct snd_soc_codec *codec)
if (ad1836->type == AD1836) {
/* left/right diff:PGA/MUX */
snd_soc_write(codec, AD1836_ADC_CTRL3, 0x3A);
ret = snd_soc_add_controls(codec, ad1836_controls,
ret = snd_soc_add_codec_controls(codec, ad1836_controls,
ARRAY_SIZE(ad1836_controls));
if (ret)
return ret;
} else {
snd_soc_write(codec, AD1836_ADC_CTRL3, 0x00);
}

ret = snd_soc_add_controls(codec, ad183x_dac_controls, num_dacs * 2);
ret = snd_soc_add_codec_controls(codec, ad183x_dac_controls, num_dacs * 2);
if (ret)
return ret;

ret = snd_soc_add_controls(codec, ad183x_adc_controls, num_adcs);
ret = snd_soc_add_codec_controls(codec, ad183x_adc_controls, num_adcs);
if (ret)
return ret;

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/ad1980.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ static int ad1980_soc_probe(struct snd_soc_codec *codec)
ext_status = ac97_read(codec, AC97_EXTENDED_STATUS);
ac97_write(codec, AC97_EXTENDED_STATUS, ext_status&~0x3800);

snd_soc_add_controls(codec, ad1980_snd_ac97_controls,
snd_soc_add_codec_controls(codec, ad1980_snd_ac97_controls,
ARRAY_SIZE(ad1980_snd_ac97_controls));

return 0;
Expand Down
4 changes: 2 additions & 2 deletions sound/soc/codecs/adau1373.c
Original file line number Diff line number Diff line change
Expand Up @@ -1257,7 +1257,7 @@ static int adau1373_probe(struct snd_soc_codec *codec)
pdata->drc_setting[i]);
}

snd_soc_add_controls(codec, adau1373_drc_controls,
snd_soc_add_codec_controls(codec, adau1373_drc_controls,
pdata->num_drc);

val = 0;
Expand All @@ -1282,7 +1282,7 @@ static int adau1373_probe(struct snd_soc_codec *codec)
}

if (!lineout_differential) {
snd_soc_add_controls(codec, adau1373_lineout2_controls,
snd_soc_add_codec_controls(codec, adau1373_lineout2_controls,
ARRAY_SIZE(adau1373_lineout2_controls));
}

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/ak4535.c
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ static int ak4535_probe(struct snd_soc_codec *codec)
/* power on device */
ak4535_set_bias_level(codec, SND_SOC_BIAS_STANDBY);

snd_soc_add_controls(codec, ak4535_snd_controls,
snd_soc_add_codec_controls(codec, ak4535_snd_controls,
ARRAY_SIZE(ak4535_snd_controls));
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/ak4642.c
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ static int ak4642_probe(struct snd_soc_codec *codec)
return ret;
}

snd_soc_add_controls(codec, ak4642_snd_controls,
snd_soc_add_codec_controls(codec, ak4642_snd_controls,
ARRAY_SIZE(ak4642_snd_controls));

ak4642_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/ak4671.c
Original file line number Diff line number Diff line change
Expand Up @@ -628,7 +628,7 @@ static int ak4671_probe(struct snd_soc_codec *codec)
return ret;
}

snd_soc_add_controls(codec, ak4671_snd_controls,
snd_soc_add_codec_controls(codec, ak4671_snd_controls,
ARRAY_SIZE(ak4671_snd_controls));

ak4671_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
Expand Down
8 changes: 4 additions & 4 deletions sound/soc/codecs/alc5623.c
Original file line number Diff line number Diff line change
Expand Up @@ -925,22 +925,22 @@ static int alc5623_probe(struct snd_soc_codec *codec)

switch (alc5623->id) {
case 0x21:
snd_soc_add_controls(codec, alc5621_vol_snd_controls,
snd_soc_add_codec_controls(codec, alc5621_vol_snd_controls,
ARRAY_SIZE(alc5621_vol_snd_controls));
break;
case 0x22:
snd_soc_add_controls(codec, alc5622_vol_snd_controls,
snd_soc_add_codec_controls(codec, alc5622_vol_snd_controls,
ARRAY_SIZE(alc5622_vol_snd_controls));
break;
case 0x23:
snd_soc_add_controls(codec, alc5623_vol_snd_controls,
snd_soc_add_codec_controls(codec, alc5623_vol_snd_controls,
ARRAY_SIZE(alc5623_vol_snd_controls));
break;
default:
return -EINVAL;
}

snd_soc_add_controls(codec, alc5623_snd_controls,
snd_soc_add_codec_controls(codec, alc5623_snd_controls,
ARRAY_SIZE(alc5623_snd_controls));

snd_soc_dapm_new_controls(dapm, alc5623_dapm_widgets,
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/alc5632.c
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ static int alc5632_probe(struct snd_soc_codec *codec)

switch (alc5632->id) {
case 0x5c:
snd_soc_add_controls(codec, alc5632_vol_snd_controls,
snd_soc_add_codec_controls(codec, alc5632_vol_snd_controls,
ARRAY_SIZE(alc5632_vol_snd_controls));
break;
default:
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/cq93vc.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ static int cq93vc_probe(struct snd_soc_codec *codec)
codec->control_data = davinci_vc;

/* Set controls */
snd_soc_add_controls(codec, cq93vc_snd_controls,
snd_soc_add_codec_controls(codec, cq93vc_snd_controls,
ARRAY_SIZE(cq93vc_snd_controls));

/* Off, with power on */
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/cs4270.c
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ static int cs4270_probe(struct snd_soc_codec *codec)
}

/* Add the non-DAPM controls */
ret = snd_soc_add_controls(codec, cs4270_snd_controls,
ret = snd_soc_add_codec_controls(codec, cs4270_snd_controls,
ARRAY_SIZE(cs4270_snd_controls));
if (ret < 0) {
dev_err(codec->dev, "failed to add controls\n");
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/cs4271.c
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ static int cs4271_probe(struct snd_soc_codec *codec)
/* Power-up sequence requires 85 uS */
udelay(85);

return snd_soc_add_controls(codec, cs4271_snd_controls,
return snd_soc_add_codec_controls(codec, cs4271_snd_controls,
ARRAY_SIZE(cs4271_snd_controls));
}

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/lm4857.c
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ static int lm4857_probe(struct snd_soc_codec *codec)

codec->control_data = lm4857->i2c;

ret = snd_soc_add_controls(codec, lm4857_controls,
ret = snd_soc_add_codec_controls(codec, lm4857_controls,
ARRAY_SIZE(lm4857_controls));
if (ret)
return ret;
Expand Down
4 changes: 2 additions & 2 deletions sound/soc/codecs/max98088.c
Original file line number Diff line number Diff line change
Expand Up @@ -1908,7 +1908,7 @@ static void max98088_handle_eq_pdata(struct snd_soc_codec *codec)
max98088->eq_enum.texts = max98088->eq_texts;
max98088->eq_enum.max = max98088->eq_textcnt;

ret = snd_soc_add_controls(codec, controls, ARRAY_SIZE(controls));
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0)
dev_err(codec->dev, "Failed to add EQ control: %d\n", ret);
}
Expand Down Expand Up @@ -2030,7 +2030,7 @@ static int max98088_probe(struct snd_soc_codec *codec)

max98088_handle_pdata(codec);

snd_soc_add_controls(codec, max98088_snd_controls,
snd_soc_add_codec_controls(codec, max98088_snd_controls,
ARRAY_SIZE(max98088_snd_controls));

err_access:
Expand Down
6 changes: 3 additions & 3 deletions sound/soc/codecs/max98095.c
Original file line number Diff line number Diff line change
Expand Up @@ -1284,7 +1284,7 @@ static const struct snd_soc_dapm_route max98095_audio_map[] = {

static int max98095_add_widgets(struct snd_soc_codec *codec)
{
snd_soc_add_controls(codec, max98095_snd_controls,
snd_soc_add_codec_controls(codec, max98095_snd_controls,
ARRAY_SIZE(max98095_snd_controls));

return 0;
Expand Down Expand Up @@ -1984,7 +1984,7 @@ static void max98095_handle_eq_pdata(struct snd_soc_codec *codec)
max98095->eq_enum.texts = max98095->eq_texts;
max98095->eq_enum.max = max98095->eq_textcnt;

ret = snd_soc_add_controls(codec, controls, ARRAY_SIZE(controls));
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0)
dev_err(codec->dev, "Failed to add EQ control: %d\n", ret);
}
Expand Down Expand Up @@ -2139,7 +2139,7 @@ static void max98095_handle_bq_pdata(struct snd_soc_codec *codec)
max98095->bq_enum.texts = max98095->bq_texts;
max98095->bq_enum.max = max98095->bq_textcnt;

ret = snd_soc_add_controls(codec, controls, ARRAY_SIZE(controls));
ret = snd_soc_add_codec_controls(codec, controls, ARRAY_SIZE(controls));
if (ret != 0)
dev_err(codec->dev, "Failed to add Biquad control: %d\n", ret);
}
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/max9877.c
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ static const struct snd_kcontrol_new max9877_controls[] = {
/* This function is called from ASoC machine driver */
int max9877_add_controls(struct snd_soc_codec *codec)
{
return snd_soc_add_controls(codec, max9877_controls,
return snd_soc_add_codec_controls(codec, max9877_controls,
ARRAY_SIZE(max9877_controls));
}
EXPORT_SYMBOL_GPL(max9877_add_controls);
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/sn95031.c
Original file line number Diff line number Diff line change
Expand Up @@ -869,7 +869,7 @@ static int sn95031_codec_probe(struct snd_soc_codec *codec)
snd_soc_write(codec, SN95031_SSR2, 0x10);
snd_soc_write(codec, SN95031_SSR3, 0x40);

snd_soc_add_controls(codec, sn95031_snd_controls,
snd_soc_add_codec_controls(codec, sn95031_snd_controls,
ARRAY_SIZE(sn95031_snd_controls));

return 0;
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/ssm2602.c
Original file line number Diff line number Diff line change
Expand Up @@ -548,7 +548,7 @@ static int ssm2602_probe(struct snd_soc_codec *codec)
snd_soc_update_bits(codec, SSM2602_ROUT1V,
ROUT1V_RLHP_BOTH, ROUT1V_RLHP_BOTH);

ret = snd_soc_add_controls(codec, ssm2602_snd_controls,
ret = snd_soc_add_codec_controls(codec, ssm2602_snd_controls,
ARRAY_SIZE(ssm2602_snd_controls));
if (ret)
return ret;
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/stac9766.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ static int stac9766_codec_probe(struct snd_soc_codec *codec)

stac9766_set_bias_level(codec, SND_SOC_BIAS_STANDBY);

snd_soc_add_controls(codec, stac9766_snd_ac97_controls,
snd_soc_add_codec_controls(codec, stac9766_snd_ac97_controls,
ARRAY_SIZE(stac9766_snd_ac97_controls));

return 0;
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/tlv320aic23.c
Original file line number Diff line number Diff line change
Expand Up @@ -593,7 +593,7 @@ static int tlv320aic23_probe(struct snd_soc_codec *codec)

snd_soc_write(codec, TLV320AIC23_ACTIVE, 0x1);

snd_soc_add_controls(codec, tlv320aic23_snd_controls,
snd_soc_add_codec_controls(codec, tlv320aic23_snd_controls,
ARRAY_SIZE(tlv320aic23_snd_controls));

return 0;
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/tlv320aic26.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ static int aic26_probe(struct snd_soc_codec *codec)

/* register controls */
dev_dbg(codec->dev, "Registering controls\n");
err = snd_soc_add_controls(codec, aic26_snd_controls,
err = snd_soc_add_codec_controls(codec, aic26_snd_controls,
ARRAY_SIZE(aic26_snd_controls));
WARN_ON(err < 0);

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/tlv320aic32x4.c
Original file line number Diff line number Diff line change
Expand Up @@ -671,7 +671,7 @@ static int aic32x4_probe(struct snd_soc_codec *codec)
}

aic32x4_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
snd_soc_add_controls(codec, aic32x4_snd_controls,
snd_soc_add_codec_controls(codec, aic32x4_snd_controls,
ARRAY_SIZE(aic32x4_snd_controls));
aic32x4_add_widgets(codec);

Expand Down
4 changes: 2 additions & 2 deletions sound/soc/codecs/tlv320aic3x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1425,10 +1425,10 @@ static int aic3x_probe(struct snd_soc_codec *codec)
(aic3x->setup->gpio_func[1] & 0xf) << 4);
}

snd_soc_add_controls(codec, aic3x_snd_controls,
snd_soc_add_codec_controls(codec, aic3x_snd_controls,
ARRAY_SIZE(aic3x_snd_controls));
if (aic3x->model == AIC3X_MODEL_3007)
snd_soc_add_controls(codec, &aic3x_classd_amp_gain_ctrl, 1);
snd_soc_add_codec_controls(codec, &aic3x_classd_amp_gain_ctrl, 1);

aic3x_add_widgets(codec);
list_add(&aic3x->list, &reset_list);
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/tlv320dac33.c
Original file line number Diff line number Diff line change
Expand Up @@ -1437,7 +1437,7 @@ static int dac33_soc_probe(struct snd_soc_codec *codec)

/* Only add the FIFO controls, if we have valid IRQ number */
if (dac33->irq >= 0)
snd_soc_add_controls(codec, dac33_mode_snd_controls,
snd_soc_add_codec_controls(codec, dac33_mode_snd_controls,
ARRAY_SIZE(dac33_mode_snd_controls));

err_power:
Expand Down
4 changes: 2 additions & 2 deletions sound/soc/codecs/tpa6130a2.c
Original file line number Diff line number Diff line change
Expand Up @@ -351,10 +351,10 @@ int tpa6130a2_add_controls(struct snd_soc_codec *codec)
data = i2c_get_clientdata(tpa6130a2_client);

if (data->id == TPA6140A2)
return snd_soc_add_controls(codec, tpa6140a2_controls,
return snd_soc_add_codec_controls(codec, tpa6140a2_controls,
ARRAY_SIZE(tpa6140a2_controls));
else
return snd_soc_add_controls(codec, tpa6130a2_controls,
return snd_soc_add_codec_controls(codec, tpa6130a2_controls,
ARRAY_SIZE(tpa6130a2_controls));
}
EXPORT_SYMBOL_GPL(tpa6130a2_add_controls);
Expand Down
6 changes: 3 additions & 3 deletions sound/soc/codecs/uda134x.c
Original file line number Diff line number Diff line change
Expand Up @@ -531,15 +531,15 @@ static int uda134x_soc_probe(struct snd_soc_codec *codec)
switch (pd->model) {
case UDA134X_UDA1340:
case UDA134X_UDA1344:
ret = snd_soc_add_controls(codec, uda1340_snd_controls,
ret = snd_soc_add_codec_controls(codec, uda1340_snd_controls,
ARRAY_SIZE(uda1340_snd_controls));
break;
case UDA134X_UDA1341:
ret = snd_soc_add_controls(codec, uda1341_snd_controls,
ret = snd_soc_add_codec_controls(codec, uda1341_snd_controls,
ARRAY_SIZE(uda1341_snd_controls));
break;
case UDA134X_UDA1345:
ret = snd_soc_add_controls(codec, uda1345_snd_controls,
ret = snd_soc_add_codec_controls(codec, uda1345_snd_controls,
ARRAY_SIZE(uda1345_snd_controls));
break;
default:
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/wl1273.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ static int wl1273_probe(struct snd_soc_codec *codec)

snd_soc_codec_set_drvdata(codec, wl1273);

r = snd_soc_add_controls(codec, wl1273_controls,
r = snd_soc_add_codec_controls(codec, wl1273_controls,
ARRAY_SIZE(wl1273_controls));
if (r)
kfree(wl1273);
Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/wm8737.c
Original file line number Diff line number Diff line change
Expand Up @@ -599,7 +599,7 @@ static int wm8737_probe(struct snd_soc_codec *codec)
/* Bias level configuration will have done an extra enable */
regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);

snd_soc_add_controls(codec, wm8737_snd_controls,
snd_soc_add_codec_controls(codec, wm8737_snd_controls,
ARRAY_SIZE(wm8737_snd_controls));
wm8737_add_widgets(codec);

Expand Down
2 changes: 1 addition & 1 deletion sound/soc/codecs/wm8770.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,7 @@ static int wm8770_probe(struct snd_soc_codec *codec)
/* mute all DACs */
snd_soc_update_bits(codec, WM8770_DACMUTE, 0x10, 0x10);

snd_soc_add_controls(codec, wm8770_snd_controls,
snd_soc_add_codec_controls(codec, wm8770_snd_controls,
ARRAY_SIZE(wm8770_snd_controls));
snd_soc_dapm_new_controls(&codec->dapm, wm8770_dapm_widgets,
ARRAY_SIZE(wm8770_dapm_widgets));
Expand Down
Loading

0 comments on commit 022658b

Please sign in to comment.