Merge remote-tracking branch 'asoc/topic/core' into asoc-next
This commit is contained in:
Коммит
8157567013
|
@ -7683,6 +7683,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
|
|||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
W: http://alsa-project.org/main/index.php/ASoC
|
||||
S: Supported
|
||||
F: Documentation/sound/alsa/soc/
|
||||
F: sound/soc/
|
||||
F: include/sound/soc*
|
||||
|
||||
|
|
|
@ -234,7 +234,7 @@
|
|||
.private_value = xdata }
|
||||
#define SOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \
|
||||
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
|
||||
.info = snd_soc_info_enum_ext, \
|
||||
.info = snd_soc_info_enum_double, \
|
||||
.get = xhandler_get, .put = xhandler_put, \
|
||||
.private_value = (unsigned long)&xenum }
|
||||
|
||||
|
@ -489,8 +489,6 @@ 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,
|
||||
struct snd_ctl_elem_info *uinfo);
|
||||
int snd_soc_get_enum_double(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,
|
||||
|
@ -501,8 +499,6 @@ int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol,
|
|||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo);
|
||||
int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo);
|
||||
#define snd_soc_info_bool_ext snd_ctl_boolean_mono_info
|
||||
int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
|
|
|
@ -10,6 +10,7 @@ config SND_SOC_I2C_AND_SPI
|
|||
|
||||
config SND_SOC_ALL_CODECS
|
||||
tristate "Build all ASoC CODEC drivers"
|
||||
depends on COMPILE_TEST
|
||||
select SND_SOC_88PM860X if MFD_88PM860X
|
||||
select SND_SOC_L3
|
||||
select SND_SOC_AB8500_CODEC if ABX500_CORE
|
||||
|
|
|
@ -50,8 +50,6 @@
|
|||
|
||||
#define NAME_SIZE 32
|
||||
|
||||
static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *snd_soc_debugfs_root;
|
||||
EXPORT_SYMBOL_GPL(snd_soc_debugfs_root);
|
||||
|
@ -543,6 +541,15 @@ static int soc_ac97_dev_register(struct snd_soc_codec *codec)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void codec2codec_close_delayed_work(struct work_struct *work)
|
||||
{
|
||||
/* Currently nothing to do for c2c links
|
||||
* Since c2c links are internal nodes in the DAPM graph and
|
||||
* don't interface with the outside world or application layer
|
||||
* we don't have to do any special handling on close.
|
||||
*/
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
/* powers down audio subsystem for suspend */
|
||||
int snd_soc_suspend(struct device *dev)
|
||||
|
@ -1441,6 +1448,9 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
|
|||
return ret;
|
||||
}
|
||||
} else {
|
||||
INIT_DELAYED_WORK(&rtd->delayed_work,
|
||||
codec2codec_close_delayed_work);
|
||||
|
||||
/* link the DAI widgets */
|
||||
play_w = codec_dai->playback_widget;
|
||||
capture_w = cpu_dai->capture_widget;
|
||||
|
@ -2709,59 +2719,6 @@ int snd_soc_put_value_enum_double(struct snd_kcontrol *kcontrol,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_put_value_enum_double);
|
||||
|
||||
/**
|
||||
* snd_soc_info_enum_ext - external enumerated single mixer info callback
|
||||
* @kcontrol: mixer control
|
||||
* @uinfo: control element information
|
||||
*
|
||||
* Callback to provide information about an external enumerated
|
||||
* single mixer.
|
||||
*
|
||||
* Returns 0 for success.
|
||||
*/
|
||||
int snd_soc_info_enum_ext(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
|
||||
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
|
||||
uinfo->count = 1;
|
||||
uinfo->value.enumerated.items = e->max;
|
||||
|
||||
if (uinfo->value.enumerated.item > e->max - 1)
|
||||
uinfo->value.enumerated.item = e->max - 1;
|
||||
strcpy(uinfo->value.enumerated.name,
|
||||
e->texts[uinfo->value.enumerated.item]);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_info_enum_ext);
|
||||
|
||||
/**
|
||||
* snd_soc_info_volsw_ext - external single mixer info callback
|
||||
* @kcontrol: mixer control
|
||||
* @uinfo: control element information
|
||||
*
|
||||
* Callback to provide information about a single external mixer control.
|
||||
*
|
||||
* Returns 0 for success.
|
||||
*/
|
||||
int snd_soc_info_volsw_ext(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_info *uinfo)
|
||||
{
|
||||
int max = kcontrol->private_value;
|
||||
|
||||
if (max == 1 && !strstr(kcontrol->id.name, " Volume"))
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
||||
else
|
||||
uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
|
||||
uinfo->count = 1;
|
||||
uinfo->value.integer.min = 0;
|
||||
uinfo->value.integer.max = max;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_info_volsw_ext);
|
||||
|
||||
/**
|
||||
* snd_soc_info_volsw - single mixer info callback
|
||||
* @kcontrol: mixer control
|
||||
|
|
|
@ -174,36 +174,6 @@ static inline struct snd_soc_dapm_widget *dapm_cnew_widget(
|
|||
return kmemdup(_widget, sizeof(*_widget), GFP_KERNEL);
|
||||
}
|
||||
|
||||
/* get snd_card from DAPM context */
|
||||
static inline struct snd_card *dapm_get_snd_card(
|
||||
struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
if (dapm->codec)
|
||||
return dapm->codec->card->snd_card;
|
||||
else if (dapm->platform)
|
||||
return dapm->platform->card->snd_card;
|
||||
else
|
||||
BUG();
|
||||
|
||||
/* unreachable */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* get soc_card from DAPM context */
|
||||
static inline struct snd_soc_card *dapm_get_soc_card(
|
||||
struct snd_soc_dapm_context *dapm)
|
||||
{
|
||||
if (dapm->codec)
|
||||
return dapm->codec->card;
|
||||
else if (dapm->platform)
|
||||
return dapm->platform->card;
|
||||
else
|
||||
BUG();
|
||||
|
||||
/* unreachable */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void dapm_reset(struct snd_soc_card *card)
|
||||
{
|
||||
struct snd_soc_dapm_widget *w;
|
||||
|
|
|
@ -263,7 +263,7 @@ static irqreturn_t gpio_handler(int irq, void *data)
|
|||
if (device_may_wakeup(dev))
|
||||
pm_wakeup_event(dev, gpio->debounce_time + 50);
|
||||
|
||||
schedule_delayed_work(&gpio->work,
|
||||
queue_delayed_work(system_power_efficient_wq, &gpio->work,
|
||||
msecs_to_jiffies(gpio->debounce_time));
|
||||
|
||||
return IRQ_HANDLED;
|
||||
|
|
|
@ -411,8 +411,9 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
|
|||
} else {
|
||||
/* start delayed pop wq here for playback streams */
|
||||
rtd->pop_wait = 1;
|
||||
schedule_delayed_work(&rtd->delayed_work,
|
||||
msecs_to_jiffies(rtd->pmdown_time));
|
||||
queue_delayed_work(system_power_efficient_wq,
|
||||
&rtd->delayed_work,
|
||||
msecs_to_jiffies(rtd->pmdown_time));
|
||||
}
|
||||
} else {
|
||||
/* capture streams can be powered down now */
|
||||
|
|
Загрузка…
Ссылка в новой задаче