Commit dac825b6 authored by Mark Brown's avatar Mark Brown

Merge series "Patches to update for rockchip spdif" from Sugar Zhang <sugar.zhang@rock-chips.com>:

These patches fixup or update for rockchip spdif.

Sugar Zhang (4):
  ASoC: rockchip: spdif: Mark SPDIF_SMPDR as volatile
  ASoC: rockchip: spdif: Fix some coding style
  ASoC: rockchip: spdif: Add support for rk3568 spdif
  ASoC: dt-bindings: rockchip: Add compatible for rk3568 spdif

 .../devicetree/bindings/sound/rockchip-spdif.yaml  |  1 +
 sound/soc/rockchip/rockchip_spdif.c                | 38 ++++++++++++----------
 2 files changed, 22 insertions(+), 17 deletions(-)

--
2.7.4
parents 11a08e05 e79ef3c2
...@@ -23,6 +23,7 @@ properties: ...@@ -23,6 +23,7 @@ properties:
- const: rockchip,rk3366-spdif - const: rockchip,rk3366-spdif
- const: rockchip,rk3368-spdif - const: rockchip,rk3368-spdif
- const: rockchip,rk3399-spdif - const: rockchip,rk3399-spdif
- const: rockchip,rk3568-spdif
- items: - items:
- enum: - enum:
- rockchip,rk3188-spdif - rockchip,rk3188-spdif
......
...@@ -58,6 +58,8 @@ static const struct of_device_id rk_spdif_match[] __maybe_unused = { ...@@ -58,6 +58,8 @@ static const struct of_device_id rk_spdif_match[] __maybe_unused = {
.data = (void *)RK_SPDIF_RK3366 }, .data = (void *)RK_SPDIF_RK3366 },
{ .compatible = "rockchip,rk3399-spdif", { .compatible = "rockchip,rk3399-spdif",
.data = (void *)RK_SPDIF_RK3366 }, .data = (void *)RK_SPDIF_RK3366 },
{ .compatible = "rockchip,rk3568-spdif",
.data = (void *)RK_SPDIF_RK3366 },
{}, {},
}; };
MODULE_DEVICE_TABLE(of, rk_spdif_match); MODULE_DEVICE_TABLE(of, rk_spdif_match);
...@@ -103,8 +105,8 @@ static int __maybe_unused rk_spdif_runtime_resume(struct device *dev) ...@@ -103,8 +105,8 @@ static int __maybe_unused rk_spdif_runtime_resume(struct device *dev)
} }
static int rk_spdif_hw_params(struct snd_pcm_substream *substream, static int rk_spdif_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params, struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai) struct snd_soc_dai *dai)
{ {
struct rk_spdif_dev *spdif = snd_soc_dai_get_drvdata(dai); struct rk_spdif_dev *spdif = snd_soc_dai_get_drvdata(dai);
unsigned int val = SPDIF_CFGR_HALFWORD_ENABLE; unsigned int val = SPDIF_CFGR_HALFWORD_ENABLE;
...@@ -137,15 +139,15 @@ static int rk_spdif_hw_params(struct snd_pcm_substream *substream, ...@@ -137,15 +139,15 @@ static int rk_spdif_hw_params(struct snd_pcm_substream *substream,
} }
ret = regmap_update_bits(spdif->regmap, SPDIF_CFGR, ret = regmap_update_bits(spdif->regmap, SPDIF_CFGR,
SPDIF_CFGR_CLK_DIV_MASK | SPDIF_CFGR_HALFWORD_ENABLE | SPDIF_CFGR_CLK_DIV_MASK |
SDPIF_CFGR_VDW_MASK, SPDIF_CFGR_HALFWORD_ENABLE |
val); SDPIF_CFGR_VDW_MASK, val);
return ret; return ret;
} }
static int rk_spdif_trigger(struct snd_pcm_substream *substream, static int rk_spdif_trigger(struct snd_pcm_substream *substream,
int cmd, struct snd_soc_dai *dai) int cmd, struct snd_soc_dai *dai)
{ {
struct rk_spdif_dev *spdif = snd_soc_dai_get_drvdata(dai); struct rk_spdif_dev *spdif = snd_soc_dai_get_drvdata(dai);
int ret; int ret;
...@@ -155,31 +157,31 @@ static int rk_spdif_trigger(struct snd_pcm_substream *substream, ...@@ -155,31 +157,31 @@ static int rk_spdif_trigger(struct snd_pcm_substream *substream,
case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_RESUME:
case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR, ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR,
SPDIF_DMACR_TDE_ENABLE | SPDIF_DMACR_TDE_ENABLE |
SPDIF_DMACR_TDL_MASK, SPDIF_DMACR_TDL_MASK,
SPDIF_DMACR_TDE_ENABLE | SPDIF_DMACR_TDE_ENABLE |
SPDIF_DMACR_TDL(16)); SPDIF_DMACR_TDL(16));
if (ret != 0) if (ret != 0)
return ret; return ret;
ret = regmap_update_bits(spdif->regmap, SPDIF_XFER, ret = regmap_update_bits(spdif->regmap, SPDIF_XFER,
SPDIF_XFER_TXS_START, SPDIF_XFER_TXS_START,
SPDIF_XFER_TXS_START); SPDIF_XFER_TXS_START);
break; break;
case SNDRV_PCM_TRIGGER_SUSPEND: case SNDRV_PCM_TRIGGER_SUSPEND:
case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_STOP:
case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR, ret = regmap_update_bits(spdif->regmap, SPDIF_DMACR,
SPDIF_DMACR_TDE_ENABLE, SPDIF_DMACR_TDE_ENABLE,
SPDIF_DMACR_TDE_DISABLE); SPDIF_DMACR_TDE_DISABLE);
if (ret != 0) if (ret != 0)
return ret; return ret;
ret = regmap_update_bits(spdif->regmap, SPDIF_XFER, ret = regmap_update_bits(spdif->regmap, SPDIF_XFER,
SPDIF_XFER_TXS_START, SPDIF_XFER_TXS_START,
SPDIF_XFER_TXS_STOP); SPDIF_XFER_TXS_STOP);
break; break;
default: default:
ret = -EINVAL; ret = -EINVAL;
...@@ -247,6 +249,7 @@ static bool rk_spdif_rd_reg(struct device *dev, unsigned int reg) ...@@ -247,6 +249,7 @@ static bool rk_spdif_rd_reg(struct device *dev, unsigned int reg)
case SPDIF_INTCR: case SPDIF_INTCR:
case SPDIF_INTSR: case SPDIF_INTSR:
case SPDIF_XFER: case SPDIF_XFER:
case SPDIF_SMPDR:
return true; return true;
default: default:
return false; return false;
...@@ -258,6 +261,7 @@ static bool rk_spdif_volatile_reg(struct device *dev, unsigned int reg) ...@@ -258,6 +261,7 @@ static bool rk_spdif_volatile_reg(struct device *dev, unsigned int reg)
switch (reg) { switch (reg) {
case SPDIF_INTSR: case SPDIF_INTSR:
case SPDIF_SDBLR: case SPDIF_SDBLR:
case SPDIF_SMPDR:
return true; return true;
default: default:
return false; return false;
...@@ -291,7 +295,7 @@ static int rk_spdif_probe(struct platform_device *pdev) ...@@ -291,7 +295,7 @@ static int rk_spdif_probe(struct platform_device *pdev)
grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
if (IS_ERR(grf)) { if (IS_ERR(grf)) {
dev_err(&pdev->dev, dev_err(&pdev->dev,
"rockchip_spdif missing 'rockchip,grf' \n"); "rockchip_spdif missing 'rockchip,grf'\n");
return PTR_ERR(grf); return PTR_ERR(grf);
} }
......
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