diff options
author | Peter Rosin <peda@axentia.se> | 2015-01-28 09:16:12 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-28 14:28:54 -0500 |
commit | d11c2978bfbe97a4c29bd78b491c14f2debb36cd (patch) | |
tree | 58ec1f4e60a27d76e776f5c3fab25079c8b2d5cb | |
parent | 7c4e1119a99c5a54d38d67a66070c081fda52634 (diff) |
ASoC: pcm512x: Support SND_SOC_DAIFMT_CBM_CFS
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/codecs/pcm512x.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/sound/soc/codecs/pcm512x.c b/sound/soc/codecs/pcm512x.c index 8b474196d52a..51b279e3f465 100644 --- a/sound/soc/codecs/pcm512x.c +++ b/sound/soc/codecs/pcm512x.c | |||
@@ -464,6 +464,7 @@ static int pcm512x_dai_startup(struct snd_pcm_substream *substream, | |||
464 | 464 | ||
465 | switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { | 465 | switch (pcm512x->fmt & SND_SOC_DAIFMT_MASTER_MASK) { |
466 | case SND_SOC_DAIFMT_CBM_CFM: | 466 | case SND_SOC_DAIFMT_CBM_CFM: |
467 | case SND_SOC_DAIFMT_CBM_CFS: | ||
467 | return pcm512x_dai_startup_master(substream, dai); | 468 | return pcm512x_dai_startup_master(substream, dai); |
468 | 469 | ||
469 | case SND_SOC_DAIFMT_CBS_CFS: | 470 | case SND_SOC_DAIFMT_CBS_CFS: |
@@ -970,6 +971,8 @@ static int pcm512x_hw_params(struct snd_pcm_substream *substream, | |||
970 | struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); | 971 | struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec); |
971 | int alen; | 972 | int alen; |
972 | int gpio; | 973 | int gpio; |
974 | int clock_output; | ||
975 | int master_mode; | ||
973 | int ret; | 976 | int ret; |
974 | 977 | ||
975 | dev_dbg(codec->dev, "hw_params %u Hz, %u channels\n", | 978 | dev_dbg(codec->dev, "hw_params %u Hz, %u channels\n", |
@@ -1018,6 +1021,12 @@ static int pcm512x_hw_params(struct snd_pcm_substream *substream, | |||
1018 | } | 1021 | } |
1019 | return 0; | 1022 | return 0; |
1020 | case SND_SOC_DAIFMT_CBM_CFM: | 1023 | case SND_SOC_DAIFMT_CBM_CFM: |
1024 | clock_output = PCM512x_BCKO | PCM512x_LRKO; | ||
1025 | master_mode = PCM512x_RLRK | PCM512x_RBCK; | ||
1026 | break; | ||
1027 | case SND_SOC_DAIFMT_CBM_CFS: | ||
1028 | clock_output = PCM512x_BCKO; | ||
1029 | master_mode = PCM512x_RBCK; | ||
1021 | break; | 1030 | break; |
1022 | default: | 1031 | default: |
1023 | return -EINVAL; | 1032 | return -EINVAL; |
@@ -1114,7 +1123,7 @@ static int pcm512x_hw_params(struct snd_pcm_substream *substream, | |||
1114 | 1123 | ||
1115 | ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG, | 1124 | ret = regmap_update_bits(pcm512x->regmap, PCM512x_BCLK_LRCLK_CFG, |
1116 | PCM512x_BCKP | PCM512x_BCKO | PCM512x_LRKO, | 1125 | PCM512x_BCKP | PCM512x_BCKO | PCM512x_LRKO, |
1117 | PCM512x_BCKO | PCM512x_LRKO); | 1126 | clock_output); |
1118 | if (ret != 0) { | 1127 | if (ret != 0) { |
1119 | dev_err(codec->dev, "Failed to enable clock output: %d\n", ret); | 1128 | dev_err(codec->dev, "Failed to enable clock output: %d\n", ret); |
1120 | return ret; | 1129 | return ret; |
@@ -1122,7 +1131,7 @@ static int pcm512x_hw_params(struct snd_pcm_substream *substream, | |||
1122 | 1131 | ||
1123 | ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE, | 1132 | ret = regmap_update_bits(pcm512x->regmap, PCM512x_MASTER_MODE, |
1124 | PCM512x_RLRK | PCM512x_RBCK, | 1133 | PCM512x_RLRK | PCM512x_RBCK, |
1125 | PCM512x_RLRK | PCM512x_RBCK); | 1134 | master_mode); |
1126 | if (ret != 0) { | 1135 | if (ret != 0) { |
1127 | dev_err(codec->dev, "Failed to enable master mode: %d\n", ret); | 1136 | dev_err(codec->dev, "Failed to enable master mode: %d\n", ret); |
1128 | return ret; | 1137 | return ret; |