Commit 16d603d3 authored by Chris Rorvick's avatar Chris Rorvick Committed by Takashi Iwai

staging: line6: Move audio endpoints to properties

The device type can now be used to determine the addresses of the
audio endpoints for the interface.  Drop the conditional logic and make
these values properties.
Signed-off-by: default avatarChris Rorvick <chris@rorvick.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b95d2e40
...@@ -400,6 +400,7 @@ struct snd_pcm_ops snd_line6_capture_ops = { ...@@ -400,6 +400,7 @@ struct snd_pcm_ops snd_line6_capture_ops = {
int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm) int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm)
{ {
struct usb_line6 *line6 = line6pcm->line6;
int i; int i;
/* create audio URBs and fill in constant values: */ /* create audio URBs and fill in constant values: */
...@@ -411,14 +412,14 @@ int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm) ...@@ -411,14 +412,14 @@ int line6_create_audio_in_urbs(struct snd_line6_pcm *line6pcm)
usb_alloc_urb(LINE6_ISO_PACKETS, GFP_KERNEL); usb_alloc_urb(LINE6_ISO_PACKETS, GFP_KERNEL);
if (urb == NULL) { if (urb == NULL) {
dev_err(line6pcm->line6->ifcdev, "Out of memory\n"); dev_err(line6->ifcdev, "Out of memory\n");
return -ENOMEM; return -ENOMEM;
} }
urb->dev = line6pcm->line6->usbdev; urb->dev = line6->usbdev;
urb->pipe = urb->pipe =
usb_rcvisocpipe(line6pcm->line6->usbdev, usb_rcvisocpipe(line6->usbdev,
line6pcm->ep_audio_read & line6->properties->ep_audio_r &
USB_ENDPOINT_NUMBER_MASK); USB_ENDPOINT_NUMBER_MASK);
urb->transfer_flags = URB_ISO_ASAP; urb->transfer_flags = URB_ISO_ASAP;
urb->start_frame = -1; urb->start_frame = -1;
......
...@@ -70,6 +70,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -70,6 +70,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_BASSPODXTLIVE] = { [LINE6_BASSPODXTLIVE] = {
.id = "BassPODxtLive", .id = "BassPODxtLive",
...@@ -80,6 +82,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -80,6 +82,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_BASSPODXTPRO] = { [LINE6_BASSPODXTPRO] = {
.id = "BassPODxtPro", .id = "BassPODxtPro",
...@@ -90,6 +94,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -90,6 +94,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_GUITARPORT] = { [LINE6_GUITARPORT] = {
.id = "GuitarPort", .id = "GuitarPort",
...@@ -97,6 +103,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -97,6 +103,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* 1..4 seem to be ok */ .altsetting = 2, /* 1..4 seem to be ok */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_POCKETPOD] = { [LINE6_POCKETPOD] = {
.id = "PocketPOD", .id = "PocketPOD",
...@@ -105,6 +113,7 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -105,6 +113,7 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 0, .altsetting = 0,
.ep_ctrl_r = 0x82, .ep_ctrl_r = 0x82,
.ep_ctrl_w = 0x02, .ep_ctrl_w = 0x02,
/* no audio channel */
}, },
[LINE6_PODHD300] = { [LINE6_PODHD300] = {
.id = "PODHD300", .id = "PODHD300",
...@@ -115,6 +124,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -115,6 +124,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODHD400] = { [LINE6_PODHD400] = {
.id = "PODHD400", .id = "PODHD400",
...@@ -125,6 +136,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -125,6 +136,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODHD500_0] = { [LINE6_PODHD500_0] = {
.id = "PODHD500", .id = "PODHD500",
...@@ -135,6 +148,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -135,6 +148,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x81, .ep_ctrl_r = 0x81,
.ep_ctrl_w = 0x01, .ep_ctrl_w = 0x01,
.ep_audio_r = 0x86,
.ep_audio_w = 0x02,
}, },
[LINE6_PODHD500_1] = { [LINE6_PODHD500_1] = {
.id = "PODHD500", .id = "PODHD500",
...@@ -145,6 +160,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -145,6 +160,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x81, .ep_ctrl_r = 0x81,
.ep_ctrl_w = 0x01, .ep_ctrl_w = 0x01,
.ep_audio_r = 0x86,
.ep_audio_w = 0x02,
}, },
[LINE6_PODSTUDIO_GX] = { [LINE6_PODSTUDIO_GX] = {
.id = "PODStudioGX", .id = "PODStudioGX",
...@@ -152,6 +169,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -152,6 +169,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* 1..4 seem to be ok */ .altsetting = 2, /* 1..4 seem to be ok */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODSTUDIO_UX1] = { [LINE6_PODSTUDIO_UX1] = {
.id = "PODStudioUX1", .id = "PODStudioUX1",
...@@ -159,6 +178,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -159,6 +178,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* 1..4 seem to be ok */ .altsetting = 2, /* 1..4 seem to be ok */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODSTUDIO_UX2] = { [LINE6_PODSTUDIO_UX2] = {
.id = "PODStudioUX2", .id = "PODStudioUX2",
...@@ -166,6 +187,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -166,6 +187,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* defaults to 44.1kHz, 16-bit */ .altsetting = 2, /* defaults to 44.1kHz, 16-bit */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODXT] = { [LINE6_PODXT] = {
.id = "PODxt", .id = "PODxt",
...@@ -176,6 +199,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -176,6 +199,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODXTLIVE_POD] = { [LINE6_PODXTLIVE_POD] = {
.id = "PODxtLive", .id = "PODxtLive",
...@@ -186,6 +211,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -186,6 +211,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODXTLIVE_VARIAX] = { [LINE6_PODXTLIVE_VARIAX] = {
.id = "PODxtLive", .id = "PODxtLive",
...@@ -196,6 +223,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -196,6 +223,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x86, .ep_ctrl_r = 0x86,
.ep_ctrl_w = 0x05, .ep_ctrl_w = 0x05,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_PODXTPRO] = { [LINE6_PODXTPRO] = {
.id = "PODxtPro", .id = "PODxtPro",
...@@ -206,6 +235,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -206,6 +235,8 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 5, .altsetting = 5,
.ep_ctrl_r = 0x84, .ep_ctrl_r = 0x84,
.ep_ctrl_w = 0x03, .ep_ctrl_w = 0x03,
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_TONEPORT_GX] = { [LINE6_TONEPORT_GX] = {
.id = "TonePortGX", .id = "TonePortGX",
...@@ -213,6 +244,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -213,6 +244,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* 1..4 seem to be ok */ .altsetting = 2, /* 1..4 seem to be ok */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_TONEPORT_UX1] = { [LINE6_TONEPORT_UX1] = {
.id = "TonePortUX1", .id = "TonePortUX1",
...@@ -220,6 +253,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -220,6 +253,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* 1..4 seem to be ok */ .altsetting = 2, /* 1..4 seem to be ok */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_TONEPORT_UX2] = { [LINE6_TONEPORT_UX2] = {
.id = "TonePortUX2", .id = "TonePortUX2",
...@@ -227,6 +262,8 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -227,6 +262,8 @@ static const struct line6_properties line6_properties_table[] = {
.capabilities = LINE6_CAP_PCM, .capabilities = LINE6_CAP_PCM,
.altsetting = 2, /* defaults to 44.1kHz, 16-bit */ .altsetting = 2, /* defaults to 44.1kHz, 16-bit */
/* no control channel */ /* no control channel */
.ep_audio_r = 0x82,
.ep_audio_w = 0x01,
}, },
[LINE6_VARIAX] = { [LINE6_VARIAX] = {
.id = "Variax", .id = "Variax",
...@@ -235,6 +272,7 @@ static const struct line6_properties line6_properties_table[] = { ...@@ -235,6 +272,7 @@ static const struct line6_properties line6_properties_table[] = {
.altsetting = 1, .altsetting = 1,
.ep_ctrl_r = 0x82, .ep_ctrl_r = 0x82,
.ep_ctrl_w = 0x01, .ep_ctrl_w = 0x01,
/* no audio channel */
} }
}; };
......
...@@ -120,6 +120,8 @@ struct line6_properties { ...@@ -120,6 +120,8 @@ struct line6_properties {
unsigned ep_ctrl_r; unsigned ep_ctrl_r;
unsigned ep_ctrl_w; unsigned ep_ctrl_w;
unsigned ep_audio_r;
unsigned ep_audio_w;
}; };
/** /**
......
...@@ -421,55 +421,13 @@ int line6_init_pcm(struct usb_line6 *line6, ...@@ -421,55 +421,13 @@ int line6_init_pcm(struct usb_line6 *line6,
}; };
int err; int err;
int ep_read = 0, ep_write = 0; unsigned ep_read = line6->properties->ep_audio_r;
unsigned ep_write = line6->properties->ep_audio_w;
struct snd_line6_pcm *line6pcm; struct snd_line6_pcm *line6pcm;
if (!(line6->properties->capabilities & LINE6_CAP_PCM)) if (!(line6->properties->capabilities & LINE6_CAP_PCM))
return 0; /* skip PCM initialization and report success */ return 0; /* skip PCM initialization and report success */
/* initialize PCM subsystem based on device: */
switch (line6->type) {
case LINE6_BASSPODXT:
case LINE6_BASSPODXTLIVE:
case LINE6_BASSPODXTPRO:
case LINE6_PODXT:
case LINE6_PODXTLIVE_POD:
case LINE6_PODXTLIVE_VARIAX:
case LINE6_PODXTPRO:
case LINE6_PODHD300:
case LINE6_PODHD400:
ep_read = 0x82;
ep_write = 0x01;
break;
case LINE6_PODHD500_0:
case LINE6_PODHD500_1:
ep_read = 0x86;
ep_write = 0x02;
break;
case LINE6_GUITARPORT:
case LINE6_PODSTUDIO_GX:
case LINE6_PODSTUDIO_UX1:
case LINE6_PODSTUDIO_UX2:
case LINE6_TONEPORT_GX:
case LINE6_TONEPORT_UX1:
case LINE6_TONEPORT_UX2:
ep_read = 0x82;
ep_write = 0x01;
break;
/* this is for interface_number == 1:
case LINE6_DEVID_TONEPORT_UX2:
case LINE6_DEVID_PODSTUDIO_UX2:
ep_read = 0x87;
ep_write = 0x00;
break; */
default:
MISSING_CASE;
}
line6pcm = kzalloc(sizeof(*line6pcm), GFP_KERNEL); line6pcm = kzalloc(sizeof(*line6pcm), GFP_KERNEL);
if (line6pcm == NULL) if (line6pcm == NULL)
...@@ -478,8 +436,6 @@ int line6_init_pcm(struct usb_line6 *line6, ...@@ -478,8 +436,6 @@ int line6_init_pcm(struct usb_line6 *line6,
line6pcm->volume_playback[0] = line6pcm->volume_playback[1] = 255; line6pcm->volume_playback[0] = line6pcm->volume_playback[1] = 255;
line6pcm->volume_monitor = 255; line6pcm->volume_monitor = 255;
line6pcm->line6 = line6; line6pcm->line6 = line6;
line6pcm->ep_audio_read = ep_read;
line6pcm->ep_audio_write = ep_write;
/* Read and write buffers are sized identically, so choose minimum */ /* Read and write buffers are sized identically, so choose minimum */
line6pcm->max_packet_size = min( line6pcm->max_packet_size = min(
......
...@@ -296,16 +296,6 @@ struct snd_line6_pcm { ...@@ -296,16 +296,6 @@ struct snd_line6_pcm {
*/ */
int max_packet_size; int max_packet_size;
/**
USB endpoint for listening to audio data.
*/
int ep_audio_read;
/**
USB endpoint for writing audio data.
*/
int ep_audio_write;
/** /**
Bit mask of active capture URBs. Bit mask of active capture URBs.
*/ */
......
...@@ -560,6 +560,7 @@ struct snd_pcm_ops snd_line6_playback_ops = { ...@@ -560,6 +560,7 @@ struct snd_pcm_ops snd_line6_playback_ops = {
int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm) int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm)
{ {
struct usb_line6 *line6 = line6pcm->line6;
int i; int i;
/* create audio URBs and fill in constant values: */ /* create audio URBs and fill in constant values: */
...@@ -571,14 +572,14 @@ int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm) ...@@ -571,14 +572,14 @@ int line6_create_audio_out_urbs(struct snd_line6_pcm *line6pcm)
usb_alloc_urb(LINE6_ISO_PACKETS, GFP_KERNEL); usb_alloc_urb(LINE6_ISO_PACKETS, GFP_KERNEL);
if (urb == NULL) { if (urb == NULL) {
dev_err(line6pcm->line6->ifcdev, "Out of memory\n"); dev_err(line6->ifcdev, "Out of memory\n");
return -ENOMEM; return -ENOMEM;
} }
urb->dev = line6pcm->line6->usbdev; urb->dev = line6->usbdev;
urb->pipe = urb->pipe =
usb_sndisocpipe(line6pcm->line6->usbdev, usb_sndisocpipe(line6->usbdev,
line6pcm->ep_audio_write & line6->properties->ep_audio_w &
USB_ENDPOINT_NUMBER_MASK); USB_ENDPOINT_NUMBER_MASK);
urb->transfer_flags = URB_ISO_ASAP; urb->transfer_flags = URB_ISO_ASAP;
urb->start_frame = -1; urb->start_frame = -1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment