aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInaky Perez-Gonzalez <inaky@linux.intel.com>2009-10-23 20:45:07 -0400
committerInaky Perez-Gonzalez <inaky@linux.intel.com>2009-11-03 15:49:38 -0500
commit02eb41ef2a8631022fd90e096c57562dec9e7a9a (patch)
tree65280a03f80a15214f715510739bf9a983ecea5b
parent296bd4bdd0a43c5e56ee310bcb9b4722e5d52db8 (diff)
wimax/i2400m: correctly identify all iwmc3200-based SKUs
Different paths of the i2400m SDIO driver need to take care of a few SKU-specific quirks. For the ones that are common to to all the iwmc3200 based devices, introduce i2400ms->iwmc3200 [set in i2400ms_probe()], so it doesn't have to check against the list of iwmc3200 SKU IDs on each quirk site. Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
-rw-r--r--drivers/net/wimax/i2400m/i2400m-sdio.h3
-rw-r--r--drivers/net/wimax/i2400m/sdio.c16
2 files changed, 16 insertions, 3 deletions
diff --git a/drivers/net/wimax/i2400m/i2400m-sdio.h b/drivers/net/wimax/i2400m/i2400m-sdio.h
index 18218a24a8f8..fba482c08d66 100644
--- a/drivers/net/wimax/i2400m/i2400m-sdio.h
+++ b/drivers/net/wimax/i2400m/i2400m-sdio.h
@@ -114,6 +114,9 @@ struct i2400ms {
114 wait_queue_head_t bm_wfa_wq; 114 wait_queue_head_t bm_wfa_wq;
115 int bm_wait_result; 115 int bm_wait_result;
116 size_t bm_ack_size; 116 size_t bm_ack_size;
117
118 /* Device is any of the iwmc3200 SKUs */
119 unsigned iwmc3200:1;
117}; 120};
118 121
119 122
diff --git a/drivers/net/wimax/i2400m/sdio.c b/drivers/net/wimax/i2400m/sdio.c
index 20ab22ec291b..079f900e9ae5 100644
--- a/drivers/net/wimax/i2400m/sdio.c
+++ b/drivers/net/wimax/i2400m/sdio.c
@@ -105,8 +105,9 @@ static const struct i2400m_poke_table i2400ms_pokes[] = {
105 * error (-ENODEV when it was unable to enable the function). 105 * error (-ENODEV when it was unable to enable the function).
106 */ 106 */
107static 107static
108int i2400ms_enable_function(struct sdio_func *func, unsigned maxtries) 108int i2400ms_enable_function(struct i2400ms *i2400ms, unsigned maxtries)
109{ 109{
110 struct sdio_func *func = i2400ms->func;
110 u64 timeout; 111 u64 timeout;
111 int err; 112 int err;
112 struct device *dev = &func->dev; 113 struct device *dev = &func->dev;
@@ -126,7 +127,7 @@ int i2400ms_enable_function(struct sdio_func *func, unsigned maxtries)
126 * platforms (system hang). We explicitly overwrite 127 * platforms (system hang). We explicitly overwrite
127 * func->enable_timeout here to work around the issue. 128 * func->enable_timeout here to work around the issue.
128 */ 129 */
129 if (func->device == SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX) 130 if (i2400ms->iwmc3200)
130 func->enable_timeout = IWMC3200_IOR_TIMEOUT; 131 func->enable_timeout = IWMC3200_IOR_TIMEOUT;
131 err = sdio_enable_func(func); 132 err = sdio_enable_func(func);
132 if (0 == err) { 133 if (0 == err) {
@@ -176,7 +177,7 @@ int i2400ms_bus_setup(struct i2400m *i2400m)
176 goto error_set_blk_size; 177 goto error_set_blk_size;
177 } 178 }
178 179
179 result = i2400ms_enable_function(func, 1); 180 result = i2400ms_enable_function(i2400ms, 1);
180 if (result < 0) { 181 if (result < 0) {
181 dev_err(dev, "Cannot enable SDIO function: %d\n", result); 182 dev_err(dev, "Cannot enable SDIO function: %d\n", result);
182 goto error_func_enable; 183 goto error_func_enable;
@@ -487,6 +488,15 @@ int i2400ms_probe(struct sdio_func *func,
487 i2400m->bus_bm_mac_addr_impaired = 1; 488 i2400m->bus_bm_mac_addr_impaired = 1;
488 i2400m->bus_bm_pokes_table = &i2400ms_pokes[0]; 489 i2400m->bus_bm_pokes_table = &i2400ms_pokes[0];
489 490
491 switch (func->device) {
492 case SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX:
493 case SDIO_DEVICE_ID_INTEL_IWMC3200WIMAX_2G5:
494 i2400ms->iwmc3200 = 1;
495 break;
496 default:
497 i2400ms->iwmc3200 = 0;
498 }
499
490 result = i2400m_setup(i2400m, I2400M_BRI_NO_REBOOT); 500 result = i2400m_setup(i2400m, I2400M_BRI_NO_REBOOT);
491 if (result < 0) { 501 if (result < 0) {
492 dev_err(dev, "cannot setup device: %d\n", result); 502 dev_err(dev, "cannot setup device: %d\n", result);