Commit 6a4bfa7c3fe202dc831003ca9dd7e837bc1288ca

Authored by Linus Torvalds

Merge tag 'sound-3.19-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Nothing too exciting as a new year's start here: most of fixes are for
  ASoC, a boot crash fix on OMAP for deferred probe, a few driver
  specific fixes (Intel, dwc, rockchip, rt5677), in addition to typo
  fixes in kerneldoc comments for PCM"

* tag 'sound-3.19-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: pcm: Fix kerneldoc for params_*() functions
  ASoC: rockchip: i2s: fix maxburst of dma data to 4
  ASoC: rockchip: i2s: fix error defination of transmit data level
  ASoC: Intel: correct the fixed free block allocation
  ASoC: rt5677: fixed rt5677_dsp_vad_put rt5677_dsp_vad_get panic
  ASoC: Intel: Fix BYTCR machine driver MODULE_ALIAS
  ASoC: Intel: Fix BYTCR firmware name
  ASoC: dwc: Iterate over all channels
  ASoC: dwc: Ensure FIFOs are flushed to prevent channel swap
  ASoC: Intel: Add I2C dependency to two new machines
  ASoC: dapm: Remove snd_soc_of_parse_audio_routing() due to deferred probe

Showing 10 changed files Side-by-side Diff

... ... @@ -857,7 +857,7 @@
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 861 * @p: hw params
862 862 */
863 863 static inline unsigned int params_rate(const struct snd_pcm_hw_params *p)
... ... @@ -866,7 +866,7 @@
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 870 * @p: hw params
871 871 */
872 872 static inline unsigned int params_period_size(const struct snd_pcm_hw_params *p)
... ... @@ -875,7 +875,7 @@
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 879 * @p: hw params
880 880 */
881 881 static inline unsigned int params_periods(const struct snd_pcm_hw_params *p)
... ... @@ -884,7 +884,7 @@
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 888 * @p: hw params
889 889 */
890 890 static inline unsigned int params_buffer_size(const struct snd_pcm_hw_params *p)
... ... @@ -893,7 +893,7 @@
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 897 * @p: hw params
898 898 */
899 899 static inline unsigned int params_buffer_bytes(const struct snd_pcm_hw_params *p)
sound/soc/codecs/rt5677.c
... ... @@ -784,8 +784,8 @@
784 784 static int rt5677_dsp_vad_get(struct snd_kcontrol *kcontrol,
785 785 struct snd_ctl_elem_value *ucontrol)
786 786 {
787   - struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
788   - struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
  787 + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
  788 + struct rt5677_priv *rt5677 = snd_soc_component_get_drvdata(component);
789 789  
790 790 ucontrol->value.integer.value[0] = rt5677->dsp_vad_en;
791 791  
... ... @@ -795,8 +795,9 @@
795 795 static int rt5677_dsp_vad_put(struct snd_kcontrol *kcontrol,
796 796 struct snd_ctl_elem_value *ucontrol)
797 797 {
798   - struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
799   - struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
  798 + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
  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 802 rt5677->dsp_vad_en = !!ucontrol->value.integer.value[0];
802 803  
sound/soc/dwc/designware_i2s.c
... ... @@ -209,16 +209,9 @@
209 209  
210 210 switch (config->chan_nr) {
211 211 case EIGHT_CHANNEL_SUPPORT:
212   - ch_reg = 3;
213   - break;
214 212 case SIX_CHANNEL_SUPPORT:
215   - ch_reg = 2;
216   - break;
217 213 case FOUR_CHANNEL_SUPPORT:
218   - ch_reg = 1;
219   - break;
220 214 case TWO_CHANNEL_SUPPORT:
221   - ch_reg = 0;
222 215 break;
223 216 default:
224 217 dev_err(dev->dev, "channel not supported\n");
... ... @@ -227,18 +220,22 @@
227 220  
228 221 i2s_disable_channels(dev, substream->stream);
229 222  
230   - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
231   - i2s_write_reg(dev->i2s_base, TCR(ch_reg), xfer_resolution);
232   - i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02);
233   - irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg));
234   - i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30);
235   - i2s_write_reg(dev->i2s_base, TER(ch_reg), 1);
236   - } else {
237   - i2s_write_reg(dev->i2s_base, RCR(ch_reg), xfer_resolution);
238   - i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07);
239   - irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg));
240   - i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03);
241   - i2s_write_reg(dev->i2s_base, RER(ch_reg), 1);
  223 + for (ch_reg = 0; ch_reg < (config->chan_nr / 2); ch_reg++) {
  224 + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
  225 + i2s_write_reg(dev->i2s_base, TCR(ch_reg),
  226 + xfer_resolution);
  227 + i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02);
  228 + irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg));
  229 + i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30);
  230 + i2s_write_reg(dev->i2s_base, TER(ch_reg), 1);
  231 + } else {
  232 + i2s_write_reg(dev->i2s_base, RCR(ch_reg),
  233 + xfer_resolution);
  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 241 i2s_write_reg(dev->i2s_base, CCR, ccr);
... ... @@ -263,6 +260,19 @@
263 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 276 static int dw_i2s_trigger(struct snd_pcm_substream *substream,
267 277 int cmd, struct snd_soc_dai *dai)
268 278 {
... ... @@ -294,6 +304,7 @@
294 304 .startup = dw_i2s_startup,
295 305 .shutdown = dw_i2s_shutdown,
296 306 .hw_params = dw_i2s_hw_params,
  307 + .prepare = dw_i2s_prepare,
297 308 .trigger = dw_i2s_trigger,
298 309 };
299 310  
sound/soc/intel/Kconfig
... ... @@ -89,7 +89,7 @@
89 89  
90 90 config SND_SOC_INTEL_BYTCR_RT5640_MACH
91 91 tristate "ASoC Audio DSP Support for MID BYT Platform"
92   - depends on X86
  92 + depends on X86 && I2C
93 93 select SND_SOC_RT5640
94 94 select SND_SST_MFLD_PLATFORM
95 95 select SND_SST_IPC_ACPI
... ... @@ -101,7 +101,7 @@
101 101  
102 102 config SND_SOC_INTEL_CHT_BSW_RT5672_MACH
103 103 tristate "ASoC Audio driver for Intel Cherrytrail & Braswell with RT5672 codec"
104   - depends on X86_INTEL_LPSS
  104 + depends on X86_INTEL_LPSS && I2C
105 105 select SND_SOC_RT5670
106 106 select SND_SST_MFLD_PLATFORM
107 107 select SND_SST_IPC_ACPI
sound/soc/intel/bytcr_dpcm_rt5640.c
... ... @@ -227,5 +227,5 @@
227 227 MODULE_DESCRIPTION("ASoC Intel(R) Baytrail CR Machine driver");
228 228 MODULE_AUTHOR("Subhransu S. Prusty <subhransu.s.prusty@intel.com>");
229 229 MODULE_LICENSE("GPL v2");
230   -MODULE_ALIAS("platform:bytrt5640-audio");
  230 +MODULE_ALIAS("platform:bytt100_rt5640");
sound/soc/intel/sst-firmware.c
... ... @@ -763,8 +763,12 @@
763 763 /* does block span more than 1 section */
764 764 if (ba->offset >= block->offset && ba->offset < block_end) {
765 765  
  766 + /* add block */
  767 + list_move(&block->list, &dsp->used_block_list);
  768 + list_add(&block->module_list, block_list);
766 769 /* align ba to block boundary */
767   - ba->offset = block->offset;
  770 + ba->size -= block_end - ba->offset;
  771 + ba->offset = block_end;
768 772  
769 773 err = block_alloc_contiguous(dsp, ba, block_list);
770 774 if (err < 0)
sound/soc/intel/sst/sst_acpi.c
... ... @@ -343,7 +343,7 @@
343 343 }
344 344  
345 345 static struct sst_machines sst_acpi_bytcr[] = {
346   - {"10EC5640", "T100", "bytt100_rt5640", NULL, "fw_sst_0f28.bin",
  346 + {"10EC5640", "T100", "bytt100_rt5640", NULL, "intel/fw_sst_0f28.bin",
347 347 &byt_rvp_platform_data },
348 348 {},
349 349 };
sound/soc/rockchip/rockchip_i2s.c
... ... @@ -454,11 +454,11 @@
454 454  
455 455 i2s->playback_dma_data.addr = res->start + I2S_TXDR;
456 456 i2s->playback_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
457   - i2s->playback_dma_data.maxburst = 16;
  457 + i2s->playback_dma_data.maxburst = 4;
458 458  
459 459 i2s->capture_dma_data.addr = res->start + I2S_RXDR;
460 460 i2s->capture_dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
461   - i2s->capture_dma_data.maxburst = 16;
  461 + i2s->capture_dma_data.maxburst = 4;
462 462  
463 463 i2s->dev = &pdev->dev;
464 464 dev_set_drvdata(&pdev->dev, i2s);
sound/soc/rockchip/rockchip_i2s.h
... ... @@ -127,7 +127,7 @@
127 127 #define I2S_DMACR_TDE_DISABLE (0 << I2S_DMACR_TDE_SHIFT)
128 128 #define I2S_DMACR_TDE_ENABLE (1 << I2S_DMACR_TDE_SHIFT)
129 129 #define I2S_DMACR_TDL_SHIFT 0
130   -#define I2S_DMACR_TDL(x) ((x - 1) << I2S_DMACR_TDL_SHIFT)
  130 +#define I2S_DMACR_TDL(x) ((x) << I2S_DMACR_TDL_SHIFT)
131 131 #define I2S_DMACR_TDL_MASK (0x1f << I2S_DMACR_TDL_SHIFT)
132 132  
133 133 /*
sound/soc/soc-core.c
... ... @@ -3230,7 +3230,7 @@
3230 3230 const char *propname)
3231 3231 {
3232 3232 struct device_node *np = card->dev->of_node;
3233   - int num_routes, old_routes;
  3233 + int num_routes;
3234 3234 struct snd_soc_dapm_route *routes;
3235 3235 int i, ret;
3236 3236  
... ... @@ -3248,9 +3248,7 @@
3248 3248 return -EINVAL;
3249 3249 }
3250 3250  
3251   - old_routes = card->num_dapm_routes;
3252   - routes = devm_kzalloc(card->dev,
3253   - (old_routes + num_routes) * sizeof(*routes),
  3251 + routes = devm_kzalloc(card->dev, num_routes * sizeof(*routes),
3254 3252 GFP_KERNEL);
3255 3253 if (!routes) {
3256 3254 dev_err(card->dev,
3257 3255  
... ... @@ -3258,11 +3256,9 @@
3258 3256 return -EINVAL;
3259 3257 }
3260 3258  
3261   - memcpy(routes, card->dapm_routes, old_routes * sizeof(*routes));
3262   -
3263 3259 for (i = 0; i < num_routes; i++) {
3264 3260 ret = of_property_read_string_index(np, propname,
3265   - 2 * i, &routes[old_routes + i].sink);
  3261 + 2 * i, &routes[i].sink);
3266 3262 if (ret) {
3267 3263 dev_err(card->dev,
3268 3264 "ASoC: Property '%s' index %d could not be read: %d\n",
... ... @@ -3270,7 +3266,7 @@
3270 3266 return -EINVAL;
3271 3267 }
3272 3268 ret = of_property_read_string_index(np, propname,
3273   - (2 * i) + 1, &routes[old_routes + i].source);
  3269 + (2 * i) + 1, &routes[i].source);
3274 3270 if (ret) {
3275 3271 dev_err(card->dev,
3276 3272 "ASoC: Property '%s' index %d could not be read: %d\n",
... ... @@ -3279,7 +3275,7 @@
3279 3275 }
3280 3276 }
3281 3277  
3282   - card->num_dapm_routes += num_routes;
  3278 + card->num_dapm_routes = num_routes;
3283 3279 card->dapm_routes = routes;
3284 3280  
3285 3281 return 0;