diff options
28 files changed, 99 insertions, 95 deletions
diff --git a/Documentation/usb/gadget_serial.txt b/Documentation/usb/gadget_serial.txt index 9b22bd14c348..eac7df94d8e3 100644 --- a/Documentation/usb/gadget_serial.txt +++ b/Documentation/usb/gadget_serial.txt | |||
| @@ -114,11 +114,11 @@ modules. | |||
| 114 | Then you must load the gadget serial driver. To load it as an | 114 | Then you must load the gadget serial driver. To load it as an |
| 115 | ACM device (recommended for interoperability), do this: | 115 | ACM device (recommended for interoperability), do this: |
| 116 | 116 | ||
| 117 | modprobe g_serial use_acm=1 | 117 | modprobe g_serial |
| 118 | 118 | ||
| 119 | To load it as a vendor specific bulk in/out device, do this: | 119 | To load it as a vendor specific bulk in/out device, do this: |
| 120 | 120 | ||
| 121 | modprobe g_serial | 121 | modprobe g_serial use_acm=0 |
| 122 | 122 | ||
| 123 | This will also automatically load the underlying gadget peripheral | 123 | This will also automatically load the underlying gadget peripheral |
| 124 | controller driver. This must be done each time you reboot the gadget | 124 | controller driver. This must be done each time you reboot the gadget |
diff --git a/Documentation/usb/proc_usb_info.txt b/Documentation/usb/proc_usb_info.txt index 077e9032d0cd..fafcd4723260 100644 --- a/Documentation/usb/proc_usb_info.txt +++ b/Documentation/usb/proc_usb_info.txt | |||
| @@ -49,8 +49,10 @@ it and 002/048 sometime later. | |||
| 49 | 49 | ||
| 50 | These files can be read as binary data. The binary data consists | 50 | These files can be read as binary data. The binary data consists |
| 51 | of first the device descriptor, then the descriptors for each | 51 | of first the device descriptor, then the descriptors for each |
| 52 | configuration of the device. That information is also shown in | 52 | configuration of the device. Multi-byte fields in the device and |
| 53 | text form by the /proc/bus/usb/devices file, described later. | 53 | configuration descriptors, but not other descriptors, are converted |
| 54 | to host endianness by the kernel. This information is also shown | ||
| 55 | in text form by the /proc/bus/usb/devices file, described later. | ||
| 54 | 56 | ||
| 55 | These files may also be used to write user-level drivers for the USB | 57 | These files may also be used to write user-level drivers for the USB |
| 56 | devices. You would open the /proc/bus/usb/BBB/DDD file read/write, | 58 | devices. You would open the /proc/bus/usb/BBB/DDD file read/write, |
diff --git a/Documentation/usb/usbmon.txt b/Documentation/usb/usbmon.txt index 2917ce4ffdc4..270481906dc8 100644 --- a/Documentation/usb/usbmon.txt +++ b/Documentation/usb/usbmon.txt | |||
| @@ -34,11 +34,12 @@ if usbmon is built into the kernel. | |||
| 34 | Verify that bus sockets are present. | 34 | Verify that bus sockets are present. |
| 35 | 35 | ||
| 36 | # ls /sys/kernel/debug/usbmon | 36 | # ls /sys/kernel/debug/usbmon |
| 37 | 0s 0t 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u | 37 | 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u |
| 38 | # | 38 | # |
| 39 | 39 | ||
| 40 | Now you can choose to either use the sockets numbered '0' (to capture packets on | 40 | Now you can choose to either use the socket '0u' (to capture packets on all |
| 41 | all buses), and skip to step #3, or find the bus used by your device with step #2. | 41 | buses), and skip to step #3, or find the bus used by your device with step #2. |
| 42 | This allows to filter away annoying devices that talk continuously. | ||
| 42 | 43 | ||
| 43 | 2. Find which bus connects to the desired device | 44 | 2. Find which bus connects to the desired device |
| 44 | 45 | ||
| @@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types. | |||
| 99 | 100 | ||
| 100 | Here is the list of words, from left to right: | 101 | Here is the list of words, from left to right: |
| 101 | 102 | ||
| 102 | - URB Tag. This is used to identify URBs is normally a kernel mode address | 103 | - URB Tag. This is used to identify URBs, and is normally an in-kernel address |
| 103 | of the URB structure in hexadecimal. | 104 | of the URB structure in hexadecimal, but can be a sequence number or any |
| 105 | other unique string, within reason. | ||
| 104 | 106 | ||
| 105 | - Timestamp in microseconds, a decimal number. The timestamp's resolution | 107 | - Timestamp in microseconds, a decimal number. The timestamp's resolution |
| 106 | depends on available clock, and so it can be much worse than a microsecond | 108 | depends on available clock, and so it can be much worse than a microsecond |
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S index d108715129e2..5c33bc14bd9f 100644 --- a/arch/powerpc/kernel/misc_32.S +++ b/arch/powerpc/kernel/misc_32.S | |||
| @@ -486,13 +486,13 @@ _GLOBAL(_tlbil_va) | |||
| 486 | tlbsx 0,r3 | 486 | tlbsx 0,r3 |
| 487 | mfspr r4,SPRN_MAS1 /* check valid */ | 487 | mfspr r4,SPRN_MAS1 /* check valid */ |
| 488 | andis. r3,r4,MAS1_VALID@h | 488 | andis. r3,r4,MAS1_VALID@h |
| 489 | beqlr | 489 | beq 1f |
| 490 | rlwinm r4,r4,0,1,31 | 490 | rlwinm r4,r4,0,1,31 |
| 491 | mtspr SPRN_MAS1,r4 | 491 | mtspr SPRN_MAS1,r4 |
| 492 | tlbwe | 492 | tlbwe |
| 493 | msync | 493 | msync |
| 494 | isync | 494 | isync |
| 495 | wrtee r10 | 495 | 1: wrtee r10 |
| 496 | blr | 496 | blr |
| 497 | #endif /* CONFIG_FSL_BOOKE */ | 497 | #endif /* CONFIG_FSL_BOOKE */ |
| 498 | 498 | ||
diff --git a/arch/powerpc/lib/rheap.c b/arch/powerpc/lib/rheap.c index 29b2941cada0..45907c1dae66 100644 --- a/arch/powerpc/lib/rheap.c +++ b/arch/powerpc/lib/rheap.c | |||
| @@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co | |||
| 556 | be = blk->start + blk->size; | 556 | be = blk->start + blk->size; |
| 557 | if (s >= bs && e <= be) | 557 | if (s >= bs && e <= be) |
| 558 | break; | 558 | break; |
| 559 | blk = NULL; | ||
| 559 | } | 560 | } |
| 560 | 561 | ||
| 561 | if (blk == NULL) | 562 | if (blk == NULL) |
diff --git a/drivers/char/xilinx_hwicap/buffer_icap.c b/drivers/char/xilinx_hwicap/buffer_icap.c index aa7f7962a9a0..05d897764f02 100644 --- a/drivers/char/xilinx_hwicap/buffer_icap.c +++ b/drivers/char/xilinx_hwicap/buffer_icap.c | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2003-2008 Xilinx Inc. | 24 | * (c) Copyright 2003-2008 Xilinx Inc. |
| 28 | * All rights reserved. | 25 | * All rights reserved. |
| 29 | * | 26 | * |
diff --git a/drivers/char/xilinx_hwicap/buffer_icap.h b/drivers/char/xilinx_hwicap/buffer_icap.h index 8b0252bf06e2..d4f419ee87ab 100644 --- a/drivers/char/xilinx_hwicap/buffer_icap.h +++ b/drivers/char/xilinx_hwicap/buffer_icap.h | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2003-2008 Xilinx Inc. | 24 | * (c) Copyright 2003-2008 Xilinx Inc. |
| 28 | * All rights reserved. | 25 | * All rights reserved. |
| 29 | * | 26 | * |
diff --git a/drivers/char/xilinx_hwicap/fifo_icap.c b/drivers/char/xilinx_hwicap/fifo_icap.c index 776b50528478..02225eb19cf6 100644 --- a/drivers/char/xilinx_hwicap/fifo_icap.c +++ b/drivers/char/xilinx_hwicap/fifo_icap.c | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2007-2008 Xilinx Inc. | 24 | * (c) Copyright 2007-2008 Xilinx Inc. |
| 28 | * All rights reserved. | 25 | * All rights reserved. |
| 29 | * | 26 | * |
diff --git a/drivers/char/xilinx_hwicap/fifo_icap.h b/drivers/char/xilinx_hwicap/fifo_icap.h index 62bda453c90b..4c9dd9a3b62a 100644 --- a/drivers/char/xilinx_hwicap/fifo_icap.h +++ b/drivers/char/xilinx_hwicap/fifo_icap.h | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2007-2008 Xilinx Inc. | 24 | * (c) Copyright 2007-2008 Xilinx Inc. |
| 28 | * All rights reserved. | 25 | * All rights reserved. |
| 29 | * | 26 | * |
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.c b/drivers/char/xilinx_hwicap/xilinx_hwicap.c index d16131949097..f40ab699860f 100644 --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2002 Xilinx Inc., Systems Engineering Group | 24 | * (c) Copyright 2002 Xilinx Inc., Systems Engineering Group |
| 28 | * (c) Copyright 2004 Xilinx Inc., Systems Engineering Group | 25 | * (c) Copyright 2004 Xilinx Inc., Systems Engineering Group |
| 29 | * (c) Copyright 2007-2008 Xilinx Inc. | 26 | * (c) Copyright 2007-2008 Xilinx Inc. |
diff --git a/drivers/char/xilinx_hwicap/xilinx_hwicap.h b/drivers/char/xilinx_hwicap/xilinx_hwicap.h index 24d0d9b938fb..8cca11981c5f 100644 --- a/drivers/char/xilinx_hwicap/xilinx_hwicap.h +++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.h | |||
| @@ -21,9 +21,6 @@ | |||
| 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | 21 | * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
| 22 | * FOR A PARTICULAR PURPOSE. | 22 | * FOR A PARTICULAR PURPOSE. |
| 23 | * | 23 | * |
| 24 | * Xilinx products are not intended for use in life support appliances, | ||
| 25 | * devices, or systems. Use in such applications is expressly prohibited. | ||
| 26 | * | ||
| 27 | * (c) Copyright 2003-2007 Xilinx Inc. | 24 | * (c) Copyright 2003-2007 Xilinx Inc. |
| 28 | * All rights reserved. | 25 | * All rights reserved. |
| 29 | * | 26 | * |
diff --git a/drivers/i2c/busses/i2c-cpm.c b/drivers/i2c/busses/i2c-cpm.c index 228f75723063..3fcf78e906db 100644 --- a/drivers/i2c/busses/i2c-cpm.c +++ b/drivers/i2c/busses/i2c-cpm.c | |||
| @@ -365,6 +365,7 @@ static int cpm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) | |||
| 365 | pmsg = &msgs[tptr]; | 365 | pmsg = &msgs[tptr]; |
| 366 | if (pmsg->flags & I2C_M_RD) | 366 | if (pmsg->flags & I2C_M_RD) |
| 367 | ret = wait_event_interruptible_timeout(cpm->i2c_wait, | 367 | ret = wait_event_interruptible_timeout(cpm->i2c_wait, |
| 368 | (in_be16(&tbdf[tptr].cbd_sc) & BD_SC_NAK) || | ||
| 368 | !(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY), | 369 | !(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY), |
| 369 | 1 * HZ); | 370 | 1 * HZ); |
| 370 | else | 371 | else |
diff --git a/drivers/i2c/busses/i2c-s3c2410.c b/drivers/i2c/busses/i2c-s3c2410.c index 1fac4e233133..b7434d24904e 100644 --- a/drivers/i2c/busses/i2c-s3c2410.c +++ b/drivers/i2c/busses/i2c-s3c2410.c | |||
| @@ -56,6 +56,7 @@ enum s3c24xx_i2c_state { | |||
| 56 | struct s3c24xx_i2c { | 56 | struct s3c24xx_i2c { |
| 57 | spinlock_t lock; | 57 | spinlock_t lock; |
| 58 | wait_queue_head_t wait; | 58 | wait_queue_head_t wait; |
| 59 | unsigned int suspended:1; | ||
| 59 | 60 | ||
| 60 | struct i2c_msg *msg; | 61 | struct i2c_msg *msg; |
| 61 | unsigned int msg_num; | 62 | unsigned int msg_num; |
| @@ -507,7 +508,7 @@ static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, struct i2c_msg *msgs, int | |||
| 507 | unsigned long timeout; | 508 | unsigned long timeout; |
| 508 | int ret; | 509 | int ret; |
| 509 | 510 | ||
| 510 | if (!(readl(i2c->regs + S3C2410_IICCON) & S3C2410_IICCON_IRQEN)) | 511 | if (i2c->suspended) |
| 511 | return -EIO; | 512 | return -EIO; |
| 512 | 513 | ||
| 513 | ret = s3c24xx_i2c_set_master(i2c); | 514 | ret = s3c24xx_i2c_set_master(i2c); |
| @@ -986,17 +987,26 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev) | |||
| 986 | } | 987 | } |
| 987 | 988 | ||
| 988 | #ifdef CONFIG_PM | 989 | #ifdef CONFIG_PM |
| 990 | static int s3c24xx_i2c_suspend_late(struct platform_device *dev, | ||
| 991 | pm_message_t msg) | ||
| 992 | { | ||
| 993 | struct s3c24xx_i2c *i2c = platform_get_drvdata(dev); | ||
| 994 | i2c->suspended = 1; | ||
| 995 | return 0; | ||
| 996 | } | ||
| 997 | |||
| 989 | static int s3c24xx_i2c_resume(struct platform_device *dev) | 998 | static int s3c24xx_i2c_resume(struct platform_device *dev) |
| 990 | { | 999 | { |
| 991 | struct s3c24xx_i2c *i2c = platform_get_drvdata(dev); | 1000 | struct s3c24xx_i2c *i2c = platform_get_drvdata(dev); |
| 992 | 1001 | ||
| 993 | if (i2c != NULL) | 1002 | i2c->suspended = 0; |
| 994 | s3c24xx_i2c_init(i2c); | 1003 | s3c24xx_i2c_init(i2c); |
| 995 | 1004 | ||
| 996 | return 0; | 1005 | return 0; |
| 997 | } | 1006 | } |
| 998 | 1007 | ||
| 999 | #else | 1008 | #else |
| 1009 | #define s3c24xx_i2c_suspend_late NULL | ||
| 1000 | #define s3c24xx_i2c_resume NULL | 1010 | #define s3c24xx_i2c_resume NULL |
| 1001 | #endif | 1011 | #endif |
| 1002 | 1012 | ||
| @@ -1005,6 +1015,7 @@ static int s3c24xx_i2c_resume(struct platform_device *dev) | |||
| 1005 | static struct platform_driver s3c2410_i2c_driver = { | 1015 | static struct platform_driver s3c2410_i2c_driver = { |
| 1006 | .probe = s3c24xx_i2c_probe, | 1016 | .probe = s3c24xx_i2c_probe, |
| 1007 | .remove = s3c24xx_i2c_remove, | 1017 | .remove = s3c24xx_i2c_remove, |
| 1018 | .suspend_late = s3c24xx_i2c_suspend_late, | ||
| 1008 | .resume = s3c24xx_i2c_resume, | 1019 | .resume = s3c24xx_i2c_resume, |
| 1009 | .driver = { | 1020 | .driver = { |
| 1010 | .owner = THIS_MODULE, | 1021 | .owner = THIS_MODULE, |
| @@ -1015,6 +1026,7 @@ static struct platform_driver s3c2410_i2c_driver = { | |||
| 1015 | static struct platform_driver s3c2440_i2c_driver = { | 1026 | static struct platform_driver s3c2440_i2c_driver = { |
| 1016 | .probe = s3c24xx_i2c_probe, | 1027 | .probe = s3c24xx_i2c_probe, |
| 1017 | .remove = s3c24xx_i2c_remove, | 1028 | .remove = s3c24xx_i2c_remove, |
| 1029 | .suspend_late = s3c24xx_i2c_suspend_late, | ||
| 1018 | .resume = s3c24xx_i2c_resume, | 1030 | .resume = s3c24xx_i2c_resume, |
| 1019 | .driver = { | 1031 | .driver = { |
| 1020 | .owner = THIS_MODULE, | 1032 | .owner = THIS_MODULE, |
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index c95b286a1239..5d457c96bd7e 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig | |||
| @@ -22,6 +22,8 @@ menuconfig STAGING | |||
| 22 | If in doubt, say N here. | 22 | If in doubt, say N here. |
| 23 | 23 | ||
| 24 | 24 | ||
| 25 | if STAGING | ||
| 26 | |||
| 25 | config STAGING_EXCLUDE_BUILD | 27 | config STAGING_EXCLUDE_BUILD |
| 26 | bool "Exclude Staging drivers from being built" if STAGING | 28 | bool "Exclude Staging drivers from being built" if STAGING |
| 27 | default y | 29 | default y |
| @@ -62,3 +64,4 @@ source "drivers/staging/at76_usb/Kconfig" | |||
| 62 | source "drivers/staging/poch/Kconfig" | 64 | source "drivers/staging/poch/Kconfig" |
| 63 | 65 | ||
| 64 | endif # !STAGING_EXCLUDE_BUILD | 66 | endif # !STAGING_EXCLUDE_BUILD |
| 67 | endif # STAGING | ||
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c index 8e74657f106c..43a863c5cc43 100644 --- a/drivers/usb/class/usbtmc.c +++ b/drivers/usb/class/usbtmc.c | |||
| @@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = { | |||
| 51 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, | 51 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, |
| 52 | { 0, } /* terminating entry */ | 52 | { 0, } /* terminating entry */ |
| 53 | }; | 53 | }; |
| 54 | MODULE_DEVICE_TABLE(usb, usbtmc_devices); | ||
| 54 | 55 | ||
| 55 | /* | 56 | /* |
| 56 | * This structure is the capabilities for the device | 57 | * This structure is the capabilities for the device |
diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c index 3d7793d93031..8c081308b0e2 100644 --- a/drivers/usb/core/driver.c +++ b/drivers/usb/core/driver.c | |||
| @@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev) | |||
| 279 | * altsetting means creating new endpoint device entries). | 279 | * altsetting means creating new endpoint device entries). |
| 280 | * When either of these happens, defer the Set-Interface. | 280 | * When either of these happens, defer the Set-Interface. |
| 281 | */ | 281 | */ |
| 282 | if (!error && intf->dev.power.status == DPM_ON) | 282 | if (intf->cur_altsetting->desc.bAlternateSetting == 0) |
| 283 | ; /* Already in altsetting 0 so skip Set-Interface */ | ||
| 284 | else if (!error && intf->dev.power.status == DPM_ON) | ||
| 283 | usb_set_interface(udev, intf->altsetting[0]. | 285 | usb_set_interface(udev, intf->altsetting[0]. |
| 284 | desc.bInterfaceNumber, 0); | 286 | desc.bInterfaceNumber, 0); |
| 285 | else | 287 | else |
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c index 428b5993575a..3a8bb53fc473 100644 --- a/drivers/usb/gadget/f_rndis.c +++ b/drivers/usb/gadget/f_rndis.c | |||
| @@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) | |||
| 651 | fs_in_desc.bEndpointAddress; | 651 | fs_in_desc.bEndpointAddress; |
| 652 | hs_out_desc.bEndpointAddress = | 652 | hs_out_desc.bEndpointAddress = |
| 653 | fs_out_desc.bEndpointAddress; | 653 | fs_out_desc.bEndpointAddress; |
| 654 | hs_notify_desc.bEndpointAddress = | ||
| 655 | fs_notify_desc.bEndpointAddress; | ||
| 654 | 656 | ||
| 655 | /* copy descriptors, and track endpoint copies */ | 657 | /* copy descriptors, and track endpoint copies */ |
| 656 | f->hs_descriptors = usb_copy_descriptors(eth_hs_function); | 658 | f->hs_descriptors = usb_copy_descriptors(eth_hs_function); |
| @@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) | |||
| 662 | f->hs_descriptors, &hs_in_desc); | 664 | f->hs_descriptors, &hs_in_desc); |
| 663 | rndis->hs.out = usb_find_endpoint(eth_hs_function, | 665 | rndis->hs.out = usb_find_endpoint(eth_hs_function, |
| 664 | f->hs_descriptors, &hs_out_desc); | 666 | f->hs_descriptors, &hs_out_desc); |
| 667 | rndis->hs.notify = usb_find_endpoint(eth_hs_function, | ||
| 668 | f->hs_descriptors, &hs_notify_desc); | ||
| 665 | } | 669 | } |
| 666 | 670 | ||
| 667 | rndis->port.open = rndis_open; | 671 | rndis->port.open = rndis_open; |
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index aad1359a3eb1..fb6f2933b01b 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { | |||
| 143 | static struct usb_device_id id_table_combined [] = { | 143 | static struct usb_device_id id_table_combined [] = { |
| 144 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, | 144 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, |
| 145 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, | 145 | { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, |
| 146 | { USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) }, | ||
| 146 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, | 147 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, |
| 147 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, | 148 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, |
| 148 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, | 149 | { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, |
| @@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = { | |||
| 166 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) }, | 167 | { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) }, |
| 167 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, | 168 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, |
| 168 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, | 169 | { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, |
| 170 | { USB_DEVICE(FTDI_VID, FTDI_SPROG_II) }, | ||
| 169 | { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, | 171 | { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, |
| 170 | { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, | 172 | { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, |
| 171 | { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) }, | 173 | { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index 07a3992abad2..373ee09975bb 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -40,6 +40,9 @@ | |||
| 40 | /* AlphaMicro Components AMC-232USB01 device */ | 40 | /* AlphaMicro Components AMC-232USB01 device */ |
| 41 | #define FTDI_AMC232_PID 0xFF00 /* Product Id */ | 41 | #define FTDI_AMC232_PID 0xFF00 /* Product Id */ |
| 42 | 42 | ||
| 43 | /* www.candapter.com Ewert Energy Systems CANdapter device */ | ||
| 44 | #define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */ | ||
| 45 | |||
| 43 | /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ | 46 | /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ |
| 44 | /* the VID is the standard ftdi vid (FTDI_VID) */ | 47 | /* the VID is the standard ftdi vid (FTDI_VID) */ |
| 45 | #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ | 48 | #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ |
| @@ -75,6 +78,9 @@ | |||
| 75 | /* OpenDCC (www.opendcc.de) product id */ | 78 | /* OpenDCC (www.opendcc.de) product id */ |
| 76 | #define FTDI_OPENDCC_PID 0xBFD8 | 79 | #define FTDI_OPENDCC_PID 0xBFD8 |
| 77 | 80 | ||
| 81 | /* Sprog II (Andrew Crosland's SprogII DCC interface) */ | ||
| 82 | #define FTDI_SPROG_II 0xF0C8 | ||
| 83 | |||
| 78 | /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ | 84 | /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ |
| 79 | /* they use the ftdi chipset for the USB interface and the vendor id is the same */ | 85 | /* they use the ftdi chipset for the USB interface and the vendor id is the same */ |
| 80 | #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ | 86 | #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 491c8857b644..1aed584be5eb 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
| @@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = { | |||
| 91 | { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, | 91 | { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, |
| 92 | { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, | 92 | { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, |
| 93 | { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, | 93 | { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, |
| 94 | { USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) }, | ||
| 95 | { USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) }, | ||
| 94 | { } /* Terminating entry */ | 96 | { } /* Terminating entry */ |
| 95 | }; | 97 | }; |
| 96 | 98 | ||
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index a3bd039c78e9..54974f446a8c 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
| @@ -110,3 +110,11 @@ | |||
| 110 | /* Y.C. Cable U.S.A., Inc - USB to RS-232 */ | 110 | /* Y.C. Cable U.S.A., Inc - USB to RS-232 */ |
| 111 | #define YCCABLE_VENDOR_ID 0x05ad | 111 | #define YCCABLE_VENDOR_ID 0x05ad |
| 112 | #define YCCABLE_PRODUCT_ID 0x0fba | 112 | #define YCCABLE_PRODUCT_ID 0x0fba |
| 113 | |||
| 114 | /* "Superial" USB - Serial */ | ||
| 115 | #define SUPERIAL_VENDOR_ID 0x5372 | ||
| 116 | #define SUPERIAL_PRODUCT_ID 0x2303 | ||
| 117 | |||
| 118 | /* Hewlett-Packard LD220-HP POS Pole Display */ | ||
| 119 | #define HP_VENDOR_ID 0x03f0 | ||
| 120 | #define HP_LD220_PRODUCT_ID 0x3524 | ||
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 31c42d1cae13..01d0c70d60e9 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c | |||
| @@ -16,56 +16,6 @@ | |||
| 16 | * For questions or problems with this driver, contact Texas Instruments | 16 | * For questions or problems with this driver, contact Texas Instruments |
| 17 | * technical support, or Al Borchers <alborchers@steinerpoint.com>, or | 17 | * technical support, or Al Borchers <alborchers@steinerpoint.com>, or |
| 18 | * Peter Berger <pberger@brimson.com>. | 18 | * Peter Berger <pberger@brimson.com>. |
| 19 | * | ||
| 20 | * This driver needs this hotplug script in /etc/hotplug/usb/ti_usb_3410_5052 | ||
| 21 | * or in /etc/hotplug.d/usb/ti_usb_3410_5052.hotplug to set the device | ||
| 22 | * configuration. | ||
| 23 | * | ||
| 24 | * #!/bin/bash | ||
| 25 | * | ||
| 26 | * BOOT_CONFIG=1 | ||
| 27 | * ACTIVE_CONFIG=2 | ||
| 28 | * | ||
| 29 | * if [[ "$ACTION" != "add" ]] | ||
| 30 | * then | ||
| 31 | * exit | ||
| 32 | * fi | ||
| 33 | * | ||
| 34 | * CONFIG_PATH=/sys${DEVPATH%/?*}/bConfigurationValue | ||
| 35 | * | ||
| 36 | * if [[ 0`cat $CONFIG_PATH` -ne $BOOT_CONFIG ]] | ||
| 37 | * then | ||
| 38 | * exit | ||
| 39 | * fi | ||
| 40 | * | ||
| 41 | * PRODUCT=${PRODUCT%/?*} # delete version | ||
| 42 | * VENDOR_ID=`printf "%d" 0x${PRODUCT%/?*}` | ||
| 43 | * PRODUCT_ID=`printf "%d" 0x${PRODUCT#*?/}` | ||
| 44 | * | ||
| 45 | * PARAM_PATH=/sys/module/ti_usb_3410_5052/parameters | ||
| 46 | * | ||
| 47 | * function scan() { | ||
| 48 | * s=$1 | ||
| 49 | * shift | ||
| 50 | * for i | ||
| 51 | * do | ||
| 52 | * if [[ $s -eq $i ]] | ||
| 53 | * then | ||
| 54 | * return 0 | ||
| 55 | * fi | ||
| 56 | * done | ||
| 57 | * return 1 | ||
| 58 | * } | ||
| 59 | * | ||
| 60 | * IFS=$IFS, | ||
| 61 | * | ||
| 62 | * if (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_3410` && | ||
| 63 | * scan $PRODUCT_ID 13328 `cat $PARAM_PATH/product_3410`) || | ||
| 64 | * (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_5052` && | ||
| 65 | * scan $PRODUCT_ID 20562 20818 20570 20575 `cat $PARAM_PATH/product_5052`) | ||
| 66 | * then | ||
| 67 | * echo $ACTIVE_CONFIG > $CONFIG_PATH | ||
| 68 | * fi | ||
| 69 | */ | 19 | */ |
| 70 | 20 | ||
| 71 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
| @@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial) | |||
| 457 | goto free_tdev; | 407 | goto free_tdev; |
| 458 | } | 408 | } |
| 459 | 409 | ||
| 460 | /* the second configuration must be set (in sysfs by hotplug script) */ | 410 | /* the second configuration must be set */ |
| 461 | if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) { | 411 | if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) { |
| 462 | status = -ENODEV; | 412 | status = usb_driver_set_configuration(dev, TI_ACTIVE_CONFIG); |
| 413 | status = status ? status : -ENODEV; | ||
| 463 | goto free_tdev; | 414 | goto free_tdev; |
| 464 | } | 415 | } |
| 465 | 416 | ||
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index e61f2bfc64ad..bfcc1fe82518 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600, | |||
| 167 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 167 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 168 | US_FL_FIX_CAPACITY ), | 168 | US_FL_FIX_CAPACITY ), |
| 169 | 169 | ||
| 170 | /* Reported by Ozan Sener <themgzzy@gmail.com> */ | ||
| 171 | UNUSUAL_DEV( 0x0421, 0x0060, 0x0551, 0x0551, | ||
| 172 | "Nokia", | ||
| 173 | "3500c", | ||
| 174 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 175 | US_FL_FIX_CAPACITY ), | ||
| 176 | |||
| 177 | /* Reported by CSECSY Laszlo <boobaa@frugalware.org> */ | ||
| 178 | UNUSUAL_DEV( 0x0421, 0x0063, 0x0001, 0x0601, | ||
| 179 | "Nokia", | ||
| 180 | "Nokia 3109c", | ||
| 181 | US_SC_DEVICE, US_PR_DEVICE, NULL, | ||
| 182 | US_FL_FIX_CAPACITY ), | ||
| 183 | |||
| 170 | /* Patch for Nokia 5310 capacity */ | 184 | /* Patch for Nokia 5310 capacity */ |
| 171 | UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, | 185 | UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0701, |
| 172 | "Nokia", | 186 | "Nokia", |
| 173 | "5310", | 187 | "5310", |
| 174 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 188 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 2af8626ced43..6d51696dc762 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -3983,7 +3983,8 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, | |||
| 3983 | 3983 | ||
| 3984 | node->flags = le16_to_cpu(pSMBr->DFSFlags); | 3984 | node->flags = le16_to_cpu(pSMBr->DFSFlags); |
| 3985 | if (is_unicode) { | 3985 | if (is_unicode) { |
| 3986 | __le16 *tmp = kmalloc(strlen(searchName)*2, GFP_KERNEL); | 3986 | __le16 *tmp = kmalloc(strlen(searchName)*2 + 2, |
| 3987 | GFP_KERNEL); | ||
| 3987 | cifsConvertToUCS((__le16 *) tmp, searchName, | 3988 | cifsConvertToUCS((__le16 *) tmp, searchName, |
| 3988 | PATH_MAX, nls_codepage, remap); | 3989 | PATH_MAX, nls_codepage, remap); |
| 3989 | node->path_consumed = hostlen_fromUCS(tmp, | 3990 | node->path_consumed = hostlen_fromUCS(tmp, |
diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h index 5f180cf7abbd..5e0c0d0aef7d 100644 --- a/fs/ocfs2/ocfs2_fs.h +++ b/fs/ocfs2/ocfs2_fs.h | |||
| @@ -86,7 +86,8 @@ | |||
| 86 | #define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \ | 86 | #define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \ |
| 87 | OCFS2_SB(sb)->s_feature_incompat &= ~(mask) | 87 | OCFS2_SB(sb)->s_feature_incompat &= ~(mask) |
| 88 | 88 | ||
| 89 | #define OCFS2_FEATURE_COMPAT_SUPP OCFS2_FEATURE_COMPAT_BACKUP_SB | 89 | #define OCFS2_FEATURE_COMPAT_SUPP (OCFS2_FEATURE_COMPAT_BACKUP_SB \ |
| 90 | | OCFS2_FEATURE_COMPAT_JBD2_SB) | ||
| 90 | #define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \ | 91 | #define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \ |
| 91 | | OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \ | 92 | | OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \ |
| 92 | | OCFS2_FEATURE_INCOMPAT_INLINE_DATA \ | 93 | | OCFS2_FEATURE_INCOMPAT_INLINE_DATA \ |
| @@ -153,6 +154,11 @@ | |||
| 153 | #define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001 | 154 | #define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001 |
| 154 | 155 | ||
| 155 | /* | 156 | /* |
| 157 | * The filesystem will correctly handle journal feature bits. | ||
| 158 | */ | ||
| 159 | #define OCFS2_FEATURE_COMPAT_JBD2_SB 0x0002 | ||
| 160 | |||
| 161 | /* | ||
| 156 | * Unwritten extents support. | 162 | * Unwritten extents support. |
| 157 | */ | 163 | */ |
| 158 | #define OCFS2_FEATURE_RO_COMPAT_UNWRITTEN 0x0001 | 164 | #define OCFS2_FEATURE_RO_COMPAT_UNWRITTEN 0x0001 |
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c index 054e2efb0b7e..74d7367ade13 100644 --- a/fs/ocfs2/xattr.c +++ b/fs/ocfs2/xattr.c | |||
| @@ -2645,9 +2645,9 @@ static int ocfs2_xattr_update_xattr_search(struct inode *inode, | |||
| 2645 | return ret; | 2645 | return ret; |
| 2646 | } | 2646 | } |
| 2647 | 2647 | ||
| 2648 | i = xs->here - old_xh->xh_entries; | ||
| 2649 | xs->here = &xs->header->xh_entries[i]; | ||
| 2650 | } | 2648 | } |
| 2649 | i = xs->here - old_xh->xh_entries; | ||
| 2650 | xs->here = &xs->header->xh_entries[i]; | ||
| 2651 | } | 2651 | } |
| 2652 | 2652 | ||
| 2653 | return ret; | 2653 | return ret; |
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h index 73a2f4eb1f7a..9b42baed3900 100644 --- a/include/linux/usb/ch9.h +++ b/include/linux/usb/ch9.h | |||
| @@ -158,8 +158,12 @@ struct usb_ctrlrequest { | |||
| 158 | * (rarely) accepted by SET_DESCRIPTOR. | 158 | * (rarely) accepted by SET_DESCRIPTOR. |
| 159 | * | 159 | * |
| 160 | * Note that all multi-byte values here are encoded in little endian | 160 | * Note that all multi-byte values here are encoded in little endian |
| 161 | * byte order "on the wire". But when exposed through Linux-USB APIs, | 161 | * byte order "on the wire". Within the kernel and when exposed |
| 162 | * they've been converted to cpu byte order. | 162 | * through the Linux-USB APIs, they are not converted to cpu byte |
| 163 | * order; it is the responsibility of the client code to do this. | ||
| 164 | * The single exception is when device and configuration descriptors (but | ||
| 165 | * not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD); | ||
| 166 | * in this case the fields are converted to host endianness by the kernel. | ||
| 163 | */ | 167 | */ |
| 164 | 168 | ||
| 165 | /* | 169 | /* |
diff --git a/lib/dynamic_printk.c b/lib/dynamic_printk.c index d83660fd6fdd..8e30295e8566 100644 --- a/lib/dynamic_printk.c +++ b/lib/dynamic_printk.c | |||
| @@ -135,7 +135,7 @@ int unregister_dynamic_debug_module(char *mod_name) | |||
| 135 | nr_entries--; | 135 | nr_entries--; |
| 136 | out: | 136 | out: |
| 137 | up(&debug_list_mutex); | 137 | up(&debug_list_mutex); |
| 138 | return 0; | 138 | return ret; |
| 139 | } | 139 | } |
| 140 | EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module); | 140 | EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module); |
| 141 | 141 | ||
| @@ -289,7 +289,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf, | |||
| 289 | dynamic_enabled = DYNAMIC_ENABLED_SOME; | 289 | dynamic_enabled = DYNAMIC_ENABLED_SOME; |
| 290 | err = 0; | 290 | err = 0; |
| 291 | printk(KERN_DEBUG | 291 | printk(KERN_DEBUG |
| 292 | "debugging enabled for module %s", | 292 | "debugging enabled for module %s\n", |
| 293 | elem->name); | 293 | elem->name); |
| 294 | } else if (!value && (elem->enable == 1)) { | 294 | } else if (!value && (elem->enable == 1)) { |
| 295 | elem->enable = 0; | 295 | elem->enable = 0; |
| @@ -309,7 +309,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf, | |||
| 309 | err = 0; | 309 | err = 0; |
| 310 | printk(KERN_DEBUG | 310 | printk(KERN_DEBUG |
| 311 | "debugging disabled for module " | 311 | "debugging disabled for module " |
| 312 | "%s", elem->name); | 312 | "%s\n", elem->name); |
| 313 | } | 313 | } |
| 314 | } | 314 | } |
| 315 | } | 315 | } |
