* [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).