Commit e83ce4a51757cf63970a76090662f636112231a7
Exists in
ti-lsk-linux-4.1.y
and in
10 other branches
Merge tag 'asoc-fix-v3.19-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/…
…broonie/sound into for-linus ASoC: Fixes for v3.19 A few fixes for v3.19, a few driver specifics and one core fix which fixes a boot crash on OMAP if deferred probing kicks in due to attempting to modify static data.
Showing 9 changed files Side-by-side Diff
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; |