[alsa-devel] [PATCH v2 2/3] ALSA: seq: Avoid open-code for getting timer resolution

Takashi Iwai tiwai at suse.de
Thu May 31 19:38:22 CEST 2018


On Thu, 31 May 2018 19:18:53 +0200,
Ben Hutchings wrote:
> 
> On Thu, 2018-05-17 at 10:49 +0200, Takashi Iwai wrote:
> > Instead of open-coding for getting the timer resolution, use the
> > standard snd_timer_resolution() helper.
> > 
> > The original code falls back to the callback function when the
> > resolution is zero, but it must be always so when the callback
> > function is defined.  So this should be no functional change.
> 
> Maybe it *should* be so, but I can see three drivers where it isn't:
> 
> sound/isa/ad1816a/ad1816a_lib.c
> sound/isa/wss/wss_lib.c
> sound/sparc/cs4231.c
> 
> For ad1816a_lib.c, the c_resolution implementation always returns the
> same value that's in resolution, so this really doesn't make a
> functional change.
> 
> However, for the other two, the c_resolution implementation can return
> several different values.

A good point.  This implies that the patch fixes a long-standing issue
:)

The ALSA timer API is very rarely used, however, maybe the only real
application is the alsa-lib dmix/dsnoop.  And the h/w resolution
doesn't matter in that case (as it's deploying only the PCM slave
timer), I don't think we'd hit any issues, practically seen.


thanks,

Takashi

> 
> Ben.
> 
> > Signed-off-by: Takashi Iwai <tiwai at suse.de>
> > ---
> >  sound/core/seq/seq_timer.c | 4 +---
> >  1 file changed, 1 insertion(+), 3 deletions(-)
> > 
> > diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
> > index 23167578231f..f587d0e27476 100644
> > --- a/sound/core/seq/seq_timer.c
> > +++ b/sound/core/seq/seq_timer.c
> > @@ -371,9 +371,7 @@ static int initialize_timer(struct snd_seq_timer *tmr)
> >  
> >  	tmr->ticks = 1;
> >  	if (!(t->hw.flags & SNDRV_TIMER_HW_SLAVE)) {
> > -		unsigned long r = t->hw.resolution;
> > -		if (! r && t->hw.c_resolution)
> > -			r = t->hw.c_resolution(t);
> > +		unsigned long r = snd_timer_resolution(tmr->timeri);
> >  		if (r) {
> >  			tmr->ticks = (unsigned int)(1000000000uL / (r * freq));
> >  			if (! tmr->ticks)
> -- 
> Ben Hutchings, Software Developer                         Codethink Ltd
> https://www.codethink.co.uk/                 Dale House, 35 Dale Street
>                                      Manchester, M1 2HF, United Kingdom
> 


More information about the Alsa-devel mailing list