Commit b9974dc6 authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'linus' into cpus4096

parents d733e00d 55dac3a5
...@@ -114,11 +114,11 @@ modules. ...@@ -114,11 +114,11 @@ modules.
Then you must load the gadget serial driver. To load it as an Then you must load the gadget serial driver. To load it as an
ACM device (recommended for interoperability), do this: ACM device (recommended for interoperability), do this:
modprobe g_serial use_acm=1 modprobe g_serial
To load it as a vendor specific bulk in/out device, do this: To load it as a vendor specific bulk in/out device, do this:
modprobe g_serial modprobe g_serial use_acm=0
This will also automatically load the underlying gadget peripheral This will also automatically load the underlying gadget peripheral
controller driver. This must be done each time you reboot the gadget controller driver. This must be done each time you reboot the gadget
......
...@@ -49,8 +49,10 @@ it and 002/048 sometime later. ...@@ -49,8 +49,10 @@ it and 002/048 sometime later.
These files can be read as binary data. The binary data consists These files can be read as binary data. The binary data consists
of first the device descriptor, then the descriptors for each of first the device descriptor, then the descriptors for each
configuration of the device. That information is also shown in configuration of the device. Multi-byte fields in the device and
text form by the /proc/bus/usb/devices file, described later. configuration descriptors, but not other descriptors, are converted
to host endianness by the kernel. This information is also shown
in text form by the /proc/bus/usb/devices file, described later.
These files may also be used to write user-level drivers for the USB These files may also be used to write user-level drivers for the USB
devices. You would open the /proc/bus/usb/BBB/DDD file read/write, devices. You would open the /proc/bus/usb/BBB/DDD file read/write,
......
...@@ -34,11 +34,12 @@ if usbmon is built into the kernel. ...@@ -34,11 +34,12 @@ if usbmon is built into the kernel.
Verify that bus sockets are present. Verify that bus sockets are present.
# ls /sys/kernel/debug/usbmon # ls /sys/kernel/debug/usbmon
0s 0t 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u 0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
# #
Now you can choose to either use the sockets numbered '0' (to capture packets on Now you can choose to either use the socket '0u' (to capture packets on all
all buses), and skip to step #3, or find the bus used by your device with step #2. buses), and skip to step #3, or find the bus used by your device with step #2.
This allows to filter away annoying devices that talk continuously.
2. Find which bus connects to the desired device 2. Find which bus connects to the desired device
...@@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types. ...@@ -99,8 +100,9 @@ on the event type, but there is a set of words, common for all types.
Here is the list of words, from left to right: Here is the list of words, from left to right:
- URB Tag. This is used to identify URBs is normally a kernel mode address - URB Tag. This is used to identify URBs, and is normally an in-kernel address
of the URB structure in hexadecimal. of the URB structure in hexadecimal, but can be a sequence number or any
other unique string, within reason.
- Timestamp in microseconds, a decimal number. The timestamp's resolution - Timestamp in microseconds, a decimal number. The timestamp's resolution
depends on available clock, and so it can be much worse than a microsecond depends on available clock, and so it can be much worse than a microsecond
......
...@@ -486,13 +486,13 @@ _GLOBAL(_tlbil_va) ...@@ -486,13 +486,13 @@ _GLOBAL(_tlbil_va)
tlbsx 0,r3 tlbsx 0,r3
mfspr r4,SPRN_MAS1 /* check valid */ mfspr r4,SPRN_MAS1 /* check valid */
andis. r3,r4,MAS1_VALID@h andis. r3,r4,MAS1_VALID@h
beqlr beq 1f
rlwinm r4,r4,0,1,31 rlwinm r4,r4,0,1,31
mtspr SPRN_MAS1,r4 mtspr SPRN_MAS1,r4
tlbwe tlbwe
msync msync
isync isync
wrtee r10 1: wrtee r10
blr blr
#endif /* CONFIG_FSL_BOOKE */ #endif /* CONFIG_FSL_BOOKE */
......
...@@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co ...@@ -556,6 +556,7 @@ unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, co
be = blk->start + blk->size; be = blk->start + blk->size;
if (s >= bs && e <= be) if (s >= bs && e <= be)
break; break;
blk = NULL;
} }
if (blk == NULL) if (blk == NULL)
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2008 Xilinx Inc. * (c) Copyright 2003-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2008 Xilinx Inc. * (c) Copyright 2003-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2002 Xilinx Inc., Systems Engineering Group * (c) Copyright 2002 Xilinx Inc., Systems Engineering Group
* (c) Copyright 2004 Xilinx Inc., Systems Engineering Group * (c) Copyright 2004 Xilinx Inc., Systems Engineering Group
* (c) Copyright 2007-2008 Xilinx Inc. * (c) Copyright 2007-2008 Xilinx Inc.
......
...@@ -21,9 +21,6 @@ ...@@ -21,9 +21,6 @@
* INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE. * FOR A PARTICULAR PURPOSE.
* *
* Xilinx products are not intended for use in life support appliances,
* devices, or systems. Use in such applications is expressly prohibited.
*
* (c) Copyright 2003-2007 Xilinx Inc. * (c) Copyright 2003-2007 Xilinx Inc.
* All rights reserved. * All rights reserved.
* *
......
...@@ -365,6 +365,7 @@ static int cpm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) ...@@ -365,6 +365,7 @@ static int cpm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
pmsg = &msgs[tptr]; pmsg = &msgs[tptr];
if (pmsg->flags & I2C_M_RD) if (pmsg->flags & I2C_M_RD)
ret = wait_event_interruptible_timeout(cpm->i2c_wait, ret = wait_event_interruptible_timeout(cpm->i2c_wait,
(in_be16(&tbdf[tptr].cbd_sc) & BD_SC_NAK) ||
!(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY), !(in_be16(&rbdf[rptr].cbd_sc) & BD_SC_EMPTY),
1 * HZ); 1 * HZ);
else else
......
...@@ -56,6 +56,7 @@ enum s3c24xx_i2c_state { ...@@ -56,6 +56,7 @@ enum s3c24xx_i2c_state {
struct s3c24xx_i2c { struct s3c24xx_i2c {
spinlock_t lock; spinlock_t lock;
wait_queue_head_t wait; wait_queue_head_t wait;
unsigned int suspended:1;
struct i2c_msg *msg; struct i2c_msg *msg;
unsigned int msg_num; unsigned int msg_num;
...@@ -507,7 +508,7 @@ static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, struct i2c_msg *msgs, int ...@@ -507,7 +508,7 @@ static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c, struct i2c_msg *msgs, int
unsigned long timeout; unsigned long timeout;
int ret; int ret;
if (!(readl(i2c->regs + S3C2410_IICCON) & S3C2410_IICCON_IRQEN)) if (i2c->suspended)
return -EIO; return -EIO;
ret = s3c24xx_i2c_set_master(i2c); ret = s3c24xx_i2c_set_master(i2c);
...@@ -986,17 +987,26 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev) ...@@ -986,17 +987,26 @@ static int s3c24xx_i2c_remove(struct platform_device *pdev)
} }
#ifdef CONFIG_PM #ifdef CONFIG_PM
static int s3c24xx_i2c_suspend_late(struct platform_device *dev,
pm_message_t msg)
{
struct s3c24xx_i2c *i2c = platform_get_drvdata(dev);
i2c->suspended = 1;
return 0;
}
static int s3c24xx_i2c_resume(struct platform_device *dev) static int s3c24xx_i2c_resume(struct platform_device *dev)
{ {
struct s3c24xx_i2c *i2c = platform_get_drvdata(dev); struct s3c24xx_i2c *i2c = platform_get_drvdata(dev);
if (i2c != NULL) i2c->suspended = 0;
s3c24xx_i2c_init(i2c); s3c24xx_i2c_init(i2c);
return 0; return 0;
} }
#else #else
#define s3c24xx_i2c_suspend_late NULL
#define s3c24xx_i2c_resume NULL #define s3c24xx_i2c_resume NULL
#endif #endif
...@@ -1005,6 +1015,7 @@ static int s3c24xx_i2c_resume(struct platform_device *dev) ...@@ -1005,6 +1015,7 @@ static int s3c24xx_i2c_resume(struct platform_device *dev)
static struct platform_driver s3c2410_i2c_driver = { static struct platform_driver s3c2410_i2c_driver = {
.probe = s3c24xx_i2c_probe, .probe = s3c24xx_i2c_probe,
.remove = s3c24xx_i2c_remove, .remove = s3c24xx_i2c_remove,
.suspend_late = s3c24xx_i2c_suspend_late,
.resume = s3c24xx_i2c_resume, .resume = s3c24xx_i2c_resume,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -1015,6 +1026,7 @@ static struct platform_driver s3c2410_i2c_driver = { ...@@ -1015,6 +1026,7 @@ static struct platform_driver s3c2410_i2c_driver = {
static struct platform_driver s3c2440_i2c_driver = { static struct platform_driver s3c2440_i2c_driver = {
.probe = s3c24xx_i2c_probe, .probe = s3c24xx_i2c_probe,
.remove = s3c24xx_i2c_remove, .remove = s3c24xx_i2c_remove,
.suspend_late = s3c24xx_i2c_suspend_late,
.resume = s3c24xx_i2c_resume, .resume = s3c24xx_i2c_resume,
.driver = { .driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
......
...@@ -22,6 +22,8 @@ menuconfig STAGING ...@@ -22,6 +22,8 @@ menuconfig STAGING
If in doubt, say N here. If in doubt, say N here.
if STAGING
config STAGING_EXCLUDE_BUILD config STAGING_EXCLUDE_BUILD
bool "Exclude Staging drivers from being built" if STAGING bool "Exclude Staging drivers from being built" if STAGING
default y default y
...@@ -62,3 +64,4 @@ source "drivers/staging/at76_usb/Kconfig" ...@@ -62,3 +64,4 @@ source "drivers/staging/at76_usb/Kconfig"
source "drivers/staging/poch/Kconfig" source "drivers/staging/poch/Kconfig"
endif # !STAGING_EXCLUDE_BUILD endif # !STAGING_EXCLUDE_BUILD
endif # STAGING
...@@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = { ...@@ -51,6 +51,7 @@ static struct usb_device_id usbtmc_devices[] = {
{ USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
{ 0, } /* terminating entry */ { 0, } /* terminating entry */
}; };
MODULE_DEVICE_TABLE(usb, usbtmc_devices);
/* /*
* This structure is the capabilities for the device * This structure is the capabilities for the device
......
...@@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev) ...@@ -279,7 +279,9 @@ static int usb_unbind_interface(struct device *dev)
* altsetting means creating new endpoint device entries). * altsetting means creating new endpoint device entries).
* When either of these happens, defer the Set-Interface. * When either of these happens, defer the Set-Interface.
*/ */
if (!error && intf->dev.power.status == DPM_ON) if (intf->cur_altsetting->desc.bAlternateSetting == 0)
; /* Already in altsetting 0 so skip Set-Interface */
else if (!error && intf->dev.power.status == DPM_ON)
usb_set_interface(udev, intf->altsetting[0]. usb_set_interface(udev, intf->altsetting[0].
desc.bInterfaceNumber, 0); desc.bInterfaceNumber, 0);
else else
......
...@@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) ...@@ -651,6 +651,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
fs_in_desc.bEndpointAddress; fs_in_desc.bEndpointAddress;
hs_out_desc.bEndpointAddress = hs_out_desc.bEndpointAddress =
fs_out_desc.bEndpointAddress; fs_out_desc.bEndpointAddress;
hs_notify_desc.bEndpointAddress =
fs_notify_desc.bEndpointAddress;
/* copy descriptors, and track endpoint copies */ /* copy descriptors, and track endpoint copies */
f->hs_descriptors = usb_copy_descriptors(eth_hs_function); f->hs_descriptors = usb_copy_descriptors(eth_hs_function);
...@@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f) ...@@ -662,6 +664,8 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
f->hs_descriptors, &hs_in_desc); f->hs_descriptors, &hs_in_desc);
rndis->hs.out = usb_find_endpoint(eth_hs_function, rndis->hs.out = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_out_desc); f->hs_descriptors, &hs_out_desc);
rndis->hs.notify = usb_find_endpoint(eth_hs_function,
f->hs_descriptors, &hs_notify_desc);
} }
rndis->port.open = rndis_open; rndis->port.open = rndis_open;
......
...@@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = { ...@@ -143,6 +143,7 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
static struct usb_device_id id_table_combined [] = { static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) }, { USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_CANDAPTER_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_0_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_1_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) }, { USB_DEVICE(FTDI_VID, FTDI_SCS_DEVICE_2_PID) },
...@@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = { ...@@ -166,6 +167,7 @@ static struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) }, { USB_DEVICE(FTDI_VID, FTDI_OPENDCC_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_IOBOARD_PID) },
{ USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) }, { USB_DEVICE(INTERBIOMETRICS_VID, INTERBIOMETRICS_MINI_IOBOARD_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_SPROG_II) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_632_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_634_PID) },
{ USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) }, { USB_DEVICE(FTDI_VID, FTDI_XF_547_PID) },
......
...@@ -40,6 +40,9 @@ ...@@ -40,6 +40,9 @@
/* AlphaMicro Components AMC-232USB01 device */ /* AlphaMicro Components AMC-232USB01 device */
#define FTDI_AMC232_PID 0xFF00 /* Product Id */ #define FTDI_AMC232_PID 0xFF00 /* Product Id */
/* www.candapter.com Ewert Energy Systems CANdapter device */
#define FTDI_CANDAPTER_PID 0x9F80 /* Product Id */
/* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */ /* SCS HF Radio Modems PID's (http://www.scs-ptc.com) */
/* the VID is the standard ftdi vid (FTDI_VID) */ /* the VID is the standard ftdi vid (FTDI_VID) */
#define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */ #define FTDI_SCS_DEVICE_0_PID 0xD010 /* SCS PTC-IIusb */
...@@ -75,6 +78,9 @@ ...@@ -75,6 +78,9 @@
/* OpenDCC (www.opendcc.de) product id */ /* OpenDCC (www.opendcc.de) product id */
#define FTDI_OPENDCC_PID 0xBFD8 #define FTDI_OPENDCC_PID 0xBFD8
/* Sprog II (Andrew Crosland's SprogII DCC interface) */
#define FTDI_SPROG_II 0xF0C8
/* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */ /* www.crystalfontz.com devices - thanx for providing free devices for evaluation ! */
/* they use the ftdi chipset for the USB interface and the vendor id is the same */ /* they use the ftdi chipset for the USB interface and the vendor id is the same */
#define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */ #define FTDI_XF_632_PID 0xFC08 /* 632: 16x2 Character Display */
......
...@@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = { ...@@ -91,6 +91,8 @@ static struct usb_device_id id_table [] = {
{ USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) }, { USB_DEVICE(WS002IN_VENDOR_ID, WS002IN_PRODUCT_ID) },
{ USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) }, { USB_DEVICE(COREGA_VENDOR_ID, COREGA_PRODUCT_ID) },
{ USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) }, { USB_DEVICE(YCCABLE_VENDOR_ID, YCCABLE_PRODUCT_ID) },
{ USB_DEVICE(SUPERIAL_VENDOR_ID, SUPERIAL_PRODUCT_ID) },
{ USB_DEVICE(HP_VENDOR_ID, HP_LD220_PRODUCT_ID) },
{ } /* Terminating entry */ { } /* Terminating entry */
}; };
......
...@@ -110,3 +110,11 @@ ...@@ -110,3 +110,11 @@
/* Y.C. Cable U.S.A., Inc - USB to RS-232 */ /* Y.C. Cable U.S.A., Inc - USB to RS-232 */
#define YCCABLE_VENDOR_ID 0x05ad #define YCCABLE_VENDOR_ID 0x05ad
#define YCCABLE_PRODUCT_ID 0x0fba #define YCCABLE_PRODUCT_ID 0x0fba
/* "Superial" USB - Serial */
#define SUPERIAL_VENDOR_ID 0x5372
#define SUPERIAL_PRODUCT_ID 0x2303
/* Hewlett-Packard LD220-HP POS Pole Display */
#define HP_VENDOR_ID 0x03f0
#define HP_LD220_PRODUCT_ID 0x3524
...@@ -16,56 +16,6 @@ ...@@ -16,56 +16,6 @@
* For questions or problems with this driver, contact Texas Instruments * For questions or problems with this driver, contact Texas Instruments
* technical support, or Al Borchers <alborchers@steinerpoint.com>, or * technical support, or Al Borchers <alborchers@steinerpoint.com>, or
* Peter Berger <pberger@brimson.com>. * Peter Berger <pberger@brimson.com>.
*
* This driver needs this hotplug script in /etc/hotplug/usb/ti_usb_3410_5052
* or in /etc/hotplug.d/usb/ti_usb_3410_5052.hotplug to set the device
* configuration.
*
* #!/bin/bash
*
* BOOT_CONFIG=1
* ACTIVE_CONFIG=2
*
* if [[ "$ACTION" != "add" ]]
* then
* exit
* fi
*
* CONFIG_PATH=/sys${DEVPATH%/?*}/bConfigurationValue
*
* if [[ 0`cat $CONFIG_PATH` -ne $BOOT_CONFIG ]]
* then
* exit
* fi
*
* PRODUCT=${PRODUCT%/?*} # delete version
* VENDOR_ID=`printf "%d" 0x${PRODUCT%/?*}`
* PRODUCT_ID=`printf "%d" 0x${PRODUCT#*?/}`
*
* PARAM_PATH=/sys/module/ti_usb_3410_5052/parameters
*
* function scan() {
* s=$1
* shift
* for i
* do
* if [[ $s -eq $i ]]
* then
* return 0
* fi
* done
* return 1
* }
*
* IFS=$IFS,
*
* if (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_3410` &&
* scan $PRODUCT_ID 13328 `cat $PARAM_PATH/product_3410`) ||
* (scan $VENDOR_ID 1105 `cat $PARAM_PATH/vendor_5052` &&
* scan $PRODUCT_ID 20562 20818 20570 20575 `cat $PARAM_PATH/product_5052`)
* then
* echo $ACTIVE_CONFIG > $CONFIG_PATH
* fi
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial) ...@@ -457,9 +407,10 @@ static int ti_startup(struct usb_serial *serial)
goto free_tdev; goto free_tdev;
} }
/* the second configuration must be set (in sysfs by hotplug script) */ /* the second configuration must be set */
if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) { if (dev->actconfig->desc.bConfigurationValue == TI_BOOT_CONFIG) {
status = -ENODEV; status = usb_driver_set_configuration(dev, TI_ACTIVE_CONFIG);
status = status ? status : -ENODEV;
goto free_tdev; goto free_tdev;
} }
......
...@@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600, ...@@ -167,8 +167,22 @@ UNUSUAL_DEV( 0x0421, 0x005d, 0x0001, 0x0600,
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ), US_FL_FIX_CAPACITY ),
/* Reported by Ozan Sener <themgzzy@gmail.com> */
UNUSUAL_DEV( 0x0421, 0x0060, 0x0551, 0x0551,
"Nokia",
"3500c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Reported by CSECSY Laszlo <boobaa@frugalware.org> */
UNUSUAL_DEV( 0x0421, 0x0063, 0x0001, 0x0601,
"Nokia",
"Nokia 3109c",
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_FIX_CAPACITY ),
/* Patch for Nokia 5310 capacity */ /* Patch for Nokia 5310 capacity */
UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0591, UNUSUAL_DEV( 0x0421, 0x006a, 0x0000, 0x0701,
"Nokia", "Nokia",
"5310", "5310",
US_SC_DEVICE, US_PR_DEVICE, NULL, US_SC_DEVICE, US_PR_DEVICE, NULL,
......
...@@ -3983,7 +3983,8 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, ...@@ -3983,7 +3983,8 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr,
node->flags = le16_to_cpu(pSMBr->DFSFlags); node->flags = le16_to_cpu(pSMBr->DFSFlags);
if (is_unicode) { if (is_unicode) {
__le16 *tmp = kmalloc(strlen(searchName)*2, GFP_KERNEL); __le16 *tmp = kmalloc(strlen(searchName)*2 + 2,
GFP_KERNEL);
cifsConvertToUCS((__le16 *) tmp, searchName, cifsConvertToUCS((__le16 *) tmp, searchName,
PATH_MAX, nls_codepage, remap); PATH_MAX, nls_codepage, remap);
node->path_consumed = hostlen_fromUCS(tmp, node->path_consumed = hostlen_fromUCS(tmp,
......
...@@ -86,7 +86,8 @@ ...@@ -86,7 +86,8 @@
#define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \ #define OCFS2_CLEAR_INCOMPAT_FEATURE(sb,mask) \
OCFS2_SB(sb)->s_feature_incompat &= ~(mask) OCFS2_SB(sb)->s_feature_incompat &= ~(mask)
#define OCFS2_FEATURE_COMPAT_SUPP OCFS2_FEATURE_COMPAT_BACKUP_SB #define OCFS2_FEATURE_COMPAT_SUPP (OCFS2_FEATURE_COMPAT_BACKUP_SB \
| OCFS2_FEATURE_COMPAT_JBD2_SB)
#define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \ #define OCFS2_FEATURE_INCOMPAT_SUPP (OCFS2_FEATURE_INCOMPAT_LOCAL_MOUNT \
| OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \ | OCFS2_FEATURE_INCOMPAT_SPARSE_ALLOC \
| OCFS2_FEATURE_INCOMPAT_INLINE_DATA \ | OCFS2_FEATURE_INCOMPAT_INLINE_DATA \
...@@ -152,6 +153,11 @@ ...@@ -152,6 +153,11 @@
*/ */
#define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001 #define OCFS2_FEATURE_COMPAT_BACKUP_SB 0x0001
/*
* The filesystem will correctly handle journal feature bits.
*/
#define OCFS2_FEATURE_COMPAT_JBD2_SB 0x0002
/* /*
* Unwritten extents support. * Unwritten extents support.
*/ */
......
...@@ -2645,9 +2645,9 @@ static int ocfs2_xattr_update_xattr_search(struct inode *inode, ...@@ -2645,9 +2645,9 @@ static int ocfs2_xattr_update_xattr_search(struct inode *inode,
return ret; return ret;
} }
i = xs->here - old_xh->xh_entries;
xs->here = &xs->header->xh_entries[i];
} }
i = xs->here - old_xh->xh_entries;
xs->here = &xs->header->xh_entries[i];
} }
return ret; return ret;
......
...@@ -158,8 +158,12 @@ struct usb_ctrlrequest { ...@@ -158,8 +158,12 @@ struct usb_ctrlrequest {
* (rarely) accepted by SET_DESCRIPTOR. * (rarely) accepted by SET_DESCRIPTOR.
* *
* Note that all multi-byte values here are encoded in little endian * Note that all multi-byte values here are encoded in little endian
* byte order "on the wire". But when exposed through Linux-USB APIs, * byte order "on the wire". Within the kernel and when exposed
* they've been converted to cpu byte order. * through the Linux-USB APIs, they are not converted to cpu byte
* order; it is the responsibility of the client code to do this.
* The single exception is when device and configuration descriptors (but
* not other descriptors) are read from usbfs (i.e. /proc/bus/usb/BBB/DDD);
* in this case the fields are converted to host endianness by the kernel.
*/ */
/* /*
......
...@@ -135,7 +135,7 @@ int unregister_dynamic_debug_module(char *mod_name) ...@@ -135,7 +135,7 @@ int unregister_dynamic_debug_module(char *mod_name)
nr_entries--; nr_entries--;
out: out:
up(&debug_list_mutex); up(&debug_list_mutex);
return 0; return ret;
} }
EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module); EXPORT_SYMBOL_GPL(unregister_dynamic_debug_module);
...@@ -289,7 +289,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf, ...@@ -289,7 +289,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf,
dynamic_enabled = DYNAMIC_ENABLED_SOME; dynamic_enabled = DYNAMIC_ENABLED_SOME;
err = 0; err = 0;
printk(KERN_DEBUG printk(KERN_DEBUG
"debugging enabled for module %s", "debugging enabled for module %s\n",
elem->name); elem->name);
} else if (!value && (elem->enable == 1)) { } else if (!value && (elem->enable == 1)) {
elem->enable = 0; elem->enable = 0;
...@@ -309,7 +309,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf, ...@@ -309,7 +309,7 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf,
err = 0; err = 0;
printk(KERN_DEBUG printk(KERN_DEBUG
"debugging disabled for module " "debugging disabled for module "
"%s", elem->name); "%s\n", elem->name);
} }
} }
} }
......
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