Commit 44fedd7d authored by Mark Brown's avatar Mark Brown

Merge branch 'asoc-4.18' into asoc-4.19 for amd dep

parents 3bec6fa3 1b31de92
...@@ -773,7 +773,8 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream, ...@@ -773,7 +773,8 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream,
if (WARN_ON(!rtd)) if (WARN_ON(!rtd))
return -EINVAL; return -EINVAL;
rtd->i2s_instance = pinfo->i2s_instance; if (pinfo)
rtd->i2s_instance = pinfo->i2s_instance;
if (adata->asic_type == CHIP_STONEY) { if (adata->asic_type == CHIP_STONEY) {
val = acp_reg_read(adata->acp_mmio, val = acp_reg_read(adata->acp_mmio,
mmACP_I2S_16BIT_RESOLUTION_EN); mmACP_I2S_16BIT_RESOLUTION_EN);
......
...@@ -1283,6 +1283,12 @@ static int cs47l24_probe(struct platform_device *pdev) ...@@ -1283,6 +1283,12 @@ static int cs47l24_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
...@@ -1306,6 +1312,7 @@ static int cs47l24_probe(struct platform_device *pdev) ...@@ -1306,6 +1312,7 @@ static int cs47l24_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24);
return ret; return ret;
...@@ -1323,6 +1330,7 @@ static int cs47l24_remove(struct platform_device *pdev) ...@@ -1323,6 +1330,7 @@ static int cs47l24_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, cs47l24);
return 0; return 0;
......
...@@ -2094,6 +2094,12 @@ static int wm5102_probe(struct platform_device *pdev) ...@@ -2094,6 +2094,12 @@ static int wm5102_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
...@@ -2117,6 +2123,7 @@ static int wm5102_probe(struct platform_device *pdev) ...@@ -2117,6 +2123,7 @@ static int wm5102_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
return ret; return ret;
...@@ -2133,6 +2140,7 @@ static int wm5102_remove(struct platform_device *pdev) ...@@ -2133,6 +2140,7 @@ static int wm5102_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5102);
return 0; return 0;
......
...@@ -2455,6 +2455,12 @@ static int wm5110_probe(struct platform_device *pdev) ...@@ -2455,6 +2455,12 @@ static int wm5110_probe(struct platform_device *pdev)
return ret; return ret;
} }
ret = arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 1);
if (ret != 0)
dev_warn(&pdev->dev,
"Failed to set compressed IRQ as a wake source: %d\n",
ret);
arizona_init_common(arizona); arizona_init_common(arizona);
ret = arizona_init_vol_limit(arizona); ret = arizona_init_vol_limit(arizona);
...@@ -2478,6 +2484,7 @@ static int wm5110_probe(struct platform_device *pdev) ...@@ -2478,6 +2484,7 @@ static int wm5110_probe(struct platform_device *pdev)
err_spk_irqs: err_spk_irqs:
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
err_dsp_irq: err_dsp_irq:
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
return ret; return ret;
...@@ -2496,6 +2503,7 @@ static int wm5110_remove(struct platform_device *pdev) ...@@ -2496,6 +2503,7 @@ static int wm5110_remove(struct platform_device *pdev)
arizona_free_spk_irqs(arizona); arizona_free_spk_irqs(arizona);
arizona_set_irq_wake(arizona, ARIZONA_IRQ_DSP_IRQ1, 0);
arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110); arizona_free_irq(arizona, ARIZONA_IRQ_DSP_IRQ1, wm5110);
return 0; return 0;
......
...@@ -1090,6 +1090,12 @@ static void __rsnd_dai_probe(struct rsnd_priv *priv, ...@@ -1090,6 +1090,12 @@ static void __rsnd_dai_probe(struct rsnd_priv *priv,
of_node_put(capture); of_node_put(capture);
} }
if (rsnd_ssi_is_pin_sharing(io_capture) ||
rsnd_ssi_is_pin_sharing(io_playback)) {
/* should have symmetric_rates if pin sharing */
drv->symmetric_rates = 1;
}
dev_dbg(dev, "%s (%s/%s)\n", rdai->name, dev_dbg(dev, "%s (%s/%s)\n", rdai->name,
rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ", rsnd_io_to_mod_ssi(io_playback) ? "play" : " -- ",
rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- "); rsnd_io_to_mod_ssi(io_capture) ? "capture" : " -- ");
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#define CHNL_4 (1 << 22) /* Channels */ #define CHNL_4 (1 << 22) /* Channels */
#define CHNL_6 (2 << 22) /* Channels */ #define CHNL_6 (2 << 22) /* Channels */
#define CHNL_8 (3 << 22) /* Channels */ #define CHNL_8 (3 << 22) /* Channels */
#define DWL_MASK (7 << 19) /* Data Word Length mask */
#define DWL_8 (0 << 19) /* Data Word Length */ #define DWL_8 (0 << 19) /* Data Word Length */
#define DWL_16 (1 << 19) /* Data Word Length */ #define DWL_16 (1 << 19) /* Data Word Length */
#define DWL_18 (2 << 19) /* Data Word Length */ #define DWL_18 (2 << 19) /* Data Word Length */
...@@ -349,21 +350,18 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod, ...@@ -349,21 +350,18 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
struct rsnd_dai *rdai = rsnd_io_to_rdai(io); struct rsnd_dai *rdai = rsnd_io_to_rdai(io);
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
u32 cr_own; u32 cr_own = ssi->cr_own;
u32 cr_mode; u32 cr_mode = ssi->cr_mode;
u32 wsr; u32 wsr = ssi->wsr;
int is_tdm; int is_tdm;
if (rsnd_ssi_is_parent(mod, io))
return;
is_tdm = rsnd_runtime_is_ssi_tdm(io); is_tdm = rsnd_runtime_is_ssi_tdm(io);
/* /*
* always use 32bit system word. * always use 32bit system word.
* see also rsnd_ssi_master_clk_enable() * see also rsnd_ssi_master_clk_enable()
*/ */
cr_own = FORCE | SWL_32; cr_own |= FORCE | SWL_32;
if (rdai->bit_clk_inv) if (rdai->bit_clk_inv)
cr_own |= SCKP; cr_own |= SCKP;
...@@ -373,9 +371,18 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod, ...@@ -373,9 +371,18 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
cr_own |= SDTA; cr_own |= SDTA;
if (rdai->sys_delay) if (rdai->sys_delay)
cr_own |= DEL; cr_own |= DEL;
/*
* We shouldn't exchange SWSP after running.
* This means, parent needs to care it.
*/
if (rsnd_ssi_is_parent(mod, io))
goto init_end;
if (rsnd_io_is_play(io)) if (rsnd_io_is_play(io))
cr_own |= TRMD; cr_own |= TRMD;
cr_own &= ~DWL_MASK;
switch (snd_pcm_format_width(runtime->format)) { switch (snd_pcm_format_width(runtime->format)) {
case 16: case 16:
cr_own |= DWL_16; cr_own |= DWL_16;
...@@ -402,7 +409,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod, ...@@ -402,7 +409,7 @@ static void rsnd_ssi_config_init(struct rsnd_mod *mod,
wsr |= WS_MODE; wsr |= WS_MODE;
cr_own |= CHNL_8; cr_own |= CHNL_8;
} }
init_end:
ssi->cr_own = cr_own; ssi->cr_own = cr_own;
ssi->cr_mode = cr_mode; ssi->cr_mode = cr_mode;
ssi->wsr = wsr; ssi->wsr = wsr;
...@@ -466,15 +473,18 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod, ...@@ -466,15 +473,18 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod,
return -EIO; return -EIO;
} }
if (!rsnd_ssi_is_parent(mod, io))
ssi->cr_own = 0;
rsnd_ssi_master_clk_stop(mod, io); rsnd_ssi_master_clk_stop(mod, io);
rsnd_mod_power_off(mod); rsnd_mod_power_off(mod);
ssi->usrcnt--; ssi->usrcnt--;
if (!ssi->usrcnt) {
ssi->cr_own = 0;
ssi->cr_mode = 0;
ssi->wsr = 0;
}
return 0; return 0;
} }
...@@ -1051,9 +1061,10 @@ struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id) ...@@ -1051,9 +1061,10 @@ struct rsnd_mod *rsnd_ssi_mod_get(struct rsnd_priv *priv, int id)
int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod) int __rsnd_ssi_is_pin_sharing(struct rsnd_mod *mod)
{ {
struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); if (!mod)
return 0;
return !!(rsnd_flags_has(ssi, RSND_SSI_CLK_PIN_SHARE)); return !!(rsnd_flags_has(rsnd_mod_to_ssi(mod), RSND_SSI_CLK_PIN_SHARE));
} }
static u32 *rsnd_ssi_get_status(struct rsnd_dai_stream *io, static u32 *rsnd_ssi_get_status(struct rsnd_dai_stream *io,
......
...@@ -4073,6 +4073,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card) ...@@ -4073,6 +4073,13 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
continue; continue;
} }
/* let users know there is no DAI to link */
if (!dai_w->priv) {
dev_dbg(card->dev, "dai widget %s has no DAI\n",
dai_w->name);
continue;
}
dai = dai_w->priv; dai = dai_w->priv;
/* ...find all widgets with the same stream and link them */ /* ...find all widgets with the same stream and link them */
......
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