* [PATCH 0/3] ALSA: USB-descriptor endianess fixes
@ 2017-05-12 10:28 Johan Hovold
2017-05-12 10:28 ` [PATCH 1/3] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts Johan Hovold
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Johan Hovold @ 2017-05-12 10:28 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai; +Cc: alsa-devel, Johan Hovold
These patches add missing endianness conversions when accessing the USB
device-descriptor fields. In the process, clean up the us122l driver
which had product-id conditionals sprinkled throughout.
The final patch drops the Kconfig dependency on x86 since it's a USB
driver that compiles just fine on non-x86. Perhaps this should be a
(X86 || COMPILE_TEST) dependency instead in case there are external
dependencies that warrants this limitation.
Note that these patches have only been compile-tested.
Johan
Johan Hovold (3):
ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts
ALSA: us122l: clean up US144 handling
ALSA: us122l: drop x86 dependency
sound/usb/Kconfig | 1 -
sound/usb/quirks.c | 2 +-
sound/usb/usx2y/us122l.c | 36 ++++++++++++++++++------------------
sound/usb/usx2y/us122l.h | 2 ++
4 files changed, 21 insertions(+), 20 deletions(-)
--
2.13.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/3] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts 2017-05-12 10:28 [PATCH 0/3] ALSA: USB-descriptor endianess fixes Johan Hovold @ 2017-05-12 10:28 ` Johan Hovold 2017-05-12 10:28 ` [PATCH 2/3] ALSA: us122l: clean up US144 handling Johan Hovold ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Johan Hovold @ 2017-05-12 10:28 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai; +Cc: alsa-devel, Johan Hovold, Jussi Laako Add missing endianness conversion when using the USB device-descriptor bcdDevice field when applying the Amanero Combo384 (endianness!) quirk. Fixes: 3eff682d765b ("ALSA: usb-audio: Support both DSD LE/BE Amanero firmware versions") Cc: Jussi Laako <jussi@sonarnerd.net> Signed-off-by: Johan Hovold <johan@kernel.org> --- sound/usb/quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c index 01eff6ce6401..d7b0b0a3a2db 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c @@ -1364,7 +1364,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, /* Amanero Combo384 USB interface with native DSD support */ case USB_ID(0x16d0, 0x071a): if (fp->altsetting == 2) { - switch (chip->dev->descriptor.bcdDevice) { + switch (le16_to_cpu(chip->dev->descriptor.bcdDevice)) { case 0x199: return SNDRV_PCM_FMTBIT_DSD_U32_LE; case 0x19b: -- 2.13.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/3] ALSA: us122l: clean up US144 handling 2017-05-12 10:28 [PATCH 0/3] ALSA: USB-descriptor endianess fixes Johan Hovold 2017-05-12 10:28 ` [PATCH 1/3] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts Johan Hovold @ 2017-05-12 10:28 ` Johan Hovold 2017-05-12 10:28 ` [PATCH 3/3] ALSA: us122l: drop x86 dependency Johan Hovold 2017-05-12 11:18 ` [PATCH 0/3] ALSA: USB-descriptor endianess fixes Takashi Iwai 3 siblings, 0 replies; 6+ messages in thread From: Johan Hovold @ 2017-05-12 10:28 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai; +Cc: alsa-devel, Johan Hovold Use the device-id table and a private flag to determine the device type (US122 or US144) rather than spreading product-id conditionals throughout the driver. This USB driver currently depends on X86 (why?), but we should still add the missing endianness conversions when accessing the USB device-descriptor fields. Compile-tested only. Signed-off-by: Johan Hovold <johan@kernel.org> --- sound/usb/usx2y/us122l.c | 36 ++++++++++++++++++------------------ sound/usb/usx2y/us122l.h | 2 ++ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c index e118bdca983d..a33e31b2fc2f 100644 --- a/sound/usb/usx2y/us122l.c +++ b/sound/usb/usx2y/us122l.c @@ -46,8 +46,10 @@ MODULE_PARM_DESC(id, "ID string for "NAME_ALLCAPS"."); module_param_array(enable, bool, NULL, 0444); MODULE_PARM_DESC(enable, "Enable "NAME_ALLCAPS"."); -static int snd_us122l_card_used[SNDRV_CARDS]; +/* driver_info flags */ +#define US122L_FLAG_US144 BIT(0) +static int snd_us122l_card_used[SNDRV_CARDS]; static int us122l_create_usbmidi(struct snd_card *card) { @@ -198,8 +200,7 @@ static int usb_stream_hwdep_open(struct snd_hwdep *hw, struct file *file) if (!us122l->first) us122l->first = file; - if (us122l->dev->descriptor.idProduct == USB_ID_US144 || - us122l->dev->descriptor.idProduct == USB_ID_US144MKII) { + if (us122l->is_us144) { iface = usb_ifnum_to_if(us122l->dev, 0); usb_autopm_get_interface(iface); } @@ -214,8 +215,7 @@ static int usb_stream_hwdep_release(struct snd_hwdep *hw, struct file *file) struct usb_interface *iface; snd_printdd(KERN_DEBUG "%p %p\n", hw, file); - if (us122l->dev->descriptor.idProduct == USB_ID_US144 || - us122l->dev->descriptor.idProduct == USB_ID_US144MKII) { + if (us122l->is_us144) { iface = usb_ifnum_to_if(us122l->dev, 0); usb_autopm_put_interface(iface); } @@ -483,8 +483,7 @@ static bool us122l_create_card(struct snd_card *card) int err; struct us122l *us122l = US122L(card); - if (us122l->dev->descriptor.idProduct == USB_ID_US144 || - us122l->dev->descriptor.idProduct == USB_ID_US144MKII) { + if (us122l->is_us144) { err = usb_set_interface(us122l->dev, 0, 1); if (err) { snd_printk(KERN_ERR "usb_set_interface error \n"); @@ -503,8 +502,7 @@ static bool us122l_create_card(struct snd_card *card) if (!us122l_start(us122l, 44100, 256)) return false; - if (us122l->dev->descriptor.idProduct == USB_ID_US144 || - us122l->dev->descriptor.idProduct == USB_ID_US144MKII) + if (us122l->is_us144) err = us144_create_usbmidi(card); else err = us122l_create_usbmidi(card); @@ -536,7 +534,8 @@ static void snd_us122l_free(struct snd_card *card) static int usx2y_create_card(struct usb_device *device, struct usb_interface *intf, - struct snd_card **cardp) + struct snd_card **cardp, + unsigned long flags) { int dev; struct snd_card *card; @@ -556,6 +555,7 @@ static int usx2y_create_card(struct usb_device *device, US122L(card)->dev = device; mutex_init(&US122L(card)->mutex); init_waitqueue_head(&US122L(card)->sk.sleep); + US122L(card)->is_us144 = flags & US122L_FLAG_US144; INIT_LIST_HEAD(&US122L(card)->midi_list); strcpy(card->driver, "USB "NAME_ALLCAPS""); sprintf(card->shortname, "TASCAM "NAME_ALLCAPS""); @@ -579,7 +579,7 @@ static int us122l_usb_probe(struct usb_interface *intf, struct snd_card *card; int err; - err = usx2y_create_card(device, intf, &card); + err = usx2y_create_card(device, intf, &card, device_id->driver_info); if (err < 0) return err; @@ -607,9 +607,8 @@ static int snd_us122l_probe(struct usb_interface *intf, struct snd_card *card; int err; - if ((device->descriptor.idProduct == USB_ID_US144 || - device->descriptor.idProduct == USB_ID_US144MKII) - && device->speed == USB_SPEED_HIGH) { + if (id->driver_info & US122L_FLAG_US144 && + device->speed == USB_SPEED_HIGH) { snd_printk(KERN_ERR "disable ehci-hcd to run US-144 \n"); return -ENODEV; } @@ -703,8 +702,7 @@ static int snd_us122l_resume(struct usb_interface *intf) mutex_lock(&us122l->mutex); /* needed, doesn't restart without: */ - if (us122l->dev->descriptor.idProduct == USB_ID_US144 || - us122l->dev->descriptor.idProduct == USB_ID_US144MKII) { + if (us122l->is_us144) { err = usb_set_interface(us122l->dev, 0, 1); if (err) { snd_printk(KERN_ERR "usb_set_interface error \n"); @@ -747,7 +745,8 @@ static struct usb_device_id snd_us122l_usb_id_table[] = { { /* US-144 only works at USB1.1! Disable module ehci-hcd. */ .match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = 0x0644, - .idProduct = USB_ID_US144 + .idProduct = USB_ID_US144, + .driver_info = US122L_FLAG_US144 }, { .match_flags = USB_DEVICE_ID_MATCH_DEVICE, @@ -757,7 +756,8 @@ static struct usb_device_id snd_us122l_usb_id_table[] = { { .match_flags = USB_DEVICE_ID_MATCH_DEVICE, .idVendor = 0x0644, - .idProduct = USB_ID_US144MKII + .idProduct = USB_ID_US144MKII, + .driver_info = US122L_FLAG_US144 }, { /* terminator */ } }; diff --git a/sound/usb/usx2y/us122l.h b/sound/usb/usx2y/us122l.h index f263b3f96c86..3e2a2d0041ee 100644 --- a/sound/usb/usx2y/us122l.h +++ b/sound/usb/usx2y/us122l.h @@ -16,6 +16,8 @@ struct us122l { struct list_head midi_list; atomic_t mmap_count; + + bool is_us144; }; -- 2.13.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/3] ALSA: us122l: drop x86 dependency 2017-05-12 10:28 [PATCH 0/3] ALSA: USB-descriptor endianess fixes Johan Hovold 2017-05-12 10:28 ` [PATCH 1/3] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts Johan Hovold 2017-05-12 10:28 ` [PATCH 2/3] ALSA: us122l: clean up US144 handling Johan Hovold @ 2017-05-12 10:28 ` Johan Hovold 2017-05-12 11:18 ` [PATCH 0/3] ALSA: USB-descriptor endianess fixes Takashi Iwai 3 siblings, 0 replies; 6+ messages in thread From: Johan Hovold @ 2017-05-12 10:28 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai; +Cc: alsa-devel, Johan Hovold This is a driver for a USB device and compiles just fine on non-x86 so drop the x86 dependency. Signed-off-by: Johan Hovold <johan@kernel.org> --- sound/usb/Kconfig | 1 - 1 file changed, 1 deletion(-) diff --git a/sound/usb/Kconfig b/sound/usb/Kconfig index a452ad7cec40..d6417cef226b 100644 --- a/sound/usb/Kconfig +++ b/sound/usb/Kconfig @@ -91,7 +91,6 @@ config SND_USB_CAIAQ_INPUT config SND_USB_US122L tristate "Tascam US-122L USB driver" - depends on X86 select SND_HWDEP select SND_RAWMIDI help -- 2.13.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] ALSA: USB-descriptor endianess fixes 2017-05-12 10:28 [PATCH 0/3] ALSA: USB-descriptor endianess fixes Johan Hovold ` (2 preceding siblings ...) 2017-05-12 10:28 ` [PATCH 3/3] ALSA: us122l: drop x86 dependency Johan Hovold @ 2017-05-12 11:18 ` Takashi Iwai 2017-05-12 12:16 ` Johan Hovold 3 siblings, 1 reply; 6+ messages in thread From: Takashi Iwai @ 2017-05-12 11:18 UTC (permalink / raw) To: Johan Hovold; +Cc: alsa-devel On Fri, 12 May 2017 12:28:18 +0200, Johan Hovold wrote: > > These patches add missing endianness conversions when accessing the USB > device-descriptor fields. In the process, clean up the us122l driver > which had product-id conditionals sprinkled throughout. > > The final patch drops the Kconfig dependency on x86 since it's a USB > driver that compiles just fine on non-x86. Perhaps this should be a > (X86 || COMPILE_TEST) dependency instead in case there are external > dependencies that warrants this limitation. Yeah, I vaguely remember that the driver is specific to x86 because of its particular usage of mmap. Maybe some other architectures may match, but not all. So, X86 || COMPILE_TEST would be more sensible. thanks, Takashi ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/3] ALSA: USB-descriptor endianess fixes 2017-05-12 11:18 ` [PATCH 0/3] ALSA: USB-descriptor endianess fixes Takashi Iwai @ 2017-05-12 12:16 ` Johan Hovold 0 siblings, 0 replies; 6+ messages in thread From: Johan Hovold @ 2017-05-12 12:16 UTC (permalink / raw) To: Takashi Iwai; +Cc: alsa-devel, Johan Hovold On Fri, May 12, 2017 at 01:18:16PM +0200, Takashi Iwai wrote: > On Fri, 12 May 2017 12:28:18 +0200, > Johan Hovold wrote: > > > > These patches add missing endianness conversions when accessing the USB > > device-descriptor fields. In the process, clean up the us122l driver > > which had product-id conditionals sprinkled throughout. > > > > The final patch drops the Kconfig dependency on x86 since it's a USB > > driver that compiles just fine on non-x86. Perhaps this should be a > > (X86 || COMPILE_TEST) dependency instead in case there are external > > dependencies that warrants this limitation. > > Yeah, I vaguely remember that the driver is specific to x86 because of > its particular usage of mmap. Maybe some other architectures may > match, but not all. So, X86 || COMPILE_TEST would be more sensible. Thanks for clarifying. I'll respin in a v2. Johan ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-05-12 12:16 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-05-12 10:28 [PATCH 0/3] ALSA: USB-descriptor endianess fixes Johan Hovold 2017-05-12 10:28 ` [PATCH 1/3] ALSA: usb-audio: fix Amanero Combo384 quirk on big-endian hosts Johan Hovold 2017-05-12 10:28 ` [PATCH 2/3] ALSA: us122l: clean up US144 handling Johan Hovold 2017-05-12 10:28 ` [PATCH 3/3] ALSA: us122l: drop x86 dependency Johan Hovold 2017-05-12 11:18 ` [PATCH 0/3] ALSA: USB-descriptor endianess fixes Takashi Iwai 2017-05-12 12:16 ` Johan Hovold
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).