diff options
Diffstat (limited to 'drivers')
78 files changed, 415 insertions, 318 deletions
diff --git a/drivers/dma/amba-pl08x.c b/drivers/dma/amba-pl08x.c index 196a7378d332..be21e3f138a8 100644 --- a/drivers/dma/amba-pl08x.c +++ b/drivers/dma/amba-pl08x.c | |||
| @@ -80,6 +80,7 @@ | |||
| 80 | #include <linux/interrupt.h> | 80 | #include <linux/interrupt.h> |
| 81 | #include <linux/slab.h> | 81 | #include <linux/slab.h> |
| 82 | #include <linux/delay.h> | 82 | #include <linux/delay.h> |
| 83 | #include <linux/dma-mapping.h> | ||
| 83 | #include <linux/dmapool.h> | 84 | #include <linux/dmapool.h> |
| 84 | #include <linux/dmaengine.h> | 85 | #include <linux/dmaengine.h> |
| 85 | #include <linux/amba/bus.h> | 86 | #include <linux/amba/bus.h> |
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c index 1a409c5bc9bc..c316294c48b4 100644 --- a/drivers/hwmon/ibmaem.c +++ b/drivers/hwmon/ibmaem.c | |||
| @@ -432,13 +432,15 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg, | |||
| 432 | aem_send_message(ipmi); | 432 | aem_send_message(ipmi); |
| 433 | 433 | ||
| 434 | res = wait_for_completion_timeout(&ipmi->read_complete, IPMI_TIMEOUT); | 434 | res = wait_for_completion_timeout(&ipmi->read_complete, IPMI_TIMEOUT); |
| 435 | if (!res) | 435 | if (!res) { |
| 436 | return -ETIMEDOUT; | 436 | res = -ETIMEDOUT; |
| 437 | goto out; | ||
| 438 | } | ||
| 437 | 439 | ||
| 438 | if (ipmi->rx_result || ipmi->rx_msg_len != rs_size || | 440 | if (ipmi->rx_result || ipmi->rx_msg_len != rs_size || |
| 439 | memcmp(&rs_resp->id, &system_x_id, sizeof(system_x_id))) { | 441 | memcmp(&rs_resp->id, &system_x_id, sizeof(system_x_id))) { |
| 440 | kfree(rs_resp); | 442 | res = -ENOENT; |
| 441 | return -ENOENT; | 443 | goto out; |
| 442 | } | 444 | } |
| 443 | 445 | ||
| 444 | switch (size) { | 446 | switch (size) { |
| @@ -463,8 +465,11 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg, | |||
| 463 | break; | 465 | break; |
| 464 | } | 466 | } |
| 465 | } | 467 | } |
| 468 | res = 0; | ||
| 466 | 469 | ||
| 467 | return 0; | 470 | out: |
| 471 | kfree(rs_resp); | ||
| 472 | return res; | ||
| 468 | } | 473 | } |
| 469 | 474 | ||
| 470 | /* Update AEM energy registers */ | 475 | /* Update AEM energy registers */ |
diff --git a/drivers/hwmon/pmbus/lm25066.c b/drivers/hwmon/pmbus/lm25066.c index d4bc114572de..ac254fba551b 100644 --- a/drivers/hwmon/pmbus/lm25066.c +++ b/drivers/hwmon/pmbus/lm25066.c | |||
| @@ -161,6 +161,17 @@ static int lm25066_write_word_data(struct i2c_client *client, int page, int reg, | |||
| 161 | return ret; | 161 | return ret; |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | static int lm25066_write_byte(struct i2c_client *client, int page, u8 value) | ||
| 165 | { | ||
| 166 | if (page > 1) | ||
| 167 | return -EINVAL; | ||
| 168 | |||
| 169 | if (page == 0) | ||
| 170 | return pmbus_write_byte(client, 0, value); | ||
| 171 | |||
| 172 | return 0; | ||
| 173 | } | ||
| 174 | |||
| 164 | static int lm25066_probe(struct i2c_client *client, | 175 | static int lm25066_probe(struct i2c_client *client, |
| 165 | const struct i2c_device_id *id) | 176 | const struct i2c_device_id *id) |
| 166 | { | 177 | { |
| @@ -204,6 +215,7 @@ static int lm25066_probe(struct i2c_client *client, | |||
| 204 | 215 | ||
| 205 | info->read_word_data = lm25066_read_word_data; | 216 | info->read_word_data = lm25066_read_word_data; |
| 206 | info->write_word_data = lm25066_write_word_data; | 217 | info->write_word_data = lm25066_write_word_data; |
| 218 | info->write_byte = lm25066_write_byte; | ||
| 207 | 219 | ||
| 208 | switch (id->driver_data) { | 220 | switch (id->driver_data) { |
| 209 | case lm25066: | 221 | case lm25066: |
diff --git a/drivers/hwmon/pmbus/pmbus.h b/drivers/hwmon/pmbus/pmbus.h index 0808d986d75b..a6ae20ffef6b 100644 --- a/drivers/hwmon/pmbus/pmbus.h +++ b/drivers/hwmon/pmbus/pmbus.h | |||
| @@ -325,6 +325,7 @@ struct pmbus_driver_info { | |||
| 325 | int (*read_word_data)(struct i2c_client *client, int page, int reg); | 325 | int (*read_word_data)(struct i2c_client *client, int page, int reg); |
| 326 | int (*write_word_data)(struct i2c_client *client, int page, int reg, | 326 | int (*write_word_data)(struct i2c_client *client, int page, int reg, |
| 327 | u16 word); | 327 | u16 word); |
| 328 | int (*write_byte)(struct i2c_client *client, int page, u8 value); | ||
| 328 | /* | 329 | /* |
| 329 | * The identify function determines supported PMBus functionality. | 330 | * The identify function determines supported PMBus functionality. |
| 330 | * This function is only necessary if a chip driver supports multiple | 331 | * This function is only necessary if a chip driver supports multiple |
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index 5c1b6cf31701..a561c3a0e916 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c | |||
| @@ -182,6 +182,24 @@ int pmbus_write_byte(struct i2c_client *client, int page, u8 value) | |||
| 182 | } | 182 | } |
| 183 | EXPORT_SYMBOL_GPL(pmbus_write_byte); | 183 | EXPORT_SYMBOL_GPL(pmbus_write_byte); |
| 184 | 184 | ||
| 185 | /* | ||
| 186 | * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if | ||
| 187 | * a device specific mapping funcion exists and calls it if necessary. | ||
| 188 | */ | ||
| 189 | static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value) | ||
| 190 | { | ||
| 191 | struct pmbus_data *data = i2c_get_clientdata(client); | ||
| 192 | const struct pmbus_driver_info *info = data->info; | ||
| 193 | int status; | ||
| 194 | |||
| 195 | if (info->write_byte) { | ||
| 196 | status = info->write_byte(client, page, value); | ||
| 197 | if (status != -ENODATA) | ||
| 198 | return status; | ||
| 199 | } | ||
| 200 | return pmbus_write_byte(client, page, value); | ||
| 201 | } | ||
| 202 | |||
| 185 | int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word) | 203 | int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word) |
| 186 | { | 204 | { |
| 187 | int rv; | 205 | int rv; |
| @@ -281,7 +299,7 @@ static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg) | |||
| 281 | 299 | ||
| 282 | static void pmbus_clear_fault_page(struct i2c_client *client, int page) | 300 | static void pmbus_clear_fault_page(struct i2c_client *client, int page) |
| 283 | { | 301 | { |
| 284 | pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS); | 302 | _pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS); |
| 285 | } | 303 | } |
| 286 | 304 | ||
| 287 | void pmbus_clear_faults(struct i2c_client *client) | 305 | void pmbus_clear_faults(struct i2c_client *client) |
diff --git a/drivers/net/bnx2x/bnx2x_cmn.c b/drivers/net/bnx2x/bnx2x_cmn.c index d724a18b5285..37e5790681ad 100644 --- a/drivers/net/bnx2x/bnx2x_cmn.c +++ b/drivers/net/bnx2x/bnx2x_cmn.c | |||
| @@ -63,8 +63,9 @@ static inline void bnx2x_bz_fp(struct bnx2x *bp, int index) | |||
| 63 | fp->disable_tpa = ((bp->flags & TPA_ENABLE_FLAG) == 0); | 63 | fp->disable_tpa = ((bp->flags & TPA_ENABLE_FLAG) == 0); |
| 64 | 64 | ||
| 65 | #ifdef BCM_CNIC | 65 | #ifdef BCM_CNIC |
| 66 | /* We don't want TPA on FCoE, FWD and OOO L2 rings */ | 66 | /* We don't want TPA on an FCoE L2 ring */ |
| 67 | bnx2x_fcoe(bp, disable_tpa) = 1; | 67 | if (IS_FCOE_FP(fp)) |
| 68 | fp->disable_tpa = 1; | ||
| 68 | #endif | 69 | #endif |
| 69 | } | 70 | } |
| 70 | 71 | ||
| @@ -1404,10 +1405,9 @@ void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw) | |||
| 1404 | u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb) | 1405 | u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb) |
| 1405 | { | 1406 | { |
| 1406 | struct bnx2x *bp = netdev_priv(dev); | 1407 | struct bnx2x *bp = netdev_priv(dev); |
| 1408 | |||
| 1407 | #ifdef BCM_CNIC | 1409 | #ifdef BCM_CNIC |
| 1408 | if (NO_FCOE(bp)) | 1410 | if (!NO_FCOE(bp)) { |
| 1409 | return skb_tx_hash(dev, skb); | ||
| 1410 | else { | ||
| 1411 | struct ethhdr *hdr = (struct ethhdr *)skb->data; | 1411 | struct ethhdr *hdr = (struct ethhdr *)skb->data; |
| 1412 | u16 ether_type = ntohs(hdr->h_proto); | 1412 | u16 ether_type = ntohs(hdr->h_proto); |
| 1413 | 1413 | ||
| @@ -1424,8 +1424,7 @@ u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb) | |||
| 1424 | return bnx2x_fcoe_tx(bp, txq_index); | 1424 | return bnx2x_fcoe_tx(bp, txq_index); |
| 1425 | } | 1425 | } |
| 1426 | #endif | 1426 | #endif |
| 1427 | /* Select a none-FCoE queue: if FCoE is enabled, exclude FCoE L2 ring | 1427 | /* select a non-FCoE queue */ |
| 1428 | */ | ||
| 1429 | return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp)); | 1428 | return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp)); |
| 1430 | } | 1429 | } |
| 1431 | 1430 | ||
| @@ -1448,6 +1447,28 @@ void bnx2x_set_num_queues(struct bnx2x *bp) | |||
| 1448 | bp->num_queues += NON_ETH_CONTEXT_USE; | 1447 | bp->num_queues += NON_ETH_CONTEXT_USE; |
| 1449 | } | 1448 | } |
| 1450 | 1449 | ||
| 1450 | /** | ||
| 1451 | * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues | ||
| 1452 | * | ||
| 1453 | * @bp: Driver handle | ||
| 1454 | * | ||
| 1455 | * We currently support for at most 16 Tx queues for each CoS thus we will | ||
| 1456 | * allocate a multiple of 16 for ETH L2 rings according to the value of the | ||
| 1457 | * bp->max_cos. | ||
| 1458 | * | ||
| 1459 | * If there is an FCoE L2 queue the appropriate Tx queue will have the next | ||
| 1460 | * index after all ETH L2 indices. | ||
| 1461 | * | ||
| 1462 | * If the actual number of Tx queues (for each CoS) is less than 16 then there | ||
| 1463 | * will be the holes at the end of each group of 16 ETh L2 indices (0..15, | ||
| 1464 | * 16..31,...) with indicies that are not coupled with any real Tx queue. | ||
| 1465 | * | ||
| 1466 | * The proper configuration of skb->queue_mapping is handled by | ||
| 1467 | * bnx2x_select_queue() and __skb_tx_hash(). | ||
| 1468 | * | ||
| 1469 | * bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash() | ||
| 1470 | * will return a proper Tx index if TC is enabled (netdev->num_tc > 0). | ||
| 1471 | */ | ||
| 1451 | static inline int bnx2x_set_real_num_queues(struct bnx2x *bp) | 1472 | static inline int bnx2x_set_real_num_queues(struct bnx2x *bp) |
| 1452 | { | 1473 | { |
| 1453 | int rc, tx, rx; | 1474 | int rc, tx, rx; |
diff --git a/drivers/net/bnx2x/bnx2x_dcb.c b/drivers/net/bnx2x/bnx2x_dcb.c index a4ea35f6a456..a1e004a82f7a 100644 --- a/drivers/net/bnx2x/bnx2x_dcb.c +++ b/drivers/net/bnx2x/bnx2x_dcb.c | |||
| @@ -920,7 +920,7 @@ static void bnx2x_dcbx_admin_mib_updated_params(struct bnx2x *bp, | |||
| 920 | 920 | ||
| 921 | void bnx2x_dcbx_set_state(struct bnx2x *bp, bool dcb_on, u32 dcbx_enabled) | 921 | void bnx2x_dcbx_set_state(struct bnx2x *bp, bool dcb_on, u32 dcbx_enabled) |
| 922 | { | 922 | { |
| 923 | if (!CHIP_IS_E1x(bp)) { | 923 | if (!CHIP_IS_E1x(bp) && !CHIP_IS_E3(bp)) { |
| 924 | bp->dcb_state = dcb_on; | 924 | bp->dcb_state = dcb_on; |
| 925 | bp->dcbx_enabled = dcbx_enabled; | 925 | bp->dcbx_enabled = dcbx_enabled; |
| 926 | } else { | 926 | } else { |
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 150709111548..f74582a22c68 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c | |||
| @@ -5798,6 +5798,12 @@ static int bnx2x_init_hw_common(struct bnx2x *bp) | |||
| 5798 | 5798 | ||
| 5799 | DP(BNX2X_MSG_MCP, "starting common init func %d\n", BP_ABS_FUNC(bp)); | 5799 | DP(BNX2X_MSG_MCP, "starting common init func %d\n", BP_ABS_FUNC(bp)); |
| 5800 | 5800 | ||
| 5801 | /* | ||
| 5802 | * take the UNDI lock to protect undi_unload flow from accessing | ||
| 5803 | * registers while we're resetting the chip | ||
| 5804 | */ | ||
| 5805 | bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); | ||
| 5806 | |||
| 5801 | bnx2x_reset_common(bp); | 5807 | bnx2x_reset_common(bp); |
| 5802 | REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0xffffffff); | 5808 | REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_1_SET, 0xffffffff); |
| 5803 | 5809 | ||
| @@ -5808,6 +5814,8 @@ static int bnx2x_init_hw_common(struct bnx2x *bp) | |||
| 5808 | } | 5814 | } |
| 5809 | REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, val); | 5815 | REG_WR(bp, GRCBASE_MISC + MISC_REGISTERS_RESET_REG_2_SET, val); |
| 5810 | 5816 | ||
| 5817 | bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_UNDI); | ||
| 5818 | |||
| 5811 | bnx2x_init_block(bp, BLOCK_MISC, PHASE_COMMON); | 5819 | bnx2x_init_block(bp, BLOCK_MISC, PHASE_COMMON); |
| 5812 | 5820 | ||
| 5813 | if (!CHIP_IS_E1x(bp)) { | 5821 | if (!CHIP_IS_E1x(bp)) { |
| @@ -10251,10 +10259,17 @@ static int __devinit bnx2x_init_dev(struct pci_dev *pdev, | |||
| 10251 | /* clean indirect addresses */ | 10259 | /* clean indirect addresses */ |
| 10252 | pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, | 10260 | pci_write_config_dword(bp->pdev, PCICFG_GRC_ADDRESS, |
| 10253 | PCICFG_VENDOR_ID_OFFSET); | 10261 | PCICFG_VENDOR_ID_OFFSET); |
| 10254 | REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0 + BP_PORT(bp)*16, 0); | 10262 | /* Clean the following indirect addresses for all functions since it |
| 10255 | REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0 + BP_PORT(bp)*16, 0); | 10263 | * is not used by the driver. |
| 10256 | REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0 + BP_PORT(bp)*16, 0); | 10264 | */ |
| 10257 | REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0 + BP_PORT(bp)*16, 0); | 10265 | REG_WR(bp, PXP2_REG_PGL_ADDR_88_F0, 0); |
| 10266 | REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F0, 0); | ||
| 10267 | REG_WR(bp, PXP2_REG_PGL_ADDR_90_F0, 0); | ||
| 10268 | REG_WR(bp, PXP2_REG_PGL_ADDR_94_F0, 0); | ||
| 10269 | REG_WR(bp, PXP2_REG_PGL_ADDR_88_F1, 0); | ||
| 10270 | REG_WR(bp, PXP2_REG_PGL_ADDR_8C_F1, 0); | ||
| 10271 | REG_WR(bp, PXP2_REG_PGL_ADDR_90_F1, 0); | ||
| 10272 | REG_WR(bp, PXP2_REG_PGL_ADDR_94_F1, 0); | ||
| 10258 | 10273 | ||
| 10259 | /* | 10274 | /* |
| 10260 | * Enable internal target-read (in case we are probed after PF FLR). | 10275 | * Enable internal target-read (in case we are probed after PF FLR). |
diff --git a/drivers/net/bnx2x/bnx2x_reg.h b/drivers/net/bnx2x/bnx2x_reg.h index 27b5ecb11830..40266c14e6dc 100644 --- a/drivers/net/bnx2x/bnx2x_reg.h +++ b/drivers/net/bnx2x/bnx2x_reg.h | |||
| @@ -3007,11 +3007,27 @@ | |||
| 3007 | /* [R 6] Debug only: Number of used entries in the data FIFO */ | 3007 | /* [R 6] Debug only: Number of used entries in the data FIFO */ |
| 3008 | #define PXP2_REG_HST_DATA_FIFO_STATUS 0x12047c | 3008 | #define PXP2_REG_HST_DATA_FIFO_STATUS 0x12047c |
| 3009 | /* [R 7] Debug only: Number of used entries in the header FIFO */ | 3009 | /* [R 7] Debug only: Number of used entries in the header FIFO */ |
| 3010 | #define PXP2_REG_HST_HEADER_FIFO_STATUS 0x120478 | 3010 | #define PXP2_REG_HST_HEADER_FIFO_STATUS 0x120478 |
| 3011 | #define PXP2_REG_PGL_ADDR_88_F0 0x120534 | 3011 | #define PXP2_REG_PGL_ADDR_88_F0 0x120534 |
| 3012 | #define PXP2_REG_PGL_ADDR_8C_F0 0x120538 | 3012 | /* [R 32] GRC address for configuration access to PCIE config address 0x88. |
| 3013 | #define PXP2_REG_PGL_ADDR_90_F0 0x12053c | 3013 | * any write to this PCIE address will cause a GRC write access to the |
| 3014 | #define PXP2_REG_PGL_ADDR_94_F0 0x120540 | 3014 | * address that's in t this register */ |
| 3015 | #define PXP2_REG_PGL_ADDR_88_F1 0x120544 | ||
| 3016 | #define PXP2_REG_PGL_ADDR_8C_F0 0x120538 | ||
| 3017 | /* [R 32] GRC address for configuration access to PCIE config address 0x8c. | ||
| 3018 | * any write to this PCIE address will cause a GRC write access to the | ||
| 3019 | * address that's in t this register */ | ||
| 3020 | #define PXP2_REG_PGL_ADDR_8C_F1 0x120548 | ||
| 3021 | #define PXP2_REG_PGL_ADDR_90_F0 0x12053c | ||
| 3022 | /* [R 32] GRC address for configuration access to PCIE config address 0x90. | ||
| 3023 | * any write to this PCIE address will cause a GRC write access to the | ||
| 3024 | * address that's in t this register */ | ||
| 3025 | #define PXP2_REG_PGL_ADDR_90_F1 0x12054c | ||
| 3026 | #define PXP2_REG_PGL_ADDR_94_F0 0x120540 | ||
| 3027 | /* [R 32] GRC address for configuration access to PCIE config address 0x94. | ||
| 3028 | * any write to this PCIE address will cause a GRC write access to the | ||
| 3029 | * address that's in t this register */ | ||
| 3030 | #define PXP2_REG_PGL_ADDR_94_F1 0x120550 | ||
| 3015 | #define PXP2_REG_PGL_CONTROL0 0x120490 | 3031 | #define PXP2_REG_PGL_CONTROL0 0x120490 |
| 3016 | #define PXP2_REG_PGL_CONTROL1 0x120514 | 3032 | #define PXP2_REG_PGL_CONTROL1 0x120514 |
| 3017 | #define PXP2_REG_PGL_DEBUG 0x120520 | 3033 | #define PXP2_REG_PGL_DEBUG 0x120520 |
diff --git a/drivers/net/can/slcan.c b/drivers/net/can/slcan.c index f523f1cc5142..4b70b7e8bdeb 100644 --- a/drivers/net/can/slcan.c +++ b/drivers/net/can/slcan.c | |||
| @@ -197,7 +197,7 @@ static void slc_bump(struct slcan *sl) | |||
| 197 | skb->ip_summed = CHECKSUM_UNNECESSARY; | 197 | skb->ip_summed = CHECKSUM_UNNECESSARY; |
| 198 | memcpy(skb_put(skb, sizeof(struct can_frame)), | 198 | memcpy(skb_put(skb, sizeof(struct can_frame)), |
| 199 | &cf, sizeof(struct can_frame)); | 199 | &cf, sizeof(struct can_frame)); |
| 200 | netif_rx(skb); | 200 | netif_rx_ni(skb); |
| 201 | 201 | ||
| 202 | sl->dev->stats.rx_packets++; | 202 | sl->dev->stats.rx_packets++; |
| 203 | sl->dev->stats.rx_bytes += cf.can_dlc; | 203 | sl->dev->stats.rx_bytes += cf.can_dlc; |
diff --git a/drivers/net/e1000e/82571.c b/drivers/net/e1000e/82571.c index 480f2592f8a5..536b3a55c45f 100644 --- a/drivers/net/e1000e/82571.c +++ b/drivers/net/e1000e/82571.c | |||
| @@ -2085,7 +2085,8 @@ struct e1000_info e1000_82574_info = { | |||
| 2085 | | FLAG_HAS_AMT | 2085 | | FLAG_HAS_AMT |
| 2086 | | FLAG_HAS_CTRLEXT_ON_LOAD, | 2086 | | FLAG_HAS_CTRLEXT_ON_LOAD, |
| 2087 | .flags2 = FLAG2_CHECK_PHY_HANG | 2087 | .flags2 = FLAG2_CHECK_PHY_HANG |
| 2088 | | FLAG2_DISABLE_ASPM_L0S, | 2088 | | FLAG2_DISABLE_ASPM_L0S |
| 2089 | | FLAG2_NO_DISABLE_RX, | ||
| 2089 | .pba = 32, | 2090 | .pba = 32, |
| 2090 | .max_hw_frame_size = DEFAULT_JUMBO, | 2091 | .max_hw_frame_size = DEFAULT_JUMBO, |
| 2091 | .get_variants = e1000_get_variants_82571, | 2092 | .get_variants = e1000_get_variants_82571, |
| @@ -2104,7 +2105,8 @@ struct e1000_info e1000_82583_info = { | |||
| 2104 | | FLAG_HAS_AMT | 2105 | | FLAG_HAS_AMT |
| 2105 | | FLAG_HAS_JUMBO_FRAMES | 2106 | | FLAG_HAS_JUMBO_FRAMES |
| 2106 | | FLAG_HAS_CTRLEXT_ON_LOAD, | 2107 | | FLAG_HAS_CTRLEXT_ON_LOAD, |
| 2107 | .flags2 = FLAG2_DISABLE_ASPM_L0S, | 2108 | .flags2 = FLAG2_DISABLE_ASPM_L0S |
| 2109 | | FLAG2_NO_DISABLE_RX, | ||
| 2108 | .pba = 32, | 2110 | .pba = 32, |
| 2109 | .max_hw_frame_size = DEFAULT_JUMBO, | 2111 | .max_hw_frame_size = DEFAULT_JUMBO, |
| 2110 | .get_variants = e1000_get_variants_82571, | 2112 | .get_variants = e1000_get_variants_82571, |
diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h index 638d175792cf..35916f485028 100644 --- a/drivers/net/e1000e/e1000.h +++ b/drivers/net/e1000e/e1000.h | |||
| @@ -453,6 +453,7 @@ struct e1000_info { | |||
| 453 | #define FLAG2_DISABLE_ASPM_L0S (1 << 7) | 453 | #define FLAG2_DISABLE_ASPM_L0S (1 << 7) |
| 454 | #define FLAG2_DISABLE_AIM (1 << 8) | 454 | #define FLAG2_DISABLE_AIM (1 << 8) |
| 455 | #define FLAG2_CHECK_PHY_HANG (1 << 9) | 455 | #define FLAG2_CHECK_PHY_HANG (1 << 9) |
| 456 | #define FLAG2_NO_DISABLE_RX (1 << 10) | ||
| 456 | 457 | ||
| 457 | #define E1000_RX_DESC_PS(R, i) \ | 458 | #define E1000_RX_DESC_PS(R, i) \ |
| 458 | (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) | 459 | (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) |
diff --git a/drivers/net/e1000e/ethtool.c b/drivers/net/e1000e/ethtool.c index 06d88f316dce..6a0526a59a8a 100644 --- a/drivers/net/e1000e/ethtool.c +++ b/drivers/net/e1000e/ethtool.c | |||
| @@ -1206,7 +1206,8 @@ static int e1000_setup_desc_rings(struct e1000_adapter *adapter) | |||
| 1206 | rx_ring->next_to_clean = 0; | 1206 | rx_ring->next_to_clean = 0; |
| 1207 | 1207 | ||
| 1208 | rctl = er32(RCTL); | 1208 | rctl = er32(RCTL); |
| 1209 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 1209 | if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
| 1210 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
| 1210 | ew32(RDBAL, ((u64) rx_ring->dma & 0xFFFFFFFF)); | 1211 | ew32(RDBAL, ((u64) rx_ring->dma & 0xFFFFFFFF)); |
| 1211 | ew32(RDBAH, ((u64) rx_ring->dma >> 32)); | 1212 | ew32(RDBAH, ((u64) rx_ring->dma >> 32)); |
| 1212 | ew32(RDLEN, rx_ring->size); | 1213 | ew32(RDLEN, rx_ring->size); |
diff --git a/drivers/net/e1000e/lib.c b/drivers/net/e1000e/lib.c index 7898a67d6505..0893ab107adf 100644 --- a/drivers/net/e1000e/lib.c +++ b/drivers/net/e1000e/lib.c | |||
| @@ -190,7 +190,8 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw) | |||
| 190 | /* Check for LOM (vs. NIC) or one of two valid mezzanine cards */ | 190 | /* Check for LOM (vs. NIC) or one of two valid mezzanine cards */ |
| 191 | if (!((nvm_data & NVM_COMPAT_LOM) || | 191 | if (!((nvm_data & NVM_COMPAT_LOM) || |
| 192 | (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_DUAL) || | 192 | (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_DUAL) || |
| 193 | (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD))) | 193 | (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES_QUAD) || |
| 194 | (hw->adapter->pdev->device == E1000_DEV_ID_82571EB_SERDES))) | ||
| 194 | goto out; | 195 | goto out; |
| 195 | 196 | ||
| 196 | ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, | 197 | ret_val = e1000_read_nvm(hw, NVM_ALT_MAC_ADDR_PTR, 1, |
| @@ -200,10 +201,10 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw) | |||
| 200 | goto out; | 201 | goto out; |
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | if (nvm_alt_mac_addr_offset == 0xFFFF) { | 204 | if ((nvm_alt_mac_addr_offset == 0xFFFF) || |
| 205 | (nvm_alt_mac_addr_offset == 0x0000)) | ||
| 204 | /* There is no Alternate MAC Address */ | 206 | /* There is no Alternate MAC Address */ |
| 205 | goto out; | 207 | goto out; |
| 206 | } | ||
| 207 | 208 | ||
| 208 | if (hw->bus.func == E1000_FUNC_1) | 209 | if (hw->bus.func == E1000_FUNC_1) |
| 209 | nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; | 210 | nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index ab4be80f7ab5..362f70382cdd 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
| @@ -56,7 +56,7 @@ | |||
| 56 | 56 | ||
| 57 | #define DRV_EXTRAVERSION "-k" | 57 | #define DRV_EXTRAVERSION "-k" |
| 58 | 58 | ||
| 59 | #define DRV_VERSION "1.3.16" DRV_EXTRAVERSION | 59 | #define DRV_VERSION "1.4.4" DRV_EXTRAVERSION |
| 60 | char e1000e_driver_name[] = "e1000e"; | 60 | char e1000e_driver_name[] = "e1000e"; |
| 61 | const char e1000e_driver_version[] = DRV_VERSION; | 61 | const char e1000e_driver_version[] = DRV_VERSION; |
| 62 | 62 | ||
| @@ -2915,7 +2915,8 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) | |||
| 2915 | 2915 | ||
| 2916 | /* disable receives while setting up the descriptors */ | 2916 | /* disable receives while setting up the descriptors */ |
| 2917 | rctl = er32(RCTL); | 2917 | rctl = er32(RCTL); |
| 2918 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 2918 | if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
| 2919 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
| 2919 | e1e_flush(); | 2920 | e1e_flush(); |
| 2920 | usleep_range(10000, 20000); | 2921 | usleep_range(10000, 20000); |
| 2921 | 2922 | ||
| @@ -3394,7 +3395,8 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
| 3394 | 3395 | ||
| 3395 | /* disable receives in the hardware */ | 3396 | /* disable receives in the hardware */ |
| 3396 | rctl = er32(RCTL); | 3397 | rctl = er32(RCTL); |
| 3397 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | 3398 | if (!(adapter->flags2 & FLAG2_NO_DISABLE_RX)) |
| 3399 | ew32(RCTL, rctl & ~E1000_RCTL_EN); | ||
| 3398 | /* flush and sleep below */ | 3400 | /* flush and sleep below */ |
| 3399 | 3401 | ||
| 3400 | netif_stop_queue(netdev); | 3402 | netif_stop_queue(netdev); |
| @@ -3403,6 +3405,7 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
| 3403 | tctl = er32(TCTL); | 3405 | tctl = er32(TCTL); |
| 3404 | tctl &= ~E1000_TCTL_EN; | 3406 | tctl &= ~E1000_TCTL_EN; |
| 3405 | ew32(TCTL, tctl); | 3407 | ew32(TCTL, tctl); |
| 3408 | |||
| 3406 | /* flush both disables and wait for them to finish */ | 3409 | /* flush both disables and wait for them to finish */ |
| 3407 | e1e_flush(); | 3410 | e1e_flush(); |
| 3408 | usleep_range(10000, 20000); | 3411 | usleep_range(10000, 20000); |
diff --git a/drivers/net/gianfar_ptp.c b/drivers/net/gianfar_ptp.c index 1c97861596f0..f67b8aebc89c 100644 --- a/drivers/net/gianfar_ptp.c +++ b/drivers/net/gianfar_ptp.c | |||
| @@ -193,14 +193,9 @@ static void set_alarm(struct etsects *etsects) | |||
| 193 | /* Caller must hold etsects->lock. */ | 193 | /* Caller must hold etsects->lock. */ |
| 194 | static void set_fipers(struct etsects *etsects) | 194 | static void set_fipers(struct etsects *etsects) |
| 195 | { | 195 | { |
| 196 | u32 tmr_ctrl = gfar_read(&etsects->regs->tmr_ctrl); | 196 | set_alarm(etsects); |
| 197 | |||
| 198 | gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl & (~TE)); | ||
| 199 | gfar_write(&etsects->regs->tmr_prsc, etsects->tmr_prsc); | ||
| 200 | gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); | 197 | gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); |
| 201 | gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); | 198 | gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); |
| 202 | set_alarm(etsects); | ||
| 203 | gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl|TE); | ||
| 204 | } | 199 | } |
| 205 | 200 | ||
| 206 | /* | 201 | /* |
| @@ -511,7 +506,7 @@ static int gianfar_ptp_probe(struct platform_device *dev) | |||
| 511 | gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); | 506 | gfar_write(&etsects->regs->tmr_fiper1, etsects->tmr_fiper1); |
| 512 | gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); | 507 | gfar_write(&etsects->regs->tmr_fiper2, etsects->tmr_fiper2); |
| 513 | set_alarm(etsects); | 508 | set_alarm(etsects); |
| 514 | gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl|FS|RTPE|TE); | 509 | gfar_write(&etsects->regs->tmr_ctrl, tmr_ctrl|FS|RTPE|TE|FRD); |
| 515 | 510 | ||
| 516 | spin_unlock_irqrestore(&etsects->lock, flags); | 511 | spin_unlock_irqrestore(&etsects->lock, flags); |
| 517 | 512 | ||
diff --git a/drivers/net/irda/sh_irda.c b/drivers/net/irda/sh_irda.c index 4488bd581eca..82660672dcd9 100644 --- a/drivers/net/irda/sh_irda.c +++ b/drivers/net/irda/sh_irda.c | |||
| @@ -22,6 +22,8 @@ | |||
| 22 | * - DMA transfer support | 22 | * - DMA transfer support |
| 23 | * - FIFO mode support | 23 | * - FIFO mode support |
| 24 | */ | 24 | */ |
| 25 | #include <linux/io.h> | ||
| 26 | #include <linux/interrupt.h> | ||
| 25 | #include <linux/module.h> | 27 | #include <linux/module.h> |
| 26 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
| 27 | #include <linux/clk.h> | 29 | #include <linux/clk.h> |
diff --git a/drivers/net/irda/sh_sir.c b/drivers/net/irda/sh_sir.c index 52a7c86af663..ed7d7d62bf68 100644 --- a/drivers/net/irda/sh_sir.c +++ b/drivers/net/irda/sh_sir.c | |||
| @@ -12,6 +12,8 @@ | |||
| 12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
| 13 | */ | 13 | */ |
| 14 | 14 | ||
| 15 | #include <linux/io.h> | ||
| 16 | #include <linux/interrupt.h> | ||
| 15 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| 16 | #include <linux/platform_device.h> | 18 | #include <linux/platform_device.h> |
| 17 | #include <linux/slab.h> | 19 | #include <linux/slab.h> |
| @@ -511,7 +513,7 @@ static void sh_sir_tx(struct sh_sir_self *self, int phase) | |||
| 511 | 513 | ||
| 512 | static int sh_sir_read_data(struct sh_sir_self *self) | 514 | static int sh_sir_read_data(struct sh_sir_self *self) |
| 513 | { | 515 | { |
| 514 | u16 val; | 516 | u16 val = 0; |
| 515 | int timeout = 1024; | 517 | int timeout = 1024; |
| 516 | 518 | ||
| 517 | while (timeout--) { | 519 | while (timeout--) { |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index 8b3090dc4bcd..80b6f36a8074 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
| @@ -82,7 +82,7 @@ static int cards_found; | |||
| 82 | /* | 82 | /* |
| 83 | * VLB I/O addresses | 83 | * VLB I/O addresses |
| 84 | */ | 84 | */ |
| 85 | static unsigned int pcnet32_portlist[] __initdata = | 85 | static unsigned int pcnet32_portlist[] = |
| 86 | { 0x300, 0x320, 0x340, 0x360, 0 }; | 86 | { 0x300, 0x320, 0x340, 0x360, 0 }; |
| 87 | 87 | ||
| 88 | static int pcnet32_debug; | 88 | static int pcnet32_debug; |
diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c index 2cd8dc5847b4..cb6e0b486b1e 100644 --- a/drivers/net/phy/dp83640.c +++ b/drivers/net/phy/dp83640.c | |||
| @@ -34,8 +34,7 @@ | |||
| 34 | #define PAGESEL 0x13 | 34 | #define PAGESEL 0x13 |
| 35 | #define LAYER4 0x02 | 35 | #define LAYER4 0x02 |
| 36 | #define LAYER2 0x01 | 36 | #define LAYER2 0x01 |
| 37 | #define MAX_RXTS 4 | 37 | #define MAX_RXTS 64 |
| 38 | #define MAX_TXTS 4 | ||
| 39 | #define N_EXT_TS 1 | 38 | #define N_EXT_TS 1 |
| 40 | #define PSF_PTPVER 2 | 39 | #define PSF_PTPVER 2 |
| 41 | #define PSF_EVNT 0x4000 | 40 | #define PSF_EVNT 0x4000 |
| @@ -218,7 +217,7 @@ static void phy2rxts(struct phy_rxts *p, struct rxts *rxts) | |||
| 218 | rxts->seqid = p->seqid; | 217 | rxts->seqid = p->seqid; |
| 219 | rxts->msgtype = (p->msgtype >> 12) & 0xf; | 218 | rxts->msgtype = (p->msgtype >> 12) & 0xf; |
| 220 | rxts->hash = p->msgtype & 0x0fff; | 219 | rxts->hash = p->msgtype & 0x0fff; |
| 221 | rxts->tmo = jiffies + HZ; | 220 | rxts->tmo = jiffies + 2; |
| 222 | } | 221 | } |
| 223 | 222 | ||
| 224 | static u64 phy2txts(struct phy_txts *p) | 223 | static u64 phy2txts(struct phy_txts *p) |
diff --git a/drivers/net/slip.c b/drivers/net/slip.c index f11b3f3df24f..4c617534f937 100644 --- a/drivers/net/slip.c +++ b/drivers/net/slip.c | |||
| @@ -367,7 +367,7 @@ static void sl_bump(struct slip *sl) | |||
| 367 | memcpy(skb_put(skb, count), sl->rbuff, count); | 367 | memcpy(skb_put(skb, count), sl->rbuff, count); |
| 368 | skb_reset_mac_header(skb); | 368 | skb_reset_mac_header(skb); |
| 369 | skb->protocol = htons(ETH_P_IP); | 369 | skb->protocol = htons(ETH_P_IP); |
| 370 | netif_rx(skb); | 370 | netif_rx_ni(skb); |
| 371 | dev->stats.rx_packets++; | 371 | dev->stats.rx_packets++; |
| 372 | } | 372 | } |
| 373 | 373 | ||
diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c index 041fb7d43c4f..ef3b236b5145 100644 --- a/drivers/net/usb/rtl8150.c +++ b/drivers/net/usb/rtl8150.c | |||
| @@ -977,7 +977,6 @@ static void rtl8150_disconnect(struct usb_interface *intf) | |||
| 977 | usb_set_intfdata(intf, NULL); | 977 | usb_set_intfdata(intf, NULL); |
| 978 | if (dev) { | 978 | if (dev) { |
| 979 | set_bit(RTL8150_UNPLUG, &dev->flags); | 979 | set_bit(RTL8150_UNPLUG, &dev->flags); |
| 980 | tasklet_disable(&dev->tl); | ||
| 981 | tasklet_kill(&dev->tl); | 980 | tasklet_kill(&dev->tl); |
| 982 | unregister_netdev(dev->netdev); | 981 | unregister_netdev(dev->netdev); |
| 983 | unlink_all_urbs(dev); | 982 | unlink_all_urbs(dev); |
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index f54dff44ed50..c3119a6caace 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
| @@ -1735,6 +1735,8 @@ ath5k_beacon_setup(struct ath5k_hw *ah, struct ath5k_buf *bf) | |||
| 1735 | 1735 | ||
| 1736 | if (dma_mapping_error(ah->dev, bf->skbaddr)) { | 1736 | if (dma_mapping_error(ah->dev, bf->skbaddr)) { |
| 1737 | ATH5K_ERR(ah, "beacon DMA mapping failed\n"); | 1737 | ATH5K_ERR(ah, "beacon DMA mapping failed\n"); |
| 1738 | dev_kfree_skb_any(skb); | ||
| 1739 | bf->skb = NULL; | ||
| 1738 | return -EIO; | 1740 | return -EIO; |
| 1739 | } | 1741 | } |
| 1740 | 1742 | ||
| @@ -1819,8 +1821,6 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct ieee80211_vif *vif) | |||
| 1819 | ath5k_txbuf_free_skb(ah, avf->bbuf); | 1821 | ath5k_txbuf_free_skb(ah, avf->bbuf); |
| 1820 | avf->bbuf->skb = skb; | 1822 | avf->bbuf->skb = skb; |
| 1821 | ret = ath5k_beacon_setup(ah, avf->bbuf); | 1823 | ret = ath5k_beacon_setup(ah, avf->bbuf); |
| 1822 | if (ret) | ||
| 1823 | avf->bbuf->skb = NULL; | ||
| 1824 | out: | 1824 | out: |
| 1825 | return ret; | 1825 | return ret; |
| 1826 | } | 1826 | } |
| @@ -1840,6 +1840,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) | |||
| 1840 | struct ath5k_vif *avf; | 1840 | struct ath5k_vif *avf; |
| 1841 | struct ath5k_buf *bf; | 1841 | struct ath5k_buf *bf; |
| 1842 | struct sk_buff *skb; | 1842 | struct sk_buff *skb; |
| 1843 | int err; | ||
| 1843 | 1844 | ||
| 1844 | ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_BEACON, "in beacon_send\n"); | 1845 | ATH5K_DBG_UNLIMIT(ah, ATH5K_DEBUG_BEACON, "in beacon_send\n"); |
| 1845 | 1846 | ||
| @@ -1888,11 +1889,6 @@ ath5k_beacon_send(struct ath5k_hw *ah) | |||
| 1888 | 1889 | ||
| 1889 | avf = (void *)vif->drv_priv; | 1890 | avf = (void *)vif->drv_priv; |
| 1890 | bf = avf->bbuf; | 1891 | bf = avf->bbuf; |
| 1891 | if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || | ||
| 1892 | ah->opmode == NL80211_IFTYPE_MONITOR)) { | ||
| 1893 | ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf ? bf->skb : NULL); | ||
| 1894 | return; | ||
| 1895 | } | ||
| 1896 | 1892 | ||
| 1897 | /* | 1893 | /* |
| 1898 | * Stop any current dma and put the new frame on the queue. | 1894 | * Stop any current dma and put the new frame on the queue. |
| @@ -1906,8 +1902,17 @@ ath5k_beacon_send(struct ath5k_hw *ah) | |||
| 1906 | 1902 | ||
| 1907 | /* refresh the beacon for AP or MESH mode */ | 1903 | /* refresh the beacon for AP or MESH mode */ |
| 1908 | if (ah->opmode == NL80211_IFTYPE_AP || | 1904 | if (ah->opmode == NL80211_IFTYPE_AP || |
| 1909 | ah->opmode == NL80211_IFTYPE_MESH_POINT) | 1905 | ah->opmode == NL80211_IFTYPE_MESH_POINT) { |
| 1910 | ath5k_beacon_update(ah->hw, vif); | 1906 | err = ath5k_beacon_update(ah->hw, vif); |
| 1907 | if (err) | ||
| 1908 | return; | ||
| 1909 | } | ||
| 1910 | |||
| 1911 | if (unlikely(bf->skb == NULL || ah->opmode == NL80211_IFTYPE_STATION || | ||
| 1912 | ah->opmode == NL80211_IFTYPE_MONITOR)) { | ||
| 1913 | ATH5K_WARN(ah, "bf=%p bf_skb=%p\n", bf, bf->skb); | ||
| 1914 | return; | ||
| 1915 | } | ||
| 1911 | 1916 | ||
| 1912 | trace_ath5k_tx(ah, bf->skb, &ah->txqs[ah->bhalq]); | 1917 | trace_ath5k_tx(ah, bf->skb, &ah->txqs[ah->bhalq]); |
| 1913 | 1918 | ||
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c index d109c25417f4..c34bef1bf2b0 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_eeprom.c | |||
| @@ -307,7 +307,7 @@ static const struct ar9300_eeprom ar9300_default = { | |||
| 307 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 307 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 308 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, | 308 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, |
| 309 | 309 | ||
| 310 | { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, | 310 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, |
| 311 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 311 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 312 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 312 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 313 | 313 | ||
| @@ -884,7 +884,7 @@ static const struct ar9300_eeprom ar9300_x113 = { | |||
| 884 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 884 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 885 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, | 885 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, |
| 886 | 886 | ||
| 887 | { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, | 887 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, |
| 888 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 888 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 889 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 889 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 890 | 890 | ||
| @@ -2040,7 +2040,7 @@ static const struct ar9300_eeprom ar9300_x112 = { | |||
| 2040 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 2040 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 2041 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, | 2041 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 1) } }, |
| 2042 | 2042 | ||
| 2043 | { { CTL(60, 1), CTL(60, 0), CTL(0, 0), CTL(0, 0) } }, | 2043 | { { CTL(60, 1), CTL(60, 0), CTL(60, 0), CTL(60, 0) } }, |
| 2044 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 2044 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 2045 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, | 2045 | { { CTL(60, 0), CTL(60, 1), CTL(60, 0), CTL(60, 0) } }, |
| 2046 | 2046 | ||
| @@ -3734,7 +3734,7 @@ static void ar9003_hw_internal_regulator_apply(struct ath_hw *ah) | |||
| 3734 | } | 3734 | } |
| 3735 | } else { | 3735 | } else { |
| 3736 | reg_pmu_set = (5 << 1) | (7 << 4) | | 3736 | reg_pmu_set = (5 << 1) | (7 << 4) | |
| 3737 | (1 << 8) | (2 << 14) | | 3737 | (2 << 8) | (2 << 14) | |
| 3738 | (6 << 17) | (1 << 20) | | 3738 | (6 << 17) | (1 << 20) | |
| 3739 | (3 << 24) | (1 << 28); | 3739 | (3 << 24) | (1 << 28); |
| 3740 | } | 3740 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h index 6de3f0bc18e6..5c590429f120 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h | |||
| @@ -850,7 +850,7 @@ | |||
| 850 | #define AR_PHY_TPC_11_B1 (AR_SM1_BASE + 0x220) | 850 | #define AR_PHY_TPC_11_B1 (AR_SM1_BASE + 0x220) |
| 851 | #define AR_PHY_PDADC_TAB_1 (AR_SM1_BASE + 0x240) | 851 | #define AR_PHY_PDADC_TAB_1 (AR_SM1_BASE + 0x240) |
| 852 | #define AR_PHY_TX_IQCAL_STATUS_B1 (AR_SM1_BASE + 0x48c) | 852 | #define AR_PHY_TX_IQCAL_STATUS_B1 (AR_SM1_BASE + 0x48c) |
| 853 | #define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i) (AR_SM_BASE + 0x450 + ((_i) << 2)) | 853 | #define AR_PHY_TX_IQCAL_CORR_COEFF_B1(_i) (AR_SM1_BASE + 0x450 + ((_i) << 2)) |
| 854 | 854 | ||
| 855 | /* | 855 | /* |
| 856 | * Channel 2 Register Map | 856 | * Channel 2 Register Map |
diff --git a/drivers/net/wireless/b43/dma.c b/drivers/net/wireless/b43/dma.c index 83cba22ac6e8..481e534534eb 100644 --- a/drivers/net/wireless/b43/dma.c +++ b/drivers/net/wireless/b43/dma.c | |||
| @@ -795,9 +795,23 @@ static u64 supported_dma_mask(struct b43_wldev *dev) | |||
| 795 | u32 tmp; | 795 | u32 tmp; |
| 796 | u16 mmio_base; | 796 | u16 mmio_base; |
| 797 | 797 | ||
| 798 | tmp = b43_read32(dev, SSB_TMSHIGH); | 798 | switch (dev->dev->bus_type) { |
| 799 | if (tmp & SSB_TMSHIGH_DMA64) | 799 | #ifdef CONFIG_B43_BCMA |
| 800 | return DMA_BIT_MASK(64); | 800 | case B43_BUS_BCMA: |
| 801 | tmp = bcma_aread32(dev->dev->bdev, BCMA_IOST); | ||
| 802 | if (tmp & BCMA_IOST_DMA64) | ||
| 803 | return DMA_BIT_MASK(64); | ||
| 804 | break; | ||
| 805 | #endif | ||
| 806 | #ifdef CONFIG_B43_SSB | ||
| 807 | case B43_BUS_SSB: | ||
| 808 | tmp = ssb_read32(dev->dev->sdev, SSB_TMSHIGH); | ||
| 809 | if (tmp & SSB_TMSHIGH_DMA64) | ||
| 810 | return DMA_BIT_MASK(64); | ||
| 811 | break; | ||
| 812 | #endif | ||
| 813 | } | ||
| 814 | |||
| 801 | mmio_base = b43_dmacontroller_base(0, 0); | 815 | mmio_base = b43_dmacontroller_base(0, 0); |
| 802 | b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK); | 816 | b43_write32(dev, mmio_base + B43_DMA32_TXCTL, B43_DMA32_TXADDREXT_MASK); |
| 803 | tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL); | 817 | tmp = b43_read32(dev, mmio_base + B43_DMA32_TXCTL); |
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index 507559361d87..939563162fb3 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
| @@ -921,6 +921,8 @@ static struct usb_device_id rt2800usb_device_table[] = { | |||
| 921 | { USB_DEVICE(0x07d1, 0x3c16) }, | 921 | { USB_DEVICE(0x07d1, 0x3c16) }, |
| 922 | /* Draytek */ | 922 | /* Draytek */ |
| 923 | { USB_DEVICE(0x07fa, 0x7712) }, | 923 | { USB_DEVICE(0x07fa, 0x7712) }, |
| 924 | /* DVICO */ | ||
| 925 | { USB_DEVICE(0x0fe9, 0xb307) }, | ||
| 924 | /* Edimax */ | 926 | /* Edimax */ |
| 925 | { USB_DEVICE(0x7392, 0x7711) }, | 927 | { USB_DEVICE(0x7392, 0x7711) }, |
| 926 | { USB_DEVICE(0x7392, 0x7717) }, | 928 | { USB_DEVICE(0x7392, 0x7717) }, |
diff --git a/drivers/net/wireless/rt2x00/rt73usb.c b/drivers/net/wireless/rt2x00/rt73usb.c index 6a93939f44e8..0baeb894f093 100644 --- a/drivers/net/wireless/rt2x00/rt73usb.c +++ b/drivers/net/wireless/rt2x00/rt73usb.c | |||
| @@ -2420,6 +2420,7 @@ static struct usb_device_id rt73usb_device_table[] = { | |||
| 2420 | /* Buffalo */ | 2420 | /* Buffalo */ |
| 2421 | { USB_DEVICE(0x0411, 0x00d8) }, | 2421 | { USB_DEVICE(0x0411, 0x00d8) }, |
| 2422 | { USB_DEVICE(0x0411, 0x00d9) }, | 2422 | { USB_DEVICE(0x0411, 0x00d9) }, |
| 2423 | { USB_DEVICE(0x0411, 0x00e6) }, | ||
| 2423 | { USB_DEVICE(0x0411, 0x00f4) }, | 2424 | { USB_DEVICE(0x0411, 0x00f4) }, |
| 2424 | { USB_DEVICE(0x0411, 0x0116) }, | 2425 | { USB_DEVICE(0x0411, 0x0116) }, |
| 2425 | { USB_DEVICE(0x0411, 0x0119) }, | 2426 | { USB_DEVICE(0x0411, 0x0119) }, |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c index 942f7a3969a7..ef63c0df006a 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/sw.c | |||
| @@ -281,6 +281,8 @@ static struct usb_device_id rtl8192c_usb_ids[] = { | |||
| 281 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817d, rtl92cu_hal_cfg)}, | 281 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817d, rtl92cu_hal_cfg)}, |
| 282 | /* 8188CE-VAU USB minCard (b/g mode only) */ | 282 | /* 8188CE-VAU USB minCard (b/g mode only) */ |
| 283 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817e, rtl92cu_hal_cfg)}, | 283 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817e, rtl92cu_hal_cfg)}, |
| 284 | /* 8188RU in Alfa AWUS036NHR */ | ||
| 285 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817f, rtl92cu_hal_cfg)}, | ||
| 284 | /* 8188 Combo for BC4 */ | 286 | /* 8188 Combo for BC4 */ |
| 285 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)}, | 287 | {RTL_USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8754, rtl92cu_hal_cfg)}, |
| 286 | 288 | ||
| @@ -303,20 +305,23 @@ static struct usb_device_id rtl8192c_usb_ids[] = { | |||
| 303 | {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ | 305 | {RTL_USB_DEVICE(0x0eb0, 0x9071, rtl92cu_hal_cfg)}, /*NO Brand - Etop*/ |
| 304 | /* HP - Lite-On ,8188CUS Slim Combo */ | 306 | /* HP - Lite-On ,8188CUS Slim Combo */ |
| 305 | {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)}, | 307 | {RTL_USB_DEVICE(0x103c, 0x1629, rtl92cu_hal_cfg)}, |
| 308 | {RTL_USB_DEVICE(0x13d3, 0x3357, rtl92cu_hal_cfg)}, /* AzureWave */ | ||
| 306 | {RTL_USB_DEVICE(0x2001, 0x3308, rtl92cu_hal_cfg)}, /*D-Link - Alpha*/ | 309 | {RTL_USB_DEVICE(0x2001, 0x3308, rtl92cu_hal_cfg)}, /*D-Link - Alpha*/ |
| 307 | {RTL_USB_DEVICE(0x2019, 0xab2a, rtl92cu_hal_cfg)}, /*Planex - Abocom*/ | 310 | {RTL_USB_DEVICE(0x2019, 0xab2a, rtl92cu_hal_cfg)}, /*Planex - Abocom*/ |
| 308 | {RTL_USB_DEVICE(0x2019, 0xed17, rtl92cu_hal_cfg)}, /*PCI - Edimax*/ | 311 | {RTL_USB_DEVICE(0x2019, 0xed17, rtl92cu_hal_cfg)}, /*PCI - Edimax*/ |
| 309 | {RTL_USB_DEVICE(0x20f4, 0x648b, rtl92cu_hal_cfg)}, /*TRENDnet - Cameo*/ | 312 | {RTL_USB_DEVICE(0x20f4, 0x648b, rtl92cu_hal_cfg)}, /*TRENDnet - Cameo*/ |
| 310 | {RTL_USB_DEVICE(0x7392, 0x7811, rtl92cu_hal_cfg)}, /*Edimax - Edimax*/ | 313 | {RTL_USB_DEVICE(0x7392, 0x7811, rtl92cu_hal_cfg)}, /*Edimax - Edimax*/ |
| 311 | {RTL_USB_DEVICE(0x3358, 0x13d3, rtl92cu_hal_cfg)}, /*Azwave 8188CE-VAU*/ | 314 | {RTL_USB_DEVICE(0x13d3, 0x3358, rtl92cu_hal_cfg)}, /*Azwave 8188CE-VAU*/ |
| 312 | /* Russian customer -Azwave (8188CE-VAU b/g mode only) */ | 315 | /* Russian customer -Azwave (8188CE-VAU b/g mode only) */ |
| 313 | {RTL_USB_DEVICE(0x3359, 0x13d3, rtl92cu_hal_cfg)}, | 316 | {RTL_USB_DEVICE(0x13d3, 0x3359, rtl92cu_hal_cfg)}, |
| 317 | {RTL_USB_DEVICE(0x4855, 0x0090, rtl92cu_hal_cfg)}, /* Feixun */ | ||
| 318 | {RTL_USB_DEVICE(0x4855, 0x0091, rtl92cu_hal_cfg)}, /* NetweeN-Feixun */ | ||
| 319 | {RTL_USB_DEVICE(0x9846, 0x9041, rtl92cu_hal_cfg)}, /* Netgear Cameo */ | ||
| 314 | 320 | ||
| 315 | /****** 8192CU ********/ | 321 | /****** 8192CU ********/ |
| 316 | {RTL_USB_DEVICE(0x0586, 0x341f, rtl92cu_hal_cfg)}, /*Zyxel -Abocom*/ | 322 | {RTL_USB_DEVICE(0x0586, 0x341f, rtl92cu_hal_cfg)}, /*Zyxel -Abocom*/ |
| 317 | {RTL_USB_DEVICE(0x07aa, 0x0056, rtl92cu_hal_cfg)}, /*ATKK-Gemtek*/ | 323 | {RTL_USB_DEVICE(0x07aa, 0x0056, rtl92cu_hal_cfg)}, /*ATKK-Gemtek*/ |
| 318 | {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/ | 324 | {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Funai -Abocom*/ |
| 319 | {RTL_USB_DEVICE(0x07b8, 0x8178, rtl92cu_hal_cfg)}, /*Abocom -Abocom*/ | ||
| 320 | {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ | 325 | {RTL_USB_DEVICE(0x2001, 0x3307, rtl92cu_hal_cfg)}, /*D-Link-Cameo*/ |
| 321 | {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ | 326 | {RTL_USB_DEVICE(0x2001, 0x3309, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ |
| 322 | {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ | 327 | {RTL_USB_DEVICE(0x2001, 0x330a, rtl92cu_hal_cfg)}, /*D-Link-Alpha*/ |
diff --git a/drivers/net/wireless/wl1251/acx.c b/drivers/net/wireless/wl1251/acx.c index ef8370edace7..ad87a1ac6462 100644 --- a/drivers/net/wireless/wl1251/acx.c +++ b/drivers/net/wireless/wl1251/acx.c | |||
| @@ -140,8 +140,6 @@ int wl1251_acx_sleep_auth(struct wl1251 *wl, u8 sleep_auth) | |||
| 140 | auth->sleep_auth = sleep_auth; | 140 | auth->sleep_auth = sleep_auth; |
| 141 | 141 | ||
| 142 | ret = wl1251_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); | 142 | ret = wl1251_cmd_configure(wl, ACX_SLEEP_AUTH, auth, sizeof(*auth)); |
| 143 | if (ret < 0) | ||
| 144 | return ret; | ||
| 145 | 143 | ||
| 146 | out: | 144 | out: |
| 147 | kfree(auth); | 145 | kfree(auth); |
| @@ -681,10 +679,8 @@ int wl1251_acx_cca_threshold(struct wl1251 *wl) | |||
| 681 | 679 | ||
| 682 | ret = wl1251_cmd_configure(wl, ACX_CCA_THRESHOLD, | 680 | ret = wl1251_cmd_configure(wl, ACX_CCA_THRESHOLD, |
| 683 | detection, sizeof(*detection)); | 681 | detection, sizeof(*detection)); |
| 684 | if (ret < 0) { | 682 | if (ret < 0) |
| 685 | wl1251_warning("failed to set cca threshold: %d", ret); | 683 | wl1251_warning("failed to set cca threshold: %d", ret); |
| 686 | return ret; | ||
| 687 | } | ||
| 688 | 684 | ||
| 689 | out: | 685 | out: |
| 690 | kfree(detection); | 686 | kfree(detection); |
diff --git a/drivers/net/wireless/wl1251/cmd.c b/drivers/net/wireless/wl1251/cmd.c index 81f164bc4888..d14d69d733a0 100644 --- a/drivers/net/wireless/wl1251/cmd.c +++ b/drivers/net/wireless/wl1251/cmd.c | |||
| @@ -241,7 +241,7 @@ int wl1251_cmd_data_path(struct wl1251 *wl, u8 channel, bool enable) | |||
| 241 | if (ret < 0) { | 241 | if (ret < 0) { |
| 242 | wl1251_error("tx %s cmd for channel %d failed", | 242 | wl1251_error("tx %s cmd for channel %d failed", |
| 243 | enable ? "start" : "stop", channel); | 243 | enable ? "start" : "stop", channel); |
| 244 | return ret; | 244 | goto out; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | wl1251_debug(DEBUG_BOOT, "tx %s cmd channel %d", | 247 | wl1251_debug(DEBUG_BOOT, "tx %s cmd channel %d", |
diff --git a/drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c b/drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c index c01c0cb0af4e..b99a11a9dd69 100644 --- a/drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c +++ b/drivers/staging/ath6kl/miscdrv/ar3kps/ar3kpsparser.c | |||
| @@ -812,7 +812,7 @@ int AthCreateCommandList(struct ps_cmd_packet **HciPacketList, u32 *numPackets) | |||
| 812 | for(count = 0; count < Patch_Count; count++) { | 812 | for(count = 0; count < Patch_Count; count++) { |
| 813 | 813 | ||
| 814 | AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Freeing Patch Buffer %d \r\n",count)); | 814 | AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("Freeing Patch Buffer %d \r\n",count)); |
| 815 | kfree(RamPatch[Patch_Count].Data); | 815 | kfree(RamPatch[count].Data); |
| 816 | } | 816 | } |
| 817 | 817 | ||
| 818 | for(count = 0; count < Tag_Count; count++) { | 818 | for(count = 0; count < Tag_Count; count++) { |
diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index fe02d22274b4..05aa41cf875b 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/stringify.h> | 22 | #include <linux/stringify.h> |
| 23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
| 24 | #include <linux/kthread.h> | 24 | #include <linux/kthread.h> |
| 25 | #include <linux/slab.h> | ||
| 25 | #include <media/v4l2-dev.h> | 26 | #include <media/v4l2-dev.h> |
| 26 | #include <media/v4l2-ioctl.h> | 27 | #include <media/v4l2-ioctl.h> |
| 27 | #include <media/videobuf2-dma-contig.h> | 28 | #include <media/videobuf2-dma-contig.h> |
diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c index 627a98b4ec30..9e728b3415e3 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/string.h> | 22 | #include <linux/string.h> |
| 23 | #include <linux/vmalloc.h> | 23 | #include <linux/vmalloc.h> |
| 24 | #include <linux/netdevice.h> | 24 | #include <linux/netdevice.h> |
| 25 | #include <asm/io.h> | ||
| 25 | #include <asm/uaccess.h> | 26 | #include <asm/uaccess.h> |
| 26 | #include "ft1000.h" | 27 | #include "ft1000.h" |
| 27 | 28 | ||
diff --git a/drivers/staging/gma500/gem_glue.c b/drivers/staging/gma500/gem_glue.c index 779ac1a12d24..daac12120653 100644 --- a/drivers/staging/gma500/gem_glue.c +++ b/drivers/staging/gma500/gem_glue.c | |||
| @@ -20,26 +20,6 @@ | |||
| 20 | #include <drm/drmP.h> | 20 | #include <drm/drmP.h> |
| 21 | #include <drm/drm.h> | 21 | #include <drm/drm.h> |
| 22 | 22 | ||
| 23 | /** | ||
| 24 | * Initialize an already allocated GEM object of the specified size with | ||
| 25 | * no GEM provided backing store. Instead the caller is responsible for | ||
| 26 | * backing the object and handling it. | ||
| 27 | */ | ||
| 28 | int drm_gem_private_object_init(struct drm_device *dev, | ||
| 29 | struct drm_gem_object *obj, size_t size) | ||
| 30 | { | ||
| 31 | BUG_ON((size & (PAGE_SIZE - 1)) != 0); | ||
| 32 | |||
| 33 | obj->dev = dev; | ||
| 34 | obj->filp = NULL; | ||
| 35 | |||
| 36 | kref_init(&obj->refcount); | ||
| 37 | atomic_set(&obj->handle_count, 0); | ||
| 38 | obj->size = size; | ||
| 39 | |||
| 40 | return 0; | ||
| 41 | } | ||
| 42 | |||
| 43 | void drm_gem_object_release_wrap(struct drm_gem_object *obj) | 23 | void drm_gem_object_release_wrap(struct drm_gem_object *obj) |
| 44 | { | 24 | { |
| 45 | /* Remove the list map if one is present */ | 25 | /* Remove the list map if one is present */ |
| @@ -51,8 +31,7 @@ void drm_gem_object_release_wrap(struct drm_gem_object *obj) | |||
| 51 | kfree(list->map); | 31 | kfree(list->map); |
| 52 | list->map = NULL; | 32 | list->map = NULL; |
| 53 | } | 33 | } |
| 54 | if (obj->filp) | 34 | drm_gem_object_release(obj); |
| 55 | drm_gem_object_release(obj); | ||
| 56 | } | 35 | } |
| 57 | 36 | ||
| 58 | /** | 37 | /** |
diff --git a/drivers/staging/gma500/gem_glue.h b/drivers/staging/gma500/gem_glue.h index a0f2bc4e4ae7..ce5ce30f74db 100644 --- a/drivers/staging/gma500/gem_glue.h +++ b/drivers/staging/gma500/gem_glue.h | |||
| @@ -1,4 +1,2 @@ | |||
| 1 | extern void drm_gem_object_release_wrap(struct drm_gem_object *obj); | 1 | extern void drm_gem_object_release_wrap(struct drm_gem_object *obj); |
| 2 | extern int drm_gem_private_object_init(struct drm_device *dev, | ||
| 3 | struct drm_gem_object *obj, size_t size); | ||
| 4 | extern int gem_create_mmap_offset(struct drm_gem_object *obj); | 2 | extern int gem_create_mmap_offset(struct drm_gem_object *obj); |
diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 3612574ca520..d286b2223181 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c | |||
| @@ -325,7 +325,7 @@ static int blkvsc_do_operation(struct block_device_context *blkdev, | |||
| 325 | 325 | ||
| 326 | page_buf = alloc_page(GFP_KERNEL); | 326 | page_buf = alloc_page(GFP_KERNEL); |
| 327 | if (!page_buf) { | 327 | if (!page_buf) { |
| 328 | kmem_cache_free(blkvsc_req->dev->request_pool, blkvsc_req); | 328 | kmem_cache_free(blkdev->request_pool, blkvsc_req); |
| 329 | return -ENOMEM; | 329 | return -ENOMEM; |
| 330 | } | 330 | } |
| 331 | 331 | ||
| @@ -422,7 +422,7 @@ cleanup: | |||
| 422 | 422 | ||
| 423 | __free_page(page_buf); | 423 | __free_page(page_buf); |
| 424 | 424 | ||
| 425 | kmem_cache_free(blkvsc_req->dev->request_pool, blkvsc_req); | 425 | kmem_cache_free(blkdev->request_pool, blkvsc_req); |
| 426 | 426 | ||
| 427 | return ret; | 427 | return ret; |
| 428 | } | 428 | } |
diff --git a/drivers/staging/iio/accel/adis16203_core.c b/drivers/staging/iio/accel/adis16203_core.c index bf1988884e93..cf5d15da76ad 100644 --- a/drivers/staging/iio/accel/adis16203_core.c +++ b/drivers/staging/iio/accel/adis16203_core.c | |||
| @@ -311,13 +311,17 @@ static int adis16203_read_raw(struct iio_dev *indio_dev, | |||
| 311 | mutex_lock(&indio_dev->mlock); | 311 | mutex_lock(&indio_dev->mlock); |
| 312 | addr = adis16203_addresses[chan->address][0]; | 312 | addr = adis16203_addresses[chan->address][0]; |
| 313 | ret = adis16203_spi_read_reg_16(indio_dev, addr, &val16); | 313 | ret = adis16203_spi_read_reg_16(indio_dev, addr, &val16); |
| 314 | if (ret) | 314 | if (ret) { |
| 315 | mutex_unlock(&indio_dev->mlock); | ||
| 315 | return ret; | 316 | return ret; |
| 317 | } | ||
| 316 | 318 | ||
| 317 | if (val16 & ADIS16203_ERROR_ACTIVE) { | 319 | if (val16 & ADIS16203_ERROR_ACTIVE) { |
| 318 | ret = adis16203_check_status(indio_dev); | 320 | ret = adis16203_check_status(indio_dev); |
| 319 | if (ret) | 321 | if (ret) { |
| 322 | mutex_unlock(&indio_dev->mlock); | ||
| 320 | return ret; | 323 | return ret; |
| 324 | } | ||
| 321 | } | 325 | } |
| 322 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); | 326 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); |
| 323 | if (chan->scan_type.sign == 's') | 327 | if (chan->scan_type.sign == 's') |
diff --git a/drivers/staging/iio/accel/adis16204_core.c b/drivers/staging/iio/accel/adis16204_core.c index cfd09b3b9937..3e2b62654b7d 100644 --- a/drivers/staging/iio/accel/adis16204_core.c +++ b/drivers/staging/iio/accel/adis16204_core.c | |||
| @@ -341,13 +341,17 @@ static int adis16204_read_raw(struct iio_dev *indio_dev, | |||
| 341 | mutex_lock(&indio_dev->mlock); | 341 | mutex_lock(&indio_dev->mlock); |
| 342 | addr = adis16204_addresses[chan->address][0]; | 342 | addr = adis16204_addresses[chan->address][0]; |
| 343 | ret = adis16204_spi_read_reg_16(indio_dev, addr, &val16); | 343 | ret = adis16204_spi_read_reg_16(indio_dev, addr, &val16); |
| 344 | if (ret) | 344 | if (ret) { |
| 345 | mutex_unlock(&indio_dev->mlock); | ||
| 345 | return ret; | 346 | return ret; |
| 347 | } | ||
| 346 | 348 | ||
| 347 | if (val16 & ADIS16204_ERROR_ACTIVE) { | 349 | if (val16 & ADIS16204_ERROR_ACTIVE) { |
| 348 | ret = adis16204_check_status(indio_dev); | 350 | ret = adis16204_check_status(indio_dev); |
| 349 | if (ret) | 351 | if (ret) { |
| 352 | mutex_unlock(&indio_dev->mlock); | ||
| 350 | return ret; | 353 | return ret; |
| 354 | } | ||
| 351 | } | 355 | } |
| 352 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); | 356 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); |
| 353 | if (chan->scan_type.sign == 's') | 357 | if (chan->scan_type.sign == 's') |
diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c index 55f3a7bcaf0a..bec1fa8de9b9 100644 --- a/drivers/staging/iio/accel/adis16209_core.c +++ b/drivers/staging/iio/accel/adis16209_core.c | |||
| @@ -337,13 +337,17 @@ static int adis16209_read_raw(struct iio_dev *indio_dev, | |||
| 337 | mutex_lock(&indio_dev->mlock); | 337 | mutex_lock(&indio_dev->mlock); |
| 338 | addr = adis16209_addresses[chan->address][0]; | 338 | addr = adis16209_addresses[chan->address][0]; |
| 339 | ret = adis16209_spi_read_reg_16(indio_dev, addr, &val16); | 339 | ret = adis16209_spi_read_reg_16(indio_dev, addr, &val16); |
| 340 | if (ret) | 340 | if (ret) { |
| 341 | mutex_unlock(&indio_dev->mlock); | ||
| 341 | return ret; | 342 | return ret; |
| 343 | } | ||
| 342 | 344 | ||
| 343 | if (val16 & ADIS16209_ERROR_ACTIVE) { | 345 | if (val16 & ADIS16209_ERROR_ACTIVE) { |
| 344 | ret = adis16209_check_status(indio_dev); | 346 | ret = adis16209_check_status(indio_dev); |
| 345 | if (ret) | 347 | if (ret) { |
| 348 | mutex_unlock(&indio_dev->mlock); | ||
| 346 | return ret; | 349 | return ret; |
| 350 | } | ||
| 347 | } | 351 | } |
| 348 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); | 352 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); |
| 349 | if (chan->scan_type.sign == 's') | 353 | if (chan->scan_type.sign == 's') |
diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c index 4a4eafc58630..aee8b69173c4 100644 --- a/drivers/staging/iio/accel/adis16240_core.c +++ b/drivers/staging/iio/accel/adis16240_core.c | |||
| @@ -370,13 +370,17 @@ static int adis16240_read_raw(struct iio_dev *indio_dev, | |||
| 370 | mutex_lock(&indio_dev->mlock); | 370 | mutex_lock(&indio_dev->mlock); |
| 371 | addr = adis16240_addresses[chan->address][0]; | 371 | addr = adis16240_addresses[chan->address][0]; |
| 372 | ret = adis16240_spi_read_reg_16(indio_dev, addr, &val16); | 372 | ret = adis16240_spi_read_reg_16(indio_dev, addr, &val16); |
| 373 | if (ret) | 373 | if (ret) { |
| 374 | mutex_unlock(&indio_dev->mlock); | ||
| 374 | return ret; | 375 | return ret; |
| 376 | } | ||
| 375 | 377 | ||
| 376 | if (val16 & ADIS16240_ERROR_ACTIVE) { | 378 | if (val16 & ADIS16240_ERROR_ACTIVE) { |
| 377 | ret = adis16240_check_status(indio_dev); | 379 | ret = adis16240_check_status(indio_dev); |
| 378 | if (ret) | 380 | if (ret) { |
| 381 | mutex_unlock(&indio_dev->mlock); | ||
| 379 | return ret; | 382 | return ret; |
| 383 | } | ||
| 380 | } | 384 | } |
| 381 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); | 385 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); |
| 382 | if (chan->scan_type.sign == 's') | 386 | if (chan->scan_type.sign == 's') |
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c index 05797f404bea..f2d43cfcc493 100644 --- a/drivers/staging/iio/gyro/adis16260_core.c +++ b/drivers/staging/iio/gyro/adis16260_core.c | |||
| @@ -446,13 +446,17 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, | |||
| 446 | mutex_lock(&indio_dev->mlock); | 446 | mutex_lock(&indio_dev->mlock); |
| 447 | addr = adis16260_addresses[chan->address][0]; | 447 | addr = adis16260_addresses[chan->address][0]; |
| 448 | ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16); | 448 | ret = adis16260_spi_read_reg_16(indio_dev, addr, &val16); |
| 449 | if (ret) | 449 | if (ret) { |
| 450 | mutex_unlock(&indio_dev->mlock); | ||
| 450 | return ret; | 451 | return ret; |
| 452 | } | ||
| 451 | 453 | ||
| 452 | if (val16 & ADIS16260_ERROR_ACTIVE) { | 454 | if (val16 & ADIS16260_ERROR_ACTIVE) { |
| 453 | ret = adis16260_check_status(indio_dev); | 455 | ret = adis16260_check_status(indio_dev); |
| 454 | if (ret) | 456 | if (ret) { |
| 457 | mutex_unlock(&indio_dev->mlock); | ||
| 455 | return ret; | 458 | return ret; |
| 459 | } | ||
| 456 | } | 460 | } |
| 457 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); | 461 | val16 = val16 & ((1 << chan->scan_type.realbits) - 1); |
| 458 | if (chan->scan_type.sign == 's') | 462 | if (chan->scan_type.sign == 's') |
diff --git a/drivers/staging/nvec/TODO b/drivers/staging/nvec/TODO index 77b47f763f22..649d6b70deaa 100644 --- a/drivers/staging/nvec/TODO +++ b/drivers/staging/nvec/TODO | |||
| @@ -4,5 +4,7 @@ ToDo list (incomplete, unordered) | |||
| 4 | - add compile as module support | 4 | - add compile as module support |
| 5 | - move nvec devices to mfd cells? | 5 | - move nvec devices to mfd cells? |
| 6 | - adjust to kernel style | 6 | - adjust to kernel style |
| 7 | 7 | - fix clk usage | |
| 8 | 8 | should not be using clk_get_sys(), but clk_get(&pdev->dev, conn) | |
| 9 | where conn is either NULL if the device only has one clock, or | ||
| 10 | the device specific name if it has multiple clocks. | ||
diff --git a/drivers/staging/rtl8192u/r819xU_firmware.c b/drivers/staging/rtl8192u/r819xU_firmware.c index 6766f468639f..4bb5fffca5b9 100644 --- a/drivers/staging/rtl8192u/r819xU_firmware.c +++ b/drivers/staging/rtl8192u/r819xU_firmware.c | |||
| @@ -399,10 +399,7 @@ download_firmware_fail: | |||
| 399 | 399 | ||
| 400 | } | 400 | } |
| 401 | 401 | ||
| 402 | 402 | MODULE_FIRMWARE("RTL8192U/boot.img"); | |
| 403 | 403 | MODULE_FIRMWARE("RTL8192U/main.img"); | |
| 404 | 404 | MODULE_FIRMWARE("RTL8192U/data.img"); | |
| 405 | |||
| 406 | |||
| 407 | |||
| 408 | 405 | ||
diff --git a/drivers/staging/rts_pstor/rtsx.c b/drivers/staging/rts_pstor/rtsx.c index 5ff59f27d101..16c73fbff51f 100644 --- a/drivers/staging/rts_pstor/rtsx.c +++ b/drivers/staging/rts_pstor/rtsx.c | |||
| @@ -66,12 +66,6 @@ static int msi_en; | |||
| 66 | module_param(msi_en, int, S_IRUGO | S_IWUSR); | 66 | module_param(msi_en, int, S_IRUGO | S_IWUSR); |
| 67 | MODULE_PARM_DESC(msi_en, "enable msi"); | 67 | MODULE_PARM_DESC(msi_en, "enable msi"); |
| 68 | 68 | ||
| 69 | /* These are used to make sure the module doesn't unload before all the | ||
| 70 | * threads have exited. | ||
| 71 | */ | ||
| 72 | static atomic_t total_threads = ATOMIC_INIT(0); | ||
| 73 | static DECLARE_COMPLETION(threads_gone); | ||
| 74 | |||
| 75 | static irqreturn_t rtsx_interrupt(int irq, void *dev_id); | 69 | static irqreturn_t rtsx_interrupt(int irq, void *dev_id); |
| 76 | 70 | ||
| 77 | /*********************************************************************** | 71 | /*********************************************************************** |
| @@ -192,7 +186,7 @@ static int queuecommand_lck(struct scsi_cmnd *srb, | |||
| 192 | /* enqueue the command and wake up the control thread */ | 186 | /* enqueue the command and wake up the control thread */ |
| 193 | srb->scsi_done = done; | 187 | srb->scsi_done = done; |
| 194 | chip->srb = srb; | 188 | chip->srb = srb; |
| 195 | up(&(dev->sema)); | 189 | complete(&dev->cmnd_ready); |
| 196 | 190 | ||
| 197 | return 0; | 191 | return 0; |
| 198 | } | 192 | } |
| @@ -475,7 +469,7 @@ static int rtsx_control_thread(void *__dev) | |||
| 475 | current->flags |= PF_NOFREEZE; | 469 | current->flags |= PF_NOFREEZE; |
| 476 | 470 | ||
| 477 | for (;;) { | 471 | for (;;) { |
| 478 | if (down_interruptible(&dev->sema)) | 472 | if (wait_for_completion_interruptible(&dev->cmnd_ready)) |
| 479 | break; | 473 | break; |
| 480 | 474 | ||
| 481 | /* lock the device pointers */ | 475 | /* lock the device pointers */ |
| @@ -557,8 +551,6 @@ SkipForAbort: | |||
| 557 | mutex_unlock(&dev->dev_mutex); | 551 | mutex_unlock(&dev->dev_mutex); |
| 558 | } /* for (;;) */ | 552 | } /* for (;;) */ |
| 559 | 553 | ||
| 560 | scsi_host_put(host); | ||
| 561 | |||
| 562 | /* notify the exit routine that we're actually exiting now | 554 | /* notify the exit routine that we're actually exiting now |
| 563 | * | 555 | * |
| 564 | * complete()/wait_for_completion() is similar to up()/down(), | 556 | * complete()/wait_for_completion() is similar to up()/down(), |
| @@ -573,7 +565,7 @@ SkipForAbort: | |||
| 573 | * This is important in preemption kernels, which transfer the flow | 565 | * This is important in preemption kernels, which transfer the flow |
| 574 | * of execution immediately upon a complete(). | 566 | * of execution immediately upon a complete(). |
| 575 | */ | 567 | */ |
| 576 | complete_and_exit(&threads_gone, 0); | 568 | complete_and_exit(&dev->control_exit, 0); |
| 577 | } | 569 | } |
| 578 | 570 | ||
| 579 | 571 | ||
| @@ -581,7 +573,6 @@ static int rtsx_polling_thread(void *__dev) | |||
| 581 | { | 573 | { |
| 582 | struct rtsx_dev *dev = (struct rtsx_dev *)__dev; | 574 | struct rtsx_dev *dev = (struct rtsx_dev *)__dev; |
| 583 | struct rtsx_chip *chip = dev->chip; | 575 | struct rtsx_chip *chip = dev->chip; |
| 584 | struct Scsi_Host *host = rtsx_to_host(dev); | ||
| 585 | struct sd_info *sd_card = &(chip->sd_card); | 576 | struct sd_info *sd_card = &(chip->sd_card); |
| 586 | struct xd_info *xd_card = &(chip->xd_card); | 577 | struct xd_info *xd_card = &(chip->xd_card); |
| 587 | struct ms_info *ms_card = &(chip->ms_card); | 578 | struct ms_info *ms_card = &(chip->ms_card); |
| @@ -621,8 +612,7 @@ static int rtsx_polling_thread(void *__dev) | |||
| 621 | mutex_unlock(&dev->dev_mutex); | 612 | mutex_unlock(&dev->dev_mutex); |
| 622 | } | 613 | } |
| 623 | 614 | ||
| 624 | scsi_host_put(host); | 615 | complete_and_exit(&dev->polling_exit, 0); |
| 625 | complete_and_exit(&threads_gone, 0); | ||
| 626 | } | 616 | } |
| 627 | 617 | ||
| 628 | /* | 618 | /* |
| @@ -699,29 +689,38 @@ static void rtsx_release_resources(struct rtsx_dev *dev) | |||
| 699 | { | 689 | { |
| 700 | printk(KERN_INFO "-- %s\n", __func__); | 690 | printk(KERN_INFO "-- %s\n", __func__); |
| 701 | 691 | ||
| 692 | /* Tell the control thread to exit. The SCSI host must | ||
| 693 | * already have been removed so it won't try to queue | ||
| 694 | * any more commands. | ||
| 695 | */ | ||
| 696 | printk(KERN_INFO "-- sending exit command to thread\n"); | ||
| 697 | complete(&dev->cmnd_ready); | ||
| 698 | if (dev->ctl_thread) | ||
| 699 | wait_for_completion(&dev->control_exit); | ||
| 700 | if (dev->polling_thread) | ||
| 701 | wait_for_completion(&dev->polling_exit); | ||
| 702 | |||
| 703 | wait_timeout(200); | ||
| 704 | |||
| 702 | if (dev->rtsx_resv_buf) { | 705 | if (dev->rtsx_resv_buf) { |
| 703 | dma_free_coherent(&(dev->pci->dev), HOST_CMDS_BUF_LEN, | 706 | dma_free_coherent(&(dev->pci->dev), RTSX_RESV_BUF_LEN, |
| 704 | dev->rtsx_resv_buf, dev->rtsx_resv_buf_addr); | 707 | dev->rtsx_resv_buf, dev->rtsx_resv_buf_addr); |
| 705 | dev->chip->host_cmds_ptr = NULL; | 708 | dev->chip->host_cmds_ptr = NULL; |
| 706 | dev->chip->host_sg_tbl_ptr = NULL; | 709 | dev->chip->host_sg_tbl_ptr = NULL; |
| 707 | } | 710 | } |
| 708 | 711 | ||
| 709 | pci_disable_device(dev->pci); | 712 | if (dev->irq > 0) |
| 710 | pci_release_regions(dev->pci); | ||
| 711 | |||
| 712 | if (dev->irq > 0) { | ||
| 713 | free_irq(dev->irq, (void *)dev); | 713 | free_irq(dev->irq, (void *)dev); |
| 714 | } | 714 | if (dev->chip->msi_en) |
| 715 | if (dev->chip->msi_en) { | ||
| 716 | pci_disable_msi(dev->pci); | 715 | pci_disable_msi(dev->pci); |
| 717 | } | 716 | if (dev->remap_addr) |
| 717 | iounmap(dev->remap_addr); | ||
| 718 | 718 | ||
| 719 | /* Tell the control thread to exit. The SCSI host must | 719 | pci_disable_device(dev->pci); |
| 720 | * already have been removed so it won't try to queue | 720 | pci_release_regions(dev->pci); |
| 721 | * any more commands. | 721 | |
| 722 | */ | 722 | rtsx_release_chip(dev->chip); |
| 723 | printk(KERN_INFO "-- sending exit command to thread\n"); | 723 | kfree(dev->chip); |
| 724 | up(&dev->sema); | ||
| 725 | } | 724 | } |
| 726 | 725 | ||
| 727 | /* First stage of disconnect processing: stop all commands and remove | 726 | /* First stage of disconnect processing: stop all commands and remove |
| @@ -739,6 +738,7 @@ static void quiesce_and_remove_host(struct rtsx_dev *dev) | |||
| 739 | scsi_unlock(host); | 738 | scsi_unlock(host); |
| 740 | mutex_unlock(&dev->dev_mutex); | 739 | mutex_unlock(&dev->dev_mutex); |
| 741 | wake_up(&dev->delay_wait); | 740 | wake_up(&dev->delay_wait); |
| 741 | wait_for_completion(&dev->scanning_done); | ||
| 742 | 742 | ||
| 743 | /* Wait some time to let other threads exist */ | 743 | /* Wait some time to let other threads exist */ |
| 744 | wait_timeout(100); | 744 | wait_timeout(100); |
| @@ -793,8 +793,7 @@ static int rtsx_scan_thread(void *__dev) | |||
| 793 | /* Should we unbind if no devices were detected? */ | 793 | /* Should we unbind if no devices were detected? */ |
| 794 | } | 794 | } |
| 795 | 795 | ||
| 796 | scsi_host_put(rtsx_to_host(dev)); | 796 | complete_and_exit(&dev->scanning_done, 0); |
| 797 | complete_and_exit(&threads_gone, 0); | ||
| 798 | } | 797 | } |
| 799 | 798 | ||
| 800 | static void rtsx_init_options(struct rtsx_chip *chip) | 799 | static void rtsx_init_options(struct rtsx_chip *chip) |
| @@ -941,8 +940,11 @@ static int __devinit rtsx_probe(struct pci_dev *pci, const struct pci_device_id | |||
| 941 | 940 | ||
| 942 | spin_lock_init(&dev->reg_lock); | 941 | spin_lock_init(&dev->reg_lock); |
| 943 | mutex_init(&(dev->dev_mutex)); | 942 | mutex_init(&(dev->dev_mutex)); |
| 944 | sema_init(&(dev->sema), 0); | 943 | init_completion(&dev->cmnd_ready); |
| 944 | init_completion(&dev->control_exit); | ||
| 945 | init_completion(&dev->polling_exit); | ||
| 945 | init_completion(&(dev->notify)); | 946 | init_completion(&(dev->notify)); |
| 947 | init_completion(&dev->scanning_done); | ||
| 946 | init_waitqueue_head(&dev->delay_wait); | 948 | init_waitqueue_head(&dev->delay_wait); |
| 947 | 949 | ||
| 948 | dev->pci = pci; | 950 | dev->pci = pci; |
| @@ -992,28 +994,22 @@ static int __devinit rtsx_probe(struct pci_dev *pci, const struct pci_device_id | |||
| 992 | pci_set_master(pci); | 994 | pci_set_master(pci); |
| 993 | synchronize_irq(dev->irq); | 995 | synchronize_irq(dev->irq); |
| 994 | 996 | ||
| 995 | err = scsi_add_host(host, &pci->dev); | ||
| 996 | if (err) { | ||
| 997 | printk(KERN_ERR "Unable to add the scsi host\n"); | ||
| 998 | goto errout; | ||
| 999 | } | ||
| 1000 | |||
| 1001 | rtsx_init_chip(dev->chip); | 997 | rtsx_init_chip(dev->chip); |
| 1002 | 998 | ||
| 1003 | /* Start up our control thread */ | 999 | /* Start up our control thread */ |
| 1004 | th = kthread_create(rtsx_control_thread, dev, CR_DRIVER_NAME); | 1000 | th = kthread_run(rtsx_control_thread, dev, CR_DRIVER_NAME); |
| 1005 | if (IS_ERR(th)) { | 1001 | if (IS_ERR(th)) { |
| 1006 | printk(KERN_ERR "Unable to start control thread\n"); | 1002 | printk(KERN_ERR "Unable to start control thread\n"); |
| 1007 | err = PTR_ERR(th); | 1003 | err = PTR_ERR(th); |
| 1008 | goto errout; | 1004 | goto errout; |
| 1009 | } | 1005 | } |
| 1006 | dev->ctl_thread = th; | ||
| 1010 | 1007 | ||
| 1011 | /* Take a reference to the host for the control thread and | 1008 | err = scsi_add_host(host, &pci->dev); |
| 1012 | * count it among all the threads we have launched. Then | 1009 | if (err) { |
| 1013 | * start it up. */ | 1010 | printk(KERN_ERR "Unable to add the scsi host\n"); |
| 1014 | scsi_host_get(rtsx_to_host(dev)); | 1011 | goto errout; |
| 1015 | atomic_inc(&total_threads); | 1012 | } |
| 1016 | wake_up_process(th); | ||
| 1017 | 1013 | ||
| 1018 | /* Start up the thread for delayed SCSI-device scanning */ | 1014 | /* Start up the thread for delayed SCSI-device scanning */ |
| 1019 | th = kthread_create(rtsx_scan_thread, dev, "rtsx-scan"); | 1015 | th = kthread_create(rtsx_scan_thread, dev, "rtsx-scan"); |
| @@ -1024,28 +1020,17 @@ static int __devinit rtsx_probe(struct pci_dev *pci, const struct pci_device_id | |||
| 1024 | goto errout; | 1020 | goto errout; |
| 1025 | } | 1021 | } |
| 1026 | 1022 | ||
| 1027 | /* Take a reference to the host for the scanning thread and | ||
| 1028 | * count it among all the threads we have launched. Then | ||
| 1029 | * start it up. */ | ||
| 1030 | scsi_host_get(rtsx_to_host(dev)); | ||
| 1031 | atomic_inc(&total_threads); | ||
| 1032 | wake_up_process(th); | 1023 | wake_up_process(th); |
| 1033 | 1024 | ||
| 1034 | /* Start up the thread for polling thread */ | 1025 | /* Start up the thread for polling thread */ |
| 1035 | th = kthread_create(rtsx_polling_thread, dev, "rtsx-polling"); | 1026 | th = kthread_run(rtsx_polling_thread, dev, "rtsx-polling"); |
| 1036 | if (IS_ERR(th)) { | 1027 | if (IS_ERR(th)) { |
| 1037 | printk(KERN_ERR "Unable to start the device-polling thread\n"); | 1028 | printk(KERN_ERR "Unable to start the device-polling thread\n"); |
| 1038 | quiesce_and_remove_host(dev); | 1029 | quiesce_and_remove_host(dev); |
| 1039 | err = PTR_ERR(th); | 1030 | err = PTR_ERR(th); |
| 1040 | goto errout; | 1031 | goto errout; |
| 1041 | } | 1032 | } |
| 1042 | 1033 | dev->polling_thread = th; | |
| 1043 | /* Take a reference to the host for the polling thread and | ||
| 1044 | * count it among all the threads we have launched. Then | ||
| 1045 | * start it up. */ | ||
| 1046 | scsi_host_get(rtsx_to_host(dev)); | ||
| 1047 | atomic_inc(&total_threads); | ||
| 1048 | wake_up_process(th); | ||
| 1049 | 1034 | ||
| 1050 | pci_set_drvdata(pci, dev); | 1035 | pci_set_drvdata(pci, dev); |
| 1051 | 1036 | ||
| @@ -1108,16 +1093,6 @@ static void __exit rtsx_exit(void) | |||
| 1108 | 1093 | ||
| 1109 | pci_unregister_driver(&driver); | 1094 | pci_unregister_driver(&driver); |
| 1110 | 1095 | ||
| 1111 | /* Don't return until all of our control and scanning threads | ||
| 1112 | * have exited. Since each thread signals threads_gone as its | ||
| 1113 | * last act, we have to call wait_for_completion the right number | ||
| 1114 | * of times. | ||
| 1115 | */ | ||
| 1116 | while (atomic_read(&total_threads) > 0) { | ||
| 1117 | wait_for_completion(&threads_gone); | ||
| 1118 | atomic_dec(&total_threads); | ||
| 1119 | } | ||
| 1120 | |||
| 1121 | printk(KERN_INFO "%s module exit\n", CR_DRIVER_NAME); | 1096 | printk(KERN_INFO "%s module exit\n", CR_DRIVER_NAME); |
| 1122 | } | 1097 | } |
| 1123 | 1098 | ||
diff --git a/drivers/staging/rts_pstor/rtsx.h b/drivers/staging/rts_pstor/rtsx.h index 247615ba1d2a..86e47c2e3e3c 100644 --- a/drivers/staging/rts_pstor/rtsx.h +++ b/drivers/staging/rts_pstor/rtsx.h | |||
| @@ -112,9 +112,16 @@ struct rtsx_dev { | |||
| 112 | /* locks */ | 112 | /* locks */ |
| 113 | spinlock_t reg_lock; | 113 | spinlock_t reg_lock; |
| 114 | 114 | ||
| 115 | struct task_struct *ctl_thread; /* the control thread */ | ||
| 116 | struct task_struct *polling_thread; /* the polling thread */ | ||
| 117 | |||
| 115 | /* mutual exclusion and synchronization structures */ | 118 | /* mutual exclusion and synchronization structures */ |
| 116 | struct semaphore sema; /* to sleep thread on */ | 119 | struct completion cmnd_ready; /* to sleep thread on */ |
| 120 | struct completion control_exit; /* control thread exit */ | ||
| 121 | struct completion polling_exit; /* polling thread exit */ | ||
| 117 | struct completion notify; /* thread begin/end */ | 122 | struct completion notify; /* thread begin/end */ |
| 123 | struct completion scanning_done; /* wait for scan thread */ | ||
| 124 | |||
| 118 | wait_queue_head_t delay_wait; /* wait during scan, reset */ | 125 | wait_queue_head_t delay_wait; /* wait during scan, reset */ |
| 119 | struct mutex dev_mutex; | 126 | struct mutex dev_mutex; |
| 120 | 127 | ||
diff --git a/drivers/staging/solo6x10/core.c b/drivers/staging/solo6x10/core.c index 76779949f141..f974f6412ad7 100644 --- a/drivers/staging/solo6x10/core.c +++ b/drivers/staging/solo6x10/core.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
| 22 | #include <linux/pci.h> | 22 | #include <linux/pci.h> |
| 23 | #include <linux/interrupt.h> | 23 | #include <linux/interrupt.h> |
| 24 | #include <linux/slab.h> | ||
| 24 | #include <linux/videodev2.h> | 25 | #include <linux/videodev2.h> |
| 25 | #include "solo6x10.h" | 26 | #include "solo6x10.h" |
| 26 | #include "tw28.h" | 27 | #include "tw28.h" |
diff --git a/drivers/staging/solo6x10/enc.c b/drivers/staging/solo6x10/enc.c index 285f7f350062..de502599bb19 100644 --- a/drivers/staging/solo6x10/enc.c +++ b/drivers/staging/solo6x10/enc.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
| 21 | #include <linux/slab.h> | ||
| 21 | #include "solo6x10.h" | 22 | #include "solo6x10.h" |
| 22 | #include "osd-font.h" | 23 | #include "osd-font.h" |
| 23 | 24 | ||
diff --git a/drivers/staging/solo6x10/g723.c b/drivers/staging/solo6x10/g723.c index bd8eb92c94b1..59274bfca95b 100644 --- a/drivers/staging/solo6x10/g723.c +++ b/drivers/staging/solo6x10/g723.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/mempool.h> | 21 | #include <linux/mempool.h> |
| 22 | #include <linux/poll.h> | 22 | #include <linux/poll.h> |
| 23 | #include <linux/kthread.h> | 23 | #include <linux/kthread.h> |
| 24 | #include <linux/slab.h> | ||
| 24 | #include <linux/freezer.h> | 25 | #include <linux/freezer.h> |
| 25 | #include <sound/core.h> | 26 | #include <sound/core.h> |
| 26 | #include <sound/initval.h> | 27 | #include <sound/initval.h> |
diff --git a/drivers/staging/solo6x10/p2m.c b/drivers/staging/solo6x10/p2m.c index 5717eabb04a4..56210f0fc5ec 100644 --- a/drivers/staging/solo6x10/p2m.c +++ b/drivers/staging/solo6x10/p2m.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | */ | 18 | */ |
| 19 | 19 | ||
| 20 | #include <linux/kernel.h> | 20 | #include <linux/kernel.h> |
| 21 | #include <linux/slab.h> | ||
| 21 | #include <linux/scatterlist.h> | 22 | #include <linux/scatterlist.h> |
| 22 | #include "solo6x10.h" | 23 | #include "solo6x10.h" |
| 23 | 24 | ||
diff --git a/drivers/staging/solo6x10/solo6x10.h b/drivers/staging/solo6x10/solo6x10.h index 17c06bd6cc91..abee7213202f 100644 --- a/drivers/staging/solo6x10/solo6x10.h +++ b/drivers/staging/solo6x10/solo6x10.h | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/list.h> | 28 | #include <linux/list.h> |
| 29 | #include <linux/wait.h> | 29 | #include <linux/wait.h> |
| 30 | #include <linux/delay.h> | 30 | #include <linux/delay.h> |
| 31 | #include <linux/slab.h> | ||
| 31 | #include <asm/io.h> | 32 | #include <asm/io.h> |
| 32 | #include <linux/atomic.h> | 33 | #include <linux/atomic.h> |
| 33 | #include <linux/videodev2.h> | 34 | #include <linux/videodev2.h> |
diff --git a/drivers/staging/speakup/devsynth.c b/drivers/staging/speakup/devsynth.c index 39dc586fc8bb..940769ef883f 100644 --- a/drivers/staging/speakup/devsynth.c +++ b/drivers/staging/speakup/devsynth.c | |||
| @@ -18,13 +18,14 @@ static ssize_t speakup_file_write(struct file *fp, const char *buffer, | |||
| 18 | { | 18 | { |
| 19 | size_t count = nbytes; | 19 | size_t count = nbytes; |
| 20 | const char *ptr = buffer; | 20 | const char *ptr = buffer; |
| 21 | int bytes; | 21 | size_t bytes; |
| 22 | unsigned long flags; | 22 | unsigned long flags; |
| 23 | u_char buf[256]; | 23 | u_char buf[256]; |
| 24 | |||
| 24 | if (synth == NULL) | 25 | if (synth == NULL) |
| 25 | return -ENODEV; | 26 | return -ENODEV; |
| 26 | while (count > 0) { | 27 | while (count > 0) { |
| 27 | bytes = min_t(size_t, count, sizeof(buf)); | 28 | bytes = min(count, sizeof(buf)); |
| 28 | if (copy_from_user(buf, ptr, bytes)) | 29 | if (copy_from_user(buf, ptr, bytes)) |
| 29 | return -EFAULT; | 30 | return -EFAULT; |
| 30 | count -= bytes; | 31 | count -= bytes; |
diff --git a/drivers/staging/zcache/Makefile b/drivers/staging/zcache/Makefile index f5ec64f94470..60daa272c204 100644 --- a/drivers/staging/zcache/Makefile +++ b/drivers/staging/zcache/Makefile | |||
| @@ -1,3 +1,3 @@ | |||
| 1 | zcache-y := tmem.o | 1 | zcache-y := zcache-main.o tmem.o |
| 2 | 2 | ||
| 3 | obj-$(CONFIG_ZCACHE) += zcache.o | 3 | obj-$(CONFIG_ZCACHE) += zcache.o |
diff --git a/drivers/staging/zcache/zcache.c b/drivers/staging/zcache/zcache-main.c index 65a81a0d7c49..855a5bb56a47 100644 --- a/drivers/staging/zcache/zcache.c +++ b/drivers/staging/zcache/zcache-main.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | * http://marc.info/?l=linux-mm&m=127811271605009 | 19 | * http://marc.info/?l=linux-mm&m=127811271605009 |
| 20 | */ | 20 | */ |
| 21 | 21 | ||
| 22 | #include <linux/module.h> | ||
| 22 | #include <linux/cpu.h> | 23 | #include <linux/cpu.h> |
| 23 | #include <linux/highmem.h> | 24 | #include <linux/highmem.h> |
| 24 | #include <linux/list.h> | 25 | #include <linux/list.h> |
| @@ -27,6 +28,7 @@ | |||
| 27 | #include <linux/spinlock.h> | 28 | #include <linux/spinlock.h> |
| 28 | #include <linux/types.h> | 29 | #include <linux/types.h> |
| 29 | #include <linux/atomic.h> | 30 | #include <linux/atomic.h> |
| 31 | #include <linux/math64.h> | ||
| 30 | #include "tmem.h" | 32 | #include "tmem.h" |
| 31 | 33 | ||
| 32 | #include "../zram/xvmalloc.h" /* if built in drivers/staging */ | 34 | #include "../zram/xvmalloc.h" /* if built in drivers/staging */ |
| @@ -53,6 +55,9 @@ | |||
| 53 | 55 | ||
| 54 | #define MAX_CLIENTS 16 | 56 | #define MAX_CLIENTS 16 |
| 55 | #define LOCAL_CLIENT ((uint16_t)-1) | 57 | #define LOCAL_CLIENT ((uint16_t)-1) |
| 58 | |||
| 59 | MODULE_LICENSE("GPL"); | ||
| 60 | |||
| 56 | struct zcache_client { | 61 | struct zcache_client { |
| 57 | struct tmem_pool *tmem_pools[MAX_POOLS_PER_CLIENT]; | 62 | struct tmem_pool *tmem_pools[MAX_POOLS_PER_CLIENT]; |
| 58 | struct xv_pool *xvpool; | 63 | struct xv_pool *xvpool; |
| @@ -1158,6 +1163,7 @@ static void *zcache_pampd_create(char *data, size_t size, bool raw, int eph, | |||
| 1158 | uint16_t client_id = get_client_id_from_client(cli); | 1163 | uint16_t client_id = get_client_id_from_client(cli); |
| 1159 | unsigned long zv_mean_zsize; | 1164 | unsigned long zv_mean_zsize; |
| 1160 | unsigned long curr_pers_pampd_count; | 1165 | unsigned long curr_pers_pampd_count; |
| 1166 | u64 total_zsize; | ||
| 1161 | 1167 | ||
| 1162 | if (eph) { | 1168 | if (eph) { |
| 1163 | ret = zcache_compress(page, &cdata, &clen); | 1169 | ret = zcache_compress(page, &cdata, &clen); |
| @@ -1190,8 +1196,9 @@ static void *zcache_pampd_create(char *data, size_t size, bool raw, int eph, | |||
| 1190 | } | 1196 | } |
| 1191 | /* reject if mean compression is too poor */ | 1197 | /* reject if mean compression is too poor */ |
| 1192 | if ((clen > zv_max_mean_zsize) && (curr_pers_pampd_count > 0)) { | 1198 | if ((clen > zv_max_mean_zsize) && (curr_pers_pampd_count > 0)) { |
| 1193 | zv_mean_zsize = xv_get_total_size_bytes(cli->xvpool) / | 1199 | total_zsize = xv_get_total_size_bytes(cli->xvpool); |
| 1194 | curr_pers_pampd_count; | 1200 | zv_mean_zsize = div_u64(total_zsize, |
| 1201 | curr_pers_pampd_count); | ||
| 1195 | if (zv_mean_zsize > zv_max_mean_zsize) { | 1202 | if (zv_mean_zsize > zv_max_mean_zsize) { |
| 1196 | zcache_mean_compress_poor++; | 1203 | zcache_mean_compress_poor++; |
| 1197 | goto out; | 1204 | goto out; |
| @@ -1929,9 +1936,9 @@ __setup("nofrontswap", no_frontswap); | |||
| 1929 | 1936 | ||
| 1930 | static int __init zcache_init(void) | 1937 | static int __init zcache_init(void) |
| 1931 | { | 1938 | { |
| 1932 | #ifdef CONFIG_SYSFS | ||
| 1933 | int ret = 0; | 1939 | int ret = 0; |
| 1934 | 1940 | ||
| 1941 | #ifdef CONFIG_SYSFS | ||
| 1935 | ret = sysfs_create_group(mm_kobj, &zcache_attr_group); | 1942 | ret = sysfs_create_group(mm_kobj, &zcache_attr_group); |
| 1936 | if (ret) { | 1943 | if (ret) { |
| 1937 | pr_err("zcache: can't create sysfs\n"); | 1944 | pr_err("zcache: can't create sysfs\n"); |
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c index 385acb895ab3..3f94ac34dce3 100644 --- a/drivers/usb/class/usbtmc.c +++ b/drivers/usb/class/usbtmc.c | |||
| @@ -268,7 +268,7 @@ usbtmc_abort_bulk_in_status: | |||
| 268 | dev_err(dev, "usb_bulk_msg returned %d\n", rv); | 268 | dev_err(dev, "usb_bulk_msg returned %d\n", rv); |
| 269 | goto exit; | 269 | goto exit; |
| 270 | } | 270 | } |
| 271 | } while ((actual = max_size) && | 271 | } while ((actual == max_size) && |
| 272 | (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN)); | 272 | (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN)); |
| 273 | 273 | ||
| 274 | if (actual == max_size) { | 274 | if (actual == max_size) { |
diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c index c962608b4b9a..26678cadfb21 100644 --- a/drivers/usb/core/config.c +++ b/drivers/usb/core/config.c | |||
| @@ -123,10 +123,11 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno, | |||
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | if (usb_endpoint_xfer_isoc(&ep->desc)) | 125 | if (usb_endpoint_xfer_isoc(&ep->desc)) |
| 126 | max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1) * | 126 | max_tx = (desc->bMaxBurst + 1) * (desc->bmAttributes + 1) * |
| 127 | (desc->bmAttributes + 1); | 127 | le16_to_cpu(ep->desc.wMaxPacketSize); |
| 128 | else if (usb_endpoint_xfer_int(&ep->desc)) | 128 | else if (usb_endpoint_xfer_int(&ep->desc)) |
| 129 | max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1); | 129 | max_tx = le16_to_cpu(ep->desc.wMaxPacketSize) * |
| 130 | (desc->bMaxBurst + 1); | ||
| 130 | else | 131 | else |
| 131 | max_tx = 999999; | 132 | max_tx = 999999; |
| 132 | if (le16_to_cpu(desc->wBytesPerInterval) > max_tx) { | 133 | if (le16_to_cpu(desc->wBytesPerInterval) > max_tx) { |
| @@ -134,10 +135,10 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno, | |||
| 134 | "config %d interface %d altsetting %d ep %d: " | 135 | "config %d interface %d altsetting %d ep %d: " |
| 135 | "setting to %d\n", | 136 | "setting to %d\n", |
| 136 | usb_endpoint_xfer_isoc(&ep->desc) ? "Isoc" : "Int", | 137 | usb_endpoint_xfer_isoc(&ep->desc) ? "Isoc" : "Int", |
| 137 | desc->wBytesPerInterval, | 138 | le16_to_cpu(desc->wBytesPerInterval), |
| 138 | cfgno, inum, asnum, ep->desc.bEndpointAddress, | 139 | cfgno, inum, asnum, ep->desc.bEndpointAddress, |
| 139 | max_tx); | 140 | max_tx); |
| 140 | ep->ss_ep_comp.wBytesPerInterval = max_tx; | 141 | ep->ss_ep_comp.wBytesPerInterval = cpu_to_le16(max_tx); |
| 141 | } | 142 | } |
| 142 | } | 143 | } |
| 143 | 144 | ||
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 44b6b40aafb4..5a084b9cfa3c 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig | |||
| @@ -310,7 +310,7 @@ config USB_PXA_U2O | |||
| 310 | # musb builds in ../musb along with host support | 310 | # musb builds in ../musb along with host support |
| 311 | config USB_GADGET_MUSB_HDRC | 311 | config USB_GADGET_MUSB_HDRC |
| 312 | tristate "Inventra HDRC USB Peripheral (TI, ADI, ...)" | 312 | tristate "Inventra HDRC USB Peripheral (TI, ADI, ...)" |
| 313 | depends on USB_MUSB_HDRC && (USB_MUSB_PERIPHERAL || USB_MUSB_OTG) | 313 | depends on USB_MUSB_HDRC |
| 314 | select USB_GADGET_DUALSPEED | 314 | select USB_GADGET_DUALSPEED |
| 315 | help | 315 | help |
| 316 | This OTG-capable silicon IP is used in dual designs including | 316 | This OTG-capable silicon IP is used in dual designs including |
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c index 98cbc06c30fd..ddb118a76807 100644 --- a/drivers/usb/gadget/at91_udc.c +++ b/drivers/usb/gadget/at91_udc.c | |||
| @@ -35,6 +35,7 @@ | |||
| 35 | #include <linux/list.h> | 35 | #include <linux/list.h> |
| 36 | #include <linux/interrupt.h> | 36 | #include <linux/interrupt.h> |
| 37 | #include <linux/proc_fs.h> | 37 | #include <linux/proc_fs.h> |
| 38 | #include <linux/prefetch.h> | ||
| 38 | #include <linux/clk.h> | 39 | #include <linux/clk.h> |
| 39 | #include <linux/usb/ch9.h> | 40 | #include <linux/usb/ch9.h> |
| 40 | #include <linux/usb/gadget.h> | 41 | #include <linux/usb/gadget.h> |
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 5ef87794fd32..aef47414f5d5 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c | |||
| @@ -1079,10 +1079,12 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) | |||
| 1079 | cdev->desc.bMaxPacketSize0 = | 1079 | cdev->desc.bMaxPacketSize0 = |
| 1080 | cdev->gadget->ep0->maxpacket; | 1080 | cdev->gadget->ep0->maxpacket; |
| 1081 | if (gadget_is_superspeed(gadget)) { | 1081 | if (gadget_is_superspeed(gadget)) { |
| 1082 | if (gadget->speed >= USB_SPEED_SUPER) | 1082 | if (gadget->speed >= USB_SPEED_SUPER) { |
| 1083 | cdev->desc.bcdUSB = cpu_to_le16(0x0300); | 1083 | cdev->desc.bcdUSB = cpu_to_le16(0x0300); |
| 1084 | else | 1084 | cdev->desc.bMaxPacketSize0 = 9; |
| 1085 | } else { | ||
| 1085 | cdev->desc.bcdUSB = cpu_to_le16(0x0210); | 1086 | cdev->desc.bcdUSB = cpu_to_le16(0x0210); |
| 1087 | } | ||
| 1086 | } | 1088 | } |
| 1087 | 1089 | ||
| 1088 | value = min(w_length, (u16) sizeof cdev->desc); | 1090 | value = min(w_length, (u16) sizeof cdev->desc); |
diff --git a/drivers/usb/gadget/f_hid.c b/drivers/usb/gadget/f_hid.c index 403a48bcf560..83a266bdb40e 100644 --- a/drivers/usb/gadget/f_hid.c +++ b/drivers/usb/gadget/f_hid.c | |||
| @@ -367,6 +367,13 @@ static int hidg_setup(struct usb_function *f, | |||
| 367 | case ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8 | 367 | case ((USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_INTERFACE) << 8 |
| 368 | | USB_REQ_GET_DESCRIPTOR): | 368 | | USB_REQ_GET_DESCRIPTOR): |
| 369 | switch (value >> 8) { | 369 | switch (value >> 8) { |
| 370 | case HID_DT_HID: | ||
| 371 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: HID\n"); | ||
| 372 | length = min_t(unsigned short, length, | ||
| 373 | hidg_desc.bLength); | ||
| 374 | memcpy(req->buf, &hidg_desc, length); | ||
| 375 | goto respond; | ||
| 376 | break; | ||
| 370 | case HID_DT_REPORT: | 377 | case HID_DT_REPORT: |
| 371 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n"); | 378 | VDBG(cdev, "USB_REQ_GET_DESCRIPTOR: REPORT\n"); |
| 372 | length = min_t(unsigned short, length, | 379 | length = min_t(unsigned short, length, |
diff --git a/drivers/usb/gadget/fusb300_udc.c b/drivers/usb/gadget/fusb300_udc.c index 24a924330c81..4ec888f90002 100644 --- a/drivers/usb/gadget/fusb300_udc.c +++ b/drivers/usb/gadget/fusb300_udc.c | |||
| @@ -609,107 +609,6 @@ void fusb300_rdcxf(struct fusb300 *fusb300, | |||
| 609 | } | 609 | } |
| 610 | } | 610 | } |
| 611 | 611 | ||
| 612 | #if 0 | ||
| 613 | static void fusb300_dbg_fifo(struct fusb300_ep *ep, | ||
| 614 | u8 entry, u16 length) | ||
| 615 | { | ||
| 616 | u32 reg; | ||
| 617 | u32 i = 0; | ||
| 618 | u32 j = 0; | ||
| 619 | |||
| 620 | reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_GTM); | ||
| 621 | reg &= ~(FUSB300_GTM_TST_EP_ENTRY(0xF) | | ||
| 622 | FUSB300_GTM_TST_EP_NUM(0xF) | FUSB300_GTM_TST_FIFO_DEG); | ||
| 623 | reg |= (FUSB300_GTM_TST_EP_ENTRY(entry) | | ||
| 624 | FUSB300_GTM_TST_EP_NUM(ep->epnum) | FUSB300_GTM_TST_FIFO_DEG); | ||
| 625 | iowrite32(reg, ep->fusb300->reg + FUSB300_OFFSET_GTM); | ||
| 626 | |||
| 627 | for (i = 0; i < (length >> 2); i++) { | ||
| 628 | if (i * 4 == 1024) | ||
| 629 | break; | ||
| 630 | reg = ioread32(ep->fusb300->reg + | ||
| 631 | FUSB300_OFFSET_BUFDBG_START + i * 4); | ||
| 632 | printk(KERN_DEBUG" 0x%-8x", reg); | ||
| 633 | j++; | ||
| 634 | if ((j % 4) == 0) | ||
| 635 | printk(KERN_DEBUG "\n"); | ||
| 636 | } | ||
| 637 | |||
| 638 | if (length % 4) { | ||
| 639 | reg = ioread32(ep->fusb300->reg + | ||
| 640 | FUSB300_OFFSET_BUFDBG_START + i * 4); | ||
| 641 | printk(KERN_DEBUG " 0x%x\n", reg); | ||
| 642 | } | ||
| 643 | |||
| 644 | if ((j % 4) != 0) | ||
| 645 | printk(KERN_DEBUG "\n"); | ||
| 646 | |||
| 647 | fusb300_disable_bit(ep->fusb300, FUSB300_OFFSET_GTM, | ||
| 648 | FUSB300_GTM_TST_FIFO_DEG); | ||
| 649 | } | ||
| 650 | |||
| 651 | static void fusb300_cmp_dbg_fifo(struct fusb300_ep *ep, | ||
| 652 | u8 entry, u16 length, u8 *golden) | ||
| 653 | { | ||
| 654 | u32 reg; | ||
| 655 | u32 i = 0; | ||
| 656 | u32 golden_value; | ||
| 657 | u8 *tmp; | ||
| 658 | |||
| 659 | tmp = golden; | ||
| 660 | |||
| 661 | printk(KERN_DEBUG "fusb300_cmp_dbg_fifo (entry %d) : start\n", entry); | ||
| 662 | |||
| 663 | reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_GTM); | ||
| 664 | reg &= ~(FUSB300_GTM_TST_EP_ENTRY(0xF) | | ||
| 665 | FUSB300_GTM_TST_EP_NUM(0xF) | FUSB300_GTM_TST_FIFO_DEG); | ||
| 666 | reg |= (FUSB300_GTM_TST_EP_ENTRY(entry) | | ||
| 667 | FUSB300_GTM_TST_EP_NUM(ep->epnum) | FUSB300_GTM_TST_FIFO_DEG); | ||
| 668 | iowrite32(reg, ep->fusb300->reg + FUSB300_OFFSET_GTM); | ||
| 669 | |||
| 670 | for (i = 0; i < (length >> 2); i++) { | ||
| 671 | if (i * 4 == 1024) | ||
| 672 | break; | ||
| 673 | golden_value = *tmp | *(tmp + 1) << 8 | | ||
| 674 | *(tmp + 2) << 16 | *(tmp + 3) << 24; | ||
| 675 | |||
| 676 | reg = ioread32(ep->fusb300->reg + | ||
| 677 | FUSB300_OFFSET_BUFDBG_START + i*4); | ||
| 678 | |||
| 679 | if (reg != golden_value) { | ||
| 680 | printk(KERN_DEBUG "0x%x : ", (u32)(ep->fusb300->reg + | ||
| 681 | FUSB300_OFFSET_BUFDBG_START + i*4)); | ||
| 682 | printk(KERN_DEBUG " golden = 0x%x, reg = 0x%x\n", | ||
| 683 | golden_value, reg); | ||
| 684 | } | ||
| 685 | tmp += 4; | ||
| 686 | } | ||
| 687 | |||
| 688 | switch (length % 4) { | ||
| 689 | case 1: | ||
| 690 | golden_value = *tmp; | ||
| 691 | case 2: | ||
| 692 | golden_value = *tmp | *(tmp + 1) << 8; | ||
| 693 | case 3: | ||
| 694 | golden_value = *tmp | *(tmp + 1) << 8 | *(tmp + 2) << 16; | ||
| 695 | default: | ||
| 696 | break; | ||
| 697 | |||
| 698 | reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_BUFDBG_START + i*4); | ||
| 699 | if (reg != golden_value) { | ||
| 700 | printk(KERN_DEBUG "0x%x:", (u32)(ep->fusb300->reg + | ||
| 701 | FUSB300_OFFSET_BUFDBG_START + i*4)); | ||
| 702 | printk(KERN_DEBUG " golden = 0x%x, reg = 0x%x\n", | ||
| 703 | golden_value, reg); | ||
| 704 | } | ||
| 705 | } | ||
| 706 | |||
| 707 | printk(KERN_DEBUG "fusb300_cmp_dbg_fifo : end\n"); | ||
| 708 | fusb300_disable_bit(ep->fusb300, FUSB300_OFFSET_GTM, | ||
| 709 | FUSB300_GTM_TST_FIFO_DEG); | ||
| 710 | } | ||
| 711 | #endif | ||
| 712 | |||
| 713 | static void fusb300_rdfifo(struct fusb300_ep *ep, | 612 | static void fusb300_rdfifo(struct fusb300_ep *ep, |
| 714 | struct fusb300_request *req, | 613 | struct fusb300_request *req, |
| 715 | u32 length) | 614 | u32 length) |
diff --git a/drivers/usb/gadget/net2272.c b/drivers/usb/gadget/net2272.c index 7c7b0e120d88..ab98ea926a11 100644 --- a/drivers/usb/gadget/net2272.c +++ b/drivers/usb/gadget/net2272.c | |||
| @@ -27,13 +27,13 @@ | |||
| 27 | #include <linux/interrupt.h> | 27 | #include <linux/interrupt.h> |
| 28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
| 29 | #include <linux/ioport.h> | 29 | #include <linux/ioport.h> |
| 30 | #include <linux/irq.h> | ||
| 31 | #include <linux/kernel.h> | 30 | #include <linux/kernel.h> |
| 32 | #include <linux/list.h> | 31 | #include <linux/list.h> |
| 33 | #include <linux/module.h> | 32 | #include <linux/module.h> |
| 34 | #include <linux/moduleparam.h> | 33 | #include <linux/moduleparam.h> |
| 35 | #include <linux/pci.h> | 34 | #include <linux/pci.h> |
| 36 | #include <linux/platform_device.h> | 35 | #include <linux/platform_device.h> |
| 36 | #include <linux/prefetch.h> | ||
| 37 | #include <linux/sched.h> | 37 | #include <linux/sched.h> |
| 38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
| 39 | #include <linux/timer.h> | 39 | #include <linux/timer.h> |
diff --git a/drivers/usb/gadget/s3c2410_udc.c b/drivers/usb/gadget/s3c2410_udc.c index 85c1b0d66293..8d31848aab09 100644 --- a/drivers/usb/gadget/s3c2410_udc.c +++ b/drivers/usb/gadget/s3c2410_udc.c | |||
| @@ -2060,6 +2060,7 @@ static int s3c2410_udc_resume(struct platform_device *pdev) | |||
| 2060 | static const struct platform_device_id s3c_udc_ids[] = { | 2060 | static const struct platform_device_id s3c_udc_ids[] = { |
| 2061 | { "s3c2410-usbgadget", }, | 2061 | { "s3c2410-usbgadget", }, |
| 2062 | { "s3c2440-usbgadget", }, | 2062 | { "s3c2440-usbgadget", }, |
| 2063 | { } | ||
| 2063 | }; | 2064 | }; |
| 2064 | MODULE_DEVICE_TABLE(platform, s3c_udc_ids); | 2065 | MODULE_DEVICE_TABLE(platform, s3c_udc_ids); |
| 2065 | 2066 | ||
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index bf2c8f65e1ae..e051b30c1847 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
| @@ -1046,7 +1046,19 @@ static int ehci_hub_control ( | |||
| 1046 | if (!selector || selector > 5) | 1046 | if (!selector || selector > 5) |
| 1047 | goto error; | 1047 | goto error; |
| 1048 | ehci_quiesce(ehci); | 1048 | ehci_quiesce(ehci); |
| 1049 | |||
| 1050 | /* Put all enabled ports into suspend */ | ||
| 1051 | while (ports--) { | ||
| 1052 | u32 __iomem *sreg = | ||
| 1053 | &ehci->regs->port_status[ports]; | ||
| 1054 | |||
| 1055 | temp = ehci_readl(ehci, sreg) & ~PORT_RWC_BITS; | ||
| 1056 | if (temp & PORT_PE) | ||
| 1057 | ehci_writel(ehci, temp | PORT_SUSPEND, | ||
| 1058 | sreg); | ||
| 1059 | } | ||
| 1049 | ehci_halt(ehci); | 1060 | ehci_halt(ehci); |
| 1061 | temp = ehci_readl(ehci, status_reg); | ||
| 1050 | temp |= selector << 16; | 1062 | temp |= selector << 16; |
| 1051 | ehci_writel(ehci, temp, status_reg); | 1063 | ehci_writel(ehci, temp, status_reg); |
| 1052 | break; | 1064 | break; |
diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index 0c058be35a38..555a73c864b5 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/usb/ulpi.h> | 24 | #include <linux/usb/ulpi.h> |
| 25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
| 26 | 26 | ||
| 27 | #include <mach/hardware.h> | ||
| 27 | #include <mach/mxc_ehci.h> | 28 | #include <mach/mxc_ehci.h> |
| 28 | 29 | ||
| 29 | #include <asm/mach-types.h> | 30 | #include <asm/mach-types.h> |
diff --git a/drivers/usb/host/ehci-omap.c b/drivers/usb/host/ehci-omap.c index 55a57c23dd0f..45240321ca09 100644 --- a/drivers/usb/host/ehci-omap.c +++ b/drivers/usb/host/ehci-omap.c | |||
| @@ -98,6 +98,18 @@ static void omap_ehci_soft_phy_reset(struct platform_device *pdev, u8 port) | |||
| 98 | } | 98 | } |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | static void disable_put_regulator( | ||
| 102 | struct ehci_hcd_omap_platform_data *pdata) | ||
| 103 | { | ||
| 104 | int i; | ||
| 105 | |||
| 106 | for (i = 0 ; i < OMAP3_HS_USB_PORTS ; i++) { | ||
| 107 | if (pdata->regulator[i]) { | ||
| 108 | regulator_disable(pdata->regulator[i]); | ||
| 109 | regulator_put(pdata->regulator[i]); | ||
| 110 | } | ||
| 111 | } | ||
| 112 | } | ||
| 101 | 113 | ||
| 102 | /* configure so an HC device and id are always provided */ | 114 | /* configure so an HC device and id are always provided */ |
| 103 | /* always called with process context; sleeping is OK */ | 115 | /* always called with process context; sleeping is OK */ |
| @@ -231,9 +243,11 @@ err_add_hcd: | |||
| 231 | omap_usbhs_disable(dev); | 243 | omap_usbhs_disable(dev); |
| 232 | 244 | ||
| 233 | err_enable: | 245 | err_enable: |
| 246 | disable_put_regulator(pdata); | ||
| 234 | usb_put_hcd(hcd); | 247 | usb_put_hcd(hcd); |
| 235 | 248 | ||
| 236 | err_io: | 249 | err_io: |
| 250 | iounmap(regs); | ||
| 237 | return ret; | 251 | return ret; |
| 238 | } | 252 | } |
| 239 | 253 | ||
| @@ -253,6 +267,8 @@ static int ehci_hcd_omap_remove(struct platform_device *pdev) | |||
| 253 | 267 | ||
| 254 | usb_remove_hcd(hcd); | 268 | usb_remove_hcd(hcd); |
| 255 | omap_usbhs_disable(dev); | 269 | omap_usbhs_disable(dev); |
| 270 | disable_put_regulator(dev->platform_data); | ||
| 271 | iounmap(hcd->regs); | ||
| 256 | usb_put_hcd(hcd); | 272 | usb_put_hcd(hcd); |
| 257 | return 0; | 273 | return 0; |
| 258 | } | 274 | } |
diff --git a/drivers/usb/host/isp1760-hcd.c b/drivers/usb/host/isp1760-hcd.c index 55d3d5859ac5..840beda66dd9 100644 --- a/drivers/usb/host/isp1760-hcd.c +++ b/drivers/usb/host/isp1760-hcd.c | |||
| @@ -1583,6 +1583,9 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, | |||
| 1583 | int retval = 0; | 1583 | int retval = 0; |
| 1584 | 1584 | ||
| 1585 | spin_lock_irqsave(&priv->lock, spinflags); | 1585 | spin_lock_irqsave(&priv->lock, spinflags); |
| 1586 | retval = usb_hcd_check_unlink_urb(hcd, urb, status); | ||
| 1587 | if (retval) | ||
| 1588 | goto out; | ||
| 1586 | 1589 | ||
| 1587 | qh = urb->ep->hcpriv; | 1590 | qh = urb->ep->hcpriv; |
| 1588 | if (!qh) { | 1591 | if (!qh) { |
diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c index a9d315906e3d..629a96813fd6 100644 --- a/drivers/usb/host/pci-quirks.c +++ b/drivers/usb/host/pci-quirks.c | |||
| @@ -535,7 +535,7 @@ static void __devinit quirk_usb_handoff_ohci(struct pci_dev *pdev) | |||
| 535 | iounmap(base); | 535 | iounmap(base); |
| 536 | } | 536 | } |
| 537 | 537 | ||
| 538 | static const struct dmi_system_id __initconst ehci_dmi_nohandoff_table[] = { | 538 | static const struct dmi_system_id __devinitconst ehci_dmi_nohandoff_table[] = { |
| 539 | { | 539 | { |
| 540 | /* Pegatron Lucid (ExoPC) */ | 540 | /* Pegatron Lucid (ExoPC) */ |
| 541 | .matches = { | 541 | .matches = { |
| @@ -817,7 +817,7 @@ static void __devinit quirk_usb_handoff_xhci(struct pci_dev *pdev) | |||
| 817 | 817 | ||
| 818 | /* If the BIOS owns the HC, signal that the OS wants it, and wait */ | 818 | /* If the BIOS owns the HC, signal that the OS wants it, and wait */ |
| 819 | if (val & XHCI_HC_BIOS_OWNED) { | 819 | if (val & XHCI_HC_BIOS_OWNED) { |
| 820 | writel(val & XHCI_HC_OS_OWNED, base + ext_cap_offset); | 820 | writel(val | XHCI_HC_OS_OWNED, base + ext_cap_offset); |
| 821 | 821 | ||
| 822 | /* Wait for 5 seconds with 10 microsecond polling interval */ | 822 | /* Wait for 5 seconds with 10 microsecond polling interval */ |
| 823 | timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED, | 823 | timeout = handshake(base + ext_cap_offset, XHCI_HC_BIOS_OWNED, |
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 763f484bc092..1c4432d8fc10 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
| @@ -345,7 +345,8 @@ static void xhci_event_ring_work(unsigned long arg) | |||
| 345 | spin_lock_irqsave(&xhci->lock, flags); | 345 | spin_lock_irqsave(&xhci->lock, flags); |
| 346 | temp = xhci_readl(xhci, &xhci->op_regs->status); | 346 | temp = xhci_readl(xhci, &xhci->op_regs->status); |
| 347 | xhci_dbg(xhci, "op reg status = 0x%x\n", temp); | 347 | xhci_dbg(xhci, "op reg status = 0x%x\n", temp); |
| 348 | if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING)) { | 348 | if (temp == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING) || |
| 349 | (xhci->xhc_state & XHCI_STATE_HALTED)) { | ||
| 349 | xhci_dbg(xhci, "HW died, polling stopped.\n"); | 350 | xhci_dbg(xhci, "HW died, polling stopped.\n"); |
| 350 | spin_unlock_irqrestore(&xhci->lock, flags); | 351 | spin_unlock_irqrestore(&xhci->lock, flags); |
| 351 | return; | 352 | return; |
| @@ -939,8 +940,11 @@ static int xhci_check_args(struct usb_hcd *hcd, struct usb_device *udev, | |||
| 939 | return 0; | 940 | return 0; |
| 940 | } | 941 | } |
| 941 | 942 | ||
| 943 | xhci = hcd_to_xhci(hcd); | ||
| 944 | if (xhci->xhc_state & XHCI_STATE_HALTED) | ||
| 945 | return -ENODEV; | ||
| 946 | |||
| 942 | if (check_virt_dev) { | 947 | if (check_virt_dev) { |
| 943 | xhci = hcd_to_xhci(hcd); | ||
| 944 | if (!udev->slot_id || !xhci->devs | 948 | if (!udev->slot_id || !xhci->devs |
| 945 | || !xhci->devs[udev->slot_id]) { | 949 | || !xhci->devs[udev->slot_id]) { |
| 946 | printk(KERN_DEBUG "xHCI %s called with unaddressed " | 950 | printk(KERN_DEBUG "xHCI %s called with unaddressed " |
| @@ -1242,7 +1246,8 @@ int xhci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status) | |||
| 1242 | xhci_urb_free_priv(xhci, urb_priv); | 1246 | xhci_urb_free_priv(xhci, urb_priv); |
| 1243 | return ret; | 1247 | return ret; |
| 1244 | } | 1248 | } |
| 1245 | if (xhci->xhc_state & XHCI_STATE_DYING) { | 1249 | if ((xhci->xhc_state & XHCI_STATE_DYING) || |
| 1250 | (xhci->xhc_state & XHCI_STATE_HALTED)) { | ||
| 1246 | xhci_dbg(xhci, "Ep 0x%x: URB %p to be canceled on " | 1251 | xhci_dbg(xhci, "Ep 0x%x: URB %p to be canceled on " |
| 1247 | "non-responsive xHCI host.\n", | 1252 | "non-responsive xHCI host.\n", |
| 1248 | urb->ep->desc.bEndpointAddress, urb); | 1253 | urb->ep->desc.bEndpointAddress, urb); |
| @@ -2665,7 +2670,10 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev) | |||
| 2665 | int i, ret; | 2670 | int i, ret; |
| 2666 | 2671 | ||
| 2667 | ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); | 2672 | ret = xhci_check_args(hcd, udev, NULL, 0, true, __func__); |
| 2668 | if (ret <= 0) | 2673 | /* If the host is halted due to driver unload, we still need to free the |
| 2674 | * device. | ||
| 2675 | */ | ||
| 2676 | if (ret <= 0 && ret != -ENODEV) | ||
| 2669 | return; | 2677 | return; |
| 2670 | 2678 | ||
| 2671 | virt_dev = xhci->devs[udev->slot_id]; | 2679 | virt_dev = xhci->devs[udev->slot_id]; |
| @@ -2679,7 +2687,8 @@ void xhci_free_dev(struct usb_hcd *hcd, struct usb_device *udev) | |||
| 2679 | spin_lock_irqsave(&xhci->lock, flags); | 2687 | spin_lock_irqsave(&xhci->lock, flags); |
| 2680 | /* Don't disable the slot if the host controller is dead. */ | 2688 | /* Don't disable the slot if the host controller is dead. */ |
| 2681 | state = xhci_readl(xhci, &xhci->op_regs->status); | 2689 | state = xhci_readl(xhci, &xhci->op_regs->status); |
| 2682 | if (state == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING)) { | 2690 | if (state == 0xffffffff || (xhci->xhc_state & XHCI_STATE_DYING) || |
| 2691 | (xhci->xhc_state & XHCI_STATE_HALTED)) { | ||
| 2683 | xhci_free_virt_device(xhci, udev->slot_id); | 2692 | xhci_free_virt_device(xhci, udev->slot_id); |
| 2684 | spin_unlock_irqrestore(&xhci->lock, flags); | 2693 | spin_unlock_irqrestore(&xhci->lock, flags); |
| 2685 | return; | 2694 | return; |
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig index 6192b45959f4..fc34b8b11910 100644 --- a/drivers/usb/musb/Kconfig +++ b/drivers/usb/musb/Kconfig | |||
| @@ -3,9 +3,6 @@ | |||
| 3 | # for silicon based on Mentor Graphics INVENTRA designs | 3 | # for silicon based on Mentor Graphics INVENTRA designs |
| 4 | # | 4 | # |
| 5 | 5 | ||
| 6 | comment "Enable Host or Gadget support to see Inventra options" | ||
| 7 | depends on !USB && USB_GADGET=n | ||
| 8 | |||
| 9 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller | 6 | # (M)HDRC = (Multipoint) Highspeed Dual-Role Controller |
| 10 | config USB_MUSB_HDRC | 7 | config USB_MUSB_HDRC |
| 11 | depends on USB && USB_GADGET | 8 | depends on USB && USB_GADGET |
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c index b67a062f556b..8c41a2e6ea77 100644 --- a/drivers/usb/musb/musb_gadget.c +++ b/drivers/usb/musb/musb_gadget.c | |||
| @@ -1698,6 +1698,8 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on) | |||
| 1698 | 1698 | ||
| 1699 | is_on = !!is_on; | 1699 | is_on = !!is_on; |
| 1700 | 1700 | ||
| 1701 | pm_runtime_get_sync(musb->controller); | ||
| 1702 | |||
| 1701 | /* NOTE: this assumes we are sensing vbus; we'd rather | 1703 | /* NOTE: this assumes we are sensing vbus; we'd rather |
| 1702 | * not pullup unless the B-session is active. | 1704 | * not pullup unless the B-session is active. |
| 1703 | */ | 1705 | */ |
| @@ -1707,6 +1709,9 @@ static int musb_gadget_pullup(struct usb_gadget *gadget, int is_on) | |||
| 1707 | musb_pullup(musb, is_on); | 1709 | musb_pullup(musb, is_on); |
| 1708 | } | 1710 | } |
| 1709 | spin_unlock_irqrestore(&musb->lock, flags); | 1711 | spin_unlock_irqrestore(&musb->lock, flags); |
| 1712 | |||
| 1713 | pm_runtime_put(musb->controller); | ||
| 1714 | |||
| 1710 | return 0; | 1715 | return 0; |
| 1711 | } | 1716 | } |
| 1712 | 1717 | ||
diff --git a/drivers/usb/musb/tusb6010_omap.c b/drivers/usb/musb/tusb6010_omap.c index c784e6c03aac..07c8a73dfe41 100644 --- a/drivers/usb/musb/tusb6010_omap.c +++ b/drivers/usb/musb/tusb6010_omap.c | |||
| @@ -89,7 +89,7 @@ static inline int tusb_omap_use_shared_dmareq(struct tusb_omap_dma_ch *chdat) | |||
| 89 | u32 reg = musb_readl(chdat->tbase, TUSB_DMA_EP_MAP); | 89 | u32 reg = musb_readl(chdat->tbase, TUSB_DMA_EP_MAP); |
| 90 | 90 | ||
| 91 | if (reg != 0) { | 91 | if (reg != 0) { |
| 92 | dev_dbg(musb->controller, "ep%i dmareq0 is busy for ep%i\n", | 92 | dev_dbg(chdat->musb->controller, "ep%i dmareq0 is busy for ep%i\n", |
| 93 | chdat->epnum, reg & 0xf); | 93 | chdat->epnum, reg & 0xf); |
| 94 | return -EAGAIN; | 94 | return -EAGAIN; |
| 95 | } | 95 | } |
diff --git a/drivers/usb/renesas_usbhs/mod_gadget.c b/drivers/usb/renesas_usbhs/mod_gadget.c index ba79dbf5adbc..cb2d451d511e 100644 --- a/drivers/usb/renesas_usbhs/mod_gadget.c +++ b/drivers/usb/renesas_usbhs/mod_gadget.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 14 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
| 15 | * | 15 | * |
| 16 | */ | 16 | */ |
| 17 | #include <linux/dma-mapping.h> | ||
| 17 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 18 | #include <linux/module.h> | 19 | #include <linux/module.h> |
| 19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
| @@ -76,7 +77,7 @@ struct usbhsg_recip_handle { | |||
| 76 | struct usbhsg_gpriv, mod) | 77 | struct usbhsg_gpriv, mod) |
| 77 | 78 | ||
| 78 | #define __usbhsg_for_each_uep(start, pos, g, i) \ | 79 | #define __usbhsg_for_each_uep(start, pos, g, i) \ |
| 79 | for (i = start, pos = (g)->uep; \ | 80 | for (i = start, pos = (g)->uep + i; \ |
| 80 | i < (g)->uep_size; \ | 81 | i < (g)->uep_size; \ |
| 81 | i++, pos = (g)->uep + i) | 82 | i++, pos = (g)->uep + i) |
| 82 | 83 | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 2e06b90aa1f8..78a2cf9551cc 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -151,6 +151,7 @@ static struct ftdi_sio_quirk ftdi_stmclite_quirk = { | |||
| 151 | * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! | 151 | * /sys/bus/usb/ftdi_sio/new_id, then send patch/report! |
| 152 | */ | 152 | */ |
| 153 | static struct usb_device_id id_table_combined [] = { | 153 | static struct usb_device_id id_table_combined [] = { |
| 154 | { USB_DEVICE(FTDI_VID, FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID) }, | ||
| 154 | { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) }, | 155 | { USB_DEVICE(FTDI_VID, FTDI_CTI_MINI_PID) }, |
| 155 | { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) }, | 156 | { USB_DEVICE(FTDI_VID, FTDI_CTI_NANO_PID) }, |
| 156 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, | 157 | { USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) }, |
| @@ -1171,7 +1172,7 @@ static __u32 get_ftdi_divisor(struct tty_struct *tty, | |||
| 1171 | case FT2232H: /* FT2232H chip */ | 1172 | case FT2232H: /* FT2232H chip */ |
| 1172 | case FT4232H: /* FT4232H chip */ | 1173 | case FT4232H: /* FT4232H chip */ |
| 1173 | case FT232H: /* FT232H chip */ | 1174 | case FT232H: /* FT232H chip */ |
| 1174 | if ((baud <= 12000000) & (baud >= 1200)) { | 1175 | if ((baud <= 12000000) && (baud >= 1200)) { |
| 1175 | div_value = ftdi_2232h_baud_to_divisor(baud); | 1176 | div_value = ftdi_2232h_baud_to_divisor(baud); |
| 1176 | } else if (baud < 1200) { | 1177 | } else if (baud < 1200) { |
| 1177 | div_value = ftdi_232bm_baud_to_divisor(baud); | 1178 | div_value = ftdi_232bm_baud_to_divisor(baud); |
| @@ -1205,7 +1206,10 @@ static int change_speed(struct tty_struct *tty, struct usb_serial_port *port) | |||
| 1205 | urb_index_value = get_ftdi_divisor(tty, port); | 1206 | urb_index_value = get_ftdi_divisor(tty, port); |
| 1206 | urb_value = (__u16)urb_index_value; | 1207 | urb_value = (__u16)urb_index_value; |
| 1207 | urb_index = (__u16)(urb_index_value >> 16); | 1208 | urb_index = (__u16)(urb_index_value >> 16); |
| 1208 | if (priv->interface) { /* FT2232C */ | 1209 | if ((priv->chip_type == FT2232C) || (priv->chip_type == FT2232H) || |
| 1210 | (priv->chip_type == FT4232H) || (priv->chip_type == FT232H)) { | ||
| 1211 | /* Probably the BM type needs the MSB of the encoded fractional | ||
| 1212 | * divider also moved like for the chips above. Any infos? */ | ||
| 1209 | urb_index = (__u16)((urb_index << 8) | priv->interface); | 1213 | urb_index = (__u16)((urb_index << 8) | priv->interface); |
| 1210 | } | 1214 | } |
| 1211 | 1215 | ||
diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h index 19156d1049fe..bf5227ad3ef7 100644 --- a/drivers/usb/serial/ftdi_sio_ids.h +++ b/drivers/usb/serial/ftdi_sio_ids.h | |||
| @@ -1159,4 +1159,8 @@ | |||
| 1159 | /* USB-Nano-485*/ | 1159 | /* USB-Nano-485*/ |
| 1160 | #define FTDI_CTI_NANO_PID 0xF60B | 1160 | #define FTDI_CTI_NANO_PID 0xF60B |
| 1161 | 1161 | ||
| 1162 | 1162 | /* | |
| 1163 | * ZeitControl cardsystems GmbH rfid-readers http://zeitconrol.de | ||
| 1164 | */ | ||
| 1165 | /* TagTracer MIFARE*/ | ||
| 1166 | #define FTDI_ZEITCONTROL_TAGTRACE_MIFARE_PID 0xF7C0 | ||
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 60b25d8ea0e2..815656198914 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -148,6 +148,10 @@ static void option_instat_callback(struct urb *urb); | |||
| 148 | #define HUAWEI_PRODUCT_K4505 0x1464 | 148 | #define HUAWEI_PRODUCT_K4505 0x1464 |
| 149 | #define HUAWEI_PRODUCT_K3765 0x1465 | 149 | #define HUAWEI_PRODUCT_K3765 0x1465 |
| 150 | #define HUAWEI_PRODUCT_E14AC 0x14AC | 150 | #define HUAWEI_PRODUCT_E14AC 0x14AC |
| 151 | #define HUAWEI_PRODUCT_K3770 0x14C9 | ||
| 152 | #define HUAWEI_PRODUCT_K3771 0x14CA | ||
| 153 | #define HUAWEI_PRODUCT_K4510 0x14CB | ||
| 154 | #define HUAWEI_PRODUCT_K4511 0x14CC | ||
| 151 | #define HUAWEI_PRODUCT_ETS1220 0x1803 | 155 | #define HUAWEI_PRODUCT_ETS1220 0x1803 |
| 152 | #define HUAWEI_PRODUCT_E353 0x1506 | 156 | #define HUAWEI_PRODUCT_E353 0x1506 |
| 153 | 157 | ||
| @@ -547,6 +551,14 @@ static const struct usb_device_id option_ids[] = { | |||
| 547 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) }, | 551 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3765, 0xff, 0xff, 0xff) }, |
| 548 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, | 552 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_ETS1220, 0xff, 0xff, 0xff) }, |
| 549 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) }, | 553 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E14AC, 0xff, 0xff, 0xff) }, |
| 554 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x31) }, | ||
| 555 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3770, 0xff, 0x02, 0x32) }, | ||
| 556 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x31) }, | ||
| 557 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K3771, 0xff, 0x02, 0x32) }, | ||
| 558 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x31) }, | ||
| 559 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4510, 0xff, 0x01, 0x32) }, | ||
| 560 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x31) }, | ||
| 561 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_K4511, 0xff, 0x01, 0x32) }, | ||
| 550 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, | 562 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E353, 0xff, 0x01, 0x01) }, |
| 551 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, | 563 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, |
| 552 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, | 564 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, |
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c index 54a9dab1f33b..aeccc7f0a93c 100644 --- a/drivers/usb/serial/qcserial.c +++ b/drivers/usb/serial/qcserial.c | |||
| @@ -45,6 +45,7 @@ static const struct usb_device_id id_table[] = { | |||
| 45 | {USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */ | 45 | {USB_DEVICE(0x05c6, 0x9203)}, /* Generic Gobi Modem device */ |
| 46 | {USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ | 46 | {USB_DEVICE(0x05c6, 0x9222)}, /* Generic Gobi Modem device */ |
| 47 | {USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */ | 47 | {USB_DEVICE(0x05c6, 0x9008)}, /* Generic Gobi QDL device */ |
| 48 | {USB_DEVICE(0x05c6, 0x9009)}, /* Generic Gobi Modem device */ | ||
| 48 | {USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */ | 49 | {USB_DEVICE(0x05c6, 0x9201)}, /* Generic Gobi QDL device */ |
| 49 | {USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */ | 50 | {USB_DEVICE(0x05c6, 0x9221)}, /* Generic Gobi QDL device */ |
| 50 | {USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */ | 51 | {USB_DEVICE(0x05c6, 0x9231)}, /* Generic Gobi QDL device */ |
| @@ -78,6 +79,7 @@ static const struct usb_device_id id_table[] = { | |||
| 78 | {USB_DEVICE(0x1199, 0x9008)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 79 | {USB_DEVICE(0x1199, 0x9008)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
| 79 | {USB_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 80 | {USB_DEVICE(0x1199, 0x9009)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
| 80 | {USB_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ | 81 | {USB_DEVICE(0x1199, 0x900a)}, /* Sierra Wireless Gobi 2000 Modem device (VT773) */ |
| 82 | {USB_DEVICE(0x1199, 0x9011)}, /* Sierra Wireless Gobi 2000 Modem device (MC8305) */ | ||
| 81 | {USB_DEVICE(0x16d8, 0x8001)}, /* CMDTech Gobi 2000 QDL device (VU922) */ | 83 | {USB_DEVICE(0x16d8, 0x8001)}, /* CMDTech Gobi 2000 QDL device (VU922) */ |
| 82 | {USB_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */ | 84 | {USB_DEVICE(0x16d8, 0x8002)}, /* CMDTech Gobi 2000 Modem device (VU922) */ |
| 83 | {USB_DEVICE(0x05c6, 0x9204)}, /* Gobi 2000 QDL device */ | 85 | {USB_DEVICE(0x05c6, 0x9204)}, /* Gobi 2000 QDL device */ |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index ccff3483eebc..3041a974faf3 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -1988,6 +1988,16 @@ UNUSUAL_DEV( 0x4146, 0xba01, 0x0100, 0x0100, | |||
| 1988 | "Micro Mini 1GB", | 1988 | "Micro Mini 1GB", |
| 1989 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), | 1989 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_NOT_LOCKABLE ), |
| 1990 | 1990 | ||
| 1991 | /* | ||
| 1992 | * Nick Bowler <nbowler@elliptictech.com> | ||
| 1993 | * SCSI stack spams (otherwise harmless) error messages. | ||
| 1994 | */ | ||
| 1995 | UNUSUAL_DEV( 0xc251, 0x4003, 0x0100, 0x0100, | ||
| 1996 | "Keil Software, Inc.", | ||
| 1997 | "V2M MotherBoard", | ||
| 1998 | USB_SC_DEVICE, USB_PR_DEVICE, NULL, | ||
| 1999 | US_FL_NOT_LOCKABLE), | ||
| 2000 | |||
| 1991 | /* Reported by Andrew Simmons <andrew.simmons@gmail.com> */ | 2001 | /* Reported by Andrew Simmons <andrew.simmons@gmail.com> */ |
| 1992 | UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001, | 2002 | UNUSUAL_DEV( 0xed06, 0x4500, 0x0001, 0x0001, |
| 1993 | "DataStor", | 2003 | "DataStor", |
