diff options
| -rw-r--r-- | include/sound/pcm.h | 10 | ||||
| -rw-r--r-- | sound/soc/codecs/rt5677.c | 9 | ||||
| -rw-r--r-- | sound/soc/dwc/designware_i2s.c | 49 | ||||
| -rw-r--r-- | sound/soc/intel/Kconfig | 4 | ||||
| -rw-r--r-- | sound/soc/intel/bytcr_dpcm_rt5640.c | 2 | ||||
| -rw-r--r-- | sound/soc/intel/sst-firmware.c | 6 | ||||
| -rw-r--r-- | sound/soc/intel/sst/sst_acpi.c | 2 | ||||
| -rw-r--r-- | sound/soc/rockchip/rockchip_i2s.c | 4 | ||||
| -rw-r--r-- | sound/soc/rockchip/rockchip_i2s.h | 2 | ||||
| -rw-r--r-- | sound/soc/soc-core.c | 14 |
10 files changed, 57 insertions, 45 deletions
diff --git a/include/sound/pcm.h b/include/sound/pcm.h index 1e7f74acc2ec..b429b73e875e 100644 --- a/include/sound/pcm.h +++ b/include/sound/pcm.h | |||
| @@ -857,7 +857,7 @@ static inline unsigned int params_channels(const struct snd_pcm_hw_params *p) | |||
| 857 | } | 857 | } |
| 858 | 858 | ||
| 859 | /** | 859 | /** |
| 860 | * params_channels - Get the sample rate from the hw params | 860 | * params_rate - Get the sample rate from the hw params |
| 861 | * @p: hw params | 861 | * @p: hw params |
| 862 | */ | 862 | */ |
| 863 | static inline unsigned int params_rate(const struct snd_pcm_hw_params *p) | 863 | static inline unsigned int params_rate(const struct snd_pcm_hw_params *p) |
| @@ -866,7 +866,7 @@ static inline unsigned int params_rate(const struct snd_pcm_hw_params *p) | |||
| 866 | } | 866 | } |
| 867 | 867 | ||
| 868 | /** | 868 | /** |
| 869 | * params_channels - Get the period size (in frames) from the hw params | 869 | * params_period_size - Get the period size (in frames) from the hw params |
| 870 | * @p: hw params | 870 | * @p: hw params |
| 871 | */ | 871 | */ |
| 872 | static inline unsigned int params_period_size(const struct snd_pcm_hw_params *p) | 872 | static inline unsigned int params_period_size(const struct snd_pcm_hw_params *p) |
| @@ -875,7 +875,7 @@ static inline unsigned int params_period_size(const struct snd_pcm_hw_params *p) | |||
| 875 | } | 875 | } |
| 876 | 876 | ||
| 877 | /** | 877 | /** |
| 878 | * params_channels - Get the number of periods from the hw params | 878 | * params_periods - Get the number of periods from the hw params |
| 879 | * @p: hw params | 879 | * @p: hw params |
| 880 | */ | 880 | */ |
| 881 | static inline unsigned int params_periods(const struct snd_pcm_hw_params *p) | 881 | static inline unsigned int params_periods(const struct snd_pcm_hw_params *p) |
| @@ -884,7 +884,7 @@ static inline unsigned int params_periods(const struct snd_pcm_hw_params *p) | |||
| 884 | } | 884 | } |
| 885 | 885 | ||
| 886 | /** | 886 | /** |
| 887 | * params_channels - Get the buffer size (in frames) from the hw params | 887 | * params_buffer_size - Get the buffer size (in frames) from the hw params |
| 888 | * @p: hw params | 888 | * @p: hw params |
| 889 | */ | 889 | */ |
| 890 | static inline unsigned int params_buffer_size(const struct snd_pcm_hw_params *p) | 890 | static inline unsigned int params_buffer_size(const struct snd_pcm_hw_params *p) |
| @@ -893,7 +893,7 @@ static inline unsigned int params_buffer_size(const struct snd_pcm_hw_params *p) | |||
| 893 | } | 893 | } |
| 894 | 894 | ||
| 895 | /** | 895 | /** |
| 896 | * params_channels - Get the buffer size (in bytes) from the hw params | 896 | * params_buffer_bytes - Get the buffer size (in bytes) from the hw params |
| 897 | * @p: hw params | 897 | * @p: hw params |
| 898 | */ | 898 | */ |
| 899 | static inline unsigned int params_buffer_bytes(const struct snd_pcm_hw_params *p) | 899 | static inline unsigned int params_buffer_bytes(const struct snd_pcm_hw_params *p) |
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c index 81fe1464d268..c0fbe1881439 100644 --- a/sound/soc/codecs/rt5677.c +++ b/sound/soc/codecs/rt5677.c | |||
| @@ -784,8 +784,8 @@ static unsigned int bst_tlv[] = { | |||
| 784 | static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol, | 784 | static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol, |
| 785 | struct snd_ctl_elem_value *ucontrol) | 785 | struct snd_ctl_elem_value *ucontrol) |
| 786 | { | 786 | { |
| 787 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 787 | struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); |
| 788 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); | 788 | struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component); |
| 789 | 789 | ||
| 790 | ucontrol->value.integer.value[0] = rt5677->dsp_vad_en; | 790 | ucontrol->value.integer.value[0] = rt5677->dsp_vad_en; |
| 791 | 791 | ||
| @@ -795,8 +795,9 @@ static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol, | |||
| 795 | static int rt5677_dsp_vad_put(struct snd_kcontrol *kcontrol, | 795 | static int rt5677_dsp_vad_put(struct snd_kcontrol *kcontrol, |
| 796 | struct snd_ctl_elem_value *ucontrol) | 796 | struct snd_ctl_elem_value *ucontrol) |
| 797 | { | 797 | { |
| 798 | struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); | 798 | struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); |
| 799 | struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec); | 799 | struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component); |
| 800 | struct snd_soc_codec *codec = snd_soc_component_to_codec(component); | ||
| 800 | 801 | ||
| 801 | rt5677->dsp_vad_en = !!ucontrol->value.integer.value[0]; | 802 | rt5677->dsp_vad_en = !!ucontrol->value.integer.value[0]; |
| 802 | 803 | ||
diff --git a/sound/soc/dwc/designware_i2s.c b/sound/soc/dwc/designware_i2s.c index b93168d4f648..8d18bbda661b 100644 --- a/sound/soc/dwc/designware_i2s.c +++ b/sound/soc/dwc/designware_i2s.c | |||
| @@ -209,16 +209,9 @@ static int dw_i2s_hw_params(struct snd_pcm_substream *substream, | |||
| 209 | 209 | ||
| 210 | switch (config->chan_nr) { | 210 | switch (config->chan_nr) { |
| 211 | case EIGHT_CHANNEL_SUPPORT: | 211 | case EIGHT_CHANNEL_SUPPORT: |
| 212 | ch_reg = 3; | ||
| 213 | break; | ||
| 214 | case SIX_CHANNEL_SUPPORT: | 212 | case SIX_CHANNEL_SUPPORT: |
| 215 | ch_reg = 2; | ||
| 216 | break; | ||
| 217 | case FOUR_CHANNEL_SUPPORT: | 213 | case FOUR_CHANNEL_SUPPORT: |
| 218 | ch_reg = 1; | ||
| 219 | break; | ||
| 220 | case TWO_CHANNEL_SUPPORT: | 214 | case TWO_CHANNEL_SUPPORT: |
| 221 | ch_reg = 0; | ||
| 222 | break; | 215 | break; |
| 223 | default: | 216 | default: |
| 224 | dev_err(dev->dev, "channel not supported\n"); | 217 | dev_err(dev->dev, "channel not supported\n"); |
| @@ -227,18 +220,22 @@ static int dw_i2s_hw_params(struct snd_pcm_substream *substream, | |||
| 227 | 220 | ||
| 228 | i2s_disable_channels(dev, substream->stream); | 221 | i2s_disable_channels(dev, substream->stream); |
| 229 | 222 | ||
| 230 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { | 223 | for (ch_reg = 0; ch_reg < (config->chan_nr / 2); ch_reg++) { |
| 231 | i2s_write_reg(dev->i2s_base, TCR(ch_reg), xfer_resolution); | 224 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { |
| 232 | i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02); | 225 | i2s_write_reg(dev->i2s_base, TCR(ch_reg), |
| 233 | irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); | 226 | xfer_resolution); |
| 234 | i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30); | 227 | i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02); |
| 235 | i2s_write_reg(dev->i2s_base, TER(ch_reg), 1); | 228 | irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); |
| 236 | } else { | 229 | i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30); |
| 237 | i2s_write_reg(dev->i2s_base, RCR(ch_reg), xfer_resolution); | 230 | i2s_write_reg(dev->i2s_base, TER(ch_reg), 1); |
| 238 | i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07); | 231 | } else { |
| 239 | irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); | 232 | i2s_write_reg(dev->i2s_base, RCR(ch_reg), |
| 240 | i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03); | 233 | xfer_resolution); |
| 241 | i2s_write_reg(dev->i2s_base, RER(ch_reg), 1); | 234 | i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07); |
| 235 | irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); | ||
| 236 | i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03); | ||
| 237 | i2s_write_reg(dev->i2s_base, RER(ch_reg), 1); | ||
| 238 | } | ||
| 242 | } | 239 | } |
| 243 | 240 | ||
| 244 | i2s_write_reg(dev->i2s_base, CCR, ccr); | 241 | i2s_write_reg(dev->i2s_base, CCR, ccr); |
| @@ -263,6 +260,19 @@ static void dw_i2s_shutdown(struct snd_pcm_substream *substream, | |||
| 263 | snd_soc_dai_set_dma_data(dai, substream, NULL); | 260 | snd_soc_dai_set_dma_data(dai, substream, NULL); |
| 264 | } | 261 | } |
| 265 | 262 | ||
| 263 | static int dw_i2s_prepare(struct snd_pcm_substream *substream, | ||
| 264 | struct snd_soc_dai *dai) | ||
| 265 | { | ||
| 266 | struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); | ||
| 267 | |||
| 268 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | ||
| 269 | i2s_write_reg(dev->i2s_base, TXFFR, 1); | ||
| 270 | else | ||
| 271 | i2s_write_reg(dev->i2s_base, RXFFR, 1); | ||
| 272 | |||
| 273 | return 0; | ||
| 274 | } | ||
| 275 | |||
| 266 | static int dw_i2s_trigger(struct snd_pcm_substream *substream, | 276 | static int dw_i2s_trigger(struct snd_pcm_substream *substream, |
| 267 | int cmd, struct snd_soc_dai *dai) | 277 | int cmd, struct snd_soc_dai *dai) |
| 268 | { | 278 | { |
| @@ -294,6 +304,7 @@ static struct snd_soc_dai_ops dw_i2s_dai_ops = { | |||
| 294 | .startup = dw_i2s_startup, | 304 | .startup = dw_i2s_startup, |
| 295 | .shutdown = dw_i2s_shutdown, | 305 | .shutdown = dw_i2s_shutdown, |
| 296 | .hw_params = dw_i2s_hw_params, | 306 | .hw_params = dw_i2s_hw_params, |
| 307 | .prepare = dw_i2s_prepare, | ||
| 297 | .trigger = dw_i2s_trigger, | 308 | .trigger = dw_i2s_trigger, |
| 298 | }; | 309 | }; |
| 299 | 310 | ||
diff --git a/sound/soc/intel/Kconfig b/sound/soc/intel/Kconfig index e989ecf046c9..f86de1211b96 100644 --- a/sound/soc/intel/Kconfig +++ b/sound/soc/intel/Kconfig | |||
| @@ -89,7 +89,7 @@ config SND_SOC_INTEL_BROADWELL_MACH | |||
| 89 | 89 | ||
| 90 | config SND_SOC_INTEL_BYTCR_RT5640_MACH | 90 | config SND_SOC_INTEL_BYTCR_RT5640_MACH |
