aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2011-12-13 05:11:26 -0500
committerLuciano Coelho <coelho@ti.com>2012-04-12 01:44:00 -0400
commitf83985bb5f8f0f25d44ab7b108a709a52aa1c5e0 (patch)
tree10671a9822fb6ca2db95d03df2c305810bf2747e /drivers/net/wireless
parent53d67a50cd17aca120dff20eb2a93e1665361688 (diff)
wlcore/wl12xx: turn no-Tx-align quirk into Tx-align
Inverting the quirk flag to indicate Tx-alignment. This aligns it with the similar Rx-side quirk. The call to wl1271_set_block_size() decides whether SDIO block size alignment can be used or not. In case we're using SPI, we can't use the block size alignment, so the function returns false. So we set the quirk when wl1271_set_block_size() returns true and let the wl12xx lower driver unset the bit for wl127x (since it doesn't support this quirk). Signed-off-by: Arik Nemtsov <arik@wizery.com> Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/ti/wl12xx/main.c13
-rw-r--r--drivers/net/wireless/ti/wlcore/init.c2
-rw-r--r--drivers/net/wireless/ti/wlcore/main.c4
-rw-r--r--drivers/net/wireless/ti/wlcore/tx.c6
-rw-r--r--drivers/net/wireless/ti/wlcore/wlcore.h2
5 files changed, 15 insertions, 12 deletions
diff --git a/drivers/net/wireless/ti/wl12xx/main.c b/drivers/net/wireless/ti/wl12xx/main.c
index 6b187d066c51..00ecd2ad495a 100644
--- a/drivers/net/wireless/ti/wl12xx/main.c
+++ b/drivers/net/wireless/ti/wl12xx/main.c
@@ -272,9 +272,10 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
272 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete", 272 wl1271_warning("chip id 0x%x (1271 PG10) support is obsolete",
273 wl->chip.id); 273 wl->chip.id);
274 274
275 wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT | 275 /* clear the alignment quirk, since we don't support it */
276 WLCORE_QUIRK_LEGACY_NVS; 276 wl->quirks &= ~WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
277 wl->plt_fw_name = WL127X_PLT_FW_NAME; 277
278 wl->quirks |= WLCORE_QUIRK_LEGACY_NVS;
278 wl->sr_fw_name = WL127X_FW_NAME_SINGLE; 279 wl->sr_fw_name = WL127X_FW_NAME_SINGLE;
279 wl->mr_fw_name = WL127X_FW_NAME_MULTI; 280 wl->mr_fw_name = WL127X_FW_NAME_MULTI;
280 281
@@ -287,8 +288,10 @@ static int wl12xx_identify_chip(struct wl1271 *wl)
287 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)", 288 wl1271_debug(DEBUG_BOOT, "chip id 0x%x (1271 PG20)",
288 wl->chip.id); 289 wl->chip.id);
289 290
290 wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT | 291 /* clear the alignment quirk, since we don't support it */
291 WLCORE_QUIRK_LEGACY_NVS; 292 wl->quirks &= ~WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
293
294 wl->quirks |= WLCORE_QUIRK_LEGACY_NVS;
292 wl->plt_fw_name = WL127X_PLT_FW_NAME; 295 wl->plt_fw_name = WL127X_PLT_FW_NAME;
293 wl->sr_fw_name = WL127X_FW_NAME_SINGLE; 296 wl->sr_fw_name = WL127X_FW_NAME_SINGLE;
294 wl->mr_fw_name = WL127X_FW_NAME_MULTI; 297 wl->mr_fw_name = WL127X_FW_NAME_MULTI;
diff --git a/drivers/net/wireless/ti/wlcore/init.c b/drivers/net/wireless/ti/wlcore/init.c
index d8c22351a73e..c332da2f1cb9 100644
--- a/drivers/net/wireless/ti/wlcore/init.c
+++ b/drivers/net/wireless/ti/wlcore/init.c
@@ -500,7 +500,7 @@ int wl1271_chip_specific_init(struct wl1271 *wl)
500 if (wl->chip.id == CHIP_ID_1283_PG20) { 500 if (wl->chip.id == CHIP_ID_1283_PG20) {
501 u32 host_cfg_bitmap = HOST_IF_CFG_RX_FIFO_ENABLE; 501 u32 host_cfg_bitmap = HOST_IF_CFG_RX_FIFO_ENABLE;
502 502
503 if (!(wl->quirks & WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT)) 503 if (wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN)
504 /* Enable SDIO padding */ 504 /* Enable SDIO padding */
505 host_cfg_bitmap |= HOST_IF_CFG_TX_PAD_TO_SDIO_BLK; 505 host_cfg_bitmap |= HOST_IF_CFG_TX_PAD_TO_SDIO_BLK;
506 506
diff --git a/drivers/net/wireless/ti/wlcore/main.c b/drivers/net/wireless/ti/wlcore/main.c
index 0392166c4309..83be5be32ff4 100644
--- a/drivers/net/wireless/ti/wlcore/main.c
+++ b/drivers/net/wireless/ti/wlcore/main.c
@@ -1345,8 +1345,8 @@ static int wl12xx_chip_wakeup(struct wl1271 *wl, bool plt)
1345 * negligible, we use the same block size for all different 1345 * negligible, we use the same block size for all different
1346 * chip types. 1346 * chip types.
1347 */ 1347 */
1348 if (!wl1271_set_block_size(wl)) 1348 if (wl1271_set_block_size(wl))
1349 wl->quirks |= WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT; 1349 wl->quirks |= WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN;
1350 1350
1351 ret = wl->ops->identify_chip(wl); 1351 ret = wl->ops->identify_chip(wl);
1352 if (ret < 0) 1352 if (ret < 0)
diff --git a/drivers/net/wireless/ti/wlcore/tx.c b/drivers/net/wireless/ti/wlcore/tx.c
index d1811b8b5146..6893bc207994 100644
--- a/drivers/net/wireless/ti/wlcore/tx.c
+++ b/drivers/net/wireless/ti/wlcore/tx.c
@@ -176,10 +176,10 @@ u8 wl12xx_tx_get_hlid(struct wl1271 *wl, struct wl12xx_vif *wlvif,
176unsigned int wlcore_calc_packet_alignment(struct wl1271 *wl, 176unsigned int wlcore_calc_packet_alignment(struct wl1271 *wl,
177 unsigned int packet_length) 177 unsigned int packet_length)
178{ 178{
179 if (wl->quirks & WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT) 179 if (wl->quirks & WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN)
180 return ALIGN(packet_length, WL1271_TX_ALIGN_TO);
181 else
182 return ALIGN(packet_length, WL12XX_BUS_BLOCK_SIZE); 180 return ALIGN(packet_length, WL12XX_BUS_BLOCK_SIZE);
181 else
182 return ALIGN(packet_length, WL1271_TX_ALIGN_TO);
183} 183}
184EXPORT_SYMBOL(wlcore_calc_packet_alignment); 184EXPORT_SYMBOL(wlcore_calc_packet_alignment);
185 185
diff --git a/drivers/net/wireless/ti/wlcore/wlcore.h b/drivers/net/wireless/ti/wlcore/wlcore.h
index 29b39f9b746a..db7ad71a11e9 100644
--- a/drivers/net/wireless/ti/wlcore/wlcore.h
+++ b/drivers/net/wireless/ti/wlcore/wlcore.h
@@ -353,7 +353,7 @@ int wlcore_free_hw(struct wl1271 *wl);
353#define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0) 353#define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0)
354 354
355/* wl127x and SPI don't support SDIO block size alignment */ 355/* wl127x and SPI don't support SDIO block size alignment */
356#define WLCORE_QUIRK_NO_BLOCKSIZE_ALIGNMENT BIT(2) 356#define WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN BIT(2)
357 357
358/* means aggregated Rx packets are aligned to a SDIO block */ 358/* means aggregated Rx packets are aligned to a SDIO block */
359#define WLCORE_QUIRK_RX_BLOCKSIZE_ALIGN BIT(3) 359#define WLCORE_QUIRK_RX_BLOCKSIZE_ALIGN BIT(3)