Merge tag 'asoc-3.4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into topic/asoc
This has been a very active release for ASoC, as well as the usual raft of bugfixes and driver updates there's quite a few framework enhancements. Most are either small or are laying the groundwork for user visible features (especially dynamic PCM), the most directly visible change is the dmaengine library. There's also a bunch of regmap API enhancements pulled into the tree so that either the framework or drivers can take advantage of the new features. Changes include: - Support for widgets not associated with a CODEC, an important part of the dynamic PCM framework. - A library factoring out the common code shared by dmaengine based DMA drivers contributed by Lars-Peter Clausen. This will save a lot of code and make it much easier to deploy enhancements to dmaengine. - Support for binary controls, used for providing runtime configuration of algorithm coefficients. - A new DAPM widget type for regulator supplies allowing drivers for devices that can power down unused supplies while active to do without any per-driver code. - DAPM widgets for DAIs, initially giving a speed boost for playback startup and shutdown and also the basis for CODEC<->CODEC DAI link support. - Support for specifying the number of significant bits on audio interfaces, useful for allowing applications to know how much effort to put into generating data for a larger sample format. - Conversion of the FSI driver used on some SH processors to DMAEngine. - New CODEC drivers for Maxim MAX9768 and Wolfson Microelectronics WM2200.
This commit is contained in:
@@ -570,7 +570,7 @@ static int ams_delta_cx20442_init(struct snd_soc_pcm_runtime *rtd)
|
||||
snd_soc_dapm_disable_pin(dapm, "AGCOUT");
|
||||
|
||||
/* Add virtual switch */
|
||||
ret = snd_soc_add_controls(codec, ams_delta_audio_controls,
|
||||
ret = snd_soc_add_codec_controls(codec, ams_delta_audio_controls,
|
||||
ARRAY_SIZE(ams_delta_audio_controls));
|
||||
if (ret)
|
||||
dev_warn(card->dev,
|
||||
|
@@ -55,9 +55,8 @@ static int n810_spk_func;
|
||||
static int n810_jack_func;
|
||||
static int n810_dmic_func;
|
||||
|
||||
static void n810_ext_control(struct snd_soc_codec *codec)
|
||||
static void n810_ext_control(struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
struct snd_soc_dapm_context *dapm = &codec->dapm;
|
||||
int hp = 0, line1l = 0;
|
||||
|
||||
switch (n810_jack_func) {
|
||||
@@ -102,7 +101,7 @@ static int n810_startup(struct snd_pcm_substream *substream)
|
||||
snd_pcm_hw_constraint_minmax(runtime,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS, 2, 2);
|
||||
|
||||
n810_ext_control(codec);
|
||||
n810_ext_control(&codec->dapm);
|
||||
return clk_enable(sys_clkout2);
|
||||
}
|
||||
|
||||
@@ -142,13 +141,13 @@ static int n810_get_spk(struct snd_kcontrol *kcontrol,
|
||||
static int n810_set_spk(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (n810_spk_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
n810_spk_func = ucontrol->value.integer.value[0];
|
||||
n810_ext_control(codec);
|
||||
n810_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -164,13 +163,13 @@ static int n810_get_jack(struct snd_kcontrol *kcontrol,
|
||||
static int n810_set_jack(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (n810_jack_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
n810_jack_func = ucontrol->value.integer.value[0];
|
||||
n810_ext_control(codec);
|
||||
n810_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -186,13 +185,13 @@ static int n810_get_input(struct snd_kcontrol *kcontrol,
|
||||
static int n810_set_input(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (n810_dmic_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
n810_dmic_func = ucontrol->value.integer.value[0];
|
||||
n810_ext_control(codec);
|
||||
n810_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@@ -744,17 +744,17 @@ static const struct snd_kcontrol_new omap_mcbsp3_st_controls[] = {
|
||||
omap_mcbsp3_set_st_ch1_volume),
|
||||
};
|
||||
|
||||
int omap_mcbsp_st_add_controls(struct snd_soc_codec *codec, int mcbsp_id)
|
||||
int omap_mcbsp_st_add_controls(struct snd_soc_dai *dai)
|
||||
{
|
||||
if (!cpu_is_omap34xx())
|
||||
return -ENODEV;
|
||||
|
||||
switch (mcbsp_id) {
|
||||
switch (dai->id) {
|
||||
case 1: /* McBSP 2 */
|
||||
return snd_soc_add_controls(codec, omap_mcbsp2_st_controls,
|
||||
return snd_soc_add_dai_controls(dai, omap_mcbsp2_st_controls,
|
||||
ARRAY_SIZE(omap_mcbsp2_st_controls));
|
||||
case 2: /* McBSP 3 */
|
||||
return snd_soc_add_controls(codec, omap_mcbsp3_st_controls,
|
||||
return snd_soc_add_dai_controls(dai, omap_mcbsp3_st_controls,
|
||||
ARRAY_SIZE(omap_mcbsp3_st_controls));
|
||||
default:
|
||||
break;
|
||||
|
@@ -59,6 +59,6 @@ enum omap_mcbsp_div {
|
||||
#define NUM_LINKS 5
|
||||
#endif
|
||||
|
||||
int omap_mcbsp_st_add_controls(struct snd_soc_codec *codec, int mcbsp_id);
|
||||
int omap_mcbsp_st_add_controls(struct snd_soc_dai *dai);
|
||||
|
||||
#endif
|
||||
|
@@ -59,9 +59,8 @@ static int rx51_spk_func;
|
||||
static int rx51_dmic_func;
|
||||
static int rx51_jack_func;
|
||||
|
||||
static void rx51_ext_control(struct snd_soc_codec *codec)
|
||||
static void rx51_ext_control(struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
struct snd_soc_dapm_context *dapm = &codec->dapm;
|
||||
int hp = 0, hs = 0, tvout = 0;
|
||||
|
||||
switch (rx51_jack_func) {
|
||||
@@ -102,11 +101,11 @@ static int rx51_startup(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct snd_soc_codec *codec = rtd->codec;
|
||||
struct snd_soc_card *card = rtd->card;
|
||||
|
||||
snd_pcm_hw_constraint_minmax(runtime,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS, 2, 2);
|
||||
rx51_ext_control(codec);
|
||||
rx51_ext_control(&card->dapm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -138,13 +137,13 @@ static int rx51_get_spk(struct snd_kcontrol *kcontrol,
|
||||
static int rx51_set_spk(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (rx51_spk_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
rx51_spk_func = ucontrol->value.integer.value[0];
|
||||
rx51_ext_control(codec);
|
||||
rx51_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -184,13 +183,13 @@ static int rx51_get_input(struct snd_kcontrol *kcontrol,
|
||||
static int rx51_set_input(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (rx51_dmic_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
rx51_dmic_func = ucontrol->value.integer.value[0];
|
||||
rx51_ext_control(codec);
|
||||
rx51_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -206,13 +205,13 @@ static int rx51_get_jack(struct snd_kcontrol *kcontrol,
|
||||
static int rx51_set_jack(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol)
|
||||
{
|
||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||
struct snd_soc_card *card = snd_kcontrol_chip(kcontrol);
|
||||
|
||||
if (rx51_jack_func == ucontrol->value.integer.value[0])
|
||||
return 0;
|
||||
|
||||
rx51_jack_func = ucontrol->value.integer.value[0];
|
||||
rx51_ext_control(codec);
|
||||
rx51_ext_control(&card->dapm);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -297,7 +296,7 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
|
||||
snd_soc_dapm_nc_pin(dapm, "LINE1R");
|
||||
|
||||
/* Add RX-51 specific controls */
|
||||
err = snd_soc_add_controls(codec, aic34_rx51_controls,
|
||||
err = snd_soc_add_card_controls(rtd->card, aic34_rx51_controls,
|
||||
ARRAY_SIZE(aic34_rx51_controls));
|
||||
if (err < 0)
|
||||
return err;
|
||||
@@ -314,7 +313,7 @@ static int rx51_aic34_init(struct snd_soc_pcm_runtime *rtd)
|
||||
return err;
|
||||
snd_soc_limit_volume(codec, "TPA6130A2 Headphone Playback Volume", 42);
|
||||
|
||||
err = omap_mcbsp_st_add_controls(codec, 1);
|
||||
err = omap_mcbsp_st_add_controls(rtd->cpu_dai);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -335,7 +334,7 @@ static int rx51_aic34b_init(struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = snd_soc_add_controls(dapm->codec, aic34_rx51_controlsb,
|
||||
err = snd_soc_add_card_controls(dapm->card, aic34_rx51_controlsb,
|
||||
ARRAY_SIZE(aic34_rx51_controlsb));
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
Referens i nytt ärende
Block a user