ASoC: wm_adsp: Use usleep_range for short delay
Subsystems (5)
PATCH v2 1/4 ASoC: wm_adsp: Use usleep_range for short delay
Replace the 1ms msleep in wm_adsp2_ena with a usleep_range, as per normal guidance on delay functions. Also tighten up the delay a little as 1ms was quite generous.
---
New since the first series of this patch chain.
sound/soc/codecs/wm_adsp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/wm_adsp.c +1 -1
@@ -2237,7 +2237,7 @@ static int wm_adsp2_ena(struct wm_adsp *dsp)if (val &ADSP2_RAM_RDY )break ; -msleep (1 ); +usleep_range (250 ,500 ); }if (!(val &ADSP2_RAM_RDY )) {
Signature · 1 line
2.1.4
PATCH v2 2/4 ASoC: wm_adsp: Put DSP into low power state between loading and running
Between when we load the DSP and when it actually starts running put the core into a lower power state where the memory is retained but nothing is clocked.
---
Changes since v1:
- Reuse wm_adsp2_ena when bringing the DSP back out of the low power state such that we wait for RAM ready again.
sound/soc/codecs/wm_adsp.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
sound/soc/codecs/wm_adsp.c +17 -1
@@ -2259,6 +2259,11 @@ static void wm_adsp2_boot_work(struct work_struct *work)mutex_lock (&dsp->pwr_lock); + ret =regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_MEM_ENA ,ADSP2_MEM_ENA ); +if (ret !=0 ) + goto err_mutex; + ret =wm_adsp2_ena (dsp);if (ret !=0 ) goto err_mutex;
@@ -2282,6 +2287,12 @@ static void wm_adsp2_boot_work(struct work_struct *work) dsp->booted = true; +/* Turn DSP back off until we are ready to run */ + ret =regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_SYS_ENA ,0 ); +if (ret !=0 ) + goto err_ena; +mutex_unlock (&dsp->pwr_lock);return ;
@@ -2344,6 +2355,10 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,if (!dsp->booted)return -EIO ; + ret =wm_adsp2_ena (dsp); +if (ret !=0 ) + goto err; +/* Sync set controls */ ret =wm_coeff_sync_controls (dsp);if (ret !=0 )
@@ -2382,7 +2397,8 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, dsp->booted = false;regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , -ADSP2_CORE_ENA |ADSP2_START ,0 ); +ADSP2_MEM_ENA |ADSP2_CORE_ENA |ADSP2_START , +0 );/* Make sure DMAs are quiesced */ regmap_write (dsp->regmap, dsp->base +ADSP2_RDMA_CONFIG_1 ,0 );
Signature · 1 line
2.1.4
Mark Brown
maintainerApplied "ASoC: wm_adsp: Put DSP into low power state between loading and running" to the asoc tree
The patch
ASoC: wm_adsp: Put DSP into low power state between loading and running
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
90d19ba54b428a6bc8cc51ef6c60c6e65e6e2f35Mon Sep 17 00:00:00 2001
From: Charles Keepax <[email protected]>
Date: Mon, 26 Sep 2016 10:15:23 +0100
Subject: [PATCH] ASoC: wm_adsp: Put DSP into low power state between loading
and running
Between when we load the DSP and when it actually starts running put the core into a lower power state where the memory is retained but nothing is clocked.
--- sound/soc/codecs/wm_adsp.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-)
sound/soc/codecs/wm_adsp.c +17 -1
@@ -2259,6 +2259,11 @@ static void wm_adsp2_boot_work(struct work_struct *work)mutex_lock (&dsp->pwr_lock); + ret =regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_MEM_ENA ,ADSP2_MEM_ENA ); +if (ret !=0 ) + goto err_mutex; + ret =wm_adsp2_ena (dsp);if (ret !=0 ) goto err_mutex;
@@ -2282,6 +2287,12 @@ static void wm_adsp2_boot_work(struct work_struct *work) dsp->booted = true; +/* Turn DSP back off until we are ready to run */ + ret =regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_SYS_ENA ,0 ); +if (ret !=0 ) + goto err_ena; +mutex_unlock (&dsp->pwr_lock);return ;
@@ -2344,6 +2355,10 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,if (!dsp->booted)return -EIO ; + ret =wm_adsp2_ena (dsp); +if (ret !=0 ) + goto err; +/* Sync set controls */ ret =wm_coeff_sync_controls (dsp);if (ret !=0 )
@@ -2382,7 +2397,8 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w, dsp->booted = false;regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , -ADSP2_CORE_ENA |ADSP2_START ,0 ); +ADSP2_MEM_ENA |ADSP2_CORE_ENA |ADSP2_START , +0 );/* Make sure DMAs are quiesced */ regmap_write (dsp->regmap, dsp->base +ADSP2_RDMA_CONFIG_1 ,0 );
Signature · 1 line
2.9.3
PATCH v2 3/4 ASoC: wm_adsp: Allow preloader to do the final shutdown of the DSP
In reply to Charles KeepaxThe booting process for the DSP is clearly separated into two parts, the preloader brings up the core and downloads code, then the main widget starts the code actually executing. However the shutdown sequence is all handled with the main widget.
To allow the preloading to be run independently of the main audio bring up it makes sense, and is generally just cleaner, for the preloader widget to shutdown those things it initialised. This patch moves the appropriate parts of the shutdown process into the preloader widget.
---
Changes since v1:
- Minor tweak to the debug messages
sound/soc/codecs/wm_adsp.c | 36 +++++++++++++++++++++--------------- sound/soc/codecs/wm_adsp.h | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-)
sound/soc/codecs/wm_adsp.c +21 -15
@@ -2323,6 +2323,7 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,struct snd_soc_codec *codec =snd_soc_dapm_to_codec (w->dapm);struct wm_adsp *dsps =snd_soc_codec_get_drvdata (codec);struct wm_adsp *dsp = &dsps[w->shift]; +struct wm_coeff_ctl *ctl; dsp->card = codec->component.card;
@@ -2331,6 +2332,24 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,wm_adsp2_set_dspclk (dsp, freq);queue_work (system_unbound_wq, &dsp->boot_work);break ; +case SND_SOC_DAPM_PRE_PMD : +wm_adsp_debugfs_clear (dsp); + + dsp->fw_id =0 ; + dsp->fw_id_version =0 ; + + dsp->booted = false; + +regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_MEM_ENA ,0 ); + +list_for_each_entry (ctl, &dsp->ctl_list, list) + ctl->enabled =0 ; + +wm_adsp_free_alg_regions (dsp); + +adsp_dbg (dsp,"Shutdown complete\n" ); +break ;default :break ; }
@@ -2345,7 +2364,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,struct snd_soc_codec *codec =snd_soc_dapm_to_codec (w->dapm);struct wm_adsp *dsps =snd_soc_codec_get_drvdata (codec);struct wm_adsp *dsp = &dsps[w->shift]; -struct wm_coeff_ctl *ctl;int ret;switch (event) {
@@ -2388,17 +2406,10 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,mutex_lock (&dsp->pwr_lock); -wm_adsp_debugfs_clear (dsp); - - dsp->fw_id =0 ; - dsp->fw_id_version =0 ; - dsp->running = false; - dsp->booted = false;regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , -ADSP2_MEM_ENA |ADSP2_CORE_ENA |ADSP2_START , -0 ); +ADSP2_CORE_ENA |ADSP2_START ,0 );/* Make sure DMAs are quiesced */ regmap_write (dsp->regmap, dsp->base +ADSP2_RDMA_CONFIG_1 ,0 );
@@ -2408,17 +2419,12 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL ,ADSP2_SYS_ENA ,0 ); -list_for_each_entry (ctl, &dsp->ctl_list, list) - ctl->enabled =0 ; - -wm_adsp_free_alg_regions (dsp); -if (wm_adsp_fw[dsp->fw].num_caps !=0 )wm_adsp_buffer_free (dsp);mutex_unlock (&dsp->pwr_lock); -adsp_dbg (dsp,"Shutdown complete\n" ); +adsp_dbg (dsp,"Execution stopped\n" );break ;default :
sound/soc/codecs/wm_adsp.h +1 -1
@@ -89,7 +89,7 @@ struct wm_adsp { #define WM_ADSP2(wname, num, event_fn) \ { .id = snd_soc_dapm_supply, .name = wname " Preloader", \ .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ - .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD, \ + .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \ .subseq = 100, /* Ensure we run after SYSCLK supply widget */ }, \ { .id = snd_soc_dapm_out_drv, .name = wname, \ .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \
Signature · 1 line
2.1.4
Mark Brown
maintainerApplied "ASoC: wm_adsp: Allow preloader to do the final shutdown of the DSP" to the asoc tree
The patch
ASoC: wm_adsp: Allow preloader to do the final shutdown of the DSP
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
57a60cc3616c8f5447d914b646a1d6df2ba9cc9dMon Sep 17 00:00:00 2001
From: Charles Keepax <[email protected]>
Date: Mon, 26 Sep 2016 10:15:24 +0100
Subject: [PATCH] ASoC: wm_adsp: Allow preloader to do the final shutdown of
the DSP
The booting process for the DSP is clearly separated into two parts, the preloader brings up the core and downloads code, then the main widget starts the code actually executing. However the shutdown sequence is all handled with the main widget.
To allow the preloading to be run independently of the main audio bring up it makes sense, and is generally just cleaner, for the preloader widget to shutdown those things it initialised. This patch moves the appropriate parts of the shutdown process into the preloader widget.
--- sound/soc/codecs/wm_adsp.c | 36 +++++++++++++++++++++--------------- sound/soc/codecs/wm_adsp.h | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-)
sound/soc/codecs/wm_adsp.c +21 -15
@@ -2323,6 +2323,7 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,struct snd_soc_codec *codec =snd_soc_dapm_to_codec (w->dapm);struct wm_adsp *dsps =snd_soc_codec_get_drvdata (codec);struct wm_adsp *dsp = &dsps[w->shift]; +struct wm_coeff_ctl *ctl; dsp->card = codec->component.card;
@@ -2331,6 +2332,24 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,wm_adsp2_set_dspclk (dsp, freq);queue_work (system_unbound_wq, &dsp->boot_work);break ; +case SND_SOC_DAPM_PRE_PMD : +wm_adsp_debugfs_clear (dsp); + + dsp->fw_id =0 ; + dsp->fw_id_version =0 ; + + dsp->booted = false; + +regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , +ADSP2_MEM_ENA ,0 ); + +list_for_each_entry (ctl, &dsp->ctl_list, list) + ctl->enabled =0 ; + +wm_adsp_free_alg_regions (dsp); + +adsp_dbg (dsp,"Shutdown complete\n" ); +break ;default :break ; }
@@ -2345,7 +2364,6 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,struct snd_soc_codec *codec =snd_soc_dapm_to_codec (w->dapm);struct wm_adsp *dsps =snd_soc_codec_get_drvdata (codec);struct wm_adsp *dsp = &dsps[w->shift]; -struct wm_coeff_ctl *ctl;int ret;switch (event) {
@@ -2388,17 +2406,10 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,mutex_lock (&dsp->pwr_lock); -wm_adsp_debugfs_clear (dsp); - - dsp->fw_id =0 ; - dsp->fw_id_version =0 ; - dsp->running = false; - dsp->booted = false;regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL , -ADSP2_MEM_ENA |ADSP2_CORE_ENA |ADSP2_START , -0 ); +ADSP2_CORE_ENA |ADSP2_START ,0 );/* Make sure DMAs are quiesced */ regmap_write (dsp->regmap, dsp->base +ADSP2_RDMA_CONFIG_1 ,0 );
@@ -2408,17 +2419,12 @@ int wm_adsp2_event(struct snd_soc_dapm_widget *w,regmap_update_bits (dsp->regmap, dsp->base +ADSP2_CONTROL ,ADSP2_SYS_ENA ,0 ); -list_for_each_entry (ctl, &dsp->ctl_list, list) - ctl->enabled =0 ; - -wm_adsp_free_alg_regions (dsp); -if (wm_adsp_fw[dsp->fw].num_caps !=0 )wm_adsp_buffer_free (dsp);mutex_unlock (&dsp->pwr_lock); -adsp_dbg (dsp,"Shutdown complete\n" ); +adsp_dbg (dsp,"Execution stopped\n" );break ;default :
sound/soc/codecs/wm_adsp.h +1 -1
@@ -89,7 +89,7 @@ struct wm_adsp { #define WM_ADSP2(wname, num, event_fn) \ { .id = snd_soc_dapm_supply, .name = wname " Preloader", \ .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ - .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD, \ + .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \ .subseq = 100, /* Ensure we run after SYSCLK supply widget */ }, \ { .id = snd_soc_dapm_out_drv, .name = wname, \ .reg = SND_SOC_NOPM, .shift = num, .event = wm_adsp2_event, \
Signature · 1 line
2.9.3
PATCH v2 4/4 ASoC: wm_adsp: Add mechanism to preload firmware on a core
In reply to Charles KeepaxAs requirements to bring up audio paths are continuous getting tighter and the DSP download to most ADSP devices happens over an external bus it can become an important factor in the path bring up time. As such sometimes it is a reasonable trade off to download the firmware ahead of when it will be required and take a small hit on power consumption for keeping the core powered up.
This "preloading" adds an additional control for each DSP core "DSPx Preload Switch" that when set to true will power up the DSP core and download the firmware currently selected in the "DSPx Firmware" control. Whilst the core is preloaded the current firmware can not be changed and the CODEC will be kept powered up and SYSCLK held on. Although future improvements may allow the SYSCLK to be powered down as well because the hardware only requires SYSCLK whilst the download is actually taking place, but this is not covered in this series.
---
No changes since v1.
sound/soc/codecs/arizona.h | 1 + sound/soc/codecs/cs47l24.c | 3 +++ sound/soc/codecs/wm5102.c | 2 ++ sound/soc/codecs/wm5110.c | 5 +++++ sound/soc/codecs/wm_adsp.c | 43 +++++++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/wm_adsp.h | 11 +++++++++++ 6 files changed, 65 insertions(+)
sound/soc/codecs/arizona.h +1 -0
@@ -191,6 +191,7 @@ extern unsigned int arizona_mixer_values[ARIZONA_NUM_MIXER_INPUTS];#define ARIZONA_DSP_ROUTES (name) \ { name, NULL, name " Preloader"}, \ { name " Preloader", NULL, "SYSCLK" }, \ + { name " Preload", NULL, name " Preloader"}, \ { name, NULL, name " Aux 1" }, \ { name, NULL, name " Aux 2" }, \ { name, NULL, name " Aux 3" }, \
sound/soc/codecs/cs47l24.c +3 -0
@@ -173,6 +173,9 @@ SOC_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),SOC_ENUM ("ISRC3 FSH" , arizona_isrc_fsh[2 ]),SOC_ENUM ("ASRC RATE 1" , arizona_asrc_rate1), +WM_ADSP2_PRELOAD_SWITCH ("DSP2" ,2 ), +WM_ADSP2_PRELOAD_SWITCH ("DSP3" ,3 ), +ARIZONA_MIXER_CONTROLS ("DSP2L" ,ARIZONA_DSP2LMIX_INPUT_1_SOURCE ),ARIZONA_MIXER_CONTROLS ("DSP2R" ,ARIZONA_DSP2RMIX_INPUT_1_SOURCE ), ARIZONA_MIXER_CONTROLS("DSP3L", ARIZONA_DSP3LMIX_INPUT_1_SOURCE),
sound/soc/codecs/wm5102.c +2 -0
@@ -855,6 +855,8 @@ ARIZONA_LHPF_CONTROL("LHPF2 Coefficients", ARIZONA_HPLPF2_2),ARIZONA_LHPF_CONTROL ("LHPF3 Coefficients" ,ARIZONA_HPLPF3_2 ),ARIZONA_LHPF_CONTROL ("LHPF4 Coefficients" ,ARIZONA_HPLPF4_2 ), +WM_ADSP2_PRELOAD_SWITCH ("DSP1" ,1 ), +ARIZONA_MIXER_CONTROLS ("DSP1L" ,ARIZONA_DSP1LMIX_INPUT_1_SOURCE ), ARIZONA_MIXER_CONTROLS("DSP1R", ARIZONA_DSP1RMIX_INPUT_1_SOURCE),
sound/soc/codecs/wm5110.c +5 -0
@@ -778,6 +778,11 @@ SOC_ENUM("ISRC2 FSH", arizona_isrc_fsh[1]),SOC_ENUM ("ISRC3 FSH" , arizona_isrc_fsh[2 ]),SOC_ENUM ("ASRC RATE 1" , arizona_asrc_rate1), +WM_ADSP2_PRELOAD_SWITCH ("DSP1" ,1 ), +WM_ADSP2_PRELOAD_SWITCH ("DSP2" ,2 ), +WM_ADSP2_PRELOAD_SWITCH ("DSP3" ,3 ), +WM_ADSP2_PRELOAD_SWITCH ("DSP4" ,4 ), +ARIZONA_MIXER_CONTROLS ("DSP1L" ,ARIZONA_DSP1LMIX_INPUT_1_SOURCE ),ARIZONA_MIXER_CONTROLS ("DSP1R" ,ARIZONA_DSP1RMIX_INPUT_1_SOURCE ), ARIZONA_MIXER_CONTROLS("DSP2L", ARIZONA_DSP2LMIX_INPUT_1_SOURCE),
sound/soc/codecs/wm_adsp.c +43 -0
55 lines not on this page · raw message
sound/soc/codecs/wm_adsp.h +11 -0
@@ -62,6 +62,7 @@ struct wm_adsp {int fw;int fw_ver; +bool preloaded;bool booted;bool running;
@@ -86,7 +87,12 @@ struct wm_adsp {SND_SOC_DAPM_PGA_E (wname,SND_SOC_NOPM , num,0 ,NULL ,0 , \ wm_adsp1_event, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD) +#define WM_ADSP2_PRELOAD_SWITCH (wname, num) \ + SOC_SINGLE_EXT(wname " Preload Switch", SND_SOC_NOPM, num, 1, 0, \ + wm_adsp2_preloader_get, wm_adsp2_preloader_put) +#define WM_ADSP2 (wname, num, event_fn) \ + SND_SOC_DAPM_SPK(wname " Preload", NULL), \ { .id = snd_soc_dapm_supply, .name = wname " Preloader", \ .reg = SND_SOC_NOPM, .shift = num, .event = event_fn, \ .event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD, \
@@ -110,6 +116,11 @@ int wm_adsp2_early_event(struct snd_soc_dapm_widget *w,int wm_adsp2_event (struct snd_soc_dapm_widget *w,struct snd_kcontrol *kcontrol,int event); +int wm_adsp2_preloader_get (struct snd_kcontrol *kcontrol, +struct snd_ctl_elem_value *ucontrol); +int wm_adsp2_preloader_put (struct snd_kcontrol *kcontrol, +struct snd_ctl_elem_value *ucontrol); +extern int wm_adsp_compr_open (struct wm_adsp *dsp,struct snd_compr_stream *stream);extern int wm_adsp_compr_free (struct snd_compr_stream *stream);
Signature · 1 line
2.1.4
Mark Brown
maintainerApplied "ASoC: wm_adsp: Use usleep_range for short delay" to the asoc tree
In reply to Charles KeepaxThe patch
ASoC: wm_adsp: Use usleep_range for short delay
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
1fa96f3fdad7cef5d043a502682580d2bc3d5aceMon Sep 17 00:00:00 2001
From: Charles Keepax <[email protected]>
Date: Mon, 26 Sep 2016 10:15:22 +0100
Subject: [PATCH] ASoC: wm_adsp: Use usleep_range for short delay
Replace the 1ms msleep in wm_adsp2_ena with a usleep_range, as per normal guidance on delay functions. Also tighten up the delay a little as 1ms was quite generous.
--- sound/soc/codecs/wm_adsp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/soc/codecs/wm_adsp.c +1 -1
@@ -2237,7 +2237,7 @@ static int wm_adsp2_ena(struct wm_adsp *dsp)if (val &ADSP2_RAM_RDY )break ; -msleep (1 ); +usleep_range (250 ,500 ); }if (!(val &ADSP2_RAM_RDY )) {
Signature · 1 line
2.9.3