Commit c0c0be9d authored by Mark Brown's avatar Mark Brown

Merge branch 'asoc-4.17' into asoc-4.18 for compress dependencies

parents e4b31b81 572e6c8d
...@@ -186,6 +186,9 @@ Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> ...@@ -186,6 +186,9 @@ Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Uwe Kleine-König <ukl@pengutronix.de> Uwe Kleine-König <ukl@pengutronix.de>
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com> Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Valdis Kletnieks <Valdis.Kletnieks@vt.edu> Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
Vinod Koul <vkoul@kernel.org> <vinod.koul@intel.com>
Vinod Koul <vkoul@kernel.org> <vinod.koul@linux.intel.com>
Vinod Koul <vkoul@kernel.org> <vkoul@infradead.org>
Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com> Viresh Kumar <vireshk@kernel.org> <viresh.kumar@st.com>
Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com> Viresh Kumar <vireshk@kernel.org> <viresh.linux@gmail.com>
Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com> Viresh Kumar <vireshk@kernel.org> <viresh.kumar2@arm.com>
......
...@@ -13095,7 +13095,7 @@ F: include/uapi/sound/ ...@@ -13095,7 +13095,7 @@ F: include/uapi/sound/
F: sound/ F: sound/
SOUND - COMPRESSED AUDIO SOUND - COMPRESSED AUDIO
M: Vinod Koul <vinod.koul@intel.com> M: Vinod Koul <vkoul@kernel.org>
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git T: git git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
S: Supported S: Supported
......
...@@ -1187,7 +1187,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev) ...@@ -1187,7 +1187,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
return irq; return irq;
} }
ret = devm_request_irq(dev, irq, pm8916_mbhc_switch_irq_handler, ret = devm_request_threaded_irq(dev, irq, NULL,
pm8916_mbhc_switch_irq_handler,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING |
IRQF_ONESHOT, IRQF_ONESHOT,
"mbhc switch irq", priv); "mbhc switch irq", priv);
...@@ -1201,7 +1202,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev) ...@@ -1201,7 +1202,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
return irq; return irq;
} }
ret = devm_request_irq(dev, irq, mbhc_btn_press_irq_handler, ret = devm_request_threaded_irq(dev, irq, NULL,
mbhc_btn_press_irq_handler,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_RISING |
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"mbhc btn press irq", priv); "mbhc btn press irq", priv);
...@@ -1214,7 +1216,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev) ...@@ -1214,7 +1216,8 @@ static int pm8916_wcd_analog_spmi_probe(struct platform_device *pdev)
return irq; return irq;
} }
ret = devm_request_irq(dev, irq, mbhc_btn_release_irq_handler, ret = devm_request_threaded_irq(dev, irq, NULL,
mbhc_btn_release_irq_handler,
IRQF_TRIGGER_RISING | IRQF_TRIGGER_RISING |
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
"mbhc btn release irq", priv); "mbhc btn release irq", priv);
......
...@@ -89,6 +89,7 @@ static const struct reg_default rt5514_reg[] = { ...@@ -89,6 +89,7 @@ static const struct reg_default rt5514_reg[] = {
{RT5514_PLL3_CALIB_CTRL5, 0x40220012}, {RT5514_PLL3_CALIB_CTRL5, 0x40220012},
{RT5514_DELAY_BUF_CTRL1, 0x7fff006a}, {RT5514_DELAY_BUF_CTRL1, 0x7fff006a},
{RT5514_DELAY_BUF_CTRL3, 0x00000000}, {RT5514_DELAY_BUF_CTRL3, 0x00000000},
{RT5514_ASRC_IN_CTRL1, 0x00000003},
{RT5514_DOWNFILTER0_CTRL1, 0x00020c2f}, {RT5514_DOWNFILTER0_CTRL1, 0x00020c2f},
{RT5514_DOWNFILTER0_CTRL2, 0x00020c2f}, {RT5514_DOWNFILTER0_CTRL2, 0x00020c2f},
{RT5514_DOWNFILTER0_CTRL3, 0x10000362}, {RT5514_DOWNFILTER0_CTRL3, 0x10000362},
...@@ -181,6 +182,7 @@ static bool rt5514_readable_register(struct device *dev, unsigned int reg) ...@@ -181,6 +182,7 @@ static bool rt5514_readable_register(struct device *dev, unsigned int reg)
case RT5514_PLL3_CALIB_CTRL5: case RT5514_PLL3_CALIB_CTRL5:
case RT5514_DELAY_BUF_CTRL1: case RT5514_DELAY_BUF_CTRL1:
case RT5514_DELAY_BUF_CTRL3: case RT5514_DELAY_BUF_CTRL3:
case RT5514_ASRC_IN_CTRL1:
case RT5514_DOWNFILTER0_CTRL1: case RT5514_DOWNFILTER0_CTRL1:
case RT5514_DOWNFILTER0_CTRL2: case RT5514_DOWNFILTER0_CTRL2:
case RT5514_DOWNFILTER0_CTRL3: case RT5514_DOWNFILTER0_CTRL3:
...@@ -238,6 +240,7 @@ static bool rt5514_i2c_readable_register(struct device *dev, ...@@ -238,6 +240,7 @@ static bool rt5514_i2c_readable_register(struct device *dev,
case RT5514_DSP_MAPPING | RT5514_PLL3_CALIB_CTRL5: case RT5514_DSP_MAPPING | RT5514_PLL3_CALIB_CTRL5:
case RT5514_DSP_MAPPING | RT5514_DELAY_BUF_CTRL1: case RT5514_DSP_MAPPING | RT5514_DELAY_BUF_CTRL1:
case RT5514_DSP_MAPPING | RT5514_DELAY_BUF_CTRL3: case RT5514_DSP_MAPPING | RT5514_DELAY_BUF_CTRL3:
case RT5514_DSP_MAPPING | RT5514_ASRC_IN_CTRL1:
case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL1: case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL1:
case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL2: case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL2:
case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL3: case RT5514_DSP_MAPPING | RT5514_DOWNFILTER0_CTRL3:
......
...@@ -33,7 +33,7 @@ static int soc_compr_open(struct snd_compr_stream *cstream) ...@@ -33,7 +33,7 @@ static int soc_compr_open(struct snd_compr_stream *cstream)
struct snd_soc_component *component; struct snd_soc_component *component;
struct snd_soc_rtdcom_list *rtdcom; struct snd_soc_rtdcom_list *rtdcom;
struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
int ret = 0, __ret; int ret;
mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass); mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass);
...@@ -68,16 +68,15 @@ static int soc_compr_open(struct snd_compr_stream *cstream) ...@@ -68,16 +68,15 @@ static int soc_compr_open(struct snd_compr_stream *cstream)
!component->driver->compr_ops->open) !component->driver->compr_ops->open)
continue; continue;
__ret = component->driver->compr_ops->open(cstream); ret = component->driver->compr_ops->open(cstream);
if (__ret < 0) { if (ret < 0) {
dev_err(component->dev, dev_err(component->dev,
"Compress ASoC: can't open platform %s: %d\n", "Compress ASoC: can't open platform %s: %d\n",
component->name, __ret); component->name, ret);
ret = __ret; goto machine_err;
} }
} }
if (ret < 0) component = NULL;
goto machine_err;
if (rtd->dai_link->compr_ops && rtd->dai_link->compr_ops->startup) { if (rtd->dai_link->compr_ops && rtd->dai_link->compr_ops->startup) {
ret = rtd->dai_link->compr_ops->startup(cstream); ret = rtd->dai_link->compr_ops->startup(cstream);
...@@ -97,17 +96,20 @@ static int soc_compr_open(struct snd_compr_stream *cstream) ...@@ -97,17 +96,20 @@ static int soc_compr_open(struct snd_compr_stream *cstream)
machine_err: machine_err:
for_each_rtdcom(rtd, rtdcom) { for_each_rtdcom(rtd, rtdcom) {
component = rtdcom->component; struct snd_soc_component *err_comp = rtdcom->component;
if (err_comp == component)
break;
/* ignore duplication for now */ /* ignore duplication for now */
if (platform && (component == &platform->component)) if (platform && (err_comp == &platform->component))
continue; continue;
if (!component->driver->compr_ops || if (!err_comp->driver->compr_ops ||
!component->driver->compr_ops->free) !err_comp->driver->compr_ops->free)
continue; continue;
component->driver->compr_ops->free(cstream); err_comp->driver->compr_ops->free(cstream);
} }
if (platform && platform->driver->compr_ops && platform->driver->compr_ops->free) if (platform && platform->driver->compr_ops && platform->driver->compr_ops->free)
...@@ -132,7 +134,7 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream) ...@@ -132,7 +134,7 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
struct snd_soc_dpcm *dpcm; struct snd_soc_dpcm *dpcm;
struct snd_soc_dapm_widget_list *list; struct snd_soc_dapm_widget_list *list;
int stream; int stream;
int ret = 0, __ret; int ret;
if (cstream->direction == SND_COMPRESS_PLAYBACK) if (cstream->direction == SND_COMPRESS_PLAYBACK)
stream = SNDRV_PCM_STREAM_PLAYBACK; stream = SNDRV_PCM_STREAM_PLAYBACK;
...@@ -172,16 +174,15 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream) ...@@ -172,16 +174,15 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
!component->driver->compr_ops->open) !component->driver->compr_ops->open)
continue; continue;
__ret = component->driver->compr_ops->open(cstream); ret = component->driver->compr_ops->open(cstream);
if (__ret < 0) { if (ret < 0) {
dev_err(component->dev, dev_err(component->dev,
"Compress ASoC: can't open platform %s: %d\n", "Compress ASoC: can't open platform %s: %d\n",
component->name, __ret); component->name, ret);
ret = __ret; goto machine_err;
} }
} }
if (ret < 0) component = NULL;
goto machine_err;
if (fe->dai_link->compr_ops && fe->dai_link->compr_ops->startup) { if (fe->dai_link->compr_ops && fe->dai_link->compr_ops->startup) {
ret = fe->dai_link->compr_ops->startup(cstream); ret = fe->dai_link->compr_ops->startup(cstream);
...@@ -236,17 +237,20 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream) ...@@ -236,17 +237,20 @@ static int soc_compr_open_fe(struct snd_compr_stream *cstream)
fe->dai_link->compr_ops->shutdown(cstream); fe->dai_link->compr_ops->shutdown(cstream);
machine_err: machine_err:
for_each_rtdcom(fe, rtdcom) { for_each_rtdcom(fe, rtdcom) {
component = rtdcom->component; struct snd_soc_component *err_comp = rtdcom->component;
if (err_comp == component)
break;
/* ignore duplication for now */ /* ignore duplication for now */
if (platform && (component == &platform->component)) if (platform && (err_comp == &platform->component))
continue; continue;
if (!component->driver->compr_ops || if (!err_comp->driver->compr_ops ||
!component->driver->compr_ops->free) !err_comp->driver->compr_ops->free)
continue; continue;
component->driver->compr_ops->free(cstream); err_comp->driver->compr_ops->free(cstream);
} }
if (platform && platform->driver->compr_ops && platform->driver->compr_ops->free) if (platform && platform->driver->compr_ops && platform->driver->compr_ops->free)
......
...@@ -513,7 +513,7 @@ static void remove_widget(struct snd_soc_component *comp, ...@@ -513,7 +513,7 @@ static void remove_widget(struct snd_soc_component *comp,
*/ */
if (dobj->widget.kcontrol_type == SND_SOC_TPLG_TYPE_ENUM) { if (dobj->widget.kcontrol_type == SND_SOC_TPLG_TYPE_ENUM) {
/* enumerated widget mixer */ /* enumerated widget mixer */
for (i = 0; i < w->num_kcontrols; i++) { for (i = 0; w->kcontrols != NULL && i < w->num_kcontrols; i++) {
struct snd_kcontrol *kcontrol = w->kcontrols[i]; struct snd_kcontrol *kcontrol = w->kcontrols[i];
struct soc_enum *se = struct soc_enum *se =
(struct soc_enum *)kcontrol->private_value; (struct soc_enum *)kcontrol->private_value;
...@@ -530,7 +530,7 @@ static void remove_widget(struct snd_soc_component *comp, ...@@ -530,7 +530,7 @@ static void remove_widget(struct snd_soc_component *comp,
} }
} else { } else {
/* volume mixer or bytes controls */ /* volume mixer or bytes controls */
for (i = 0; i < w->num_kcontrols; i++) { for (i = 0; w->kcontrols != NULL && i < w->num_kcontrols; i++) {
struct snd_kcontrol *kcontrol = w->kcontrols[i]; struct snd_kcontrol *kcontrol = w->kcontrols[i];
if (dobj->widget.kcontrol_type if (dobj->widget.kcontrol_type
...@@ -2600,7 +2600,7 @@ int snd_soc_tplg_component_remove(struct snd_soc_component *comp, u32 index) ...@@ -2600,7 +2600,7 @@ int snd_soc_tplg_component_remove(struct snd_soc_component *comp, u32 index)
/* match index */ /* match index */
if (dobj->index != index && if (dobj->index != index &&
dobj->index != SND_SOC_TPLG_INDEX_ALL) index != SND_SOC_TPLG_INDEX_ALL)
continue; continue;
switch (dobj->type) { switch (dobj->type) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment