1 /** 2 * Copyright (c) 2014 Redpine Signals Inc. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 * 16 */ 17 18 #include <linux/module.h> 19 #include "rsi_sdio.h" 20 #include "rsi_common.h" 21 #include "rsi_coex.h" 22 #include "rsi_hal.h" 23 24 /* Default operating mode is wlan STA + BT */ 25 static u16 dev_oper_mode = DEV_OPMODE_STA_BT_DUAL; 26 module_param(dev_oper_mode, ushort, 0444); 27 MODULE_PARM_DESC(dev_oper_mode, 28 "1[Wi-Fi], 4[BT], 8[BT LE], 5[Wi-Fi STA + BT classic]\n" 29 "9[Wi-Fi STA + BT LE], 13[Wi-Fi STA + BT classic + BT LE]\n" 30 "6[AP + BT classic], 14[AP + BT classic + BT LE]"); 31 32 /** 33 * rsi_sdio_set_cmd52_arg() - This function prepares cmd 52 read/write arg. 34 * @rw: Read/write 35 * @func: function number 36 * @raw: indicates whether to perform read after write 37 * @address: address to which to read/write 38 * @writedata: data to write 39 * 40 * Return: argument 41 */ 42 static u32 rsi_sdio_set_cmd52_arg(bool rw, 43 u8 func, 44 u8 raw, 45 u32 address, 46 u8 writedata) 47 { 48 return ((rw & 1) << 31) | ((func & 0x7) << 28) | 49 ((raw & 1) << 27) | (1 << 26) | 50 ((address & 0x1FFFF) << 9) | (1 << 8) | 51 (writedata & 0xFF); 52 } 53 54 /** 55 * rsi_cmd52writebyte() - This function issues cmd52 byte write onto the card. 56 * @card: Pointer to the mmc_card. 57 * @address: Address to write. 58 * @byte: Data to write. 59 * 60 * Return: Write status. 61 */ 62 static int rsi_cmd52writebyte(struct mmc_card *card, 63 u32 address, 64 u8 byte) 65 { 66 struct mmc_command io_cmd; 67 u32 arg; 68 69 memset(&io_cmd, 0, sizeof(io_cmd)); 70 arg = rsi_sdio_set_cmd52_arg(1, 0, 0, address, byte); 71 io_cmd.opcode = SD_IO_RW_DIRECT; 72 io_cmd.arg = arg; 73 io_cmd.flags = MMC_RSP_R5 | MMC_CMD_AC; 74 75 return mmc_wait_for_cmd(card->host, &io_cmd, 0); 76 } 77 78 /** 79 * rsi_cmd52readbyte() - This function issues cmd52 byte read onto the card. 80 * @card: Pointer to the mmc_card. 81 * @address: Address to read from. 82 * @byte: Variable to store read value. 83 * 84 * Return: Read status. 85 */ 86 static int rsi_cmd52readbyte(struct mmc_card *card, 87 u32 address, 88 u8 *byte) 89 { 90 struct mmc_command io_cmd; 91 u32 arg; 92 int err; 93 94 memset(&io_cmd, 0, sizeof(io_cmd)); 95 arg = rsi_sdio_set_cmd52_arg(0, 0, 0, address, 0); 96 io_cmd.opcode = SD_IO_RW_DIRECT; 97 io_cmd.arg = arg; 98 io_cmd.flags = MMC_RSP_R5 | MMC_CMD_AC; 99 100 err = mmc_wait_for_cmd(card->host, &io_cmd, 0); 101 if ((!err) && (byte)) 102 *byte = io_cmd.resp[0] & 0xFF; 103 return err; 104 } 105 106 /** 107 * rsi_issue_sdiocommand() - This function issues sdio commands. 108 * @func: Pointer to the sdio_func structure. 109 * @opcode: Opcode value. 110 * @arg: Arguments to pass. 111 * @flags: Flags which are set. 112 * @resp: Pointer to store response. 113 * 114 * Return: err: command status as 0 or -1. 115 */ 116 static int rsi_issue_sdiocommand(struct sdio_func *func, 117 u32 opcode, 118 u32 arg, 119 u32 flags, 120 u32 *resp) 121 { 122 struct mmc_command cmd; 123 struct mmc_host *host; 124 int err; 125 126 host = func->card->host; 127 128 memset(&cmd, 0, sizeof(struct mmc_command)); 129 cmd.opcode = opcode; 130 cmd.arg = arg; 131 cmd.flags = flags; 132 err = mmc_wait_for_cmd(host, &cmd, 3); 133 134 if ((!err) && (resp)) 135 *resp = cmd.resp[0]; 136 137 return err; 138 } 139 140 /** 141 * rsi_handle_interrupt() - This function is called upon the occurence 142 * of an interrupt. 143 * @function: Pointer to the sdio_func structure. 144 * 145 * Return: None. 146 */ 147 static void rsi_handle_interrupt(struct sdio_func *function) 148 { 149 struct rsi_hw *adapter = sdio_get_drvdata(function); 150 struct rsi_91x_sdiodev *dev = 151 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 152 153 if (adapter->priv->fsm_state == FSM_FW_NOT_LOADED) 154 return; 155 156 dev->sdio_irq_task = current; 157 rsi_interrupt_handler(adapter); 158 dev->sdio_irq_task = NULL; 159 } 160 161 /** 162 * rsi_reset_card() - This function resets and re-initializes the card. 163 * @pfunction: Pointer to the sdio_func structure. 164 * 165 * Return: None. 166 */ 167 static void rsi_reset_card(struct sdio_func *pfunction) 168 { 169 int ret = 0; 170 int err; 171 struct mmc_card *card = pfunction->card; 172 struct mmc_host *host = card->host; 173 s32 bit = (fls(host->ocr_avail) - 1); 174 u8 cmd52_resp; 175 u32 clock, resp, i; 176 u16 rca; 177 178 /* Reset 9110 chip */ 179 ret = rsi_cmd52writebyte(pfunction->card, 180 SDIO_CCCR_ABORT, 181 (1 << 3)); 182 183 /* Card will not send any response as it is getting reset immediately 184 * Hence expect a timeout status from host controller 185 */ 186 if (ret != -ETIMEDOUT) 187 rsi_dbg(ERR_ZONE, "%s: Reset failed : %d\n", __func__, ret); 188 189 /* Wait for few milli seconds to get rid of residue charges if any */ 190 msleep(20); 191 192 /* Initialize the SDIO card */ 193 host->ios.vdd = bit; 194 host->ios.chip_select = MMC_CS_DONTCARE; 195 host->ios.bus_mode = MMC_BUSMODE_OPENDRAIN; 196 host->ios.power_mode = MMC_POWER_UP; 197 host->ios.bus_width = MMC_BUS_WIDTH_1; 198 host->ios.timing = MMC_TIMING_LEGACY; 199 host->ops->set_ios(host, &host->ios); 200 201 /* 202 * This delay should be sufficient to allow the power supply 203 * to reach the minimum voltage. 204 */ 205 msleep(20); 206 207 host->ios.clock = host->f_min; 208 host->ios.power_mode = MMC_POWER_ON; 209 host->ops->set_ios(host, &host->ios); 210 211 /* 212 * This delay must be at least 74 clock sizes, or 1 ms, or the 213 * time required to reach a stable voltage. 214 */ 215 msleep(20); 216 217 /* Issue CMD0. Goto idle state */ 218 host->ios.chip_select = MMC_CS_HIGH; 219 host->ops->set_ios(host, &host->ios); 220 msleep(20); 221 err = rsi_issue_sdiocommand(pfunction, 222 MMC_GO_IDLE_STATE, 223 0, 224 (MMC_RSP_NONE | MMC_CMD_BC), 225 NULL); 226 host->ios.chip_select = MMC_CS_DONTCARE; 227 host->ops->set_ios(host, &host->ios); 228 msleep(20); 229 host->use_spi_crc = 0; 230 231 if (err) 232 rsi_dbg(ERR_ZONE, "%s: CMD0 failed : %d\n", __func__, err); 233 234 /* Issue CMD5, arg = 0 */ 235 err = rsi_issue_sdiocommand(pfunction, SD_IO_SEND_OP_COND, 0, 236 (MMC_RSP_R4 | MMC_CMD_BCR), &resp); 237 if (err) 238 rsi_dbg(ERR_ZONE, "%s: CMD5 failed : %d\n", __func__, err); 239 card->ocr = resp; 240 241 /* Issue CMD5, arg = ocr. Wait till card is ready */ 242 for (i = 0; i < 100; i++) { 243 err = rsi_issue_sdiocommand(pfunction, SD_IO_SEND_OP_COND, 244 card->ocr, 245 (MMC_RSP_R4 | MMC_CMD_BCR), &resp); 246 if (err) { 247 rsi_dbg(ERR_ZONE, "%s: CMD5 failed : %d\n", 248 __func__, err); 249 break; 250 } 251 252 if (resp & MMC_CARD_BUSY) 253 break; 254 msleep(20); 255 } 256 257 if ((i == 100) || (err)) { 258 rsi_dbg(ERR_ZONE, "%s: card in not ready : %d %d\n", 259 __func__, i, err); 260 return; 261 } 262 263 /* Issue CMD3, get RCA */ 264 err = rsi_issue_sdiocommand(pfunction, 265 SD_SEND_RELATIVE_ADDR, 266 0, 267 (MMC_RSP_R6 | MMC_CMD_BCR), 268 &resp); 269 if (err) { 270 rsi_dbg(ERR_ZONE, "%s: CMD3 failed : %d\n", __func__, err); 271 return; 272 } 273 rca = resp >> 16; 274 host->ios.bus_mode = MMC_BUSMODE_PUSHPULL; 275 host->ops->set_ios(host, &host->ios); 276 277 /* Issue CMD7, select card */ 278 err = rsi_issue_sdiocommand(pfunction, 279 MMC_SELECT_CARD, 280 (rca << 16), 281 (MMC_RSP_R1 | MMC_CMD_AC), 282 NULL); 283 if (err) { 284 rsi_dbg(ERR_ZONE, "%s: CMD7 failed : %d\n", __func__, err); 285 return; 286 } 287 288 /* Enable high speed */ 289 if (card->host->caps & MMC_CAP_SD_HIGHSPEED) { 290 rsi_dbg(ERR_ZONE, "%s: Set high speed mode\n", __func__); 291 err = rsi_cmd52readbyte(card, SDIO_CCCR_SPEED, &cmd52_resp); 292 if (err) { 293 rsi_dbg(ERR_ZONE, "%s: CCCR speed reg read failed: %d\n", 294 __func__, err); 295 } else { 296 err = rsi_cmd52writebyte(card, 297 SDIO_CCCR_SPEED, 298 (cmd52_resp | SDIO_SPEED_EHS)); 299 if (err) { 300 rsi_dbg(ERR_ZONE, 301 "%s: CCR speed regwrite failed %d\n", 302 __func__, err); 303 return; 304 } 305 host->ios.timing = MMC_TIMING_SD_HS; 306 host->ops->set_ios(host, &host->ios); 307 } 308 } 309 310 /* Set clock */ 311 if (mmc_card_hs(card)) 312 clock = 50000000; 313 else 314 clock = card->cis.max_dtr; 315 316 if (clock > host->f_max) 317 clock = host->f_max; 318 319 host->ios.clock = clock; 320 host->ops->set_ios(host, &host->ios); 321 322 if (card->host->caps & MMC_CAP_4_BIT_DATA) { 323 /* CMD52: Set bus width & disable card detect resistor */ 324 err = rsi_cmd52writebyte(card, 325 SDIO_CCCR_IF, 326 (SDIO_BUS_CD_DISABLE | 327 SDIO_BUS_WIDTH_4BIT)); 328 if (err) { 329 rsi_dbg(ERR_ZONE, "%s: Set bus mode failed : %d\n", 330 __func__, err); 331 return; 332 } 333 host->ios.bus_width = MMC_BUS_WIDTH_4; 334 host->ops->set_ios(host, &host->ios); 335 } 336 } 337 338 /** 339 * rsi_setclock() - This function sets the clock frequency. 340 * @adapter: Pointer to the adapter structure. 341 * @freq: Clock frequency. 342 * 343 * Return: None. 344 */ 345 static void rsi_setclock(struct rsi_hw *adapter, u32 freq) 346 { 347 struct rsi_91x_sdiodev *dev = 348 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 349 struct mmc_host *host = dev->pfunction->card->host; 350 u32 clock; 351 352 clock = freq * 1000; 353 if (clock > host->f_max) 354 clock = host->f_max; 355 host->ios.clock = clock; 356 host->ops->set_ios(host, &host->ios); 357 } 358 359 /** 360 * rsi_setblocklength() - This function sets the host block length. 361 * @adapter: Pointer to the adapter structure. 362 * @length: Block length to be set. 363 * 364 * Return: status: 0 on success, -1 on failure. 365 */ 366 static int rsi_setblocklength(struct rsi_hw *adapter, u32 length) 367 { 368 struct rsi_91x_sdiodev *dev = 369 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 370 int status; 371 rsi_dbg(INIT_ZONE, "%s: Setting the block length\n", __func__); 372 373 status = sdio_set_block_size(dev->pfunction, length); 374 dev->pfunction->max_blksize = 256; 375 adapter->block_size = dev->pfunction->max_blksize; 376 377 rsi_dbg(INFO_ZONE, 378 "%s: Operational blk length is %d\n", __func__, length); 379 return status; 380 } 381 382 /** 383 * rsi_setupcard() - This function queries and sets the card's features. 384 * @adapter: Pointer to the adapter structure. 385 * 386 * Return: status: 0 on success, -1 on failure. 387 */ 388 static int rsi_setupcard(struct rsi_hw *adapter) 389 { 390 struct rsi_91x_sdiodev *dev = 391 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 392 int status = 0; 393 394 rsi_setclock(adapter, 50000); 395 396 dev->tx_blk_size = 256; 397 status = rsi_setblocklength(adapter, dev->tx_blk_size); 398 if (status) 399 rsi_dbg(ERR_ZONE, 400 "%s: Unable to set block length\n", __func__); 401 return status; 402 } 403 404 /** 405 * rsi_sdio_read_register() - This function reads one byte of information 406 * from a register. 407 * @adapter: Pointer to the adapter structure. 408 * @addr: Address of the register. 409 * @data: Pointer to the data that stores the data read. 410 * 411 * Return: 0 on success, -1 on failure. 412 */ 413 int rsi_sdio_read_register(struct rsi_hw *adapter, 414 u32 addr, 415 u8 *data) 416 { 417 struct rsi_91x_sdiodev *dev = 418 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 419 u8 fun_num = 0; 420 int status; 421 422 if (likely(dev->sdio_irq_task != current)) 423 sdio_claim_host(dev->pfunction); 424 425 if (fun_num == 0) 426 *data = sdio_f0_readb(dev->pfunction, addr, &status); 427 else 428 *data = sdio_readb(dev->pfunction, addr, &status); 429 430 if (likely(dev->sdio_irq_task != current)) 431 sdio_release_host(dev->pfunction); 432 433 return status; 434 } 435 436 /** 437 * rsi_sdio_write_register() - This function writes one byte of information 438 * into a register. 439 * @adapter: Pointer to the adapter structure. 440 * @function: Function Number. 441 * @addr: Address of the register. 442 * @data: Pointer to the data tha has to be written. 443 * 444 * Return: 0 on success, -1 on failure. 445 */ 446 int rsi_sdio_write_register(struct rsi_hw *adapter, 447 u8 function, 448 u32 addr, 449 u8 *data) 450 { 451 struct rsi_91x_sdiodev *dev = 452 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 453 int status = 0; 454 455 if (likely(dev->sdio_irq_task != current)) 456 sdio_claim_host(dev->pfunction); 457 458 if (function == 0) 459 sdio_f0_writeb(dev->pfunction, *data, addr, &status); 460 else 461 sdio_writeb(dev->pfunction, *data, addr, &status); 462 463 if (likely(dev->sdio_irq_task != current)) 464 sdio_release_host(dev->pfunction); 465 466 return status; 467 } 468 469 /** 470 * rsi_sdio_ack_intr() - This function acks the interrupt received. 471 * @adapter: Pointer to the adapter structure. 472 * @int_bit: Interrupt bit to write into register. 473 * 474 * Return: None. 475 */ 476 void rsi_sdio_ack_intr(struct rsi_hw *adapter, u8 int_bit) 477 { 478 int status; 479 status = rsi_sdio_write_register(adapter, 480 1, 481 (SDIO_FUN1_INTR_CLR_REG | 482 RSI_SD_REQUEST_MASTER), 483 &int_bit); 484 if (status) 485 rsi_dbg(ERR_ZONE, "%s: unable to send ack\n", __func__); 486 } 487 488 489 490 /** 491 * rsi_sdio_read_register_multiple() - This function read multiple bytes of 492 * information from the SD card. 493 * @adapter: Pointer to the adapter structure. 494 * @addr: Address of the register. 495 * @count: Number of multiple bytes to be read. 496 * @data: Pointer to the read data. 497 * 498 * Return: 0 on success, -1 on failure. 499 */ 500 static int rsi_sdio_read_register_multiple(struct rsi_hw *adapter, 501 u32 addr, 502 u8 *data, 503 u16 count) 504 { 505 struct rsi_91x_sdiodev *dev = 506 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 507 u32 status; 508 509 if (likely(dev->sdio_irq_task != current)) 510 sdio_claim_host(dev->pfunction); 511 512 status = sdio_readsb(dev->pfunction, data, addr, count); 513 514 if (likely(dev->sdio_irq_task != current)) 515 sdio_release_host(dev->pfunction); 516 517 if (status != 0) 518 rsi_dbg(ERR_ZONE, "%s: Synch Cmd53 read failed\n", __func__); 519 return status; 520 } 521 522 /** 523 * rsi_sdio_write_register_multiple() - This function writes multiple bytes of 524 * information to the SD card. 525 * @adapter: Pointer to the adapter structure. 526 * @addr: Address of the register. 527 * @data: Pointer to the data that has to be written. 528 * @count: Number of multiple bytes to be written. 529 * 530 * Return: 0 on success, -1 on failure. 531 */ 532 int rsi_sdio_write_register_multiple(struct rsi_hw *adapter, 533 u32 addr, 534 u8 *data, 535 u16 count) 536 { 537 struct rsi_91x_sdiodev *dev = 538 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 539 int status; 540 541 if (dev->write_fail > 1) { 542 rsi_dbg(ERR_ZONE, "%s: Stopping card writes\n", __func__); 543 return 0; 544 } else if (dev->write_fail == 1) { 545 /** 546 * Assuming it is a CRC failure, we want to allow another 547 * card write 548 */ 549 rsi_dbg(ERR_ZONE, "%s: Continue card writes\n", __func__); 550 dev->write_fail++; 551 } 552 553 if (likely(dev->sdio_irq_task != current)) 554 sdio_claim_host(dev->pfunction); 555 556 status = sdio_writesb(dev->pfunction, addr, data, count); 557 558 if (likely(dev->sdio_irq_task != current)) 559 sdio_release_host(dev->pfunction); 560 561 if (status) { 562 rsi_dbg(ERR_ZONE, "%s: Synch Cmd53 write failed %d\n", 563 __func__, status); 564 dev->write_fail = 2; 565 } else { 566 memcpy(dev->prev_desc, data, FRAME_DESC_SZ); 567 } 568 return status; 569 } 570 571 static int rsi_sdio_load_data_master_write(struct rsi_hw *adapter, 572 u32 base_address, 573 u32 instructions_sz, 574 u16 block_size, 575 u8 *ta_firmware) 576 { 577 u32 num_blocks, offset, i; 578 u16 msb_address, lsb_address; 579 u8 *temp_buf; 580 int status; 581 582 num_blocks = instructions_sz / block_size; 583 msb_address = base_address >> 16; 584 585 rsi_dbg(INFO_ZONE, "ins_size: %d, num_blocks: %d\n", 586 instructions_sz, num_blocks); 587 588 temp_buf = kmalloc(block_size, GFP_KERNEL); 589 if (!temp_buf) 590 return -ENOMEM; 591 592 /* Loading DM ms word in the sdio slave */ 593 status = rsi_sdio_master_access_msword(adapter, msb_address); 594 if (status < 0) { 595 rsi_dbg(ERR_ZONE, "%s: Unable to set ms word reg\n", __func__); 596 goto out_free; 597 } 598 599 for (offset = 0, i = 0; i < num_blocks; i++, offset += block_size) { 600 memcpy(temp_buf, ta_firmware + offset, block_size); 601 lsb_address = (u16)base_address; 602 status = rsi_sdio_write_register_multiple 603 (adapter, 604 lsb_address | RSI_SD_REQUEST_MASTER, 605 temp_buf, block_size); 606 if (status < 0) { 607 rsi_dbg(ERR_ZONE, "%s: failed to write\n", __func__); 608 goto out_free; 609 } 610 rsi_dbg(INFO_ZONE, "%s: loading block: %d\n", __func__, i); 611 base_address += block_size; 612 613 if ((base_address >> 16) != msb_address) { 614 msb_address += 1; 615 616 /* Loading DM ms word in the sdio slave */ 617 status = rsi_sdio_master_access_msword(adapter, 618 msb_address); 619 if (status < 0) { 620 rsi_dbg(ERR_ZONE, 621 "%s: Unable to set ms word reg\n", 622 __func__); 623 goto out_free; 624 } 625 } 626 } 627 628 if (instructions_sz % block_size) { 629 memset(temp_buf, 0, block_size); 630 memcpy(temp_buf, ta_firmware + offset, 631 instructions_sz % block_size); 632 lsb_address = (u16)base_address; 633 status = rsi_sdio_write_register_multiple 634 (adapter, 635 lsb_address | RSI_SD_REQUEST_MASTER, 636 temp_buf, 637 instructions_sz % block_size); 638 if (status < 0) 639 goto out_free; 640 rsi_dbg(INFO_ZONE, 641 "Written Last Block in Address 0x%x Successfully\n", 642 offset | RSI_SD_REQUEST_MASTER); 643 } 644 645 status = 0; 646 out_free: 647 kfree(temp_buf); 648 return status; 649 } 650 651 #define FLASH_SIZE_ADDR 0x04000016 652 static int rsi_sdio_master_reg_read(struct rsi_hw *adapter, u32 addr, 653 u32 *read_buf, u16 size) 654 { 655 u32 addr_on_bus, *data; 656 u16 ms_addr; 657 int status; 658 659 data = kzalloc(RSI_MASTER_REG_BUF_SIZE, GFP_KERNEL); 660 if (!data) 661 return -ENOMEM; 662 663 data = PTR_ALIGN(data, 8); 664 665 ms_addr = (addr >> 16); 666 status = rsi_sdio_master_access_msword(adapter, ms_addr); 667 if (status < 0) { 668 rsi_dbg(ERR_ZONE, 669 "%s: Unable to set ms word to common reg\n", 670 __func__); 671 goto err; 672 } 673 addr &= 0xFFFF; 674 675 addr_on_bus = (addr & 0xFF000000); 676 if ((addr_on_bus == (FLASH_SIZE_ADDR & 0xFF000000)) || 677 (addr_on_bus == 0x0)) 678 addr_on_bus = (addr & ~(0x3)); 679 else 680 addr_on_bus = addr; 681 682 /* Bring TA out of reset */ 683 status = rsi_sdio_read_register_multiple 684 (adapter, 685 (addr_on_bus | RSI_SD_REQUEST_MASTER), 686 (u8 *)data, 4); 687 if (status < 0) { 688 rsi_dbg(ERR_ZONE, "%s: AHB register read failed\n", __func__); 689 goto err; 690 } 691 if (size == 2) { 692 if ((addr & 0x3) == 0) 693 *read_buf = *data; 694 else 695 *read_buf = (*data >> 16); 696 *read_buf = (*read_buf & 0xFFFF); 697 } else if (size == 1) { 698 if ((addr & 0x3) == 0) 699 *read_buf = *data; 700 else if ((addr & 0x3) == 1) 701 *read_buf = (*data >> 8); 702 else if ((addr & 0x3) == 2) 703 *read_buf = (*data >> 16); 704 else 705 *read_buf = (*data >> 24); 706 *read_buf = (*read_buf & 0xFF); 707 } else { 708 *read_buf = *data; 709 } 710 711 err: 712 kfree(data); 713 return status; 714 } 715 716 static int rsi_sdio_master_reg_write(struct rsi_hw *adapter, 717 unsigned long addr, 718 unsigned long data, u16 size) 719 { 720 unsigned long *data_aligned; 721 int status; 722 723 data_aligned = kzalloc(RSI_MASTER_REG_BUF_SIZE, GFP_KERNEL); 724 if (!data_aligned) 725 return -ENOMEM; 726 727 data_aligned = PTR_ALIGN(data_aligned, 8); 728 729 if (size == 2) { 730 *data_aligned = ((data << 16) | (data & 0xFFFF)); 731 } else if (size == 1) { 732 u32 temp_data = data & 0xFF; 733 734 *data_aligned = ((temp_data << 24) | (temp_data << 16) | 735 (temp_data << 8) | temp_data); 736 } else { 737 *data_aligned = data; 738 } 739 size = 4; 740 741 status = rsi_sdio_master_access_msword(adapter, (addr >> 16)); 742 if (status < 0) { 743 rsi_dbg(ERR_ZONE, 744 "%s: Unable to set ms word to common reg\n", 745 __func__); 746 kfree(data_aligned); 747 return -EIO; 748 } 749 addr = addr & 0xFFFF; 750 751 /* Bring TA out of reset */ 752 status = rsi_sdio_write_register_multiple 753 (adapter, 754 (addr | RSI_SD_REQUEST_MASTER), 755 (u8 *)data_aligned, size); 756 if (status < 0) 757 rsi_dbg(ERR_ZONE, 758 "%s: Unable to do AHB reg write\n", __func__); 759 760 kfree(data_aligned); 761 return status; 762 } 763 764 /** 765 * rsi_sdio_host_intf_write_pkt() - This function writes the packet to device. 766 * @adapter: Pointer to the adapter structure. 767 * @pkt: Pointer to the data to be written on to the device. 768 * @len: length of the data to be written on to the device. 769 * 770 * Return: 0 on success, -1 on failure. 771 */ 772 static int rsi_sdio_host_intf_write_pkt(struct rsi_hw *adapter, 773 u8 *pkt, 774 u32 len) 775 { 776 struct rsi_91x_sdiodev *dev = 777 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 778 u32 block_size = dev->tx_blk_size; 779 u32 num_blocks, address, length; 780 u32 queueno; 781 int status; 782 783 queueno = ((pkt[1] >> 4) & 0xf); 784 if (queueno == RSI_BT_MGMT_Q || queueno == RSI_BT_DATA_Q) 785 queueno = RSI_BT_Q; 786 787 num_blocks = len / block_size; 788 789 if (len % block_size) 790 num_blocks++; 791 792 address = (num_blocks * block_size | (queueno << 12)); 793 length = num_blocks * block_size; 794 795 status = rsi_sdio_write_register_multiple(adapter, 796 address, 797 (u8 *)pkt, 798 length); 799 if (status) 800 rsi_dbg(ERR_ZONE, "%s: Unable to write onto the card: %d\n", 801 __func__, status); 802 rsi_dbg(DATA_TX_ZONE, "%s: Successfully written onto card\n", __func__); 803 return status; 804 } 805 806 /** 807 * rsi_sdio_host_intf_read_pkt() - This function reads the packet 808 from the device. 809 * @adapter: Pointer to the adapter data structure. 810 * @pkt: Pointer to the packet data to be read from the the device. 811 * @length: Length of the data to be read from the device. 812 * 813 * Return: 0 on success, -1 on failure. 814 */ 815 int rsi_sdio_host_intf_read_pkt(struct rsi_hw *adapter, 816 u8 *pkt, 817 u32 length) 818 { 819 int status = -EINVAL; 820 821 if (!length) { 822 rsi_dbg(ERR_ZONE, "%s: Pkt size is zero\n", __func__); 823 return status; 824 } 825 826 status = rsi_sdio_read_register_multiple(adapter, 827 length, 828 (u8 *)pkt, 829 length); /*num of bytes*/ 830 831 if (status) 832 rsi_dbg(ERR_ZONE, "%s: Failed to read frame: %d\n", __func__, 833 status); 834 return status; 835 } 836 837 /** 838 * rsi_init_sdio_interface() - This function does init specific to SDIO. 839 * 840 * @adapter: Pointer to the adapter data structure. 841 * @pkt: Pointer to the packet data to be read from the the device. 842 * 843 * Return: 0 on success, -1 on failure. 844 */ 845 846 static int rsi_init_sdio_interface(struct rsi_hw *adapter, 847 struct sdio_func *pfunction) 848 { 849 struct rsi_91x_sdiodev *rsi_91x_dev; 850 int status = -ENOMEM; 851 852 rsi_91x_dev = kzalloc(sizeof(*rsi_91x_dev), GFP_KERNEL); 853 if (!rsi_91x_dev) 854 return status; 855 856 adapter->rsi_dev = rsi_91x_dev; 857 858 sdio_claim_host(pfunction); 859 860 pfunction->enable_timeout = 100; 861 status = sdio_enable_func(pfunction); 862 if (status) { 863 rsi_dbg(ERR_ZONE, "%s: Failed to enable interface\n", __func__); 864 sdio_release_host(pfunction); 865 return status; 866 } 867 868 rsi_dbg(INIT_ZONE, "%s: Enabled the interface\n", __func__); 869 870 rsi_91x_dev->pfunction = pfunction; 871 adapter->device = &pfunction->dev; 872 873 sdio_set_drvdata(pfunction, adapter); 874 875 status = rsi_setupcard(adapter); 876 if (status) { 877 rsi_dbg(ERR_ZONE, "%s: Failed to setup card\n", __func__); 878 goto fail; 879 } 880 881 rsi_dbg(INIT_ZONE, "%s: Setup card succesfully\n", __func__); 882 883 status = rsi_init_sdio_slave_regs(adapter); 884 if (status) { 885 rsi_dbg(ERR_ZONE, "%s: Failed to init slave regs\n", __func__); 886 goto fail; 887 } 888 sdio_release_host(pfunction); 889 890 adapter->determine_event_timeout = rsi_sdio_determine_event_timeout; 891 adapter->check_hw_queue_status = rsi_sdio_check_buffer_status; 892 893 #ifdef CONFIG_RSI_DEBUGFS 894 adapter->num_debugfs_entries = MAX_DEBUGFS_ENTRIES; 895 #endif 896 return status; 897 fail: 898 sdio_disable_func(pfunction); 899 sdio_release_host(pfunction); 900 return status; 901 } 902 903 static int rsi_sdio_reinit_device(struct rsi_hw *adapter) 904 { 905 struct rsi_91x_sdiodev *sdev = adapter->rsi_dev; 906 struct sdio_func *pfunction = sdev->pfunction; 907 int ii; 908 909 for (ii = 0; ii < NUM_SOFT_QUEUES; ii++) 910 skb_queue_purge(&adapter->priv->tx_queue[ii]); 911 912 /* Initialize device again */ 913 sdio_claim_host(pfunction); 914 915 sdio_release_irq(pfunction); 916 rsi_reset_card(pfunction); 917 918 sdio_enable_func(pfunction); 919 rsi_setupcard(adapter); 920 rsi_init_sdio_slave_regs(adapter); 921 sdio_claim_irq(pfunction, rsi_handle_interrupt); 922 rsi_hal_device_init(adapter); 923 924 sdio_release_host(pfunction); 925 926 return 0; 927 } 928 929 static struct rsi_host_intf_ops sdio_host_intf_ops = { 930 .write_pkt = rsi_sdio_host_intf_write_pkt, 931 .read_pkt = rsi_sdio_host_intf_read_pkt, 932 .master_access_msword = rsi_sdio_master_access_msword, 933 .read_reg_multiple = rsi_sdio_read_register_multiple, 934 .write_reg_multiple = rsi_sdio_write_register_multiple, 935 .master_reg_read = rsi_sdio_master_reg_read, 936 .master_reg_write = rsi_sdio_master_reg_write, 937 .load_data_master_write = rsi_sdio_load_data_master_write, 938 .reinit_device = rsi_sdio_reinit_device, 939 }; 940 941 /** 942 * rsi_probe() - This function is called by kernel when the driver provided 943 * Vendor and device IDs are matched. All the initialization 944 * work is done here. 945 * @pfunction: Pointer to the sdio_func structure. 946 * @id: Pointer to sdio_device_id structure. 947 * 948 * Return: 0 on success, 1 on failure. 949 */ 950 static int rsi_probe(struct sdio_func *pfunction, 951 const struct sdio_device_id *id) 952 { 953 struct rsi_hw *adapter; 954 struct rsi_91x_sdiodev *sdev; 955 int status; 956 957 rsi_dbg(INIT_ZONE, "%s: Init function called\n", __func__); 958 959 adapter = rsi_91x_init(dev_oper_mode); 960 if (!adapter) { 961 rsi_dbg(ERR_ZONE, "%s: Failed to init os intf ops\n", 962 __func__); 963 return -EINVAL; 964 } 965 adapter->rsi_host_intf = RSI_HOST_INTF_SDIO; 966 adapter->host_intf_ops = &sdio_host_intf_ops; 967 968 if (rsi_init_sdio_interface(adapter, pfunction)) { 969 rsi_dbg(ERR_ZONE, "%s: Failed to init sdio interface\n", 970 __func__); 971 status = -EIO; 972 goto fail_free_adapter; 973 } 974 sdev = (struct rsi_91x_sdiodev *)adapter->rsi_dev; 975 rsi_init_event(&sdev->rx_thread.event); 976 status = rsi_create_kthread(adapter->priv, &sdev->rx_thread, 977 rsi_sdio_rx_thread, "SDIO-RX-Thread"); 978 if (status) { 979 rsi_dbg(ERR_ZONE, "%s: Unable to init rx thrd\n", __func__); 980 goto fail_kill_thread; 981 } 982 skb_queue_head_init(&sdev->rx_q.head); 983 sdev->rx_q.num_rx_pkts = 0; 984 985 sdio_claim_host(pfunction); 986 if (sdio_claim_irq(pfunction, rsi_handle_interrupt)) { 987 rsi_dbg(ERR_ZONE, "%s: Failed to request IRQ\n", __func__); 988 sdio_release_host(pfunction); 989 status = -EIO; 990 goto fail_claim_irq; 991 } 992 sdio_release_host(pfunction); 993 rsi_dbg(INIT_ZONE, "%s: Registered Interrupt handler\n", __func__); 994 995 if (rsi_hal_device_init(adapter)) { 996 rsi_dbg(ERR_ZONE, "%s: Failed in device init\n", __func__); 997 status = -EINVAL; 998 goto fail_dev_init; 999 } 1000 rsi_dbg(INFO_ZONE, "===> RSI Device Init Done <===\n"); 1001 1002 if (rsi_sdio_master_access_msword(adapter, MISC_CFG_BASE_ADDR)) { 1003 rsi_dbg(ERR_ZONE, "%s: Unable to set ms word reg\n", __func__); 1004 status = -EIO; 1005 goto fail_dev_init; 1006 } 1007 1008 adapter->priv->hibernate_resume = false; 1009 adapter->priv->reinit_hw = false; 1010 return 0; 1011 1012 fail_dev_init: 1013 sdio_claim_host(pfunction); 1014 sdio_release_irq(pfunction); 1015 sdio_release_host(pfunction); 1016 fail_claim_irq: 1017 rsi_kill_thread(&sdev->rx_thread); 1018 fail_kill_thread: 1019 sdio_claim_host(pfunction); 1020 sdio_disable_func(pfunction); 1021 sdio_release_host(pfunction); 1022 fail_free_adapter: 1023 rsi_91x_deinit(adapter); 1024 rsi_dbg(ERR_ZONE, "%s: Failed in probe...Exiting\n", __func__); 1025 return status; 1026 } 1027 1028 static void ulp_read_write(struct rsi_hw *adapter, u16 addr, u32 data, 1029 u16 len_in_bits) 1030 { 1031 rsi_sdio_master_reg_write(adapter, RSI_GSPI_DATA_REG1, 1032 ((addr << 6) | ((data >> 16) & 0xffff)), 2); 1033 rsi_sdio_master_reg_write(adapter, RSI_GSPI_DATA_REG0, 1034 (data & 0xffff), 2); 1035 rsi_sdio_master_reg_write(adapter, RSI_GSPI_CTRL_REG0, 1036 RSI_GSPI_CTRL_REG0_VALUE, 2); 1037 rsi_sdio_master_reg_write(adapter, RSI_GSPI_CTRL_REG1, 1038 ((len_in_bits - 1) | RSI_GSPI_TRIG), 2); 1039 msleep(20); 1040 } 1041 1042 /*This function resets and re-initializes the chip.*/ 1043 static void rsi_reset_chip(struct rsi_hw *adapter) 1044 { 1045 __le32 data; 1046 u8 sdio_interrupt_status = 0; 1047 u8 request = 1; 1048 int ret; 1049 1050 rsi_dbg(INFO_ZONE, "Writing disable to wakeup register\n"); 1051 ret = rsi_sdio_write_register(adapter, 0, SDIO_WAKEUP_REG, &request); 1052 if (ret < 0) { 1053 rsi_dbg(ERR_ZONE, 1054 "%s: Failed to write SDIO wakeup register\n", __func__); 1055 return; 1056 } 1057 msleep(20); 1058 ret = rsi_sdio_read_register(adapter, RSI_FN1_INT_REGISTER, 1059 &sdio_interrupt_status); 1060 if (ret < 0) { 1061 rsi_dbg(ERR_ZONE, "%s: Failed to Read Intr Status Register\n", 1062 __func__); 1063 return; 1064 } 1065 rsi_dbg(INFO_ZONE, "%s: Intr Status Register value = %d\n", 1066 __func__, sdio_interrupt_status); 1067 1068 /* Put Thread-Arch processor on hold */ 1069 if (rsi_sdio_master_access_msword(adapter, TA_BASE_ADDR)) { 1070 rsi_dbg(ERR_ZONE, 1071 "%s: Unable to set ms word to common reg\n", 1072 __func__); 1073 return; 1074 } 1075 1076 data = TA_HOLD_THREAD_VALUE; 1077 if (rsi_sdio_write_register_multiple(adapter, TA_HOLD_THREAD_REG | 1078 RSI_SD_REQUEST_MASTER, 1079 (u8 *)&data, 4)) { 1080 rsi_dbg(ERR_ZONE, 1081 "%s: Unable to hold Thread-Arch processor threads\n", 1082 __func__); 1083 return; 1084 } 1085 1086 /* This msleep will ensure Thread-Arch processor to go to hold 1087 * and any pending dma transfers to rf spi in device to finish. 1088 */ 1089 msleep(100); 1090 1091 ulp_read_write(adapter, RSI_ULP_RESET_REG, RSI_ULP_WRITE_0, 32); 1092 ulp_read_write(adapter, RSI_WATCH_DOG_TIMER_1, RSI_ULP_WRITE_2, 32); 1093 ulp_read_write(adapter, RSI_WATCH_DOG_TIMER_2, RSI_ULP_WRITE_0, 32); 1094 ulp_read_write(adapter, RSI_WATCH_DOG_DELAY_TIMER_1, RSI_ULP_WRITE_50, 1095 32); 1096 ulp_read_write(adapter, RSI_WATCH_DOG_DELAY_TIMER_2, RSI_ULP_WRITE_0, 1097 32); 1098 ulp_read_write(adapter, RSI_WATCH_DOG_TIMER_ENABLE, 1099 RSI_ULP_TIMER_ENABLE, 32); 1100 /* This msleep will be sufficient for the ulp 1101 * read write operations to complete for chip reset. 1102 */ 1103 msleep(500); 1104 } 1105 1106 /** 1107 * rsi_disconnect() - This function performs the reverse of the probe function. 1108 * @pfunction: Pointer to the sdio_func structure. 1109 * 1110 * Return: void. 1111 */ 1112 static void rsi_disconnect(struct sdio_func *pfunction) 1113 { 1114 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1115 struct rsi_91x_sdiodev *dev; 1116 1117 if (!adapter) 1118 return; 1119 1120 dev = (struct rsi_91x_sdiodev *)adapter->rsi_dev; 1121 1122 rsi_kill_thread(&dev->rx_thread); 1123 sdio_claim_host(pfunction); 1124 sdio_release_irq(pfunction); 1125 sdio_release_host(pfunction); 1126 mdelay(10); 1127 1128 rsi_mac80211_detach(adapter); 1129 mdelay(10); 1130 1131 /* Reset Chip */ 1132 rsi_reset_chip(adapter); 1133 1134 /* Resetting to take care of the case, where-in driver is re-loaded */ 1135 sdio_claim_host(pfunction); 1136 rsi_reset_card(pfunction); 1137 sdio_disable_func(pfunction); 1138 sdio_release_host(pfunction); 1139 dev->write_fail = 2; 1140 rsi_91x_deinit(adapter); 1141 rsi_dbg(ERR_ZONE, "##### RSI SDIO device disconnected #####\n"); 1142 1143 } 1144 1145 #ifdef CONFIG_PM 1146 static int rsi_set_sdio_pm_caps(struct rsi_hw *adapter) 1147 { 1148 struct rsi_91x_sdiodev *dev = 1149 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 1150 struct sdio_func *func = dev->pfunction; 1151 int ret; 1152 1153 ret = sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER); 1154 if (ret) 1155 rsi_dbg(ERR_ZONE, "Set sdio keep pwr flag failed: %d\n", ret); 1156 1157 return ret; 1158 } 1159 1160 static int rsi_sdio_disable_interrupts(struct sdio_func *pfunc) 1161 { 1162 struct rsi_hw *adapter = sdio_get_drvdata(pfunc); 1163 u8 isr_status = 0, data = 0; 1164 int ret; 1165 unsigned long t1; 1166 1167 rsi_dbg(INFO_ZONE, "Waiting for interrupts to be cleared.."); 1168 t1 = jiffies; 1169 do { 1170 rsi_sdio_read_register(adapter, RSI_FN1_INT_REGISTER, 1171 &isr_status); 1172 rsi_dbg(INFO_ZONE, "."); 1173 } while ((isr_status) && (jiffies_to_msecs(jiffies - t1) < 20)); 1174 rsi_dbg(INFO_ZONE, "Interrupts cleared\n"); 1175 1176 sdio_claim_host(pfunc); 1177 ret = rsi_cmd52readbyte(pfunc->card, RSI_INT_ENABLE_REGISTER, &data); 1178 if (ret < 0) { 1179 rsi_dbg(ERR_ZONE, 1180 "%s: Failed to read int enable register\n", 1181 __func__); 1182 goto done; 1183 } 1184 1185 data &= RSI_INT_ENABLE_MASK; 1186 ret = rsi_cmd52writebyte(pfunc->card, RSI_INT_ENABLE_REGISTER, data); 1187 if (ret < 0) { 1188 rsi_dbg(ERR_ZONE, 1189 "%s: Failed to write to int enable register\n", 1190 __func__); 1191 goto done; 1192 } 1193 ret = rsi_cmd52readbyte(pfunc->card, RSI_INT_ENABLE_REGISTER, &data); 1194 if (ret < 0) { 1195 rsi_dbg(ERR_ZONE, 1196 "%s: Failed to read int enable register\n", 1197 __func__); 1198 goto done; 1199 } 1200 rsi_dbg(INFO_ZONE, "int enable reg content = %x\n", data); 1201 1202 done: 1203 sdio_release_host(pfunc); 1204 return ret; 1205 } 1206 1207 static int rsi_sdio_enable_interrupts(struct sdio_func *pfunc) 1208 { 1209 u8 data; 1210 int ret; 1211 struct rsi_hw *adapter = sdio_get_drvdata(pfunc); 1212 struct rsi_common *common = adapter->priv; 1213 1214 sdio_claim_host(pfunc); 1215 ret = rsi_cmd52readbyte(pfunc->card, RSI_INT_ENABLE_REGISTER, &data); 1216 if (ret < 0) { 1217 rsi_dbg(ERR_ZONE, 1218 "%s: Failed to read int enable register\n", __func__); 1219 goto done; 1220 } 1221 1222 data |= ~RSI_INT_ENABLE_MASK & 0xff; 1223 1224 ret = rsi_cmd52writebyte(pfunc->card, RSI_INT_ENABLE_REGISTER, data); 1225 if (ret < 0) { 1226 rsi_dbg(ERR_ZONE, 1227 "%s: Failed to write to int enable register\n", 1228 __func__); 1229 goto done; 1230 } 1231 1232 if ((common->wow_flags & RSI_WOW_ENABLED) && 1233 (common->wow_flags & RSI_WOW_NO_CONNECTION)) 1234 rsi_dbg(ERR_ZONE, 1235 "##### Device can not wake up through WLAN\n"); 1236 1237 ret = rsi_cmd52readbyte(pfunc->card, RSI_INT_ENABLE_REGISTER, &data); 1238 if (ret < 0) { 1239 rsi_dbg(ERR_ZONE, 1240 "%s: Failed to read int enable register\n", __func__); 1241 goto done; 1242 } 1243 rsi_dbg(INFO_ZONE, "int enable reg content = %x\n", data); 1244 1245 done: 1246 sdio_release_host(pfunc); 1247 return ret; 1248 } 1249 1250 static int rsi_suspend(struct device *dev) 1251 { 1252 int ret; 1253 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1254 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1255 struct rsi_common *common; 1256 1257 if (!adapter) { 1258 rsi_dbg(ERR_ZONE, "Device is not ready\n"); 1259 return -ENODEV; 1260 } 1261 common = adapter->priv; 1262 rsi_sdio_disable_interrupts(pfunction); 1263 1264 ret = rsi_set_sdio_pm_caps(adapter); 1265 if (ret) 1266 rsi_dbg(INFO_ZONE, 1267 "Setting power management caps failed\n"); 1268 common->fsm_state = FSM_CARD_NOT_READY; 1269 1270 return 0; 1271 } 1272 1273 static int rsi_resume(struct device *dev) 1274 { 1275 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1276 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1277 struct rsi_common *common = adapter->priv; 1278 1279 common->fsm_state = FSM_MAC_INIT_DONE; 1280 rsi_sdio_enable_interrupts(pfunction); 1281 1282 return 0; 1283 } 1284 1285 static int rsi_freeze(struct device *dev) 1286 { 1287 int ret; 1288 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1289 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1290 struct rsi_common *common; 1291 struct rsi_91x_sdiodev *sdev; 1292 1293 rsi_dbg(INFO_ZONE, "SDIO Bus freeze ===>\n"); 1294 1295 if (!adapter) { 1296 rsi_dbg(ERR_ZONE, "Device is not ready\n"); 1297 return -ENODEV; 1298 } 1299 common = adapter->priv; 1300 sdev = (struct rsi_91x_sdiodev *)adapter->rsi_dev; 1301 1302 if ((common->wow_flags & RSI_WOW_ENABLED) && 1303 (common->wow_flags & RSI_WOW_NO_CONNECTION)) 1304 rsi_dbg(ERR_ZONE, 1305 "##### Device can not wake up through WLAN\n"); 1306 1307 ret = rsi_sdio_disable_interrupts(pfunction); 1308 1309 if (sdev->write_fail) 1310 rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n"); 1311 1312 ret = rsi_set_sdio_pm_caps(adapter); 1313 if (ret) 1314 rsi_dbg(INFO_ZONE, "Setting power management caps failed\n"); 1315 1316 rsi_dbg(INFO_ZONE, "***** RSI module freezed *****\n"); 1317 1318 return 0; 1319 } 1320 1321 static int rsi_thaw(struct device *dev) 1322 { 1323 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1324 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1325 struct rsi_common *common = adapter->priv; 1326 1327 rsi_dbg(ERR_ZONE, "SDIO Bus thaw =====>\n"); 1328 1329 common->hibernate_resume = true; 1330 common->fsm_state = FSM_CARD_NOT_READY; 1331 common->iface_down = true; 1332 1333 rsi_sdio_enable_interrupts(pfunction); 1334 1335 rsi_dbg(INFO_ZONE, "***** RSI module thaw done *****\n"); 1336 1337 return 0; 1338 } 1339 1340 static void rsi_shutdown(struct device *dev) 1341 { 1342 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1343 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1344 struct rsi_91x_sdiodev *sdev = 1345 (struct rsi_91x_sdiodev *)adapter->rsi_dev; 1346 struct ieee80211_hw *hw = adapter->hw; 1347 struct cfg80211_wowlan *wowlan = hw->wiphy->wowlan_config; 1348 1349 rsi_dbg(ERR_ZONE, "SDIO Bus shutdown =====>\n"); 1350 1351 if (rsi_config_wowlan(adapter, wowlan)) 1352 rsi_dbg(ERR_ZONE, "Failed to configure WoWLAN\n"); 1353 1354 rsi_sdio_disable_interrupts(sdev->pfunction); 1355 1356 if (sdev->write_fail) 1357 rsi_dbg(INFO_ZONE, "###### Device is not ready #######\n"); 1358 1359 if (rsi_set_sdio_pm_caps(adapter)) 1360 rsi_dbg(INFO_ZONE, "Setting power management caps failed\n"); 1361 1362 rsi_dbg(INFO_ZONE, "***** RSI module shut down *****\n"); 1363 } 1364 1365 static int rsi_restore(struct device *dev) 1366 { 1367 struct sdio_func *pfunction = dev_to_sdio_func(dev); 1368 struct rsi_hw *adapter = sdio_get_drvdata(pfunction); 1369 struct rsi_common *common = adapter->priv; 1370 1371 rsi_dbg(INFO_ZONE, "SDIO Bus restore ======>\n"); 1372 common->hibernate_resume = true; 1373 common->fsm_state = FSM_FW_NOT_LOADED; 1374 common->iface_down = true; 1375 1376 adapter->sc_nvifs = 0; 1377 ieee80211_restart_hw(adapter->hw); 1378 1379 common->wow_flags = 0; 1380 common->iface_down = false; 1381 1382 rsi_dbg(INFO_ZONE, "RSI module restored\n"); 1383 1384 return 0; 1385 } 1386 static const struct dev_pm_ops rsi_pm_ops = { 1387 .suspend = rsi_suspend, 1388 .resume = rsi_resume, 1389 .freeze = rsi_freeze, 1390 .thaw = rsi_thaw, 1391 .restore = rsi_restore, 1392 }; 1393 #endif 1394 1395 static const struct sdio_device_id rsi_dev_table[] = { 1396 { SDIO_DEVICE(0x303, 0x100) }, 1397 { SDIO_DEVICE(0x041B, 0x0301) }, 1398 { SDIO_DEVICE(0x041B, 0x0201) }, 1399 { SDIO_DEVICE(0x041B, 0x9330) }, 1400 { /* Blank */}, 1401 }; 1402 1403 static struct sdio_driver rsi_driver = { 1404 .name = "RSI-SDIO WLAN", 1405 .probe = rsi_probe, 1406 .remove = rsi_disconnect, 1407 .id_table = rsi_dev_table, 1408 #ifdef CONFIG_PM 1409 .drv = { 1410 .pm = &rsi_pm_ops, 1411 .shutdown = rsi_shutdown, 1412 } 1413 #endif 1414 }; 1415 1416 /** 1417 * rsi_module_init() - This function registers the sdio module. 1418 * @void: Void. 1419 * 1420 * Return: 0 on success. 1421 */ 1422 static int rsi_module_init(void) 1423 { 1424 int ret; 1425 1426 ret = sdio_register_driver(&rsi_driver); 1427 rsi_dbg(INIT_ZONE, "%s: Registering driver\n", __func__); 1428 return ret; 1429 } 1430 1431 /** 1432 * rsi_module_exit() - This function unregisters the sdio module. 1433 * @void: Void. 1434 * 1435 * Return: None. 1436 */ 1437 static void rsi_module_exit(void) 1438 { 1439 sdio_unregister_driver(&rsi_driver); 1440 rsi_dbg(INFO_ZONE, "%s: Unregistering driver\n", __func__); 1441 } 1442 1443 module_init(rsi_module_init); 1444 module_exit(rsi_module_exit); 1445 1446 MODULE_AUTHOR("Redpine Signals Inc"); 1447 MODULE_DESCRIPTION("Common SDIO layer for RSI drivers"); 1448 MODULE_SUPPORTED_DEVICE("RSI-91x"); 1449 MODULE_DEVICE_TABLE(sdio, rsi_dev_table); 1450 MODULE_FIRMWARE(FIRMWARE_RSI9113); 1451 MODULE_VERSION("0.1"); 1452 MODULE_LICENSE("Dual BSD/GPL"); 1453