[alsa-devel] [PATCH] ALSA: usb-audio: fix Line6 Helix audio format rates
nick83ola
nick83ola at gmail.com
Wed Jul 3 09:41:00 CEST 2019
On Tue 2 Jul 2019, 16:57 Takashi Iwai, <tiwai at suse.de> wrote:
> On Tue, 02 Jul 2019 17:52:01 +0200,
> Wasko, Michal wrote:
> >
> > On 7/2/2019 4:37 PM, Takashi Iwai wrote:
> > > On Tue, 02 Jul 2019 02:43:14 +0200,
> > > Nicola Lunghi wrote:
> > >> Line6 Helix and HX stomp don't support retrieving
> > >> the number of clock sample rate.
> > >>
> > >> Add a quirk to return the default value of 48Khz.
> > >>
> > >> Signed-off-by: Nicola Lunghi <nick83ola at gmail.com>
> > > It's not particularly good place to put a quirk, but there seems no
> > > other better place, unfortunately.
If you prefer I can add a function to quirk.c
Is this specific to certain unit
> > > or all I/Os on the device suffer from this problem?
>
This is specific to the helix line of line6
There are currently 4 devices in that line that I think shared their
firmware more or less.
Unfortunately I have only one device to test here (but maybe someone else
can add the others)
> >
> > > In anyway, if the behavior is expected, we don't need to use
> > > dev_warn() to annoy users unnecessarily. Replace it with dev_info().
> > >
Ok
> > Also, the code that creates a single 48k entry would be better to be
> > > put into a function for readability.
> > >
> > > Could you resubmit with that change?
> > >
>
Yes (in quirks.c or here?)
Also I suspect that there' s a way to get the clock rates because windows
driver supports getting the rates and switching (and in Mac the device has
the same problem without a custom driver only supports 48khz)
> >
> > > Thanks!
> > >
> > > Takashi
> >
>
Thank you
> If the listed USB devices do not support sample rate format retrieval
> > then maybe it would be a better idea to perform below check before
> > sending message?
>
> Yes, if we know that it always fails, we don't need to query.
>
Sorry I don't understand this :-)
My idea is that if line6 in the future fixes their code (they are quite
active on the helix line) the call will not fail and we get a proper device
without quirks.
But If the driver fail to get the clock this settings works as a "failsafe"
and get the device working.
I also tried to contact their support but they don't care a lot about Linux
for now :-(
I will clean this better and resubmit
Thank you
Nick
>
> > Have you also considered new function or macro that check device
> > support? This would separate formatfunctionality code from routine
> > that identifies applicable devices- in case if in future more devices
> > will require quirk.
>
> The split can be done later. It's always hard to know what kind of
> quirk would be needed in future. If any more devices show the same
> problem, we can reorganize the quirk in a saner way.
>
>
> thanks,
>
> Takashi
>
>
>
>
> >
> > Michal W.
> >
> > >> ---
> > >> sound/usb/format.c | 28 +++++++++++++++++++++++++---
> > >> 1 file changed, 25 insertions(+), 3 deletions(-)
> > >>
> > >> diff --git a/sound/usb/format.c b/sound/usb/format.c
> > >> index c02b51a82775..05442f6ada62 100644
> > >> --- a/sound/usb/format.c
> > >> +++ b/sound/usb/format.c
> > >> @@ -313,10 +313,32 @@ static int parse_audio_format_rates_v2v3(struct
> snd_usb_audio *chip,
> > >> tmp, sizeof(tmp));
> > >> if (ret < 0) {
> > >> - dev_err(&dev->dev,
> > >> - "%s(): unable to retrieve number of sample rates
> (clock %d)\n",
> > >> + switch (chip->usb_id) {
> > >> + /* LINE 6 HX pedals don't support getting the clock sample
> rate.
> > >> + * Set the framerate to 48khz by default
> > >> + */
> > >> + case USB_ID(0x0E41, 0x4244): /* HELIX */
> > >> + case USB_ID(0x0E41, 0x4246): /* HX STOMP */
> > >> + dev_warn(&dev->dev,
> > >> + "%s(): line6 helix: unable to retrieve
> number of sample rates. Set it to default value (clock %d).\n",
> > >> __func__, clock);
> > >> - goto err;
> > >> + fp->nr_rates = 1;
> > >> + fp->rate_min = 48000;
> > >> + fp->rate_max = 48000;
> > >> + fp->rates = SNDRV_PCM_RATE_48000;
> > >> + fp->rate_table = kmalloc(sizeof(int), GFP_KERNEL);
> > >> + if (!fp->rate_table) {
> > >> + ret = -ENOMEM;
> > >> + goto err_free;
> > >> + }
> > >> + fp->rate_table[0] = 48000;
> > >> + return 0;
> > >> + default:
> > >> + dev_err(&dev->dev,
> > >> + "%s(): unable to retrieve number of sample
> rates (clock %d)\n",
> > >> + __func__, clock);
> > >> + goto err;
> > >> + }
> > >> }
> > >> nr_triplets = (tmp[1] << 8) | tmp[0];
> > >> --
> > >> 2.19.1
> > >>
> > >>
> > > _______________________________________________
> > > Alsa-devel mailing list
> > > Alsa-devel at alsa-project.org
> > > https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> > >
> >
>
More information about the Alsa-devel
mailing list