Commit 5450487a authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branches 'asoc/topic/rcar' and 'asoc/topic/rockchip' into asoc-next

...@@ -242,6 +242,9 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream, ...@@ -242,6 +242,9 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream,
case SNDRV_PCM_FORMAT_S24_LE: case SNDRV_PCM_FORMAT_S24_LE:
val |= I2S_TXCR_VDW(24); val |= I2S_TXCR_VDW(24);
break; break;
case SNDRV_PCM_FORMAT_S32_LE:
val |= I2S_TXCR_VDW(32);
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -360,7 +363,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = { ...@@ -360,7 +363,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
.formats = (SNDRV_PCM_FMTBIT_S8 | .formats = (SNDRV_PCM_FMTBIT_S8 |
SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3LE |
SNDRV_PCM_FMTBIT_S24_LE), SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE),
}, },
.capture = { .capture = {
.stream_name = "Capture", .stream_name = "Capture",
...@@ -370,7 +374,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = { ...@@ -370,7 +374,8 @@ static struct snd_soc_dai_driver rockchip_i2s_dai = {
.formats = (SNDRV_PCM_FMTBIT_S8 | .formats = (SNDRV_PCM_FMTBIT_S8 |
SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S16_LE |
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S20_3LE |
SNDRV_PCM_FMTBIT_S24_LE), SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE),
}, },
.ops = &rockchip_i2s_dai_ops, .ops = &rockchip_i2s_dai_ops,
.symmetric_rates = 1, .symmetric_rates = 1,
......
...@@ -403,29 +403,30 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod, ...@@ -403,29 +403,30 @@ static int rsnd_ssi_quit(struct rsnd_mod *mod,
struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod); struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
struct device *dev = rsnd_priv_to_dev(priv); struct device *dev = rsnd_priv_to_dev(priv);
if (rsnd_ssi_is_parent(mod, io)) if (!ssi->usrcnt) {
goto rsnd_ssi_quit_end; dev_err(dev, "%s[%d] usrcnt error\n",
rsnd_mod_name(mod), rsnd_mod_id(mod));
return -EIO;
}
if (ssi->err > 0) if (!rsnd_ssi_is_parent(mod, io)) {
dev_warn(dev, "%s[%d] under/over flow err = %d\n", if (ssi->err > 0)
rsnd_mod_name(mod), rsnd_mod_id(mod), ssi->err); dev_warn(dev, "%s[%d] under/over flow err = %d\n",
rsnd_mod_name(mod), rsnd_mod_id(mod),
ssi->err);
ssi->cr_own = 0; ssi->cr_own = 0;
ssi->err = 0; ssi->err = 0;
rsnd_ssi_irq_disable(mod); rsnd_ssi_irq_disable(mod);
}
rsnd_ssi_quit_end:
rsnd_ssi_master_clk_stop(ssi, io); rsnd_ssi_master_clk_stop(ssi, io);
rsnd_mod_power_off(mod); rsnd_mod_power_off(mod);
ssi->usrcnt--; ssi->usrcnt--;
if (ssi->usrcnt < 0)
dev_err(dev, "%s[%d] usrcnt error\n",
rsnd_mod_name(mod), rsnd_mod_id(mod));
return 0; return 0;
} }
......
...@@ -73,7 +73,7 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod, ...@@ -73,7 +73,7 @@ static int rsnd_ssiu_init(struct rsnd_mod *mod,
switch (multi_ssi_slaves) { switch (multi_ssi_slaves) {
case 0x0206: /* SSI0/1/2/9 */ case 0x0206: /* SSI0/1/2/9 */
val2 = (1 << 4) | /* SSI0129 sync */ val2 = (1 << 4) | /* SSI0129 sync */
rsnd_rdai_is_clk_master(rdai) ? 0x2 : 0x1; (rsnd_rdai_is_clk_master(rdai) ? 0x2 : 0x1);
/* fall through */ /* fall through */
case 0x0006: /* SSI0/1/2 */ case 0x0006: /* SSI0/1/2 */
val1 = rsnd_rdai_is_clk_master(rdai) ? val1 = rsnd_rdai_is_clk_master(rdai) ?
......
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