diff options
| -rw-r--r-- | arch/x86/include/asm/io_apic.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/lguest_hcall.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/apic/io_apic.c | 14 | ||||
| -rw-r--r-- | arch/x86/lguest/boot.c | 7 | ||||
| -rw-r--r-- | arch/x86/pci/i386.c | 7 | ||||
| -rw-r--r-- | drivers/block/virtio_blk.c | 5 | ||||
| -rw-r--r-- | drivers/char/tty_port.c | 2 | ||||
| -rw-r--r-- | drivers/lguest/lg.h | 2 | ||||
| -rw-r--r-- | drivers/virtio/virtio_pci.c | 2 | ||||
| -rw-r--r-- | include/linux/lguest.h | 2 | ||||
| -rw-r--r-- | include/linux/virtio_net.h | 14 | ||||
| -rw-r--r-- | kernel/trace/trace_functions.c | 2 | ||||
| -rw-r--r-- | sound/arm/pxa2xx-pcm-lib.c | 2 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 6 | ||||
| -rw-r--r-- | sound/pci/riptide/riptide.c | 7 | ||||
| -rw-r--r-- | sound/usb/usbaudio.c | 14 |
16 files changed, 62 insertions, 28 deletions
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index daf866ed0612..330ee807f89e 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h | |||
| @@ -161,6 +161,7 @@ extern int io_apic_set_pci_routing(struct device *dev, int irq, | |||
| 161 | struct io_apic_irq_attr *irq_attr); | 161 | struct io_apic_irq_attr *irq_attr); |
| 162 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); | 162 | extern int (*ioapic_renumber_irq)(int ioapic, int irq); |
| 163 | extern void ioapic_init_mappings(void); | 163 | extern void ioapic_init_mappings(void); |
| 164 | extern void ioapic_insert_resources(void); | ||
| 164 | 165 | ||
| 165 | extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); | 166 | extern struct IO_APIC_route_entry **alloc_ioapic_entries(void); |
| 166 | extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); | 167 | extern void free_ioapic_entries(struct IO_APIC_route_entry **ioapic_entries); |
| @@ -180,6 +181,7 @@ extern void ioapic_write_entry(int apic, int pin, | |||
| 180 | #define io_apic_assign_pci_irqs 0 | 181 | #define io_apic_assign_pci_irqs 0 |
| 181 | static const int timer_through_8259 = 0; | 182 | static const int timer_through_8259 = 0; |
| 182 | static inline void ioapic_init_mappings(void) { } | 183 | static inline void ioapic_init_mappings(void) { } |
| 184 | static inline void ioapic_insert_resources(void) { } | ||
| 183 | 185 | ||
| 184 | static inline void probe_nr_irqs_gsi(void) { } | 186 | static inline void probe_nr_irqs_gsi(void) { } |
| 185 | #endif | 187 | #endif |
diff --git a/arch/x86/include/asm/lguest_hcall.h b/arch/x86/include/asm/lguest_hcall.h index d31c4a684078..33600a66755f 100644 --- a/arch/x86/include/asm/lguest_hcall.h +++ b/arch/x86/include/asm/lguest_hcall.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #include <asm/hw_irq.h> | 30 | #include <asm/hw_irq.h> |
| 31 | #include <asm/kvm_para.h> | 31 | #include <asm/kvm_para.h> |
| 32 | 32 | ||
| 33 | /*G:031 But first, how does our Guest contact the Host to ask for privileged | 33 | /*G:030 But first, how does our Guest contact the Host to ask for privileged |
| 34 | * operations? There are two ways: the direct way is to make a "hypercall", | 34 | * operations? There are two ways: the direct way is to make a "hypercall", |
| 35 | * to make requests of the Host Itself. | 35 | * to make requests of the Host Itself. |
| 36 | * | 36 | * |
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index 90b5e6efa938..2284a4812b68 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c | |||
| @@ -4181,28 +4181,20 @@ fake_ioapic_page: | |||
| 4181 | } | 4181 | } |
| 4182 | } | 4182 | } |
| 4183 | 4183 | ||
| 4184 | static int __init ioapic_insert_resources(void) | 4184 | void __init ioapic_insert_resources(void) |
| 4185 | { | 4185 | { |
| 4186 | int i; | 4186 | int i; |
| 4187 | struct resource *r = ioapic_resources; | 4187 | struct resource *r = ioapic_resources; |
| 4188 | 4188 | ||
| 4189 | if (!r) { | 4189 | if (!r) { |
| 4190 | if (nr_ioapics > 0) { | 4190 | if (nr_ioapics > 0) |
| 4191 | printk(KERN_ERR | 4191 | printk(KERN_ERR |
| 4192 | "IO APIC resources couldn't be allocated.\n"); | 4192 | "IO APIC resources couldn't be allocated.\n"); |
| 4193 | return -1; | 4193 | return; |
| 4194 | } | ||
| 4195 | return 0; | ||
| 4196 | } | 4194 | } |
| 4197 | 4195 | ||
| 4198 | for (i = 0; i < nr_ioapics; i++) { | 4196 | for (i = 0; i < nr_ioapics; i++) { |
| 4199 | insert_resource(&iomem_resource, r); | 4197 | insert_resource(&iomem_resource, r); |
| 4200 | r++; | 4198 | r++; |
| 4201 | } | 4199 | } |
| 4202 | |||
| 4203 | return 0; | ||
| 4204 | } | 4200 | } |
| 4205 | |||
| 4206 | /* Insert the IO APIC resources after PCI initialization has occured to handle | ||
| 4207 | * IO APICS that are mapped in on a BAR in PCI space. */ | ||
| 4208 | late_initcall(ioapic_insert_resources); | ||
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 7bc65f0f62c4..f2bf1f73d468 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -379,6 +379,11 @@ static void lguest_cpuid(unsigned int *ax, unsigned int *bx, | |||
| 379 | 379 | ||
| 380 | native_cpuid(ax, bx, cx, dx); | 380 | native_cpuid(ax, bx, cx, dx); |
| 381 | switch (function) { | 381 | switch (function) { |
| 382 | case 0: /* ID and highest CPUID. Futureproof a little by sticking to | ||
| 383 | * older ones. */ | ||
| 384 | if (*ax > 5) | ||
| 385 | *ax = 5; | ||
| 386 | break; | ||
| 382 | case 1: /* Basic feature request. */ | 387 | case 1: /* Basic feature request. */ |
| 383 | /* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */ | 388 | /* We only allow kernel to see SSE3, CMPXCHG16B and SSSE3 */ |
| 384 | *cx &= 0x00002201; | 389 | *cx &= 0x00002201; |
| @@ -1079,7 +1084,7 @@ static unsigned lguest_patch(u8 type, u16 clobber, void *ibuf, | |||
| 1079 | return insn_len; | 1084 | return insn_len; |
| 1080 | } | 1085 | } |
| 1081 | 1086 | ||
| 1082 | /*G:030 Once we get to lguest_init(), we know we're a Guest. The various | 1087 | /*G:029 Once we get to lguest_init(), we know we're a Guest. The various |
| 1083 | * pv_ops structures in the kernel provide points for (almost) every routine we | 1088 | * pv_ops structures in the kernel provide points for (almost) every routine we |
| 1084 | * have to override to avoid privileged instructions. */ | 1089 | * have to override to avoid privileged instructions. */ |
| 1085 | __init void lguest_init(void) | 1090 | __init void lguest_init(void) |
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index 0fb56db16d18..52e62e57fedd 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <asm/pat.h> | 35 | #include <asm/pat.h> |
| 36 | #include <asm/e820.h> | 36 | #include <asm/e820.h> |
| 37 | #include <asm/pci_x86.h> | 37 | #include <asm/pci_x86.h> |
| 38 | #include <asm/io_apic.h> | ||
| 38 | 39 | ||
| 39 | 40 | ||
| 40 | static int | 41 | static int |
| @@ -227,6 +228,12 @@ void __init pcibios_resource_survey(void) | |||
| 227 | pcibios_allocate_resources(1); | 228 | pcibios_allocate_resources(1); |
| 228 | 229 | ||
| 229 | e820_reserve_resources_late(); | 230 | e820_reserve_resources_late(); |
| 231 | /* | ||
| 232 | * Insert the IO APIC resources after PCI initialization has | ||
| 233 | * occured to handle IO APICS that are mapped in on a BAR in | ||
| 234 | * PCI space, but before trying to assign unassigned pci res. | ||
| 235 | */ | ||
| 236 | ioapic_insert_resources(); | ||
| 230 | } | 237 | } |
| 231 | 238 | ||
| 232 | /** | 239 | /** |
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 43db3ea15b54..fbeefb68a31f 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -213,7 +213,7 @@ static int virtblk_ioctl(struct block_device *bdev, fmode_t mode, | |||
| 213 | * Only allow the generic SCSI ioctls if the host can support it. | 213 | * Only allow the generic SCSI ioctls if the host can support it. |
| 214 | */ | 214 | */ |
| 215 | if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI)) | 215 | if (!virtio_has_feature(vblk->vdev, VIRTIO_BLK_F_SCSI)) |
| 216 | return -ENOIOCTLCMD; | 216 | return -ENOTTY; |
| 217 | 217 | ||
| 218 | return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); | 218 | return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp); |
| 219 | } | 219 | } |
| @@ -360,6 +360,9 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) | |||
| 360 | blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2); | 360 | blk_queue_max_phys_segments(vblk->disk->queue, vblk->sg_elems-2); |
| 361 | blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2); | 361 | blk_queue_max_hw_segments(vblk->disk->queue, vblk->sg_elems-2); |
| 362 | 362 | ||
| 363 | /* No need to bounce any requests */ | ||
| 364 | blk_queue_bounce_limit(vblk->disk->queue, BLK_BOUNCE_ANY); | ||
| 365 | |||
| 363 | /* No real sector limit. */ | 366 | /* No real sector limit. */ |
| 364 | blk_queue_max_sectors(vblk->disk->queue, -1U); | 367 | blk_queue_max_sectors(vblk->disk->queue, -1U); |
| 365 | 368 | ||
diff --git a/drivers/char/tty_port.c b/drivers/char/tty_port.c index 4e862a75f7ff..9769b1149f76 100644 --- a/drivers/char/tty_port.c +++ b/drivers/char/tty_port.c | |||
| @@ -267,7 +267,7 @@ int tty_port_block_til_ready(struct tty_port *port, | |||
| 267 | if (retval == 0) | 267 | if (retval == 0) |
| 268 | port->flags |= ASYNC_NORMAL_ACTIVE; | 268 | port->flags |= ASYNC_NORMAL_ACTIVE; |
| 269 | spin_unlock_irqrestore(&port->lock, flags); | 269 | spin_unlock_irqrestore(&port->lock, flags); |
| 270 | return 0; | 270 | return retval; |
| 271 | 271 | ||
| 272 | } | 272 | } |
| 273 | EXPORT_SYMBOL(tty_port_block_til_ready); | 273 | EXPORT_SYMBOL(tty_port_block_til_ready); |
diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h index 9c3138265f8e..01c591923793 100644 --- a/drivers/lguest/lg.h +++ b/drivers/lguest/lg.h | |||
| @@ -38,8 +38,6 @@ struct lguest_pages | |||
| 38 | #define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */ | 38 | #define CHANGED_GDT_TLS 4 /* Actually a subset of CHANGED_GDT */ |
| 39 | #define CHANGED_ALL 3 | 39 | #define CHANGED_ALL 3 |
| 40 | 40 | ||
| 41 | struct lguest; | ||
| 42 | |||
| 43 | struct lg_cpu { | 41 | struct lg_cpu { |
| 44 | unsigned int id; | 42 | unsigned int id; |
| 45 | struct lguest *lg; | 43 | struct lguest *lg; |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 193c8f0e5cc5..bcec78ffc765 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -669,7 +669,7 @@ static int __init virtio_pci_init(void) | |||
| 669 | 669 | ||
| 670 | err = pci_register_driver(&virtio_pci_driver); | 670 | err = pci_register_driver(&virtio_pci_driver); |
| 671 | if (err) | 671 | if (err) |
| 672 | device_unregister(virtio_pci_root); | 672 | root_device_unregister(virtio_pci_root); |
| 673 | 673 | ||
| 674 | return err; | 674 | return err; |
| 675 | } | 675 | } |
diff --git a/include/linux/lguest.h b/include/linux/lguest.h index 7bc1440fc473..dbf2479e808e 100644 --- a/include/linux/lguest.h +++ b/include/linux/lguest.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #define LG_CLOCK_MIN_DELTA 100UL | 11 | #define LG_CLOCK_MIN_DELTA 100UL |
| 12 | #define LG_CLOCK_MAX_DELTA ULONG_MAX | 12 | #define LG_CLOCK_MAX_DELTA ULONG_MAX |
| 13 | 13 | ||
| 14 | /*G:032 The second method of communicating with the Host is to via "struct | 14 | /*G:031 The second method of communicating with the Host is to via "struct |
| 15 | * lguest_data". Once the Guest's initialization hypercall tells the Host where | 15 | * lguest_data". Once the Guest's initialization hypercall tells the Host where |
| 16 | * this is, the Guest and Host both publish information in it. :*/ | 16 | * this is, the Guest and Host both publish information in it. :*/ |
| 17 | struct lguest_data | 17 | struct lguest_data |
diff --git a/include/linux/virtio_net.h b/include/linux/virtio_net.h index cec79adbe3ea..9c543d6ac535 100644 --- a/include/linux/virtio_net.h +++ b/include/linux/virtio_net.h | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ | 27 | #define VIRTIO_NET_F_CTRL_VQ 17 /* Control channel available */ |
| 28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ | 28 | #define VIRTIO_NET_F_CTRL_RX 18 /* Control channel RX mode support */ |
| 29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ | 29 | #define VIRTIO_NET_F_CTRL_VLAN 19 /* Control channel VLAN filtering */ |
| 30 | #define VIRTIO_NET_F_CTRL_RX_EXTRA 20 /* Extra RX mode control support */ | ||
| 30 | 31 | ||
| 31 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ | 32 | #define VIRTIO_NET_S_LINK_UP 1 /* Link is up */ |
| 32 | 33 | ||
| @@ -81,14 +82,19 @@ typedef __u8 virtio_net_ctrl_ack; | |||
| 81 | #define VIRTIO_NET_ERR 1 | 82 | #define VIRTIO_NET_ERR 1 |
| 82 | 83 | ||
| 83 | /* | 84 | /* |
| 84 | * Control the RX mode, ie. promisucous and allmulti. PROMISC and | 85 | * Control the RX mode, ie. promisucous, allmulti, etc... |
| 85 | * ALLMULTI commands require an "out" sg entry containing a 1 byte | 86 | * All commands require an "out" sg entry containing a 1 byte |
| 86 | * state value, zero = disable, non-zero = enable. These commands | 87 | * state value, zero = disable, non-zero = enable. Commands |
| 87 | * are supported with the VIRTIO_NET_F_CTRL_RX feature. | 88 | * 0 and 1 are supported with the VIRTIO_NET_F_CTRL_RX feature. |
| 89 | * Commands 2-5 are added with VIRTIO_NET_F_CTRL_RX_EXTRA. | ||
| 88 | */ | 90 | */ |
| 89 | #define VIRTIO_NET_CTRL_RX 0 | 91 | #define VIRTIO_NET_CTRL_RX 0 |
| 90 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 | 92 | #define VIRTIO_NET_CTRL_RX_PROMISC 0 |
| 91 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 | 93 | #define VIRTIO_NET_CTRL_RX_ALLMULTI 1 |
| 94 | #define VIRTIO_NET_CTRL_RX_ALLUNI 2 | ||
| 95 | #define VIRTIO_NET_CTRL_RX_NOMULTI 3 | ||
| 96 | #define VIRTIO_NET_CTRL_RX_NOUNI 4 | ||
| 97 | #define VIRTIO_NET_CTRL_RX_NOBCAST 5 | ||
| 92 | 98 | ||
| 93 | /* | 99 | /* |
| 94 | * Control the MAC filter table. | 100 | * Control the MAC filter table. |
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c index 7402144bff21..75ef000613c3 100644 --- a/kernel/trace/trace_functions.c +++ b/kernel/trace/trace_functions.c | |||
| @@ -363,7 +363,7 @@ ftrace_trace_onoff_callback(char *glob, char *cmd, char *param, int enable) | |||
| 363 | out_reg: | 363 | out_reg: |
| 364 | ret = register_ftrace_function_probe(glob, ops, count); | 364 | ret = register_ftrace_function_probe(glob, ops, count); |
| 365 | 365 | ||
| 366 | return ret; | 366 | return ret < 0 ? ret : 0; |
| 367 | } | 367 | } |
| 368 | 368 | ||
| 369 | static struct ftrace_func_command ftrace_traceon_cmd = { | 369 | static struct ftrace_func_command ftrace_traceon_cmd = { |
diff --git a/sound/arm/pxa2xx-pcm-lib.c b/sound/arm/pxa2xx-pcm-lib.c index 108b643229ba..6205f37d547c 100644 --- a/sound/arm/pxa2xx-pcm-lib.c +++ b/sound/arm/pxa2xx-pcm-lib.c | |||
| @@ -75,7 +75,7 @@ int __pxa2xx_pcm_hw_free(struct snd_pcm_substream *substream) | |||
| 75 | { | 75 | { |
| 76 | struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; | 76 | struct pxa2xx_runtime_data *rtd = substream->runtime->private_data; |
| 77 | 77 | ||
| 78 | if (rtd && rtd->params) | 78 | if (rtd && rtd->params && rtd->params->drcmr) |
| 79 | *rtd->params->drcmr = 0; | 79 | *rtd->params->drcmr = 0; |
| 80 | 80 | ||
| 81 | snd_pcm_set_runtime_buffer(substream, NULL); | 81 | snd_pcm_set_runtime_buffer(substream, NULL); |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index bbb9b42e2604..7e99763ca527 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -4505,6 +4505,12 @@ static int alc880_parse_auto_config(struct hda_codec *codec) | |||
| 4505 | &dig_nid, 1); | 4505 | &dig_nid, 1); |
| 4506 | if (err < 0) | 4506 | if (err < 0) |
| 4507 | continue; | 4507 | continue; |
| 4508 | if (dig_nid > 0x7f) { | ||
| 4509 | printk(KERN_ERR "alc880_auto: invalid dig_nid " | ||
| 4510 | "connection 0x%x for NID 0x%x\n", dig_nid, | ||
| 4511 | spec->autocfg.dig_out_pins[i]); | ||
| 4512 | continue; | ||
| 4513 | } | ||
| 4508 | if (!i) | 4514 | if (!i) |
| 4509 | spec->multiout.dig_out_nid = dig_nid; | 4515 | spec->multiout.dig_out_nid = dig_nid; |
| 4510 | else { | 4516 | else { |
diff --git a/sound/pci/riptide/riptide.c b/sound/pci/riptide/riptide.c index 235a71e5ac8d..b5ca02e2038c 100644 --- a/sound/pci/riptide/riptide.c +++ b/sound/pci/riptide/riptide.c | |||
| @@ -2197,9 +2197,12 @@ static int __init alsa_card_riptide_init(void) | |||
| 2197 | if (err < 0) | 2197 | if (err < 0) |
| 2198 | return err; | 2198 | return err; |
| 2199 | #if defined(SUPPORT_JOYSTICK) | 2199 | #if defined(SUPPORT_JOYSTICK) |
| 2200 | pci_register_driver(&joystick_driver); | 2200 | err = pci_register_driver(&joystick_driver); |
| 2201 | /* On failure unregister formerly registered audio driver */ | ||
| 2202 | if (err < 0) | ||
| 2203 | pci_unregister_driver(&driver); | ||
| 2201 | #endif | 2204 | #endif |
| 2202 | return 0; | 2205 | return err; |
| 2203 | } | 2206 | } |
| 2204 | 2207 | ||
| 2205 | static void __exit alsa_card_riptide_exit(void) | 2208 | static void __exit alsa_card_riptide_exit(void) |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index c7b902358b7b..44b9cdc8a83b 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
| @@ -2661,7 +2661,7 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) | |||
| 2661 | struct usb_interface_descriptor *altsd; | 2661 | struct usb_interface_descriptor *altsd; |
| 2662 | int i, altno, err, stream; | 2662 | int i, altno, err, stream; |
| 2663 | int format; | 2663 | int format; |
| 2664 | struct audioformat *fp; | 2664 | struct audioformat *fp = NULL; |
| 2665 | unsigned char *fmt, *csep; | 2665 | unsigned char *fmt, *csep; |
| 2666 | int num; | 2666 | int num; |
| 2667 | 2667 | ||
| @@ -2734,6 +2734,18 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no) | |||
| 2734 | continue; | 2734 | continue; |
| 2735 | } | 2735 | } |
| 2736 | 2736 | ||
| 2737 | /* | ||
| 2738 | * Blue Microphones workaround: The last altsetting is identical | ||
| 2739 | * with the previous one, except for a larger packet size, but | ||
| 2740 | * is actually a mislabeled two-channel setting; ignore it. | ||
| 2741 | */ | ||
| 2742 | if (fmt[4] == 1 && fmt[5] == 2 && altno == 2 && num == 3 && | ||
| 2743 | fp && fp->altsetting == 1 && fp->channels == 1 && | ||
| 2744 | fp->format == SNDRV_PCM_FORMAT_S16_LE && | ||
| 2745 | le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == | ||
| 2746 | fp->maxpacksize * 2) | ||
| 2747 | continue; | ||
| 2748 | |||
| 2737 | csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT); | 2749 | csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT); |
| 2738 | /* Creamware Noah has this descriptor after the 2nd endpoint */ | 2750 | /* Creamware Noah has this descriptor after the 2nd endpoint */ |
| 2739 | if (!csep && altsd->bNumEndpoints >= 2) | 2751 | if (!csep && altsd->bNumEndpoints >= 2) |
