diff options
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/iwmc3200top/fw-download.c | 50 | ||||
-rw-r--r-- | drivers/misc/iwmc3200top/iwmc3200top.h | 4 | ||||
-rw-r--r-- | drivers/misc/iwmc3200top/log.h | 31 | ||||
-rw-r--r-- | drivers/misc/iwmc3200top/main.c | 59 |
4 files changed, 73 insertions, 71 deletions
diff --git a/drivers/misc/iwmc3200top/fw-download.c b/drivers/misc/iwmc3200top/fw-download.c index 50d431e469f5..9dbaeb574e63 100644 --- a/drivers/misc/iwmc3200top/fw-download.c +++ b/drivers/misc/iwmc3200top/fw-download.c | |||
@@ -43,15 +43,14 @@ static int iwmct_fw_parser_init(struct iwmct_priv *priv, const u8 *file, | |||
43 | struct iwmct_parser *parser = &priv->parser; | 43 | struct iwmct_parser *parser = &priv->parser; |
44 | struct iwmct_fw_hdr *fw_hdr = &parser->versions; | 44 | struct iwmct_fw_hdr *fw_hdr = &parser->versions; |
45 | 45 | ||
46 | LOG_INFOEX(priv, INIT, "-->\n"); | 46 | LOG_TRACE(priv, FW_DOWNLOAD, "-->\n"); |
47 | 47 | ||
48 | LOG_INFO(priv, FW_DOWNLOAD, "file_size=%zd\n", file_size); | 48 | LOG_INFO(priv, FW_DOWNLOAD, "file_size=%zd\n", file_size); |
49 | 49 | ||
50 | parser->file = file; | 50 | parser->file = file; |
51 | parser->file_size = file_size; | 51 | parser->file_size = file_size; |
52 | parser->cur_pos = 0; | 52 | parser->cur_pos = 0; |
53 | parser->buf = NULL; | 53 | parser->entry_point = 0; |
54 | |||
55 | parser->buf = kzalloc(block_size, GFP_KERNEL); | 54 | parser->buf = kzalloc(block_size, GFP_KERNEL); |
56 | if (!parser->buf) { | 55 | if (!parser->buf) { |
57 | LOG_ERROR(priv, FW_DOWNLOAD, "kzalloc error\n"); | 56 | LOG_ERROR(priv, FW_DOWNLOAD, "kzalloc error\n"); |
@@ -70,7 +69,7 @@ static int iwmct_fw_parser_init(struct iwmct_priv *priv, const u8 *file, | |||
70 | 69 | ||
71 | parser->cur_pos += sizeof(struct iwmct_fw_hdr); | 70 | parser->cur_pos += sizeof(struct iwmct_fw_hdr); |
72 | 71 | ||
73 | LOG_INFOEX(priv, INIT, "<--\n"); | 72 | LOG_TRACE(priv, FW_DOWNLOAD, "<--\n"); |
74 | return 0; | 73 | return 0; |
75 | } | 74 | } |
76 | 75 | ||
@@ -113,7 +112,7 @@ static int iwmct_parse_next_section(struct iwmct_priv *priv, const u8 **p_sec, | |||
113 | struct iwmct_dbg *dbg = &priv->dbg; | 112 | struct iwmct_dbg *dbg = &priv->dbg; |
114 | struct iwmct_fw_sec_hdr *sec_hdr; | 113 | struct iwmct_fw_sec_hdr *sec_hdr; |
115 | 114 | ||
116 | LOG_INFOEX(priv, INIT, "-->\n"); | 115 | LOG_TRACE(priv, FW_DOWNLOAD, "-->\n"); |
117 | 116 | ||
118 | while (parser->cur_pos + sizeof(struct iwmct_fw_sec_hdr) | 117 | while (parser->cur_pos + sizeof(struct iwmct_fw_sec_hdr) |
119 | <= parser->file_size) { | 118 | <= parser->file_size) { |
@@ -152,7 +151,7 @@ static int iwmct_parse_next_section(struct iwmct_priv *priv, const u8 **p_sec, | |||
152 | "finished with section cur_pos=%zd\n", parser->cur_pos); | 151 | "finished with section cur_pos=%zd\n", parser->cur_pos); |
153 | } | 152 | } |
154 | 153 | ||
155 | LOG_INFOEX(priv, INIT, "<--\n"); | 154 | LOG_TRACE(priv, INIT, "<--\n"); |
156 | return 0; | 155 | return 0; |
157 | } | 156 | } |
158 | 157 | ||
@@ -167,7 +166,7 @@ static int iwmct_download_section(struct iwmct_priv *priv, const u8 *p_sec, | |||
167 | int ret = 0; | 166 | int ret = 0; |
168 | u32 cmd = 0; | 167 | u32 cmd = 0; |
169 | 168 | ||
170 | LOG_INFOEX(priv, INIT, "-->\n"); | 169 | LOG_TRACE(priv, FW_DOWNLOAD, "-->\n"); |
171 | LOG_INFO(priv, FW_DOWNLOAD, "Download address 0x%x size 0x%zx\n", | 170 | LOG_INFO(priv, FW_DOWNLOAD, "Download address 0x%x size 0x%zx\n", |
172 | addr, sec_size); | 171 | addr, sec_size); |
173 | 172 | ||
@@ -229,7 +228,7 @@ static int iwmct_download_section(struct iwmct_priv *priv, const u8 *p_sec, | |||
229 | hdr->cmd = cpu_to_le32(cmd); | 228 | hdr->cmd = cpu_to_le32(cmd); |
230 | /* send it down */ | 229 | /* send it down */ |
231 | /* TODO: add more proper sending and error checking */ | 230 | /* TODO: add more proper sending and error checking */ |
232 | ret = iwmct_tx(priv, 0, parser->buf, trans_size); | 231 | ret = iwmct_tx(priv, parser->buf, trans_size); |
233 | if (ret != 0) { | 232 | if (ret != 0) { |
234 | LOG_INFO(priv, FW_DOWNLOAD, | 233 | LOG_INFO(priv, FW_DOWNLOAD, |
235 | "iwmct_tx returned %d\n", ret); | 234 | "iwmct_tx returned %d\n", ret); |
@@ -251,7 +250,7 @@ static int iwmct_download_section(struct iwmct_priv *priv, const u8 *p_sec, | |||
251 | if (sent < sec_size) | 250 | if (sent < sec_size) |
252 | ret = -EINVAL; | 251 | ret = -EINVAL; |
253 | exit: | 252 | exit: |
254 | LOG_INFOEX(priv, INIT, "<--\n"); | 253 | LOG_TRACE(priv, FW_DOWNLOAD, "<--\n"); |
255 | return ret; | 254 | return ret; |
256 | } | 255 | } |
257 | 256 | ||
@@ -262,7 +261,7 @@ static int iwmct_kick_fw(struct iwmct_priv *priv, bool jump) | |||
262 | int ret; | 261 | int ret; |
263 | u32 cmd; | 262 | u32 cmd; |
264 | 263 | ||
265 | LOG_INFOEX(priv, INIT, "-->\n"); | 264 | LOG_TRACE(priv, FW_DOWNLOAD, "-->\n"); |
266 | 265 | ||
267 | memset(parser->buf, 0, parser->buf_size); | 266 | memset(parser->buf, 0, parser->buf_size); |
268 | cmd = IWMC_CMD_SIGNATURE << CMD_HDR_SIGNATURE_POS; | 267 | cmd = IWMC_CMD_SIGNATURE << CMD_HDR_SIGNATURE_POS; |
@@ -281,11 +280,11 @@ static int iwmct_kick_fw(struct iwmct_priv *priv, bool jump) | |||
281 | LOG_HEXDUMP(FW_DOWNLOAD, parser->buf, sizeof(*hdr)); | 280 | LOG_HEXDUMP(FW_DOWNLOAD, parser->buf, sizeof(*hdr)); |
282 | /* send it down */ | 281 | /* send it down */ |
283 | /* TODO: add more proper sending and error checking */ | 282 | /* TODO: add more proper sending and error checking */ |
284 | ret = iwmct_tx(priv, 0, parser->buf, IWMC_SDIO_BLK_SIZE); | 283 | ret = iwmct_tx(priv, parser->buf, IWMC_SDIO_BLK_SIZE); |
285 | if (ret) | 284 | if (ret) |
286 | LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret); | 285 | LOG_INFO(priv, FW_DOWNLOAD, "iwmct_tx returned %d", ret); |
287 | 286 | ||
288 | LOG_INFOEX(priv, INIT, "<--\n"); | 287 | LOG_TRACE(priv, FW_DOWNLOAD, "<--\n"); |
289 | return 0; | 288 | return 0; |
290 | } | 289 | } |
291 | 290 | ||
@@ -298,8 +297,16 @@ int iwmct_fw_load(struct iwmct_priv *priv) | |||
298 | __le32 addr; | 297 | __le32 addr; |
299 | int ret; | 298 | int ret; |
300 | 299 | ||
301 | /* clear parser struct */ | 300 | |
302 | memset(&priv->parser, 0, sizeof(struct iwmct_parser)); | 301 | LOG_INFO(priv, FW_DOWNLOAD, "barker download request 0x%x is:\n", |
302 | priv->barker); | ||
303 | LOG_INFO(priv, FW_DOWNLOAD, "******* Top FW %s requested ********\n", | ||
304 | (priv->barker & BARKER_DNLOAD_TOP_MSK) ? "was" : "not"); | ||
305 | LOG_INFO(priv, FW_DOWNLOAD, "******* GPS FW %s requested ********\n", | ||
306 | (priv->barker & BARKER_DNLOAD_GPS_MSK) ? "was" : "not"); | ||
307 | LOG_INFO(priv, FW_DOWNLOAD, "******* BT FW %s requested ********\n", | ||
308 | (priv->barker & BARKER_DNLOAD_BT_MSK) ? "was" : "not"); | ||
309 | |||
303 | 310 | ||
304 | /* get the firmware */ | 311 | /* get the firmware */ |
305 | ret = request_firmware(&raw, fw_name, &priv->func->dev); | 312 | ret = request_firmware(&raw, fw_name, &priv->func->dev); |
@@ -317,6 +324,7 @@ int iwmct_fw_load(struct iwmct_priv *priv) | |||
317 | 324 | ||
318 | LOG_INFO(priv, FW_DOWNLOAD, "Read firmware '%s'\n", fw_name); | 325 | LOG_INFO(priv, FW_DOWNLOAD, "Read firmware '%s'\n", fw_name); |
319 | 326 | ||
327 | /* clear parser struct */ | ||
320 | ret = iwmct_fw_parser_init(priv, raw->data, raw->size, priv->trans_len); | 328 | ret = iwmct_fw_parser_init(priv, raw->data, raw->size, priv->trans_len); |
321 | if (ret < 0) { | 329 | if (ret < 0) { |
322 | LOG_ERROR(priv, FW_DOWNLOAD, | 330 | LOG_ERROR(priv, FW_DOWNLOAD, |
@@ -324,7 +332,6 @@ int iwmct_fw_load(struct iwmct_priv *priv) | |||
324 | goto exit; | 332 | goto exit; |
325 | } | 333 | } |
326 | 334 | ||
327 | /* checksum */ | ||
328 | if (!iwmct_checksum(priv)) { | 335 | if (!iwmct_checksum(priv)) { |
329 | LOG_ERROR(priv, FW_DOWNLOAD, "checksum error\n"); | 336 | LOG_ERROR(priv, FW_DOWNLOAD, "checksum error\n"); |
330 | ret = -EINVAL; | 337 | ret = -EINVAL; |
@@ -333,23 +340,18 @@ int iwmct_fw_load(struct iwmct_priv *priv) | |||
333 | 340 | ||
334 | /* download firmware to device */ | 341 | /* download firmware to device */ |
335 | while (iwmct_parse_next_section(priv, &pdata, &len, &addr)) { | 342 | while (iwmct_parse_next_section(priv, &pdata, &len, &addr)) { |
336 | if (iwmct_download_section(priv, pdata, len, addr)) { | 343 | ret = iwmct_download_section(priv, pdata, len, addr); |
344 | if (ret) { | ||
337 | LOG_ERROR(priv, FW_DOWNLOAD, | 345 | LOG_ERROR(priv, FW_DOWNLOAD, |
338 | "%s download section failed\n", fw_name); | 346 | "%s download section failed\n", fw_name); |
339 | ret = -EIO; | ||
340 | goto exit; | 347 | goto exit; |
341 | } | 348 | } |
342 | } | 349 | } |
343 | 350 | ||
344 | iwmct_kick_fw(priv, !!(priv->barker & BARKER_DNLOAD_JUMP_MSK)); | 351 | ret = iwmct_kick_fw(priv, !!(priv->barker & BARKER_DNLOAD_JUMP_MSK)); |
345 | 352 | ||
346 | exit: | 353 | exit: |
347 | kfree(priv->parser.buf); | 354 | kfree(priv->parser.buf); |
348 | 355 | release_firmware(raw); | |
349 | if (raw) | ||
350 | release_firmware(raw); | ||
351 | |||
352 | raw = NULL; | ||
353 | |||
354 | return ret; | 356 | return ret; |
355 | } | 357 | } |
diff --git a/drivers/misc/iwmc3200top/iwmc3200top.h b/drivers/misc/iwmc3200top/iwmc3200top.h index 43bd510e1872..740ff0738ea8 100644 --- a/drivers/misc/iwmc3200top/iwmc3200top.h +++ b/drivers/misc/iwmc3200top/iwmc3200top.h | |||
@@ -196,9 +196,7 @@ struct iwmct_priv { | |||
196 | struct list_head read_req_list; | 196 | struct list_head read_req_list; |
197 | }; | 197 | }; |
198 | 198 | ||
199 | extern int iwmct_tx(struct iwmct_priv *priv, unsigned int addr, | 199 | extern int iwmct_tx(struct iwmct_priv *priv, void *src, int count); |
200 | void *src, int count); | ||
201 | |||
202 | extern int iwmct_fw_load(struct iwmct_priv *priv); | 200 | extern int iwmct_fw_load(struct iwmct_priv *priv); |
203 | 201 | ||
204 | extern void iwmct_dbg_init_params(struct iwmct_priv *drv); | 202 | extern void iwmct_dbg_init_params(struct iwmct_priv *drv); |
diff --git a/drivers/misc/iwmc3200top/log.h b/drivers/misc/iwmc3200top/log.h index aba8121f978c..4434bb16cea7 100644 --- a/drivers/misc/iwmc3200top/log.h +++ b/drivers/misc/iwmc3200top/log.h | |||
@@ -37,13 +37,26 @@ | |||
37 | #define LOG_SEV_INFO 3 | 37 | #define LOG_SEV_INFO 3 |
38 | #define LOG_SEV_INFOEX 4 | 38 | #define LOG_SEV_INFOEX 4 |
39 | 39 | ||
40 | #define LOG_SEV_FILTER_ALL \ | 40 | /* Log levels not defined for FW */ |
41 | (BIT(LOG_SEV_CRITICAL) | \ | 41 | #define LOG_SEV_TRACE 5 |
42 | BIT(LOG_SEV_ERROR) | \ | 42 | #define LOG_SEV_DUMP 6 |
43 | BIT(LOG_SEV_WARNING) | \ | 43 | |
44 | BIT(LOG_SEV_INFO) | \ | 44 | #define LOG_SEV_FW_FILTER_ALL \ |
45 | (BIT(LOG_SEV_CRITICAL) | \ | ||
46 | BIT(LOG_SEV_ERROR) | \ | ||
47 | BIT(LOG_SEV_WARNING) | \ | ||
48 | BIT(LOG_SEV_INFO) | \ | ||
45 | BIT(LOG_SEV_INFOEX)) | 49 | BIT(LOG_SEV_INFOEX)) |
46 | 50 | ||
51 | #define LOG_SEV_FILTER_ALL \ | ||
52 | (BIT(LOG_SEV_CRITICAL) | \ | ||
53 | BIT(LOG_SEV_ERROR) | \ | ||
54 | BIT(LOG_SEV_WARNING) | \ | ||
55 | BIT(LOG_SEV_INFO) | \ | ||
56 | BIT(LOG_SEV_INFOEX) | \ | ||
57 | BIT(LOG_SEV_TRACE) | \ | ||
58 | BIT(LOG_SEV_DUMP)) | ||
59 | |||
47 | /* log source */ | 60 | /* log source */ |
48 | #define LOG_SRC_INIT 0 | 61 | #define LOG_SRC_INIT 0 |
49 | #define LOG_SRC_DEBUGFS 1 | 62 | #define LOG_SRC_DEBUGFS 1 |
@@ -104,16 +117,16 @@ do { \ | |||
104 | __func__, __LINE__, ##args); \ | 117 | __func__, __LINE__, ##args); \ |
105 | } while (0) | 118 | } while (0) |
106 | 119 | ||
107 | #define LOG_INFOEX(priv, src, fmt, args...) \ | 120 | #define LOG_TRACE(priv, src, fmt, args...) \ |
108 | do { \ | 121 | do { \ |
109 | if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_INFOEX)) \ | 122 | if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_TRACE)) \ |
110 | dev_dbg(priv2dev(priv), "%s %d: " fmt, \ | 123 | dev_dbg(priv2dev(priv), "%s %d: " fmt, \ |
111 | __func__, __LINE__, ##args); \ | 124 | __func__, __LINE__, ##args); \ |
112 | } while (0) | 125 | } while (0) |
113 | 126 | ||
114 | #define LOG_HEXDUMP(src, ptr, len) \ | 127 | #define LOG_HEXDUMP(src, ptr, len) \ |
115 | do { \ | 128 | do { \ |
116 | if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_INFOEX)) \ | 129 | if (iwmct_logdefs[LOG_SRC_ ## src] & BIT(LOG_SEV_DUMP)) \ |
117 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_NONE, \ | 130 | print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_NONE, \ |
118 | 16, 1, ptr, len, false); \ | 131 | 16, 1, ptr, len, false); \ |
119 | } while (0) | 132 | } while (0) |
@@ -142,7 +155,7 @@ ssize_t store_iwmct_log_level_fw(struct device *d, | |||
142 | #define LOG_ERROR(priv, src, fmt, args...) | 155 | #define LOG_ERROR(priv, src, fmt, args...) |
143 | #define LOG_WARNING(priv, src, fmt, args...) | 156 | #define LOG_WARNING(priv, src, fmt, args...) |
144 | #define LOG_INFO(priv, src, fmt, args...) | 157 | #define LOG_INFO(priv, src, fmt, args...) |
145 | #define LOG_INFOEX(priv, src, fmt, args...) | 158 | #define LOG_TRACE(priv, src, fmt, args...) |
146 | #define LOG_HEXDUMP(src, ptr, len) | 159 | #define LOG_HEXDUMP(src, ptr, len) |
147 | 160 | ||
148 | static inline void iwmct_log_top_message(struct iwmct_priv *priv, | 161 | static inline void iwmct_log_top_message(struct iwmct_priv *priv, |
diff --git a/drivers/misc/iwmc3200top/main.c b/drivers/misc/iwmc3200top/main.c index fafcaa481d74..dd0a3913bf6d 100644 --- a/drivers/misc/iwmc3200top/main.c +++ b/drivers/misc/iwmc3200top/main.c | |||
@@ -49,6 +49,20 @@ MODULE_LICENSE("GPL"); | |||
49 | MODULE_AUTHOR(DRIVER_COPYRIGHT); | 49 | MODULE_AUTHOR(DRIVER_COPYRIGHT); |
50 | MODULE_FIRMWARE(FW_NAME(FW_API_VER)); | 50 | MODULE_FIRMWARE(FW_NAME(FW_API_VER)); |
51 | 51 | ||
52 | |||
53 | static inline int __iwmct_tx(struct iwmct_priv *priv, void *src, int count) | ||
54 | { | ||
55 | return sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, src, count); | ||
56 | |||
57 | } | ||
58 | int iwmct_tx(struct iwmct_priv *priv, void *src, int count) | ||
59 | { | ||
60 | int ret; | ||
61 | sdio_claim_host(priv->func); | ||
62 | ret = __iwmct_tx(priv, src, count); | ||
63 | sdio_release_host(priv->func); | ||
64 | return ret; | ||
65 | } | ||
52 | /* | 66 | /* |
53 | * This workers main task is to wait for OP_OPR_ALIVE | 67 | * This workers main task is to wait for OP_OPR_ALIVE |
54 | * from TOP FW until ALIVE_MSG_TIMOUT timeout is elapsed. | 68 | * from TOP FW until ALIVE_MSG_TIMOUT timeout is elapsed. |
@@ -66,7 +80,7 @@ static void iwmct_rescan_worker(struct work_struct *ws) | |||
66 | 80 | ||
67 | ret = bus_rescan_devices(priv->func->dev.bus); | 81 | ret = bus_rescan_devices(priv->func->dev.bus); |
68 | if (ret < 0) | 82 | if (ret < 0) |
69 | LOG_INFO(priv, FW_DOWNLOAD, "bus_rescan_devices FAILED!!!\n"); | 83 | LOG_INFO(priv, INIT, "bus_rescan_devices FAILED!!!\n"); |
70 | } | 84 | } |
71 | 85 | ||
72 | static void op_top_message(struct iwmct_priv *priv, struct top_msg *msg) | 86 | static void op_top_message(struct iwmct_priv *priv, struct top_msg *msg) |
@@ -137,7 +151,7 @@ int iwmct_send_hcmd(struct iwmct_priv *priv, u8 *cmd, u16 len) | |||
137 | int ret; | 151 | int ret; |
138 | u8 *buf; | 152 | u8 *buf; |
139 | 153 | ||
140 | LOG_INFOEX(priv, FW_MSG, "Sending hcmd:\n"); | 154 | LOG_TRACE(priv, FW_MSG, "Sending hcmd:\n"); |
141 | 155 | ||
142 | /* add padding to 256 for IWMC */ | 156 | /* add padding to 256 for IWMC */ |
143 | ((struct top_msg *)cmd)->hdr.flags |= CMD_FLAG_PADDING_256; | 157 | ((struct top_msg *)cmd)->hdr.flags |= CMD_FLAG_PADDING_256; |
@@ -158,27 +172,12 @@ int iwmct_send_hcmd(struct iwmct_priv *priv, u8 *cmd, u16 len) | |||
158 | } | 172 | } |
159 | 173 | ||
160 | memcpy(buf, cmd, len); | 174 | memcpy(buf, cmd, len); |
161 | 175 | ret = iwmct_tx(priv, buf, FW_HCMD_BLOCK_SIZE); | |
162 | sdio_claim_host(priv->func); | ||
163 | ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, buf, | ||
164 | FW_HCMD_BLOCK_SIZE); | ||
165 | sdio_release_host(priv->func); | ||
166 | 176 | ||
167 | kfree(buf); | 177 | kfree(buf); |
168 | return ret; | 178 | return ret; |
169 | } | 179 | } |
170 | 180 | ||
171 | int iwmct_tx(struct iwmct_priv *priv, unsigned int addr, | ||
172 | void *src, int count) | ||
173 | { | ||
174 | int ret; | ||
175 | |||
176 | sdio_claim_host(priv->func); | ||
177 | ret = sdio_memcpy_toio(priv->func, addr, src, count); | ||
178 | sdio_release_host(priv->func); | ||
179 | |||
180 | return ret; | ||
181 | } | ||
182 | 181 | ||
183 | static void iwmct_irq_read_worker(struct work_struct *ws) | 182 | static void iwmct_irq_read_worker(struct work_struct *ws) |
184 | { | 183 | { |
@@ -192,7 +191,7 @@ static void iwmct_irq_read_worker(struct work_struct *ws) | |||
192 | 191 | ||
193 | priv = container_of(ws, struct iwmct_priv, isr_worker); | 192 | priv = container_of(ws, struct iwmct_priv, isr_worker); |
194 | 193 | ||
195 | LOG_INFO(priv, IRQ, "enter iwmct_irq_read_worker %p\n", ws); | 194 | LOG_TRACE(priv, IRQ, "enter iwmct_irq_read_worker %p\n", ws); |
196 | 195 | ||
197 | /* --------------------- Handshake with device -------------------- */ | 196 | /* --------------------- Handshake with device -------------------- */ |
198 | sdio_claim_host(priv->func); | 197 | sdio_claim_host(priv->func); |
@@ -273,8 +272,7 @@ static void iwmct_irq_read_worker(struct work_struct *ws) | |||
273 | 272 | ||
274 | if (barker & BARKER_DNLOAD_SYNC_MSK) { | 273 | if (barker & BARKER_DNLOAD_SYNC_MSK) { |
275 | /* Send the same barker back */ | 274 | /* Send the same barker back */ |
276 | ret = sdio_memcpy_toio(priv->func, IWMC_SDIO_DATA_ADDR, | 275 | ret = __iwmct_tx(priv, buf, iosize); |
277 | buf, iosize); | ||
278 | if (ret) { | 276 | if (ret) { |
279 | LOG_ERROR(priv, IRQ, | 277 | LOG_ERROR(priv, IRQ, |
280 | "error %d echoing barker\n", ret); | 278 | "error %d echoing barker\n", ret); |
@@ -292,15 +290,6 @@ static void iwmct_irq_read_worker(struct work_struct *ws) | |||
292 | 290 | ||
293 | sdio_release_host(priv->func); | 291 | sdio_release_host(priv->func); |
294 | 292 | ||
295 | |||
296 | LOG_INFO(priv, IRQ, "barker download request 0x%x is:\n", priv->barker); | ||
297 | LOG_INFO(priv, IRQ, "******* Top FW %s requested ********\n", | ||
298 | (priv->barker & BARKER_DNLOAD_TOP_MSK) ? "was" : "not"); | ||
299 | LOG_INFO(priv, IRQ, "******* GPS FW %s requested ********\n", | ||
300 | (priv->barker & BARKER_DNLOAD_GPS_MSK) ? "was" : "not"); | ||
301 | LOG_INFO(priv, IRQ, "******* BT FW %s requested ********\n", | ||
302 | (priv->barker & BARKER_DNLOAD_BT_MSK) ? "was" : "not"); | ||
303 | |||
304 | if (priv->dbg.fw_download) | 293 | if (priv->dbg.fw_download) |
305 | iwmct_fw_load(priv); | 294 | iwmct_fw_load(priv); |
306 | else | 295 | else |
@@ -312,7 +301,7 @@ exit_release: | |||
312 | sdio_release_host(priv->func); | 301 | sdio_release_host(priv->func); |
313 | exit: | 302 | exit: |
314 | kfree(buf); | 303 | kfree(buf); |
315 | LOG_INFO(priv, IRQ, "exit iwmct_irq_read_worker\n"); | 304 | LOG_TRACE(priv, IRQ, "exit iwmct_irq_read_worker\n"); |
316 | } | 305 | } |
317 | 306 | ||
318 | static void iwmct_irq(struct sdio_func *func) | 307 | static void iwmct_irq(struct sdio_func *func) |
@@ -325,12 +314,12 @@ static void iwmct_irq(struct sdio_func *func) | |||
325 | 314 | ||
326 | priv = sdio_get_drvdata(func); | 315 | priv = sdio_get_drvdata(func); |
327 | 316 | ||
328 | LOG_INFO(priv, IRQ, "enter iwmct_irq\n"); | 317 | LOG_TRACE(priv, IRQ, "enter iwmct_irq\n"); |
329 | 318 | ||
330 | /* read the function's status register */ | 319 | /* read the function's status register */ |
331 | val = sdio_readb(func, IWMC_SDIO_INTR_STATUS_ADDR, &ret); | 320 | val = sdio_readb(func, IWMC_SDIO_INTR_STATUS_ADDR, &ret); |
332 | 321 | ||
333 | LOG_INFO(priv, IRQ, "iir value = %d, ret=%d\n", val, ret); | 322 | LOG_TRACE(priv, IRQ, "iir value = %d, ret=%d\n", val, ret); |
334 | 323 | ||
335 | if (!val) { | 324 | if (!val) { |
336 | LOG_ERROR(priv, IRQ, "iir = 0, exiting ISR\n"); | 325 | LOG_ERROR(priv, IRQ, "iir = 0, exiting ISR\n"); |
@@ -372,7 +361,7 @@ static void iwmct_irq(struct sdio_func *func) | |||
372 | 361 | ||
373 | queue_work(priv->wq, &priv->isr_worker); | 362 | queue_work(priv->wq, &priv->isr_worker); |
374 | 363 | ||
375 | LOG_INFO(priv, IRQ, "exit iwmct_irq\n"); | 364 | LOG_TRACE(priv, IRQ, "exit iwmct_irq\n"); |
376 | 365 | ||
377 | return; | 366 | return; |
378 | 367 | ||
@@ -660,7 +649,7 @@ static int __init iwmct_init(void) | |||
660 | 649 | ||
661 | /* Default log filter settings */ | 650 | /* Default log filter settings */ |
662 | iwmct_log_set_filter(LOG_SRC_ALL, LOG_SEV_FILTER_RUNTIME); | 651 | iwmct_log_set_filter(LOG_SRC_ALL, LOG_SEV_FILTER_RUNTIME); |
663 | iwmct_log_set_filter(LOG_SRC_FW_MSG, LOG_SEV_FILTER_ALL); | 652 | iwmct_log_set_filter(LOG_SRC_FW_MSG, LOG_SEV_FW_FILTER_ALL); |
664 | iwmct_log_set_fw_filter(LOG_SRC_ALL, FW_LOG_SEV_FILTER_RUNTIME); | 653 | iwmct_log_set_fw_filter(LOG_SRC_ALL, FW_LOG_SEV_FILTER_RUNTIME); |
665 | 654 | ||
666 | rc = sdio_register_driver(&iwmct_driver); | 655 | rc = sdio_register_driver(&iwmct_driver); |