On Fri, 25 Aug 2017 10:44:00 +0200, Kuninori Morimoto wrote:
Hi Mark, Takashi-san
--- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2632,6 +2632,16 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream) return ret; }
+static void soc_pcm_private_free(struct snd_pcm *pcm) +{
- struct snd_soc_pcm_runtime *rtd = pcm->private_data;
- struct snd_soc_platform *platform = rtd->platform;
- flush_delayed_work(&rtd->delayed_work);
- if (platform->driver->pcm_free)
if (platform->driver->pcm_free(pcm);
+}
/* create a new pcm */ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) { @@ -2757,7 +2767,7 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) } }
- pcm->private_free = platform->driver->pcm_free;
- pcm->private_free = soc_pcm_private_free;
Thanks ! I confirmed that this solved my issue from kernel Oops.
- Renesas Lager board
- Renesas R-Car Salvator-X board
Reported-by: Hiep Cao Minh cm-hiep@jinso.co.jp Reported-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Tested-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
OK, I'll cook up a proper patch and submit soon later.
Mark
If above patch was added, my current posted patch # ASoC: add Component level pcm_new/pcm_free v2 # Date: Tue, 08 Aug 2017 15:12:06 +0900 will have conflict. Then I can re-post it. Please let me know if your review was finished.
/* * custom kernel for avoiding close_delayed_work() */
aplay xxx.wav & echo xxxx > /sys/bus/platform/drivers/rcar_sound/unbind
/* unbind codec and card drivers here */
/* * try re-bind */ /* re-bind codec and card drivers here */
echo xxxx > /sys/bus/platform/drivers/rcar_sound/bind
rcar_sound ec500000.sound: probed asoc-simple-card sound: ak4613-hifi <-> ec500000.sound mapping ok
aplay xxx.wav
Playing WAVE '/home/Calm_16bit_48k.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo ALSA lib pcm_params.c:2162:(snd1_pcm_hw_refine_slave) Slave PCM not usable aplay: set_params:1204: Broken configuration for this PCM: no configurations available
Do you know why or have hint to solve these issue ?
It's hard to say only from that... But judging from your description, it must be relevant with the stale DAPM setup that was left untouched at the previous driver unbind? That is, the driver doesn't fully initialize the hardware at probe.
Thanks. I noticed that my one board could re-bind without issue, but one board had issue. I want to debug it. Do you know which function returns error to user side ? # set_params is only used on soc-compress, but my driver doesn't use it.
You can try tracing that was recently added by Sakamoto-san. The error comes from the unavailable hw_params, that is, some hw_params setup narrowed too much.
Or, if it's about DPCM, it can be due to some stale setup in BE. What if you unload/reload the modules, not only rebind?
Takashi