Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+57 -45
+5 -5
include/sound/pcm.h
··· 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 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 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 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 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)
+5 -4
sound/soc/codecs/rt5677.c
··· 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 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
+30 -19
sound/soc/dwc/designware_i2s.c
··· 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"); ··· 220 227 221 228 i2s_disable_channels(dev, substream->stream); 222 229 223 - if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 224 - i2s_write_reg(dev->i2s_base, TCR(ch_reg), xfer_resolution); 225 - i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02); 226 - irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); 227 - i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30); 228 - i2s_write_reg(dev->i2s_base, TER(ch_reg), 1); 229 - } else { 230 - i2s_write_reg(dev->i2s_base, RCR(ch_reg), xfer_resolution); 231 - i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07); 232 - irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); 233 - i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03); 234 - i2s_write_reg(dev->i2s_base, RER(ch_reg), 1); 230 + for (ch_reg = 0; ch_reg < (config->chan_nr / 2); ch_reg++) { 231 + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 232 + i2s_write_reg(dev->i2s_base, TCR(ch_reg), 233 + xfer_resolution); 234 + i2s_write_reg(dev->i2s_base, TFCR(ch_reg), 0x02); 235 + irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); 236 + i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x30); 237 + i2s_write_reg(dev->i2s_base, TER(ch_reg), 1); 238 + } else { 239 + i2s_write_reg(dev->i2s_base, RCR(ch_reg), 240 + xfer_resolution); 241 + i2s_write_reg(dev->i2s_base, RFCR(ch_reg), 0x07); 242 + irq = i2s_read_reg(dev->i2s_base, IMR(ch_reg)); 243 + i2s_write_reg(dev->i2s_base, IMR(ch_reg), irq & ~0x03); 244 + i2s_write_reg(dev->i2s_base, RER(ch_reg), 1); 245 + } 235 246 } 236 247 237 248 i2s_write_reg(dev->i2s_base, CCR, ccr); ··· 258 261 struct snd_soc_dai *dai) 259 262 { 260 263 snd_soc_dai_set_dma_data(dai, substream, NULL); 264 + } 265 + 266 + static int dw_i2s_prepare(struct snd_pcm_substream *substream, 267 + struct snd_soc_dai *dai) 268 + { 269 + struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); 270 + 271 + if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 272 + i2s_write_reg(dev->i2s_base, TXFFR, 1); 273 + else 274 + i2s_write_reg(dev->i2s_base, RXFFR, 1); 275 + 276 + return 0; 261 277 } 262 278 263 279 static int dw_i2s_trigger(struct snd_pcm_substream *substream, ··· 304 294 .startup = dw_i2s_startup, 305 295 .shutdown = dw_i2s_shutdown, 306 296 .hw_params = dw_i2s_hw_params, 297 + .prepare = dw_i2s_prepare, 307 298 .trigger = dw_i2s_trigger, 308 299 }; 309 300
+2 -2
sound/soc/intel/Kconfig
··· 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 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
+1 -1
sound/soc/intel/bytcr_dpcm_rt5640.c
··· 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");
+5 -1
sound/soc/intel/sst-firmware.c
··· 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)
+1 -1
sound/soc/intel/sst/sst_acpi.c
··· 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 };
+2 -2
sound/soc/rockchip/rockchip_i2s.c
··· 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);
+1 -1
sound/soc/rockchip/rockchip_i2s.h
··· 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 /*
+5 -9
sound/soc/soc-core.c
··· 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 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, ··· 3256 3258 return -EINVAL; 3257 3259 } 3258 3260 3259 - memcpy(routes, card->dapm_routes, old_routes * sizeof(*routes)); 3260 - 3261 3261 for (i = 0; i < num_routes; i++) { 3262 3262 ret = of_property_read_string_index(np, propname, 3263 - 2 * i, &routes[old_routes + i].sink); 3263 + 2 * i, &routes[i].sink); 3264 3264 if (ret) { 3265 3265 dev_err(card->dev, 3266 3266 "ASoC: Property '%s' index %d could not be read: %d\n", ··· 3266 3270 return -EINVAL; 3267 3271 } 3268 3272 ret = of_property_read_string_index(np, propname, 3269 - (2 * i) + 1, &routes[old_routes + i].source); 3273 + (2 * i) + 1, &routes[i].source); 3270 3274 if (ret) { 3271 3275 dev_err(card->dev, 3272 3276 "ASoC: Property '%s' index %d could not be read: %d\n", ··· 3275 3279 } 3276 3280 } 3277 3281 3278 - card->num_dapm_routes += num_routes; 3282 + card->num_dapm_routes = num_routes; 3279 3283 card->dapm_routes = routes; 3280 3284 3281 3285 return 0;