diff options
author | Takashi Iwai <tiwai@suse.de> | 2019-11-07 07:52:17 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2019-11-07 07:52:17 -0500 |
commit | df37d941c4b5aee9259ab4e34de8bfda384f7681 (patch) | |
tree | 485d9bd2c2d6fe3d262be1f8f66bfe7b86e7fd71 | |
parent | e7af6307a8a54f0b873960b32b6a644f2d0fbd97 (diff) | |
parent | 9508ef5a980f5d847cad9b932b6ada8f2a3466c1 (diff) |
Merge tag 'asoc-fix-v5.4-rc6' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v5.4
These are a collection of fixes since v5.4-rc4 that have accumilated,
they're all driver specific and there's nothing major in here so it's
probably not essential to actually send them but I'll leave that call to
you.
-rw-r--r-- | sound/core/compress_offload.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/hdac_hda.c | 2 | ||||
-rw-r--r-- | sound/soc/codecs/hdmi-codec.c | 12 | ||||
-rw-r--r-- | sound/soc/codecs/max98373.c | 4 | ||||
-rw-r--r-- | sound/soc/codecs/msm8916-wcd-analog.c | 4 | ||||
-rw-r--r-- | sound/soc/kirkwood/kirkwood-i2s.c | 11 | ||||
-rw-r--r-- | sound/soc/rockchip/rockchip_max98090.c | 7 | ||||
-rw-r--r-- | sound/soc/sh/rcar/dma.c | 4 | ||||
-rw-r--r-- | sound/soc/sof/debug.c | 6 | ||||
-rw-r--r-- | sound/soc/sof/intel/hda-stream.c | 4 | ||||
-rw-r--r-- | sound/soc/sof/ipc.c | 4 | ||||
-rw-r--r-- | sound/soc/sof/topology.c | 11 | ||||
-rw-r--r-- | sound/soc/stm/stm32_sai_sub.c | 12 | ||||
-rw-r--r-- | sound/soc/ti/sdma-pcm.c | 2 |
14 files changed, 51 insertions, 34 deletions
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index 41905afada63..f34ce564d92c 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c | |||
@@ -528,7 +528,7 @@ static int snd_compress_check_input(struct snd_compr_params *params) | |||
528 | { | 528 | { |
529 | /* first let's check the buffer parameter's */ | 529 | /* first let's check the buffer parameter's */ |
530 | if (params->buffer.fragment_size == 0 || | 530 | if (params->buffer.fragment_size == 0 || |
531 | params->buffer.fragments > INT_MAX / params->buffer.fragment_size || | 531 | params->buffer.fragments > U32_MAX / params->buffer.fragment_size || |
532 | params->buffer.fragments == 0) | 532 | params->buffer.fragments == 0) |
533 | return -EINVAL; | 533 | return -EINVAL; |
534 | 534 | ||
diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c index 91242b6f8ea7..4570f662fb48 100644 --- a/sound/soc/codecs/hdac_hda.c +++ b/sound/soc/codecs/hdac_hda.c | |||
@@ -410,8 +410,8 @@ static void hdac_hda_codec_remove(struct snd_soc_component *component) | |||
410 | return; | 410 | return; |
411 | } | 411 | } |
412 | 412 | ||
413 | snd_hdac_ext_bus_link_put(hdev->bus, hlink); | ||
414 | pm_runtime_disable(&hdev->dev); | 413 | pm_runtime_disable(&hdev->dev); |
414 | snd_hdac_ext_bus_link_put(hdev->bus, hlink); | ||
415 | } | 415 | } |
416 | 416 | ||
417 | static const struct snd_soc_dapm_route hdac_hda_dapm_routes[] = { | 417 | static const struct snd_soc_dapm_route hdac_hda_dapm_routes[] = { |
diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c index b5fd8f08726e..f8b5b960e597 100644 --- a/sound/soc/codecs/hdmi-codec.c +++ b/sound/soc/codecs/hdmi-codec.c | |||
@@ -274,7 +274,7 @@ struct hdmi_codec_priv { | |||
274 | uint8_t eld[MAX_ELD_BYTES]; | 274 | uint8_t eld[MAX_ELD_BYTES]; |
275 | struct snd_pcm_chmap *chmap_info; | 275 | struct snd_pcm_chmap *chmap_info; |
276 | unsigned int chmap_idx; | 276 | unsigned int chmap_idx; |
277 | struct mutex lock; | 277 | unsigned long busy; |
278 | struct snd_soc_jack *jack; | 278 | struct snd_soc_jack *jack; |
279 | unsigned int jack_status; | 279 | unsigned int jack_status; |
280 | }; | 280 | }; |
@@ -390,8 +390,8 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream, | |||
390 | struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); | 390 | struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); |
391 | int ret = 0; | 391 | int ret = 0; |
392 | 392 | ||
393 | ret = mutex_trylock(&hcp->lock); | 393 | ret = test_and_set_bit(0, &hcp->busy); |
394 | if (!ret) { | 394 | if (ret) { |
395 | dev_err(dai->dev, "Only one simultaneous stream supported!\n"); | 395 | dev_err(dai->dev, "Only one simultaneous stream supported!\n"); |
396 | return -EINVAL; | 396 | return -EINVAL; |
397 | } | 397 | } |
@@ -419,7 +419,7 @@ static int hdmi_codec_startup(struct snd_pcm_substream *substream, | |||
419 | 419 | ||
420 | err: | 420 | err: |
421 | /* Release the exclusive lock on error */ | 421 | /* Release the exclusive lock on error */ |
422 | mutex_unlock(&hcp->lock); | 422 | clear_bit(0, &hcp->busy); |
423 | return ret; | 423 | return ret; |
424 | } | 424 | } |
425 | 425 | ||
@@ -431,7 +431,7 @@ static void hdmi_codec_shutdown(struct snd_pcm_substream *substream, | |||
431 | hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; | 431 | hcp->chmap_idx = HDMI_CODEC_CHMAP_IDX_UNKNOWN; |
432 | hcp->hcd.ops->audio_shutdown(dai->dev->parent, hcp->hcd.data); | 432 | hcp->hcd.ops->audio_shutdown(dai->dev->parent, hcp->hcd.data); |
433 | 433 | ||
434 | mutex_unlock(&hcp->lock); | 434 | clear_bit(0, &hcp->busy); |
435 | } | 435 | } |
436 | 436 | ||
437 | static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, | 437 | static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, |
@@ -811,8 +811,6 @@ static int hdmi_codec_probe(struct platform_device *pdev) | |||
811 | return -ENOMEM; | 811 | return -ENOMEM; |
812 | 812 | ||
813 | hcp->hcd = *hcd; | 813 | hcp->hcd = *hcd; |
814 | mutex_init(&hcp->lock); | ||
815 | |||
816 | daidrv = devm_kcalloc(dev, dai_count, sizeof(*daidrv), GFP_KERNEL); | 814 | daidrv = devm_kcalloc(dev, dai_count, sizeof(*daidrv), GFP_KERNEL); |
817 | if (!daidrv) | 815 | if (!daidrv) |
818 | return -ENOMEM; | 816 | return -ENOMEM; |
diff --git a/sound/soc/codecs/max98373.c b/sound/soc/codecs/max98373.c index eb709d528259..cae1def8902d 100644 --- a/sound/soc/codecs/max98373.c +++ b/sound/soc/codecs/max98373.c | |||
@@ -960,11 +960,11 @@ static int max98373_i2c_probe(struct i2c_client *i2c, | |||
960 | 960 | ||
961 | /* Power on device */ | 961 | /* Power on device */ |
962 | if (gpio_is_valid(max98373->reset_gpio)) { | 962 | if (gpio_is_valid(max98373->reset_gpio)) { |
963 | ret = gpio_request(max98373->reset_gpio, "MAX98373_RESET"); | 963 | ret = devm_gpio_request(&i2c->dev, max98373->reset_gpio, |
964 | "MAX98373_RESET"); | ||
964 | if (ret) { | 965 | if (ret) { |
965 | dev_err(&i2c->dev, "%s: Failed to request gpio %d\n", | 966 | dev_err(&i2c->dev, "%s: Failed to request gpio %d\n", |
966 | __func__, max98373->reset_gpio); | 967 | __func__, max98373->reset_gpio); |
967 | gpio_free(max98373->reset_gpio); | ||
968 | return -EINVAL; | 968 | return -EINVAL; |
969 | } | 969 | } |
970 | gpio_direction_output(max98373->reset_gpio, 0); | 970 | gpio_direction_output(max98373->reset_gpio, 0); |
diff --git a/sound/soc/codecs/msm8916-wcd-analog.c b/sound/soc/codecs/msm8916-wcd-analog.c index 667e9f73aba3..e3d311fb510e 100644 --- a/sound/soc/codecs/msm8916-wcd-analog.c +++ b/sound/soc/codecs/msm8916-wcd-analog.c | |||
@@ -306,7 +306,7 @@ struct pm8916_wcd_analog_priv { | |||
306 | }; | 306 | }; |
307 | 307 | ||
308 | static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" }; | 308 | static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" }; |
309 | static const char *const rdac2_mux_text[] = { "ZERO", "RX2", "RX1" }; | 309 | static const char *const rdac2_mux_text[] = { "RX1", "RX2" }; |
310 | static const char *const hph_text[] = { "ZERO", "Switch", }; | 310 | static const char *const hph_text[] = { "ZERO", "Switch", }; |
311 | 311 | ||
312 | static const struct soc_enum hph_enum = SOC_ENUM_SINGLE_VIRT( | 312 | static const struct soc_enum hph_enum = SOC_ENUM_SINGLE_VIRT( |
@@ -321,7 +321,7 @@ static const struct soc_enum adc2_enum = SOC_ENUM_SINGLE_VIRT( | |||
321 | 321 | ||
322 | /* RDAC2 MUX */ | 322 | /* RDAC2 MUX */ |
323 | static const struct soc_enum rdac2_mux_enum = SOC_ENUM_SINGLE( | 323 | static const struct soc_enum rdac2_mux_enum = SOC_ENUM_SINGLE( |
324 | CDC_D_CDC_CONN_HPHR_DAC_CTL, 0, 3, rdac2_mux_text); | 324 | CDC_D_CDC_CONN_HPHR_DAC_CTL, 0, 2, rdac2_mux_text); |
325 | 325 | ||
326 | static const struct snd_kcontrol_new spkr_switch[] = { | 326 | static const struct snd_kcontrol_new spkr_switch[] = { |
327 | SOC_DAPM_SINGLE("Switch", CDC_A_SPKR_DAC_CTL, 7, 1, 0) | 327 | SOC_DAPM_SINGLE("Switch", CDC_A_SPKR_DAC_CTL, 7, 1, 0) |
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index 61226fefe1c4..2a4ffe945177 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c | |||
@@ -555,10 +555,6 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) | |||
555 | return PTR_ERR(priv->clk); | 555 | return PTR_ERR(priv->clk); |
556 | } | 556 | } |
557 | 557 | ||
558 | err = clk_prepare_enable(priv->clk); | ||
559 | if (err < 0) | ||
560 | return err; | ||
561 | |||
562 | priv->extclk = devm_clk_get(&pdev->dev, "extclk"); | 558 | priv->extclk = devm_clk_get(&pdev->dev, "extclk"); |
563 | if (IS_ERR(priv->extclk)) { | 559 | if (IS_ERR(priv->extclk)) { |
564 | if (PTR_ERR(priv->extclk) == -EPROBE_DEFER) | 560 | if (PTR_ERR(priv->extclk) == -EPROBE_DEFER) |
@@ -574,6 +570,10 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) | |||
574 | } | 570 | } |
575 | } | 571 | } |
576 | 572 | ||
573 | err = clk_prepare_enable(priv->clk); | ||
574 | if (err < 0) | ||
575 | return err; | ||
576 | |||
577 | /* Some sensible defaults - this reflects the powerup values */ | 577 | /* Some sensible defaults - this reflects the powerup values */ |
578 | priv->ctl_play = KIRKWOOD_PLAYCTL_SIZE_24; | 578 | priv->ctl_play = KIRKWOOD_PLAYCTL_SIZE_24; |
579 | priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; | 579 | priv->ctl_rec = KIRKWOOD_RECCTL_SIZE_24; |
@@ -587,7 +587,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) | |||
587 | priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_128; | 587 | priv->ctl_rec |= KIRKWOOD_RECCTL_BURST_128; |
588 | } | 588 | } |
589 | 589 | ||
590 | err = devm_snd_soc_register_component(&pdev->dev, &kirkwood_soc_component, | 590 | err = snd_soc_register_component(&pdev->dev, &kirkwood_soc_component, |
591 | soc_dai, 2); | 591 | soc_dai, 2); |
592 | if (err) { | 592 | if (err) { |
593 | dev_err(&pdev->dev, "snd_soc_register_component failed\n"); | 593 | dev_err(&pdev->dev, "snd_soc_register_component failed\n"); |
@@ -610,6 +610,7 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev) | |||
610 | { | 610 | { |
611 | struct kirkwood_dma_data *priv = dev_get_drvdata(&pdev->dev); | 611 | struct kirkwood_dma_data *priv = dev_get_drvdata(&pdev->dev); |
612 | 612 | ||
613 | snd_soc_unregister_component(&pdev->dev); | ||
613 | if (!IS_ERR(priv->extclk)) | 614 | if (!IS_ERR(priv->extclk)) |
614 | clk_disable_unprepare(priv->extclk); | 615 | clk_disable_unprepare(priv->extclk); |
615 | clk_disable_unprepare(priv->clk); | 616 | clk_disable_unprepare(priv->clk); |
diff --git a/sound/soc/rockchip/rockchip_max98090.c b/sound/soc/rockchip/rockchip_max98090.c index 0097df1fae66..e80b09143b63 100644 --- a/sound/soc/rockchip/rockchip_max98090.c +++ b/sound/soc/rockchip/rockchip_max98090.c | |||
@@ -66,10 +66,13 @@ static int rk_jack_event(struct notifier_block *nb, unsigned long event, | |||
66 | struct snd_soc_jack *jack = (struct snd_soc_jack *)data; | 66 | struct snd_soc_jack *jack = (struct snd_soc_jack *)data; |
67 | struct snd_soc_dapm_context *dapm = &jack->card->dapm; | 67 | struct snd_soc_dapm_context *dapm = &jack->card->dapm; |
68 | 68 | ||
69 | if (event & SND_JACK_MICROPHONE) | 69 | if (event & SND_JACK_MICROPHONE) { |
70 | snd_soc_dapm_force_enable_pin(dapm, "MICBIAS"); | 70 | snd_soc_dapm_force_enable_pin(dapm, "MICBIAS"); |
71 | else | 71 | snd_soc_dapm_force_enable_pin(dapm, "SHDN"); |
72 | } else { | ||
72 | snd_soc_dapm_disable_pin(dapm, "MICBIAS"); | 73 | snd_soc_dapm_disable_pin(dapm, "MICBIAS"); |
74 | snd_soc_dapm_disable_pin(dapm, "SHDN"); | ||
75 | } | ||
73 | 76 | ||
74 | snd_soc_dapm_sync(dapm); | 77 | snd_soc_dapm_sync(dapm); |
75 | 78 | ||
diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c index 0324a5c39619..28f65eba2bb4 100644 --- a/sound/soc/sh/rcar/dma.c +++ b/sound/soc/sh/rcar/dma.c | |||
@@ -508,10 +508,10 @@ static struct rsnd_mod_ops rsnd_dmapp_ops = { | |||
508 | #define RDMA_SSI_I_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8) | 508 | #define RDMA_SSI_I_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0x8) |
509 | #define RDMA_SSI_O_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc) | 509 | #define RDMA_SSI_O_N(addr, i) (addr ##_reg - 0x00300000 + (0x40 * i) + 0xc) |
510 | 510 | ||
511 | #define RDMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400)) | 511 | #define RDMA_SSIU_I_N(addr, i, j) (addr ##_reg - 0x00441000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) * ((j) / 4))) |
512 | #define RDMA_SSIU_O_N(addr, i, j) RDMA_SSIU_I_N(addr, i, j) | 512 | #define RDMA_SSIU_O_N(addr, i, j) RDMA_SSIU_I_N(addr, i, j) |
513 | 513 | ||
514 | #define RDMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400)) | 514 | #define RDMA_SSIU_I_P(addr, i, j) (addr ##_reg - 0x00141000 + (0x1000 * (i)) + (((j) / 4) * 0xA000) + (((j) % 4) * 0x400) - (0x4000 * ((i) / 9) * ((j) / 4))) |
515 | #define RDMA_SSIU_O_P(addr, i, j) RDMA_SSIU_I_P(addr, i, j) | 515 | #define RDMA_SSIU_O_P(addr, i, j) RDMA_SSIU_I_P(addr, i, j) |
516 | 516 | ||
517 | #define RDMA_SRC_I_N(addr, i) (addr ##_reg - 0x00500000 + (0x400 * i)) | 517 | #define RDMA_SRC_I_N(addr, i) (addr ##_reg - 0x00500000 + (0x400 * i)) |
diff --git a/sound/soc/sof/debug.c b/sound/soc/sof/debug.c index 54cd431faab7..5529e8eeca46 100644 --- a/sound/soc/sof/debug.c +++ b/sound/soc/sof/debug.c | |||
@@ -152,8 +152,10 @@ static ssize_t sof_dfsentry_write(struct file *file, const char __user *buffer, | |||
152 | */ | 152 | */ |
153 | dentry = file->f_path.dentry; | 153 | dentry = file->f_path.dentry; |
154 | if (strcmp(dentry->d_name.name, "ipc_flood_count") && | 154 | if (strcmp(dentry->d_name.name, "ipc_flood_count") && |
155 | strcmp(dentry->d_name.name, "ipc_flood_duration_ms")) | 155 | strcmp(dentry->d_name.name, "ipc_flood_duration_ms")) { |
156 | return -EINVAL; | 156 | ret = -EINVAL; |
157 | goto out; | ||
158 | } | ||
157 | 159 | ||
158 | if (!strcmp(dentry->d_name.name, "ipc_flood_duration_ms")) | 160 | if (!strcmp(dentry->d_name.name, "ipc_flood_duration_ms")) |
159 | flood_duration_test = true; | 161 | flood_duration_test = true; |
diff --git a/sound/soc/sof/intel/hda-stream.c b/sound/soc/sof/intel/hda-stream.c index 2c7447188402..0c11fceb28a7 100644 --- a/sound/soc/sof/intel/hda-stream.c +++ b/sound/soc/sof/intel/hda-stream.c | |||
@@ -190,7 +190,7 @@ hda_dsp_stream_get(struct snd_sof_dev *sdev, int direction) | |||
190 | * Workaround to address a known issue with host DMA that results | 190 | * Workaround to address a known issue with host DMA that results |
191 | * in xruns during pause/release in capture scenarios. | 191 | * in xruns during pause/release in capture scenarios. |
192 | */ | 192 | */ |
193 | if (!IS_ENABLED(SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1)) | 193 | if (!IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1)) |
194 | if (stream && direction == SNDRV_PCM_STREAM_CAPTURE) | 194 | if (stream && direction == SNDRV_PCM_STREAM_CAPTURE) |
195 | snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, | 195 | snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, |
196 | HDA_VS_INTEL_EM2, | 196 | HDA_VS_INTEL_EM2, |
@@ -228,7 +228,7 @@ int hda_dsp_stream_put(struct snd_sof_dev *sdev, int direction, int stream_tag) | |||
228 | spin_unlock_irq(&bus->reg_lock); | 228 | spin_unlock_irq(&bus->reg_lock); |
229 | 229 | ||
230 | /* Enable DMI L1 entry if there are no capture streams open */ | 230 | /* Enable DMI L1 entry if there are no capture streams open */ |
231 | if (!IS_ENABLED(SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1)) | 231 | if (!IS_ENABLED(CONFIG_SND_SOC_SOF_HDA_ALWAYS_ENABLE_DMI_L1)) |
232 | if (!active_capture_stream) | 232 | if (!active_capture_stream) |
233 | snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, | 233 | snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, |
234 | HDA_VS_INTEL_EM2, | 234 | HDA_VS_INTEL_EM2, |
diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c index b2f359d2f7e5..086eeeab8679 100644 --- a/sound/soc/sof/ipc.c +++ b/sound/soc/sof/ipc.c | |||
@@ -572,8 +572,10 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev, | |||
572 | else | 572 | else |
573 | err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata, | 573 | err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata, |
574 | sparams); | 574 | sparams); |
575 | if (err < 0) | 575 | if (err < 0) { |
576 | kfree(partdata); | ||
576 | return err; | 577 | return err; |
578 | } | ||
577 | 579 | ||
578 | msg_bytes = sparams->msg_bytes; | 580 | msg_bytes = sparams->msg_bytes; |
579 | pl_size = sparams->pl_size; | 581 | pl_size = sparams->pl_size; |
diff --git a/sound/soc/sof/topology.c b/sound/soc/sof/topology.c index 0aabb3190ddc..4452594c2e17 100644 --- a/sound/soc/sof/topology.c +++ b/sound/soc/sof/topology.c | |||
@@ -543,15 +543,16 @@ static int sof_control_load_bytes(struct snd_soc_component *scomp, | |||
543 | struct soc_bytes_ext *sbe = (struct soc_bytes_ext *)kc->private_value; | 543 | struct soc_bytes_ext *sbe = (struct soc_bytes_ext *)kc->private_value; |
544 | int max_size = sbe->max; | 544 | int max_size = sbe->max; |
545 | 545 | ||
546 | if (le32_to_cpu(control->priv.size) > max_size) { | 546 | /* init the get/put bytes data */ |
547 | scontrol->size = sizeof(struct sof_ipc_ctrl_data) + | ||
548 | le32_to_cpu(control->priv.size); | ||
549 | |||
550 | if (scontrol->size > max_size) { | ||
547 | dev_err(sdev->dev, "err: bytes data size %d exceeds max %d.\n", | 551 | dev_err(sdev->dev, "err: bytes data size %d exceeds max %d.\n", |
548 | control->priv.size, max_size); | 552 | scontrol->size, max_size); |
549 | return -EINVAL; | 553 | return -EINVAL; |
550 | } | 554 | } |
551 | 555 | ||
552 | /* init the get/put bytes data */ | ||
553 | scontrol->size = sizeof(struct sof_ipc_ctrl_data) + | ||
554 | le32_to_cpu(control->priv.size); | ||
555 | scontrol->control_data = kzalloc(max_size, GFP_KERNEL); | 556 | scontrol->control_data = kzalloc(max_size, GFP_KERNEL); |
556 | cdata = scontrol->control_data; | 557 | cdata = scontrol->control_data; |
557 | if (!scontrol->control_data) | 558 | if (!scontrol->control_data) |
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c index a4060813bc74..48e629ac2d88 100644 --- a/sound/soc/stm/stm32_sai_sub.c +++ b/sound/soc/stm/stm32_sai_sub.c | |||
@@ -1218,6 +1218,16 @@ static int stm32_sai_pcm_process_spdif(struct snd_pcm_substream *substream, | |||
1218 | return 0; | 1218 | return 0; |
1219 | } | 1219 | } |
1220 | 1220 | ||
1221 | /* No support of mmap in S/PDIF mode */ | ||
1222 | static const struct snd_pcm_hardware stm32_sai_pcm_hw_spdif = { | ||
1223 | .info = SNDRV_PCM_INFO_INTERLEAVED, | ||
1224 | .buffer_bytes_max = 8 * PAGE_SIZE, | ||
1225 | .period_bytes_min = 1024, | ||
1226 | .period_bytes_max = PAGE_SIZE, | ||
1227 | .periods_min = 2, | ||
1228 | .periods_max = 8, | ||
1229 | }; | ||
1230 | |||
1221 | static const struct snd_pcm_hardware stm32_sai_pcm_hw = { | 1231 | static const struct snd_pcm_hardware stm32_sai_pcm_hw = { |
1222 | .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP, | 1232 | .info = SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP, |
1223 | .buffer_bytes_max = 8 * PAGE_SIZE, | 1233 | .buffer_bytes_max = 8 * PAGE_SIZE, |
@@ -1270,7 +1280,7 @@ static const struct snd_dmaengine_pcm_config stm32_sai_pcm_config = { | |||
1270 | }; | 1280 | }; |
1271 | 1281 | ||
1272 | static const struct snd_dmaengine_pcm_config stm32_sai_pcm_config_spdif = { | 1282 | static const struct snd_dmaengine_pcm_config stm32_sai_pcm_config_spdif = { |
1273 | .pcm_hardware = &stm32_sai_pcm_hw, | 1283 | .pcm_hardware = &stm32_sai_pcm_hw_spdif, |
1274 | .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config, | 1284 | .prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config, |
1275 | .process = stm32_sai_pcm_process_spdif, | 1285 | .process = stm32_sai_pcm_process_spdif, |
1276 | }; | 1286 | }; |
diff --git a/sound/soc/ti/sdma-pcm.c b/sound/soc/ti/sdma-pcm.c index a236350beb10..2b0bc234e1b6 100644 --- a/sound/soc/ti/sdma-pcm.c +++ b/sound/soc/ti/sdma-pcm.c | |||
@@ -62,7 +62,7 @@ int sdma_pcm_platform_register(struct device *dev, | |||
62 | config->chan_names[0] = txdmachan; | 62 | config->chan_names[0] = txdmachan; |
63 | config->chan_names[1] = rxdmachan; | 63 | config->chan_names[1] = rxdmachan; |
64 | 64 | ||
65 | return devm_snd_dmaengine_pcm_register(dev, config, 0); | 65 | return devm_snd_dmaengine_pcm_register(dev, config, flags); |
66 | } | 66 | } |
67 | EXPORT_SYMBOL_GPL(sdma_pcm_platform_register); | 67 | EXPORT_SYMBOL_GPL(sdma_pcm_platform_register); |
68 | 68 | ||