diff mbox series

[1/1] bat: Fix buffer time configuration

Message ID 20250410110120.1997264-1-alexander.stein@ew.tq-group.com
State New
Headers show
Series [1/1] bat: Fix buffer time configuration | expand

Commit Message

Alexander Stein April 10, 2025, 11:01 a.m. UTC
By swapping time configuration some hardware constraints can be supported.
Fixes the error: Set parameter to device error: buffer time: 500000
hw:tqmtlv320aic32: Invalid argument(-22)

Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
---
Our common 'alsabat -Dhw:tqmtlv320aic32 -f S16_LE -c 2 -r 44100 -F 997:500'
failed ona i.MX95 based platform, while it worked flawlessly on others,
e.g. i.MX8M Plus. Upon searching I stumbled across [1], which this patch
is inspired/based on.

[1] https://github.com/arkq/bluez-alsa/pull/290/commits/da78b82ff77310093b4b4a914d31e69b8ebb49eb
---
 bat/alsa.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

Comments

Alexander Stein May 16, 2025, 8:41 a.m. UTC | #1
Hi,

Am Donnerstag, 10. April 2025, 13:01:19 CEST schrieb Alexander Stein:
> By swapping time configuration some hardware constraints can be supported.
> Fixes the error: Set parameter to device error: buffer time: 500000
> hw:tqmtlv320aic32: Invalid argument(-22)
> 
> Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>

Any feedback here? Or should I create a PR on github instead?

Thanks and best regards
Alexander
> ---
> Our common 'alsabat -Dhw:tqmtlv320aic32 -f S16_LE -c 2 -r 44100 -F 997:500'
> failed ona i.MX95 based platform, while it worked flawlessly on others,
> e.g. i.MX8M Plus. Upon searching I stumbled across [1], which this patch
> is inspired/based on.
> 
> [1] https://github.com/arkq/bluez-alsa/pull/290/commits/da78b82ff77310093b4b4a914d31e69b8ebb49eb
> ---
>  bat/alsa.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/bat/alsa.c b/bat/alsa.c
> index 67489c4..457e79a 100644
> --- a/bat/alsa.c
> +++ b/bat/alsa.c
> @@ -221,23 +221,23 @@ static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm)
>  
>  		period_time = buffer_time / DIV_BUFFERTIME;
>  
> -		/* Set buffer time and period time */
> -		err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle,
> -				params, &buffer_time, 0);
> +		/* Set period time and buffer time */
> +		err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle,
> +			params, &period_time, 0);
>  		if (err < 0) {
>  			fprintf(bat->err, _("Set parameter to device error: "));
> -			fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"),
> -					buffer_time,
> +			fprintf(bat->err, _("period time: %d %s: %s(%d)\n"),
> +					period_time,
>  					device_name, snd_strerror(err), err);
>  			return err;
>  		}
>  
> -		err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle,
> -				params, &period_time, 0);
> +		err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle,
> +				params, &buffer_time, 0);
>  		if (err < 0) {
>  			fprintf(bat->err, _("Set parameter to device error: "));
> -			fprintf(bat->err, _("period time: %d %s: %s(%d)\n"),
> -					period_time,
> +			fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"),
> +					buffer_time,
>  					device_name, snd_strerror(err), err);
>  			return err;
>  		}
>
Takashi Iwai May 16, 2025, 9:17 a.m. UTC | #2
On Fri, 16 May 2025 10:41:05 +0200,
Alexander Stein wrote:
> 
> Hi,
> 
> Am Donnerstag, 10. April 2025, 13:01:19 CEST schrieb Alexander Stein:
> > By swapping time configuration some hardware constraints can be supported.
> > Fixes the error: Set parameter to device error: buffer time: 500000
> > hw:tqmtlv320aic32: Invalid argument(-22)
> > 
> > Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
> 
> Any feedback here? Or should I create a PR on github instead?

Sorry, it was just overlooked.
Now applied the patch.  Thanks!


Takashi
diff mbox series

Patch

diff --git a/bat/alsa.c b/bat/alsa.c
index 67489c4..457e79a 100644
--- a/bat/alsa.c
+++ b/bat/alsa.c
@@ -221,23 +221,23 @@  static int set_snd_pcm_params(struct bat *bat, struct pcm_container *sndpcm)
 
 		period_time = buffer_time / DIV_BUFFERTIME;
 
-		/* Set buffer time and period time */
-		err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle,
-				params, &buffer_time, 0);
+		/* Set period time and buffer time */
+		err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle,
+			params, &period_time, 0);
 		if (err < 0) {
 			fprintf(bat->err, _("Set parameter to device error: "));
-			fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"),
-					buffer_time,
+			fprintf(bat->err, _("period time: %d %s: %s(%d)\n"),
+					period_time,
 					device_name, snd_strerror(err), err);
 			return err;
 		}
 
-		err = snd_pcm_hw_params_set_period_time_near(sndpcm->handle,
-				params, &period_time, 0);
+		err = snd_pcm_hw_params_set_buffer_time_near(sndpcm->handle,
+				params, &buffer_time, 0);
 		if (err < 0) {
 			fprintf(bat->err, _("Set parameter to device error: "));
-			fprintf(bat->err, _("period time: %d %s: %s(%d)\n"),
-					period_time,
+			fprintf(bat->err, _("buffer time: %d %s: %s(%d)\n"),
+					buffer_time,
 					device_name, snd_strerror(err), err);
 			return err;
 		}