Hi Takashi,
Yes.
To issue SAMPLING_FREQ_CONTROL USB request two times is root cause of this issue.
K5.15 new behavior snd_usb_hw_params -> configure_endpoints() -> issue SAMPLING_FREQ_CONTROL USB request
Thanks
On Mon, 2022-08-29 at 10:06 +0200, Takashi Iwai wrote:
On Mon, 29 Aug 2022 09:56:42 +0200, chihhao chen wrote:
Hi Takashi,
Because of this problem, is it okay to remove configure_endpoints function call in snd_usb_hw_params?
Then configure_endpoints would be called in snd_usb_pcm_prepare and USB control transfers become the same as which in kernel-5.10. There will be only one SAMPLING_FREQ_CONTROL request and no sound-missing phenomenon.
Are you sure that removing the configure_endpoints() fixes the problem?
Takashi
Thanks
On Mon, 2022-08-22 at 08:57 -0300, Geraldo Nascimento wrote:
On Mon, Aug 22, 2022 at 04:06:58PM +0800, chihhao chen wrote:
I am testing many headsets on Android platform with different kernel versions.
On kernel-5.10, calling sequence for playback is
- snd_usb_hw_params -> set highest sampling rate, no
SAMPLING_FREQ_CONTROL USB request sent in this stage 2. snd_pcm_release 3. snd_usb_hw_params -> set proper sampling rate, still no SAMPLING_FREQ_CONTROL USB request 4. snd_usb_pcm_parepare -> in configure_endpoint SAMPLING_FREQ_CONTROL USB request was sent on USB bus
With the same calling sequence, a slightly behavior change on kernel- 5.15 is
- snd_usb_hw_params -> set highest sampling rate,
SAMPLING_FREQ_CONTROL USB request was sent on USB bus 2. snd_pcm_release 3. snd_usb_hw_params -> set proper sampling rate, SAMPLING_FREQ_CONTROL USB request was sent too (because configure_endpoint was moved to snd_usb_hw_params function) 4. snd_usb_pcm_parepare -> no SAMPLING_FREQ_CONTROL USB request because of USB EP flag check
I checked all USB packets and confirmed audio data output was correct. But there may be missing sound problem for the first sound with many headsets (for example Samsung headset). I found this issue is related to two-times sampling rate set request. (I tried to forcibly skip first USB request, everything became okay.) So do you guys know why configure_endpoint was moved to snd_usb_hw_params?
Hi Chihhao,
the commit you're looking for is bf6313a0ff766925462e97b4e733d5952de02367 ("ALSA: usb-audio: Refactor endpoint management")
Good luck, Geraldo Nascimento
Or could you provide patch for this problem?
Many thanks Chihhao