* Questions on usb audio development
@ 2007-05-20 15:47 LCID Fire
2007-05-20 19:25 ` Lee Revell
0 siblings, 1 reply; 12+ messages in thread
From: LCID Fire @ 2007-05-20 15:47 UTC (permalink / raw)
To: alsa-devel
Hi.
I know there is quite some documentation how to develop a pci driver for
alsa - but since I'll try to get a usb device working I was wondering
how to write a usb driver? Is it just the same? How to interface the
various aspects of the device with regards to descriptor reading, ...
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Questions on usb audio development
2007-05-20 15:47 Questions on usb audio development LCID Fire
@ 2007-05-20 19:25 ` Lee Revell
2007-05-21 15:47 ` Takashi Iwai
0 siblings, 1 reply; 12+ messages in thread
From: Lee Revell @ 2007-05-20 19:25 UTC (permalink / raw)
To: LCID Fire; +Cc: alsa-devel
On 5/20/07, LCID Fire <lcid-fire@gmx.net> wrote:
> Hi.
> I know there is quite some documentation how to develop a pci driver for
> alsa - but since I'll try to get a usb device working I was wondering
> how to write a usb driver? Is it just the same? How to interface the
> various aspects of the device with regards to descriptor reading, ...
Look at the snd-usb-audio and usx2y sources.
Lee
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Questions on usb audio development
2007-05-20 19:25 ` Lee Revell
@ 2007-05-21 15:47 ` Takashi Iwai
2007-05-21 20:51 ` LCID Fire
0 siblings, 1 reply; 12+ messages in thread
From: Takashi Iwai @ 2007-05-21 15:47 UTC (permalink / raw)
To: Lee Revell; +Cc: alsa-devel, LCID Fire
At Sun, 20 May 2007 15:25:31 -0400,
Lee Revell wrote:
>
> On 5/20/07, LCID Fire <lcid-fire@gmx.net> wrote:
> > Hi.
> > I know there is quite some documentation how to develop a pci driver for
> > alsa - but since I'll try to get a usb device working I was wondering
> > how to write a usb driver? Is it just the same? How to interface the
> > various aspects of the device with regards to descriptor reading, ...
>
> Look at the snd-usb-audio and usx2y sources.
Also the new caiaq driver.
The major difference between the normal PCI and USB audio drivers is
that USB audio has no traditional DMA like most PCI devices have.
Thus the driver has to sets up URB pakets. usb-audio driver creates
an intermediate ring-buffer that is used for the communication from/to
user-space, and URBs are made from this buffer.
Takashi
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Questions on usb audio development
2007-05-21 15:47 ` Takashi Iwai
@ 2007-05-21 20:51 ` LCID Fire
2007-06-07 20:58 ` Quirks device not showing up LCID Fire
0 siblings, 1 reply; 12+ messages in thread
From: LCID Fire @ 2007-05-21 20:51 UTC (permalink / raw)
To: alsa-devel
Takashi Iwai wrote:
> The major difference between the normal PCI and USB audio drivers is
> that USB audio has no traditional DMA like most PCI devices have.
> Thus the driver has to sets up URB pakets. usb-audio driver creates
> an intermediate ring-buffer that is used for the communication from/to
> user-space, and URBs are made from this buffer.
Basicly the reoccuring interface pattern I'm facing is:
bLength 9
bDescriptorType 4
bInterfaceNumber 5
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 6 LineIn2
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00b8 1x 184 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Which is - if you ask me a normal audio token - hidden as a vendor
specific interface. So what do you think, are these 2 descriptors just
the audio format info or have they really embedded some specific info
for the class? Question is whether to wire that with FIXED_ENDPOINT or
STANDARD_INTERFACE?
The others are:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 15 Line 1
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Which again does not seem to be more than the sync node of an audio
device (especially as it seems like they did not even change the subclass).
Well and I just for a start tried to write a quirks sections for these
nodes like:
{
USB_DEVICE(0x13e5, 0x0001),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk)
{
.ifnum = QUIRK_ANY_INTERFACE,
.type = QUIRK_COMPOSITE,
.data = & (const struct snd_usb_audio_quirk[])
{
{
.ifnum = 0,
.altsetting = 0,
.type = QUIRK_AUDIO_STANDARD_INTERFACE
},
{
.ifnum = 0,
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
.data = & (const struct audioformat)
{
.format = SNDRV_PCM_FORMAT_S16_LE,
.channels = 2,
.iface = 0,
.altsetting = 1,
.altset_idx = 1,
.attributes = 0,
.endpoint = 0x01,
.ep_attr = 0x09,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.rate_min = 44100,
.rate_max = 44100,
}
},
{
.ifnum = 2,
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
.data = & (const struct audioformat)
{
.format = SNDRV_PCM_FORMAT_S16_LE,
.channels = 2,
.iface = 2,
.altsetting = 1,
.altset_idx = 1,
.attributes = 0,
.endpoint = 0x82,
.ep_attr = 0x09,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.rate_min = 44100,
.rate_max = 44100,
}
},
{
.ifnum = 3,
.altsetting = 0,
.type = QUIRK_AUDIO_STANDARD_INTERFACE
},
{
.ifnum = 4,
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
.data = & (const struct audioformat)
{
.format = SNDRV_PCM_FORMAT_S16_LE,
.channels = 2,
.iface = 4,
.altsetting = 1,
.altset_idx = 1,
.attributes = 0,
.endpoint = 0x04,
.ep_attr = 0x09,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.rate_min = 44100,
.rate_max = 44100,
}
},
{
.ifnum = 5,
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
.data = & (const struct audioformat)
{
.format = SNDRV_PCM_FORMAT_S16_LE,
.channels = 2,
.iface = 5,
.altsetting = 1,
.altset_idx = 1,
.attributes = 0,
.endpoint = 0x84,
.ep_attr = 0x09,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.rate_min = 44100,
.rate_max = 44100,
}
},
{
.ifnum = 6,
.altsetting = 0,
.type = QUIRK_AUDIO_STANDARD_INTERFACE
},
{
.ifnum = 7,
.type = QUIRK_AUDIO_FIXED_ENDPOINT,
.data = & (const struct audioformat)
{
.format = SNDRV_PCM_FORMAT_S16_LE,
.channels = 2,
.iface = 7,
.altsetting = 1,
.altset_idx = 1,
.attributes = 0,
.endpoint = 0x85,
.ep_attr = 0x09,
.rates = SNDRV_PCM_RATE_CONTINUOUS,
.rate_min = 44100,
.rate_max = 44100,
}
},
{
.ifnum = -1
}
}
}
},
So could anyone please tell me whether I'm totally lost on a wrong track?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Quirks device not showing up
2007-05-21 20:51 ` LCID Fire
@ 2007-06-07 20:58 ` LCID Fire
2007-06-08 6:27 ` Clemens Ladisch
2007-06-11 21:25 ` LCID Fire
0 siblings, 2 replies; 12+ messages in thread
From: LCID Fire @ 2007-06-07 20:58 UTC (permalink / raw)
To: alsa-devel
Well I defined a quirks for my usb device. I mined the probe code with
output and it creates a new driver instance for my device as well as it
finds the channels. Nevertheless I don't get my device listed in
userspace. Is there anything special to be done besides defining a quirks?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-07 20:58 ` Quirks device not showing up LCID Fire
@ 2007-06-08 6:27 ` Clemens Ladisch
2007-06-08 14:17 ` LCID Fire
2007-06-11 21:25 ` LCID Fire
1 sibling, 1 reply; 12+ messages in thread
From: Clemens Ladisch @ 2007-06-08 6:27 UTC (permalink / raw)
To: LCID Fire, alsa-devel
LCID Fire wrote:
> Well I defined a quirks for my usb device. I mined the probe code with
> output and it creates a new driver instance for my device as well as it
> finds the channels. Nevertheless I don't get my device listed in
> userspace. Is there anything special to be done besides defining a
> quirks?
All quirks have been written as specific workarounds for certain
devices. It is possible that you device behaves in some different way.
I'd tell you what the actual problem with your quirk is, but my crystal
ball is under repair just now. Please show your code and the output of
"lsusb -v" for your device.
Regards,
Clemens
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-08 6:27 ` Clemens Ladisch
@ 2007-06-08 14:17 ` LCID Fire
2007-06-08 21:17 ` Lee Revell
0 siblings, 1 reply; 12+ messages in thread
From: LCID Fire @ 2007-06-08 14:17 UTC (permalink / raw)
To: alsa-devel
Clemens Ladisch wrote:
> I'd tell you what the actual problem with your quirk is, but my crystal
> ball is under repair just now. Please show your code and the output of
> "lsusb -v" for your device.
It's the following:
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 32
idVendor 0x13e5
idProduct 0x0001
bcdDevice 1.00
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 497
bNumInterfaces 9
bConfigurationValue 1
iConfiguration 13
bmAttributes 0x80
(Bus Powered)
MaxPower 300mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 15
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 7
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 9
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00b8 1x 184 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 3
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 5
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00b8 1x 184 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 16
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 4
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 8
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 4
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 10
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00b8 1x 184 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 5
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 4
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 5
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 6
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00b8 1x 184 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 6
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 0
iInterface 17
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 7
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 11
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 7
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 2
bInterfaceProtocol 0
iInterface 12
Class specific interface descriptor for class 255 is unsupported
Class specific interface descriptor for class 255 is unsupported
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0090 1x 144 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 8
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
cannot read device status, Operation not permitted (1)
Seems pretty default to me. As I said the probing and analyses of the
channel seems to work fine.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-08 14:17 ` LCID Fire
@ 2007-06-08 21:17 ` Lee Revell
2007-06-09 8:32 ` LCID Fire
0 siblings, 1 reply; 12+ messages in thread
From: Lee Revell @ 2007-06-08 21:17 UTC (permalink / raw)
To: LCID Fire; +Cc: alsa-devel
On 6/8/07, LCID Fire <lcid-fire@gmx.net> wrote:
> Clemens Ladisch wrote:
> > I'd tell you what the actual problem with your quirk is, but my crystal
> > ball is under repair just now. Please show your code and the output of
> > "lsusb -v" for your device.
> It's the following:
Where's the code?
Lee
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-08 21:17 ` Lee Revell
@ 2007-06-09 8:32 ` LCID Fire
0 siblings, 0 replies; 12+ messages in thread
From: LCID Fire @ 2007-06-09 8:32 UTC (permalink / raw)
To: alsa-devel
Lee Revell wrote:
> On 6/8/07, LCID Fire <lcid-fire@gmx.net> wrote:
>> Clemens Ladisch wrote:
>>> I'd tell you what the actual problem with your quirk is, but my crystal
>>> ball is under repair just now. Please show your code and the output of
>>> "lsusb -v" for your device.
>> It's the following:
>
> Where's the code?
Oh, it's
{
USB_DEVICE(0x13e5, 0x0001),
.driver_info = (unsigned long) & (const struct snd_usb_audio_quirk)
{
.ifnum = QUIRK_ANY_INTERFACE,
.type = QUIRK_AUDIO_STANDARD_INTERFACE
}
}
added to usbquirks.h
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-07 20:58 ` Quirks device not showing up LCID Fire
2007-06-08 6:27 ` Clemens Ladisch
@ 2007-06-11 21:25 ` LCID Fire
2007-06-11 22:35 ` Lee Revell
1 sibling, 1 reply; 12+ messages in thread
From: LCID Fire @ 2007-06-11 21:25 UTC (permalink / raw)
To: alsa-devel
LCID Fire wrote:
> Well I defined a quirks for my usb device. I mined the probe code with
> output and it creates a new driver instance for my device as well as it
> finds the channels. Nevertheless I don't get my device listed in
> userspace. Is there anything special to be done besides defining a quirks?
I have to correct myself a bit. The patch is actually working - and my
card and it's channels are detected just fine - problem is there seems
to be no mixer available for my channels.
When I try to access my card using alsamixer I get a message "No mixer
elems found". Is there a special .conf file necessary and what's the
format for it?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-11 21:25 ` LCID Fire
@ 2007-06-11 22:35 ` Lee Revell
2007-06-11 22:38 ` LCID Fire
0 siblings, 1 reply; 12+ messages in thread
From: Lee Revell @ 2007-06-11 22:35 UTC (permalink / raw)
To: LCID Fire; +Cc: alsa-devel
On 6/11/07, LCID Fire <lcid-fire@gmx.net> wrote:
> LCID Fire wrote:
> > Well I defined a quirks for my usb device. I mined the probe code with
> > output and it creates a new driver instance for my device as well as it
> > finds the channels. Nevertheless I don't get my device listed in
> > userspace. Is there anything special to be done besides defining a quirks?
> I have to correct myself a bit. The patch is actually working - and my
> card and it's channels are detected just fine - problem is there seems
> to be no mixer available for my channels.
> When I try to access my card using alsamixer I get a message "No mixer
> elems found". Is there a special .conf file necessary and what's the
> format for it?
This is normal, many USB devices don't have any mixer elements.
Lee
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Quirks device not showing up
2007-06-11 22:35 ` Lee Revell
@ 2007-06-11 22:38 ` LCID Fire
0 siblings, 0 replies; 12+ messages in thread
From: LCID Fire @ 2007-06-11 22:38 UTC (permalink / raw)
To: alsa-devel
Lee Revell wrote:
> On 6/11/07, LCID Fire <lcid-fire@gmx.net> wrote:
>> I have to correct myself a bit. The patch is actually working - and my
>> card and it's channels are detected just fine - problem is there seems
>> to be no mixer available for my channels.
>> When I try to access my card using alsamixer I get a message "No mixer
>> elems found". Is there a special .conf file necessary and what's the
>> format for it?
>
> This is normal, many USB devices don't have any mixer elements.
Ok, but isn't there a software way to emulate the mixer?
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2007-06-11 22:38 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-20 15:47 Questions on usb audio development LCID Fire
2007-05-20 19:25 ` Lee Revell
2007-05-21 15:47 ` Takashi Iwai
2007-05-21 20:51 ` LCID Fire
2007-06-07 20:58 ` Quirks device not showing up LCID Fire
2007-06-08 6:27 ` Clemens Ladisch
2007-06-08 14:17 ` LCID Fire
2007-06-08 21:17 ` Lee Revell
2007-06-09 8:32 ` LCID Fire
2007-06-11 21:25 ` LCID Fire
2007-06-11 22:35 ` Lee Revell
2007-06-11 22:38 ` LCID Fire
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).