Commit 35ef57a4 authored by Mark Brown's avatar Mark Brown

Merge branch 'asoc-4.18' into asoc-4.19 wmadsp dep

parents 0a047f07 0717edbd
...@@ -291,10 +291,6 @@ static const struct snd_soc_dapm_widget hdmi_widgets[] = { ...@@ -291,10 +291,6 @@ static const struct snd_soc_dapm_widget hdmi_widgets[] = {
SND_SOC_DAPM_OUTPUT("TX"), SND_SOC_DAPM_OUTPUT("TX"),
}; };
static const struct snd_soc_dapm_route hdmi_routes[] = {
{ "TX", NULL, "Playback" },
};
enum { enum {
DAI_ID_I2S = 0, DAI_ID_I2S = 0,
DAI_ID_SPDIF, DAI_ID_SPDIF,
...@@ -689,9 +685,23 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd, ...@@ -689,9 +685,23 @@ static int hdmi_codec_pcm_new(struct snd_soc_pcm_runtime *rtd,
return snd_ctl_add(rtd->card->snd_card, kctl); return snd_ctl_add(rtd->card->snd_card, kctl);
} }
static int hdmi_dai_probe(struct snd_soc_dai *dai)
{
struct snd_soc_dapm_context *dapm;
struct snd_soc_dapm_route route = {
.sink = "TX",
.source = dai->driver->playback.stream_name,
};
dapm = snd_soc_component_get_dapm(dai->component);
return snd_soc_dapm_add_routes(dapm, &route, 1);
}
static const struct snd_soc_dai_driver hdmi_i2s_dai = { static const struct snd_soc_dai_driver hdmi_i2s_dai = {
.name = "i2s-hifi", .name = "i2s-hifi",
.id = DAI_ID_I2S, .id = DAI_ID_I2S,
.probe = hdmi_dai_probe,
.playback = { .playback = {
.stream_name = "I2S Playback", .stream_name = "I2S Playback",
.channels_min = 2, .channels_min = 2,
...@@ -707,6 +717,7 @@ static const struct snd_soc_dai_driver hdmi_i2s_dai = { ...@@ -707,6 +717,7 @@ static const struct snd_soc_dai_driver hdmi_i2s_dai = {
static const struct snd_soc_dai_driver hdmi_spdif_dai = { static const struct snd_soc_dai_driver hdmi_spdif_dai = {
.name = "spdif-hifi", .name = "spdif-hifi",
.id = DAI_ID_SPDIF, .id = DAI_ID_SPDIF,
.probe = hdmi_dai_probe,
.playback = { .playback = {
.stream_name = "SPDIF Playback", .stream_name = "SPDIF Playback",
.channels_min = 2, .channels_min = 2,
...@@ -733,8 +744,6 @@ static int hdmi_of_xlate_dai_id(struct snd_soc_component *component, ...@@ -733,8 +744,6 @@ static int hdmi_of_xlate_dai_id(struct snd_soc_component *component,
static const struct snd_soc_component_driver hdmi_driver = { static const struct snd_soc_component_driver hdmi_driver = {
.dapm_widgets = hdmi_widgets, .dapm_widgets = hdmi_widgets,
.num_dapm_widgets = ARRAY_SIZE(hdmi_widgets), .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets),
.dapm_routes = hdmi_routes,
.num_dapm_routes = ARRAY_SIZE(hdmi_routes),
.of_xlate_dai_id = hdmi_of_xlate_dai_id, .of_xlate_dai_id = hdmi_of_xlate_dai_id,
.idle_bias_on = 1, .idle_bias_on = 1,
.use_pmdown_time = 1, .use_pmdown_time = 1,
......
...@@ -488,6 +488,7 @@ static const DECLARE_TLV_DB_RANGE(max98373_bde_gain_tlv, ...@@ -488,6 +488,7 @@ static const DECLARE_TLV_DB_RANGE(max98373_bde_gain_tlv,
static bool max98373_readable_register(struct device *dev, unsigned int reg) static bool max98373_readable_register(struct device *dev, unsigned int reg)
{ {
switch (reg) { switch (reg) {
case MAX98373_R2000_SW_RESET:
case MAX98373_R2001_INT_RAW1 ... MAX98373_R200C_INT_EN3: case MAX98373_R2001_INT_RAW1 ... MAX98373_R200C_INT_EN3:
case MAX98373_R2010_IRQ_CTRL: case MAX98373_R2010_IRQ_CTRL:
case MAX98373_R2014_THERM_WARN_THRESH case MAX98373_R2014_THERM_WARN_THRESH
......
...@@ -64,8 +64,8 @@ static const struct reg_sequence rt5514_patch[] = { ...@@ -64,8 +64,8 @@ static const struct reg_sequence rt5514_patch[] = {
{RT5514_ANA_CTRL_LDO10, 0x00028604}, {RT5514_ANA_CTRL_LDO10, 0x00028604},
{RT5514_ANA_CTRL_ADCFED, 0x00000800}, {RT5514_ANA_CTRL_ADCFED, 0x00000800},
{RT5514_ASRC_IN_CTRL1, 0x00000003}, {RT5514_ASRC_IN_CTRL1, 0x00000003},
{RT5514_DOWNFILTER0_CTRL3, 0x10000362}, {RT5514_DOWNFILTER0_CTRL3, 0x10000352},
{RT5514_DOWNFILTER1_CTRL3, 0x10000362}, {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
}; };
static const struct reg_default rt5514_reg[] = { static const struct reg_default rt5514_reg[] = {
...@@ -92,10 +92,10 @@ static const struct reg_default rt5514_reg[] = { ...@@ -92,10 +92,10 @@ static const struct reg_default rt5514_reg[] = {
{RT5514_ASRC_IN_CTRL1, 0x00000003}, {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, 0x10000352},
{RT5514_DOWNFILTER1_CTRL1, 0x00020c2f}, {RT5514_DOWNFILTER1_CTRL1, 0x00020c2f},
{RT5514_DOWNFILTER1_CTRL2, 0x00020c2f}, {RT5514_DOWNFILTER1_CTRL2, 0x00020c2f},
{RT5514_DOWNFILTER1_CTRL3, 0x10000362}, {RT5514_DOWNFILTER1_CTRL3, 0x10000352},
{RT5514_ANA_CTRL_LDO10, 0x00028604}, {RT5514_ANA_CTRL_LDO10, 0x00028604},
{RT5514_ANA_CTRL_LDO18_16, 0x02000345}, {RT5514_ANA_CTRL_LDO18_16, 0x02000345},
{RT5514_ANA_CTRL_ADC12, 0x0000a2a8}, {RT5514_ANA_CTRL_ADC12, 0x0000a2a8},
......
...@@ -522,7 +522,7 @@ static inline int get_coeff(int mclk, int rate) ...@@ -522,7 +522,7 @@ static inline int get_coeff(int mclk, int rate)
/* The set of rates we can generate from the above for each SYSCLK */ /* The set of rates we can generate from the above for each SYSCLK */
static const unsigned int rates_12288[] = { static const unsigned int rates_12288[] = {
8000, 12000, 16000, 24000, 24000, 32000, 48000, 96000, 8000, 12000, 16000, 24000, 32000, 48000, 96000,
}; };
static const struct snd_pcm_hw_constraint_list constraints_12288 = { static const struct snd_pcm_hw_constraint_list constraints_12288 = {
...@@ -540,7 +540,7 @@ static const struct snd_pcm_hw_constraint_list constraints_112896 = { ...@@ -540,7 +540,7 @@ static const struct snd_pcm_hw_constraint_list constraints_112896 = {
}; };
static const unsigned int rates_12[] = { static const unsigned int rates_12[] = {
8000, 11025, 12000, 16000, 22050, 2400, 32000, 41100, 48000, 8000, 11025, 12000, 16000, 22050, 24000, 32000, 41100, 48000,
48000, 88235, 96000, 48000, 88235, 96000,
}; };
......
...@@ -2650,7 +2650,10 @@ int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol, ...@@ -2650,7 +2650,10 @@ int wm_adsp2_preloader_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
{ {
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
struct wm_adsp *dsp = snd_soc_component_get_drvdata(component); struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
struct soc_mixer_control *mc =
(struct soc_mixer_control *)kcontrol->private_value;
struct wm_adsp *dsp = &dsps[mc->shift - 1];
ucontrol->value.integer.value[0] = dsp->preloaded; ucontrol->value.integer.value[0] = dsp->preloaded;
...@@ -2662,10 +2665,11 @@ int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol, ...@@ -2662,10 +2665,11 @@ int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol) struct snd_ctl_elem_value *ucontrol)
{ {
struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
struct wm_adsp *dsp = snd_soc_component_get_drvdata(component); struct wm_adsp *dsps = snd_soc_component_get_drvdata(component);
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
struct soc_mixer_control *mc = struct soc_mixer_control *mc =
(struct soc_mixer_control *)kcontrol->private_value; (struct soc_mixer_control *)kcontrol->private_value;
struct wm_adsp *dsp = &dsps[mc->shift - 1];
char preload[32]; char preload[32];
snprintf(preload, ARRAY_SIZE(preload), "DSP%u Preload", mc->shift); snprintf(preload, ARRAY_SIZE(preload), "DSP%u Preload", mc->shift);
...@@ -2679,6 +2683,8 @@ int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol, ...@@ -2679,6 +2683,8 @@ int wm_adsp2_preloader_put(struct snd_kcontrol *kcontrol,
snd_soc_dapm_sync(dapm); snd_soc_dapm_sync(dapm);
flush_work(&dsp->boot_work);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(wm_adsp2_preloader_put); EXPORT_SYMBOL_GPL(wm_adsp2_preloader_put);
......
...@@ -313,6 +313,9 @@ static void q6afe_dai_shutdown(struct snd_pcm_substream *substream, ...@@ -313,6 +313,9 @@ static void q6afe_dai_shutdown(struct snd_pcm_substream *substream,
struct q6afe_dai_data *dai_data = dev_get_drvdata(dai->dev); struct q6afe_dai_data *dai_data = dev_get_drvdata(dai->dev);
int rc; int rc;
if (!dai_data->is_port_started[dai->id])
return;
rc = q6afe_port_stop(dai_data->port[dai->id]); rc = q6afe_port_stop(dai_data->port[dai->id]);
if (rc < 0) if (rc < 0)
dev_err(dai->dev, "fail to close AFE port (%d)\n", rc); dev_err(dai->dev, "fail to close AFE port (%d)\n", rc);
...@@ -1332,7 +1335,7 @@ static void of_q6afe_parse_dai_data(struct device *dev, ...@@ -1332,7 +1335,7 @@ static void of_q6afe_parse_dai_data(struct device *dev,
int id, i, num_lines; int id, i, num_lines;
ret = of_property_read_u32(node, "reg", &id); ret = of_property_read_u32(node, "reg", &id);
if (ret || id > AFE_PORT_MAX) { if (ret || id < 0 || id >= AFE_PORT_MAX) {
dev_err(dev, "valid dai id not found:%d\n", ret); dev_err(dev, "valid dai id not found:%d\n", ret);
continue; continue;
} }
......
...@@ -389,7 +389,9 @@ static int q6asm_dai_close(struct snd_pcm_substream *substream) ...@@ -389,7 +389,9 @@ static int q6asm_dai_close(struct snd_pcm_substream *substream)
struct q6asm_dai_rtd *prtd = runtime->private_data; struct q6asm_dai_rtd *prtd = runtime->private_data;
if (prtd->audio_client) { if (prtd->audio_client) {
q6asm_cmd(prtd->audio_client, CMD_CLOSE); if (prtd->state)
q6asm_cmd(prtd->audio_client, CMD_CLOSE);
q6asm_unmap_memory_regions(substream->stream, q6asm_unmap_memory_regions(substream->stream,
prtd->audio_client); prtd->audio_client);
q6asm_audio_client_free(prtd->audio_client); q6asm_audio_client_free(prtd->audio_client);
......
...@@ -926,7 +926,7 @@ static int routing_hw_params(struct snd_pcm_substream *substream, ...@@ -926,7 +926,7 @@ static int routing_hw_params(struct snd_pcm_substream *substream,
else else
path_type = ADM_PATH_LIVE_REC; path_type = ADM_PATH_LIVE_REC;
if (be_id > AFE_MAX_PORTS) if (be_id >= AFE_MAX_PORTS)
return -EINVAL; return -EINVAL;
session = &data->port_data[be_id]; session = &data->port_data[be_id];
......
...@@ -1712,6 +1712,14 @@ static void dpcm_runtime_merge_format(struct snd_pcm_substream *substream, ...@@ -1712,6 +1712,14 @@ static void dpcm_runtime_merge_format(struct snd_pcm_substream *substream,
int i; int i;
for (i = 0; i < be->num_codecs; i++) { for (i = 0; i < be->num_codecs; i++) {
/*
* Skip CODECs which don't support the current stream
* type. See soc_pcm_init_runtime_hw() for more details
*/
if (!snd_soc_dai_stream_valid(be->codec_dais[i],
stream))
continue;
codec_dai_drv = be->codec_dais[i]->driver; codec_dai_drv = be->codec_dais[i]->driver;
if (stream == SNDRV_PCM_STREAM_PLAYBACK) if (stream == SNDRV_PCM_STREAM_PLAYBACK)
codec_stream = &codec_dai_drv->playback; codec_stream = &codec_dai_drv->playback;
......
...@@ -375,6 +375,6 @@ int __init snd_soc_util_init(void) ...@@ -375,6 +375,6 @@ int __init snd_soc_util_init(void)
void __exit snd_soc_util_exit(void) void __exit snd_soc_util_exit(void)
{ {
platform_device_unregister(soc_dummy_dev);
platform_driver_unregister(&soc_dummy_driver); platform_driver_unregister(&soc_dummy_driver);
platform_device_unregister(soc_dummy_dev);
} }
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
/* Number of slots in frame, minus 1 */ /* Number of slots in frame, minus 1 */
#define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_SHIFT 16 #define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_SHIFT 16
#define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_MASK_US 7 #define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_MASK_US 7
#define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_MASK (TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOT_MASK_US << TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOT_SHIFT) #define TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_MASK (TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_MASK_US << TEGRA30_I2S_SLOT_CTRL_TOTAL_SLOTS_SHIFT)
/* TDM mode slot enable bitmask */ /* TDM mode slot enable bitmask */
#define TEGRA30_I2S_SLOT_CTRL_RX_SLOT_ENABLES_SHIFT 8 #define TEGRA30_I2S_SLOT_CTRL_RX_SLOT_ENABLES_SHIFT 8
......
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