diff options
| -rw-r--r-- | arch/arm/mach-tegra/include/mach/kbc.h | 1 | ||||
| -rw-r--r-- | arch/cris/kernel/vmlinux.lds.S | 5 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-omap.c | 35 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-stu300.c | 2 | ||||
| -rw-r--r-- | drivers/input/gameport/gameport.c | 2 | ||||
| -rw-r--r-- | drivers/input/keyboard/tegra-kbc.c | 62 | ||||
| -rw-r--r-- | drivers/input/mouse/synaptics.h | 23 | ||||
| -rw-r--r-- | drivers/input/serio/serio.c | 2 | ||||
| -rw-r--r-- | drivers/usb/core/quirks.c | 8 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_core.h | 17 | ||||
| -rw-r--r-- | drivers/usb/musb/omap2430.c | 1 | ||||
| -rw-r--r-- | drivers/usb/serial/sierra.c | 3 | ||||
| -rw-r--r-- | drivers/usb/serial/usb_wwan.c | 15 | ||||
| -rw-r--r-- | drivers/usb/serial/visor.c | 12 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_discard.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_fsops.c | 3 |
16 files changed, 167 insertions, 26 deletions
diff --git a/arch/arm/mach-tegra/include/mach/kbc.h b/arch/arm/mach-tegra/include/mach/kbc.h index 66ad2760c62..04c779832c7 100644 --- a/arch/arm/mach-tegra/include/mach/kbc.h +++ b/arch/arm/mach-tegra/include/mach/kbc.h | |||
| @@ -57,5 +57,6 @@ struct tegra_kbc_platform_data { | |||
| 57 | const struct matrix_keymap_data *keymap_data; | 57 | const struct matrix_keymap_data *keymap_data; |
| 58 | 58 | ||
| 59 | bool wakeup; | 59 | bool wakeup; |
| 60 | bool use_fn_map; | ||
| 60 | }; | 61 | }; |
| 61 | #endif | 62 | #endif |
diff --git a/arch/cris/kernel/vmlinux.lds.S b/arch/cris/kernel/vmlinux.lds.S index 442218980db..c49be845f96 100644 --- a/arch/cris/kernel/vmlinux.lds.S +++ b/arch/cris/kernel/vmlinux.lds.S | |||
| @@ -72,11 +72,6 @@ SECTIONS | |||
| 72 | INIT_TEXT_SECTION(PAGE_SIZE) | 72 | INIT_TEXT_SECTION(PAGE_SIZE) |
| 73 | .init.data : { INIT_DATA } | 73 | .init.data : { INIT_DATA } |
| 74 | .init.setup : { INIT_SETUP(16) } | 74 | .init.setup : { INIT_SETUP(16) } |
| 75 | #ifdef CONFIG_ETRAX_ARCH_V32 | ||
| 76 | __start___param = .; | ||
| 77 | __param : { *(__param) } | ||
| 78 | __stop___param = .; | ||
| 79 | #endif | ||
| 80 | .initcall.init : { | 75 | .initcall.init : { |
| 81 | INIT_CALLS | 76 | INIT_CALLS |
| 82 | } | 77 | } |
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index b605ff3a1fa..829a2a1029f 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c | |||
| @@ -847,11 +847,15 @@ complete: | |||
| 847 | dev_err(dev->dev, "Arbitration lost\n"); | 847 | dev_err(dev->dev, "Arbitration lost\n"); |
| 848 | err |= OMAP_I2C_STAT_AL; | 848 | err |= OMAP_I2C_STAT_AL; |
| 849 | } | 849 | } |
| 850 | /* | ||
| 851 | * ProDB0017052: Clear ARDY bit twice | ||
| 852 | */ | ||
| 850 | if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK | | 853 | if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK | |
| 851 | OMAP_I2C_STAT_AL)) { | 854 | OMAP_I2C_STAT_AL)) { |
| 852 | omap_i2c_ack_stat(dev, stat & | 855 | omap_i2c_ack_stat(dev, stat & |
| 853 | (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | | 856 | (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR | |
| 854 | OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)); | 857 | OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR | |
| 858 | OMAP_I2C_STAT_ARDY)); | ||
| 855 | omap_i2c_complete_cmd(dev, err); | 859 | omap_i2c_complete_cmd(dev, err); |
| 856 | return IRQ_HANDLED; | 860 | return IRQ_HANDLED; |
| 857 | } | 861 | } |
| @@ -1137,12 +1141,41 @@ omap_i2c_remove(struct platform_device *pdev) | |||
| 1137 | return 0; | 1141 | return 0; |
| 1138 | } | 1142 | } |
| 1139 | 1143 | ||
| 1144 | #ifdef CONFIG_SUSPEND | ||
| 1145 | static int omap_i2c_suspend(struct device *dev) | ||
| 1146 | { | ||
| 1147 | if (!pm_runtime_suspended(dev)) | ||
| 1148 | if (dev->bus && dev->bus->pm && dev->bus->pm->runtime_suspend) | ||
| 1149 | dev->bus->pm->runtime_suspend(dev); | ||
| 1150 | |||
| 1151 | return 0; | ||
| 1152 | } | ||
| 1153 | |||
| 1154 | static int omap_i2c_resume(struct device *dev) | ||
| 1155 | { | ||
| 1156 | if (!pm_runtime_suspended(dev)) | ||
| 1157 | if (dev->bus && dev->bus->pm && dev->bus->pm->runtime_resume) | ||
| 1158 | dev->bus->pm->runtime_resume(dev); | ||
| 1159 | |||
| 1160 | return 0; | ||
| 1161 | } | ||
| 1162 | |||
| 1163 | static struct dev_pm_ops omap_i2c_pm_ops = { | ||
| 1164 | .suspend = omap_i2c_suspend, | ||
| 1165 | .resume = omap_i2c_resume, | ||
| 1166 | }; | ||
| 1167 | #define OMAP_I2C_PM_OPS (&omap_i2c_pm_ops) | ||
| 1168 | #else | ||
| 1169 | #define OMAP_I2C_PM_OPS NULL | ||
| 1170 | #endif | ||
| 1171 | |||
| 1140 | static struct platform_driver omap_i2c_driver = { | 1172 | static struct platform_driver omap_i2c_driver = { |
| 1141 | .probe = omap_i2c_probe, | 1173 | .probe = omap_i2c_probe, |
| 1142 | .remove = omap_i2c_remove, | 1174 | .remove = omap_i2c_remove, |
| 1143 | .driver = { | 1175 | .driver = { |
| 1144 | .name = "omap_i2c", | 1176 | .name = "omap_i2c", |
| 1145 | .owner = THIS_MODULE, | 1177 | .owner = THIS_MODULE, |
| 1178 | .pm = OMAP_I2C_PM_OPS, | ||
| 1146 | }, | 1179 | }, |
| 1147 | }; | 1180 | }; |
| 1148 | 1181 | ||
diff --git a/drivers/i2c/busses/i2c-stu300.c b/drivers/i2c/busses/i2c-stu300.c index 495be451d32..266135ddf7f 100644 --- a/drivers/i2c/busses/i2c-stu300.c +++ b/drivers/i2c/busses/i2c-stu300.c | |||
| @@ -942,7 +942,7 @@ stu300_probe(struct platform_device *pdev) | |||
| 942 | adap->owner = THIS_MODULE; | 942 | adap->owner = THIS_MODULE; |
| 943 | /* DDC class but actually often used for more generic I2C */ | 943 | /* DDC class but actually often used for more generic I2C */ |
| 944 | adap->class = I2C_CLASS_DDC; | 944 | adap->class = I2C_CLASS_DDC; |
| 945 | strncpy(adap->name, "ST Microelectronics DDC I2C adapter", | 945 | strlcpy(adap->name, "ST Microelectronics DDC I2C adapter", |
| 946 | sizeof(adap->name)); | 946 | sizeof(adap->name)); |
| 947 | adap->nr = bus_nr; | 947 | adap->nr = bus_nr; |
| 948 | adap->algo = &stu300_algo; | 948 | adap->algo = &stu300_algo; |
diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c index 23cf8fc933e..5b8f59d6c3e 100644 --- a/drivers/input/gameport/gameport.c +++ b/drivers/input/gameport/gameport.c | |||
| @@ -360,7 +360,7 @@ static int gameport_queue_event(void *object, struct module *owner, | |||
| 360 | event->owner = owner; | 360 | event->owner = owner; |
| 361 | 361 | ||
| 362 | list_add_tail(&event->node, &gameport_event_list); | 362 | list_add_tail(&event->node, &gameport_event_list); |
| 363 | schedule_work(&gameport_event_work); | 363 | queue_work(system_long_wq, &gameport_event_work); |
| 364 | 364 | ||
| 365 | out: | 365 | out: |
| 366 | spin_unlock_irqrestore(&gameport_event_lock, flags); | 366 | spin_unlock_irqrestore(&gameport_event_lock, flags); |
diff --git a/drivers/input/keyboard/tegra-kbc.c b/drivers/input/keyboard/tegra-kbc.c index ac471b77c18..99ce9032d08 100644 --- a/drivers/input/keyboard/tegra-kbc.c +++ b/drivers/input/keyboard/tegra-kbc.c | |||
| @@ -71,8 +71,9 @@ struct tegra_kbc { | |||
| 71 | spinlock_t lock; | 71 | spinlock_t lock; |
| 72 | unsigned int repoll_dly; | 72 | unsigned int repoll_dly; |
| 73 | unsigned long cp_dly_jiffies; | 73 | unsigned long cp_dly_jiffies; |
| 74 | bool use_fn_map; | ||
| 74 | const struct tegra_kbc_platform_data *pdata; | 75 | const struct tegra_kbc_platform_data *pdata; |
| 75 | unsigned short keycode[KBC_MAX_KEY]; | 76 | unsigned short keycode[KBC_MAX_KEY * 2]; |
| 76 | unsigned short current_keys[KBC_MAX_KPENT]; | 77 | unsigned short current_keys[KBC_MAX_KPENT]; |
| 77 | unsigned int num_pressed_keys; | 78 | unsigned int num_pressed_keys; |
| 78 | struct timer_list timer; | 79 | struct timer_list timer; |
| @@ -178,6 +179,40 @@ static const u32 tegra_kbc_default_keymap[] = { | |||
| 178 | KEY(15, 5, KEY_F2), | 179 | KEY(15, 5, KEY_F2), |
| 179 | KEY(15, 6, KEY_CAPSLOCK), | 180 | KEY(15, 6, KEY_CAPSLOCK), |
| 180 | KEY(15, 7, KEY_F6), | 181 | KEY(15, 7, KEY_F6), |
| 182 | |||
| 183 | /* Software Handled Function Keys */ | ||
| 184 | KEY(20, 0, KEY_KP7), | ||
| 185 | |||
| 186 | KEY(21, 0, KEY_KP9), | ||
| 187 | KEY(21, 1, KEY_KP8), | ||
| 188 | KEY(21, 2, KEY_KP4), | ||
| 189 | KEY(21, 4, KEY_KP1), | ||
| 190 | |||
| 191 | KEY(22, 1, KEY_KPSLASH), | ||
| 192 | KEY(22, 2, KEY_KP6), | ||
| 193 | KEY(22, 3, KEY_KP5), | ||
| 194 | KEY(22, 4, KEY_KP3), | ||
| 195 | KEY(22, 5, KEY_KP2), | ||
| 196 | KEY(22, 7, KEY_KP0), | ||
| 197 | |||
| 198 | KEY(27, 1, KEY_KPASTERISK), | ||
| 199 | KEY(27, 3, KEY_KPMINUS), | ||
| 200 | KEY(27, 4, KEY_KPPLUS), | ||
| 201 | KEY(27, 5, KEY_KPDOT), | ||
| 202 | |||
| 203 | KEY(28, 5, KEY_VOLUMEUP), | ||
| 204 | |||
| 205 | KEY(29, 3, KEY_HOME), | ||
| 206 | KEY(29, 4, KEY_END), | ||
| 207 | KEY(29, 5, KEY_BRIGHTNESSDOWN), | ||
| 208 | KEY(29, 6, KEY_VOLUMEDOWN), | ||
| 209 | KEY(29, 7, KEY_BRIGHTNESSUP), | ||
| 210 | |||
| 211 | KEY(30, 0, KEY_NUMLOCK), | ||
| 212 | KEY(30, 1, KEY_SCROLLLOCK), | ||
| 213 | KEY(30, 2, KEY_MUTE), | ||
| 214 | |||
| 215 | KEY(31, 4, KEY_HELP), | ||
| 181 | }; | 216 | }; |
| 182 | 217 | ||
| 183 | static const struct matrix_keymap_data tegra_kbc_default_keymap_data = { | 218 | static const struct matrix_keymap_data tegra_kbc_default_keymap_data = { |
| @@ -224,6 +259,7 @@ static void tegra_kbc_report_keys(struct tegra_kbc *kbc) | |||
| 224 | unsigned int i; | 259 | unsigned int i; |
| 225 | unsigned int num_down = 0; | 260 | unsigned int num_down = 0; |
| 226 | unsigned long flags; | 261 | unsigned long flags; |
| 262 | bool fn_keypress = false; | ||
| 227 | 263 | ||
| 228 | spin_lock_irqsave(&kbc->lock, flags); | 264 | spin_lock_irqsave(&kbc->lock, flags); |
| 229 | for (i = 0; i < KBC_MAX_KPENT; i++) { | 265 | for (i = 0; i < KBC_MAX_KPENT; i++) { |
| @@ -237,11 +273,28 @@ static void tegra_kbc_report_keys(struct tegra_kbc *kbc) | |||
| 237 | MATRIX_SCAN_CODE(row, col, KBC_ROW_SHIFT); | 273 | MATRIX_SCAN_CODE(row, col, KBC_ROW_SHIFT); |
| 238 | 274 | ||
| 239 | scancodes[num_down] = scancode; | 275 | scancodes[num_down] = scancode; |
| 240 | keycodes[num_down++] = kbc->keycode[scancode]; | 276 | keycodes[num_down] = kbc->keycode[scancode]; |
| 277 | /* If driver uses Fn map, do not report the Fn key. */ | ||
| 278 | if ((keycodes[num_down] == KEY_FN) && kbc->use_fn_map) | ||
| 279 | fn_keypress = true; | ||
| 280 | else | ||
| 281 | num_down++; | ||
| 241 | } | 282 | } |
| 242 | 283 | ||
| 243 | val >>= 8; | 284 | val >>= 8; |
| 244 | } | 285 | } |
| 286 | |||
| 287 | /* | ||
| 288 | * If the platform uses Fn keymaps, translate keys on a Fn keypress. | ||
| 289 | * Function keycodes are KBC_MAX_KEY apart from the plain keycodes. | ||
| 290 | */ | ||
| 291 | if (fn_keypress) { | ||
| 292 | for (i = 0; i < num_down; i++) { | ||
| 293 | scancodes[i] += KBC_MAX_KEY; | ||
| 294 | keycodes[i] = kbc->keycode[scancodes[i]]; | ||
| 295 | } | ||
| 296 | } | ||
| 297 | |||
| 245 | spin_unlock_irqrestore(&kbc->lock, flags); | 298 | spin_unlock_irqrestore(&kbc->lock, flags); |
| 246 | 299 | ||
| 247 | tegra_kbc_report_released_keys(kbc->idev, | 300 | tegra_kbc_report_released_keys(kbc->idev, |
| @@ -594,8 +647,11 @@ static int __devinit tegra_kbc_probe(struct platform_device *pdev) | |||
| 594 | 647 | ||
| 595 | input_dev->keycode = kbc->keycode; | 648 | input_dev->keycode = kbc->keycode; |
| 596 | input_dev->keycodesize = sizeof(kbc->keycode[0]); | 649 | input_dev->keycodesize = sizeof(kbc->keycode[0]); |
| 597 | input_dev->keycodemax = ARRAY_SIZE(kbc->keycode); | 650 | input_dev->keycodemax = KBC_MAX_KEY; |
| 651 | if (pdata->use_fn_map) | ||
| 652 | input_dev->keycodemax *= 2; | ||
| 598 | 653 | ||
| 654 | kbc->use_fn_map = pdata->use_fn_map; | ||
| 599 | keymap_data = pdata->keymap_data ?: &tegra_kbc_default_keymap_data; | 655 | keymap_data = pdata->keymap_data ?: &tegra_kbc_default_keymap_data; |
| 600 | matrix_keypad_build_keymap(keymap_data, KBC_ROW_SHIFT, | 656 | matrix_keypad_build_keymap(keymap_data, KBC_ROW_SHIFT, |
| 601 | input_dev->keycode, input_dev->keybit); | 657 | input_dev->keycode, input_dev->keybit); |
diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h index 25e5d042a72..7453938bf5e 100644 --- a/drivers/input/mouse/synaptics.h +++ b/drivers/input/mouse/synaptics.h | |||
| @@ -51,6 +51,29 @@ | |||
| 51 | #define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20) | 51 | #define SYN_EXT_CAP_REQUESTS(c) (((c) & 0x700000) >> 20) |
| 52 | #define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12) | 52 | #define SYN_CAP_MULTI_BUTTON_NO(ec) (((ec) & 0x00f000) >> 12) |
| 53 | #define SYN_CAP_PRODUCT_ID(ec) (((ec) & 0xff0000) >> 16) | 53 | #define SYN_CAP_PRODUCT_ID(ec) (((ec) & 0xff0000) >> 16) |
| 54 | |||
| 55 | /* | ||
| 56 | * The following describes response for the 0x0c query. | ||
| 57 | * | ||
| 58 | * byte mask name meaning | ||
| 59 | * ---- ---- ------- ------------ | ||
| 60 | * 1 0x01 adjustable threshold capacitive button sensitivity | ||
| 61 | * can be adjusted | ||
| 62 | * 1 0x02 report max query 0x0d gives max coord reported | ||
| 63 | * 1 0x04 clearpad sensor is ClearPad product | ||
| 64 | * 1 0x08 advanced gesture not particularly meaningful | ||
| 65 | * 1 0x10 clickpad bit 0 1-button ClickPad | ||
| 66 | * 1 0x60 multifinger mode identifies firmware finger counting | ||
| 67 | * (not reporting!) algorithm. | ||
| 68 | * Not particularly meaningful | ||
| 69 | * 1 0x80 covered pad W clipped to 14, 15 == pad mostly covered | ||
| 70 | * 2 0x01 clickpad bit 1 2-button ClickPad | ||
| 71 | * 2 0x02 deluxe LED controls touchpad support LED commands | ||
| 72 | * ala multimedia control bar | ||
| 73 | * 2 0x04 reduced filtering firmware does less filtering on | ||
| 74 | * position data, driver should watch | ||
| 75 | * for noise. | ||
| 76 | */ | ||
| 54 | #define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */ | 77 | #define SYN_CAP_CLICKPAD(ex0c) ((ex0c) & 0x100000) /* 1-button ClickPad */ |
| 55 | #define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */ | 78 | #define SYN_CAP_CLICKPAD2BTN(ex0c) ((ex0c) & 0x000100) /* 2-button ClickPad */ |
| 56 | #define SYN_CAP_MAX_DIMENSIONS(ex0c) ((ex0c) & 0x020000) | 79 | #define SYN_CAP_MAX_DIMENSIONS(ex0c) ((ex0c) & 0x020000) |
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c index 7c38d1fbabf..ba70058e2be 100644 --- a/drivers/input/serio/serio.c +++ b/drivers/input/serio/serio.c | |||
| @@ -299,7 +299,7 @@ static int serio_queue_event(void *object, struct module *owner, | |||
| 299 | event->owner = owner; | 299 | event->owner = owner; |
| 300 | 300 | ||
| 301 | list_add_tail(&event->node, &serio_event_list); | 301 | list_add_tail(&event->node, &serio_event_list); |
| 302 | schedule_work(&serio_event_work); | 302 | queue_work(system_long_wq, &serio_event_work); |
| 303 | 303 | ||
| 304 | out: | 304 | out: |
| 305 | spin_unlock_irqrestore(&serio_event_lock, flags); | 305 | spin_unlock_irqrestore(&serio_event_lock, flags); |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 44c595432d6..81ce6a8e1d9 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -48,6 +48,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 48 | { USB_DEVICE(0x04b4, 0x0526), .driver_info = | 48 | { USB_DEVICE(0x04b4, 0x0526), .driver_info = |
| 49 | USB_QUIRK_CONFIG_INTF_STRINGS }, | 49 | USB_QUIRK_CONFIG_INTF_STRINGS }, |
| 50 | 50 | ||
| 51 | /* Samsung Android phone modem - ID conflict with SPH-I500 */ | ||
| 52 | { USB_DEVICE(0x04e8, 0x6601), .driver_info = | ||
| 53 | USB_QUIRK_CONFIG_INTF_STRINGS }, | ||
| 54 | |||
| 51 | /* Roland SC-8820 */ | 55 | /* Roland SC-8820 */ |
| 52 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, | 56 | { USB_DEVICE(0x0582, 0x0007), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 53 | 57 | ||
| @@ -68,6 +72,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 68 | /* M-Systems Flash Disk Pioneers */ | 72 | /* M-Systems Flash Disk Pioneers */ |
| 69 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | 73 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 70 | 74 | ||
| 75 | /* Keytouch QWERTY Panel keyboard */ | ||
| 76 | { USB_DEVICE(0x0926, 0x3333), .driver_info = | ||
| 77 | USB_QUIRK_CONFIG_INTF_STRINGS }, | ||
| 78 | |||
| 71 | /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ | 79 | /* X-Rite/Gretag-Macbeth Eye-One Pro display colorimeter */ |
| 72 | { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, | 80 | { USB_DEVICE(0x0971, 0x2000), .driver_info = USB_QUIRK_NO_SET_INTF }, |
| 73 | 81 | ||
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h index d74a8113ae7..e6400be8a0f 100644 --- a/drivers/usb/musb/musb_core.h +++ b/drivers/usb/musb/musb_core.h | |||
| @@ -488,6 +488,15 @@ struct musb { | |||
| 488 | unsigned set_address:1; | 488 | unsigned set_address:1; |
| 489 | unsigned test_mode:1; | 489 | unsigned test_mode:1; |
| 490 | unsigned softconnect:1; | 490 | unsigned softconnect:1; |
| 491 | |||
| 492 | u8 address; | ||
| 493 | u8 test_mode_nr; | ||
| 494 | u16 ackpend; /* ep0 */ | ||
| 495 | enum musb_g_ep0_state ep0_state; | ||
| 496 | struct usb_gadget g; /* the gadget */ | ||
| 497 | struct usb_gadget_driver *gadget_driver; /* its driver */ | ||
| 498 | #endif | ||
| 499 | |||
| 491 | /* | 500 | /* |
| 492 | * FIXME: Remove this flag. | 501 | * FIXME: Remove this flag. |
| 493 | * | 502 | * |
| @@ -501,14 +510,6 @@ struct musb { | |||
| 501 | */ | 510 | */ |
| 502 | unsigned double_buffer_not_ok:1 __deprecated; | 511 | unsigned double_buffer_not_ok:1 __deprecated; |
| 503 | 512 | ||
| 504 | u8 address; | ||
| 505 | u8 test_mode_nr; | ||
| 506 | u16 ackpend; /* ep0 */ | ||
| 507 | enum musb_g_ep0_state ep0_state; | ||
| 508 | struct usb_gadget g; /* the gadget */ | ||
| 509 | struct usb_gadget_driver *gadget_driver; /* its driver */ | ||
| 510 | #endif | ||
| 511 | |||
| 512 | struct musb_hdrc_config *config; | 513 | struct musb_hdrc_config *config; |
| 513 | 514 | ||
| 514 | #ifdef MUSB_CONFIG_PROC_FS | 515 | #ifdef MUSB_CONFIG_PROC_FS |
diff --git a/drivers/usb/musb/omap2430.c b/drivers/usb/musb/omap2430.c index a3f12333fc4..bc8badd1689 100644 --- a/drivers/usb/musb/omap2430.c +++ b/drivers/usb/musb/omap2430.c | |||
| @@ -362,6 +362,7 @@ static int omap2430_musb_init(struct musb *musb) | |||
| 362 | 362 | ||
| 363 | static int omap2430_musb_exit(struct musb *musb) | 363 | static int omap2430_musb_exit(struct musb *musb) |
| 364 | { | 364 | { |
| 365 | del_timer_sync(&musb_idle_timer); | ||
| 365 | 366 | ||
| 366 | omap2430_low_level_exit(musb); | 367 | omap2430_low_level_exit(musb); |
| 367 | otg_put_transceiver(musb->xceiv); | 368 | otg_put_transceiver(musb->xceiv); |
diff --git a/drivers/usb/serial/sierra.c b/drivers/usb/serial/sierra.c index 7481ff8a49e..0457813eebe 100644 --- a/drivers/usb/serial/sierra.c +++ b/drivers/usb/serial/sierra.c | |||
| @@ -301,6 +301,9 @@ static const struct usb_device_id id_table[] = { | |||
| 301 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ | 301 | { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */ |
| 302 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | 302 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist |
| 303 | }, | 303 | }, |
| 304 | { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */ | ||
| 305 | .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist | ||
| 306 | }, | ||
| 304 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ | 307 | { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */ |
| 305 | 308 | ||
| 306 | { } | 309 | { } |
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c index b004b2a485c..9c014e2ecd6 100644 --- a/drivers/usb/serial/usb_wwan.c +++ b/drivers/usb/serial/usb_wwan.c | |||
| @@ -295,12 +295,15 @@ static void usb_wwan_indat_callback(struct urb *urb) | |||
| 295 | __func__, status, endpoint); | 295 | __func__, status, endpoint); |
| 296 | } else { | 296 | } else { |
| 297 | tty = tty_port_tty_get(&port->port); | 297 | tty = tty_port_tty_get(&port->port); |
| 298 | if (urb->actual_length) { | 298 | if (tty) { |
| 299 | tty_insert_flip_string(tty, data, urb->actual_length); | 299 | if (urb->actual_length) { |
| 300 | tty_flip_buffer_push(tty); | 300 | tty_insert_flip_string(tty, data, |
| 301 | } else | 301 | urb->actual_length); |
| 302 | dbg("%s: empty read urb received", __func__); | 302 | tty_flip_buffer_push(tty); |
| 303 | tty_kref_put(tty); | 303 | } else |
| 304 | dbg("%s: empty read urb received", __func__); | ||
| 305 | tty_kref_put(tty); | ||
| 306 | } | ||
| 304 | 307 | ||
| 305 | /* Resubmit urb so we continue receiving */ | 308 | /* Resubmit urb so we continue receiving */ |
| 306 | if (status != -ESHUTDOWN) { | 309 | if (status != -ESHUTDOWN) { |
diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c index 15a5d89b7f3..1c11959a7d5 100644 --- a/drivers/usb/serial/visor.c +++ b/drivers/usb/serial/visor.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | #include <linux/uaccess.h> | 27 | #include <linux/uaccess.h> |
| 28 | #include <linux/usb.h> | 28 | #include <linux/usb.h> |
| 29 | #include <linux/usb/serial.h> | 29 | #include <linux/usb/serial.h> |
| 30 | #include <linux/usb/cdc.h> | ||
| 30 | #include "visor.h" | 31 | #include "visor.h" |
| 31 | 32 | ||
| 32 | /* | 33 | /* |
| @@ -479,6 +480,17 @@ static int visor_probe(struct usb_serial *serial, | |||
| 479 | 480 | ||
| 480 | dbg("%s", __func__); | 481 | dbg("%s", __func__); |
| 481 | 482 | ||
| 483 | /* | ||
| 484 | * some Samsung Android phones in modem mode have the same ID | ||
| 485 | * as SPH-I500, but they are ACM devices, so dont bind to them | ||
| 486 | */ | ||
| 487 | if (id->idVendor == SAMSUNG_VENDOR_ID && | ||
| 488 | id->idProduct == SAMSUNG_SPH_I500_ID && | ||
| 489 | serial->dev->descriptor.bDeviceClass == USB_CLASS_COMM && | ||
| 490 | serial->dev->descriptor.bDeviceSubClass == | ||
| 491 | USB_CDC_SUBCLASS_ACM) | ||
| 492 | return -ENODEV; | ||
| 493 | |||
| 482 | if (serial->dev->actconfig->desc.bConfigurationValue != 1) { | 494 | if (serial->dev->actconfig->desc.bConfigurationValue != 1) { |
| 483 | dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", | 495 | dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", |
| 484 | serial->dev->actconfig->desc.bConfigurationValue); | 496 | serial->dev->actconfig->desc.bConfigurationValue); |
diff --git a/fs/xfs/linux-2.6/xfs_discard.c b/fs/xfs/linux-2.6/xfs_discard.c index 05201ae719e..d61611c8801 100644 --- a/fs/xfs/linux-2.6/xfs_discard.c +++ b/fs/xfs/linux-2.6/xfs_discard.c | |||
| @@ -152,6 +152,8 @@ xfs_ioc_trim( | |||
| 152 | 152 | ||
| 153 | if (!capable(CAP_SYS_ADMIN)) | 153 | if (!capable(CAP_SYS_ADMIN)) |
| 154 | return -XFS_ERROR(EPERM); | 154 | return -XFS_ERROR(EPERM); |
| 155 | if (!blk_queue_discard(q)) | ||
| 156 | return -XFS_ERROR(EOPNOTSUPP); | ||
| 155 | if (copy_from_user(&range, urange, sizeof(range))) | 157 | if (copy_from_user(&range, urange, sizeof(range))) |
| 156 | return -XFS_ERROR(EFAULT); | 158 | return -XFS_ERROR(EFAULT); |
| 157 | 159 | ||
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index cec89dd5d7d..85668efb3e3 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c | |||
| @@ -53,6 +53,9 @@ xfs_fs_geometry( | |||
| 53 | xfs_fsop_geom_t *geo, | 53 | xfs_fsop_geom_t *geo, |
| 54 | int new_version) | 54 | int new_version) |
| 55 | { | 55 | { |
| 56 | |||
| 57 | memset(geo, 0, sizeof(*geo)); | ||
| 58 | |||
| 56 | geo->blocksize = mp->m_sb.sb_blocksize; | 59 | geo->blocksize = mp->m_sb.sb_blocksize; |
| 57 | geo->rtextsize = mp->m_sb.sb_rextsize; | 60 | geo->rtextsize = mp->m_sb.sb_rextsize; |
| 58 | geo->agblocks = mp->m_sb.sb_agblocks; | 61 | geo->agblocks = mp->m_sb.sb_agblocks; |
