1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * linux/drivers/mmc/host/wbsd.c - Winbond W83L51xD SD/MMC driver 4 * 5 * Copyright (C) 2004-2007 Pierre Ossman, All Rights Reserved. 6 * 7 * Warning! 8 * 9 * Changes to the FIFO system should be done with extreme care since 10 * the hardware is full of bugs related to the FIFO. Known issues are: 11 * 12 * - FIFO size field in FSR is always zero. 13 * 14 * - FIFO interrupts tend not to work as they should. Interrupts are 15 * triggered only for full/empty events, not for threshold values. 16 * 17 * - On APIC systems the FIFO empty interrupt is sometimes lost. 18 */ 19 20 #include <linux/module.h> 21 #include <linux/moduleparam.h> 22 #include <linux/init.h> 23 #include <linux/ioport.h> 24 #include <linux/platform_device.h> 25 #include <linux/interrupt.h> 26 #include <linux/dma-mapping.h> 27 #include <linux/delay.h> 28 #include <linux/pnp.h> 29 #include <linux/highmem.h> 30 #include <linux/mmc/host.h> 31 #include <linux/scatterlist.h> 32 #include <linux/slab.h> 33 34 #include <asm/io.h> 35 #include <asm/dma.h> 36 37 #include "wbsd.h" 38 39 #define DRIVER_NAME "wbsd" 40 41 #define DBG(x...) \ 42 pr_debug(DRIVER_NAME ": " x) 43 #define DBGF(f, x...) \ 44 pr_debug(DRIVER_NAME " [%s()]: " f, __func__ , ##x) 45 46 /* 47 * Device resources 48 */ 49 50 #ifdef CONFIG_PNP 51 52 static const struct pnp_device_id pnp_dev_table[] = { 53 { "WEC0517", 0 }, 54 { "WEC0518", 0 }, 55 { "", 0 }, 56 }; 57 58 MODULE_DEVICE_TABLE(pnp, pnp_dev_table); 59 60 #endif /* CONFIG_PNP */ 61 62 static const int config_ports[] = { 0x2E, 0x4E }; 63 static const int unlock_codes[] = { 0x83, 0x87 }; 64 65 static const int valid_ids[] = { 66 0x7112, 67 }; 68 69 #ifdef CONFIG_PNP 70 static unsigned int param_nopnp = 0; 71 #else 72 static const unsigned int param_nopnp = 1; 73 #endif 74 static unsigned int param_io = 0x248; 75 static unsigned int param_irq = 6; 76 static int param_dma = 2; 77 78 /* 79 * Basic functions 80 */ 81 82 static inline void wbsd_unlock_config(struct wbsd_host *host) 83 { 84 BUG_ON(host->config == 0); 85 86 outb(host->unlock_code, host->config); 87 outb(host->unlock_code, host->config); 88 } 89 90 static inline void wbsd_lock_config(struct wbsd_host *host) 91 { 92 BUG_ON(host->config == 0); 93 94 outb(LOCK_CODE, host->config); 95 } 96 97 static inline void wbsd_write_config(struct wbsd_host *host, u8 reg, u8 value) 98 { 99 BUG_ON(host->config == 0); 100 101 outb(reg, host->config); 102 outb(value, host->config + 1); 103 } 104 105 static inline u8 wbsd_read_config(struct wbsd_host *host, u8 reg) 106 { 107 BUG_ON(host->config == 0); 108 109 outb(reg, host->config); 110 return inb(host->config + 1); 111 } 112 113 static inline void wbsd_write_index(struct wbsd_host *host, u8 index, u8 value) 114 { 115 outb(index, host->base + WBSD_IDXR); 116 outb(value, host->base + WBSD_DATAR); 117 } 118 119 static inline u8 wbsd_read_index(struct wbsd_host *host, u8 index) 120 { 121 outb(index, host->base + WBSD_IDXR); 122 return inb(host->base + WBSD_DATAR); 123 } 124 125 /* 126 * Common routines 127 */ 128 129 static void wbsd_init_device(struct wbsd_host *host) 130 { 131 u8 setup, ier; 132 133 /* 134 * Reset chip (SD/MMC part) and fifo. 135 */ 136 setup = wbsd_read_index(host, WBSD_IDX_SETUP); 137 setup |= WBSD_FIFO_RESET | WBSD_SOFT_RESET; 138 wbsd_write_index(host, WBSD_IDX_SETUP, setup); 139 140 /* 141 * Set DAT3 to input 142 */ 143 setup &= ~WBSD_DAT3_H; 144 wbsd_write_index(host, WBSD_IDX_SETUP, setup); 145 host->flags &= ~WBSD_FIGNORE_DETECT; 146 147 /* 148 * Read back default clock. 149 */ 150 host->clk = wbsd_read_index(host, WBSD_IDX_CLK); 151 152 /* 153 * Power down port. 154 */ 155 outb(WBSD_POWER_N, host->base + WBSD_CSR); 156 157 /* 158 * Set maximum timeout. 159 */ 160 wbsd_write_index(host, WBSD_IDX_TAAC, 0x7F); 161 162 /* 163 * Test for card presence 164 */ 165 if (inb(host->base + WBSD_CSR) & WBSD_CARDPRESENT) 166 host->flags |= WBSD_FCARD_PRESENT; 167 else 168 host->flags &= ~WBSD_FCARD_PRESENT; 169 170 /* 171 * Enable interesting interrupts. 172 */ 173 ier = 0; 174 ier |= WBSD_EINT_CARD; 175 ier |= WBSD_EINT_FIFO_THRE; 176 ier |= WBSD_EINT_CRC; 177 ier |= WBSD_EINT_TIMEOUT; 178 ier |= WBSD_EINT_TC; 179 180 outb(ier, host->base + WBSD_EIR); 181 182 /* 183 * Clear interrupts. 184 */ 185 inb(host->base + WBSD_ISR); 186 } 187 188 static void wbsd_reset(struct wbsd_host *host) 189 { 190 u8 setup; 191 192 pr_err("%s: Resetting chip\n", mmc_hostname(host->mmc)); 193 194 /* 195 * Soft reset of chip (SD/MMC part). 196 */ 197 setup = wbsd_read_index(host, WBSD_IDX_SETUP); 198 setup |= WBSD_SOFT_RESET; 199 wbsd_write_index(host, WBSD_IDX_SETUP, setup); 200 } 201 202 static void wbsd_request_end(struct wbsd_host *host, struct mmc_request *mrq) 203 { 204 unsigned long dmaflags; 205 206 if (host->dma >= 0) { 207 /* 208 * Release ISA DMA controller. 209 */ 210 dmaflags = claim_dma_lock(); 211 disable_dma(host->dma); 212 clear_dma_ff(host->dma); 213 release_dma_lock(dmaflags); 214 215 /* 216 * Disable DMA on host. 217 */ 218 wbsd_write_index(host, WBSD_IDX_DMA, 0); 219 } 220 221 host->mrq = NULL; 222 223 /* 224 * MMC layer might call back into the driver so first unlock. 225 */ 226 spin_unlock(&host->lock); 227 mmc_request_done(host->mmc, mrq); 228 spin_lock(&host->lock); 229 } 230 231 /* 232 * Scatter/gather functions 233 */ 234 235 static inline void wbsd_init_sg(struct wbsd_host *host, struct mmc_data *data) 236 { 237 /* 238 * Get info. about SG list from data structure. 239 */ 240 host->cur_sg = data->sg; 241 host->num_sg = data->sg_len; 242 243 host->offset = 0; 244 host->remain = host->cur_sg->length; 245 } 246 247 static inline int wbsd_next_sg(struct wbsd_host *host) 248 { 249 /* 250 * Skip to next SG entry. 251 */ 252 host->cur_sg++; 253 host->num_sg--; 254 255 /* 256 * Any entries left? 257 */ 258 if (host->num_sg > 0) { 259 host->offset = 0; 260 host->remain = host->cur_sg->length; 261 } 262 263 return host->num_sg; 264 } 265 266 static inline char *wbsd_map_sg(struct wbsd_host *host) 267 { 268 return kmap_atomic(sg_page(host->cur_sg)) + host->cur_sg->offset; 269 } 270 271 static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data) 272 { 273 size_t len = 0; 274 int i; 275 276 for (i = 0; i < data->sg_len; i++) 277 len += data->sg[i].length; 278 sg_copy_to_buffer(data->sg, data->sg_len, host->dma_buffer, len); 279 } 280 281 static inline void wbsd_dma_to_sg(struct wbsd_host *host, struct mmc_data *data) 282 { 283 size_t len = 0; 284 int i; 285 286 for (i = 0; i < data->sg_len; i++) 287 len += data->sg[i].length; 288 sg_copy_from_buffer(data->sg, data->sg_len, host->dma_buffer, len); 289 } 290 291 /* 292 * Command handling 293 */ 294 295 static inline void wbsd_get_short_reply(struct wbsd_host *host, 296 struct mmc_command *cmd) 297 { 298 /* 299 * Correct response type? 300 */ 301 if (wbsd_read_index(host, WBSD_IDX_RSPLEN) != WBSD_RSP_SHORT) { 302 cmd->error = -EILSEQ; 303 return; 304 } 305 306 cmd->resp[0] = wbsd_read_index(host, WBSD_IDX_RESP12) << 24; 307 cmd->resp[0] |= wbsd_read_index(host, WBSD_IDX_RESP13) << 16; 308 cmd->resp[0] |= wbsd_read_index(host, WBSD_IDX_RESP14) << 8; 309 cmd->resp[0] |= wbsd_read_index(host, WBSD_IDX_RESP15) << 0; 310 cmd->resp[1] = wbsd_read_index(host, WBSD_IDX_RESP16) << 24; 311 } 312 313 static inline void wbsd_get_long_reply(struct wbsd_host *host, 314 struct mmc_command *cmd) 315 { 316 int i; 317 318 /* 319 * Correct response type? 320 */ 321 if (wbsd_read_index(host, WBSD_IDX_RSPLEN) != WBSD_RSP_LONG) { 322 cmd->error = -EILSEQ; 323 return; 324 } 325 326 for (i = 0; i < 4; i++) { 327 cmd->resp[i] = 328 wbsd_read_index(host, WBSD_IDX_RESP1 + i * 4) << 24; 329 cmd->resp[i] |= 330 wbsd_read_index(host, WBSD_IDX_RESP2 + i * 4) << 16; 331 cmd->resp[i] |= 332 wbsd_read_index(host, WBSD_IDX_RESP3 + i * 4) << 8; 333 cmd->resp[i] |= 334 wbsd_read_index(host, WBSD_IDX_RESP4 + i * 4) << 0; 335 } 336 } 337 338 static void wbsd_send_command(struct wbsd_host *host, struct mmc_command *cmd) 339 { 340 int i; 341 u8 status, isr; 342 343 /* 344 * Clear accumulated ISR. The interrupt routine 345 * will fill this one with events that occur during 346 * transfer. 347 */ 348 host->isr = 0; 349 350 /* 351 * Send the command (CRC calculated by host). 352 */ 353 outb(cmd->opcode, host->base + WBSD_CMDR); 354 for (i = 3; i >= 0; i--) 355 outb((cmd->arg >> (i * 8)) & 0xff, host->base + WBSD_CMDR); 356 357 cmd->error = 0; 358 359 /* 360 * Wait for the request to complete. 361 */ 362 do { 363 status = wbsd_read_index(host, WBSD_IDX_STATUS); 364 } while (status & WBSD_CARDTRAFFIC); 365 366 /* 367 * Do we expect a reply? 368 */ 369 if (cmd->flags & MMC_RSP_PRESENT) { 370 /* 371 * Read back status. 372 */ 373 isr = host->isr; 374 375 /* Card removed? */ 376 if (isr & WBSD_INT_CARD) 377 cmd->error = -ENOMEDIUM; 378 /* Timeout? */ 379 else if (isr & WBSD_INT_TIMEOUT) 380 cmd->error = -ETIMEDOUT; 381 /* CRC? */ 382 else if ((cmd->flags & MMC_RSP_CRC) && (isr & WBSD_INT_CRC)) 383 cmd->error = -EILSEQ; 384 /* All ok */ 385 else { 386 if (cmd->flags & MMC_RSP_136) 387 wbsd_get_long_reply(host, cmd); 388 else 389 wbsd_get_short_reply(host, cmd); 390 } 391 } 392 } 393 394 /* 395 * Data functions 396 */ 397 398 static void wbsd_empty_fifo(struct wbsd_host *host) 399 { 400 struct mmc_data *data = host->mrq->cmd->data; 401 char *buffer; 402 int i, idx, fsr, fifo; 403 404 /* 405 * Handle excessive data. 406 */ 407 if (host->num_sg == 0) 408 return; 409 410 buffer = wbsd_map_sg(host) + host->offset; 411 idx = 0; 412 413 /* 414 * Drain the fifo. This has a tendency to loop longer 415 * than the FIFO length (usually one block). 416 */ 417 while (!((fsr = inb(host->base + WBSD_FSR)) & WBSD_FIFO_EMPTY)) { 418 /* 419 * The size field in the FSR is broken so we have to 420 * do some guessing. 421 */ 422 if (fsr & WBSD_FIFO_FULL) 423 fifo = 16; 424 else if (fsr & WBSD_FIFO_FUTHRE) 425 fifo = 8; 426 else 427 fifo = 1; 428 429 for (i = 0; i < fifo; i++) { 430 buffer[idx++] = inb(host->base + WBSD_DFR); 431 host->offset++; 432 host->remain--; 433 434 data->bytes_xfered++; 435 436 /* 437 * End of scatter list entry? 438 */ 439 if (host->remain == 0) { 440 kunmap_atomic(buffer); 441 /* 442 * Get next entry. Check if last. 443 */ 444 if (!wbsd_next_sg(host)) 445 return; 446 447 buffer = wbsd_map_sg(host); 448 idx = 0; 449 } 450 } 451 } 452 kunmap_atomic(buffer); 453 454 /* 455 * This is a very dirty hack to solve a 456 * hardware problem. The chip doesn't trigger 457 * FIFO threshold interrupts properly. 458 */ 459 if ((data->blocks * data->blksz - data->bytes_xfered) < 16) 460 tasklet_schedule(&host->fifo_tasklet); 461 } 462 463 static void wbsd_fill_fifo(struct wbsd_host *host) 464 { 465 struct mmc_data *data = host->mrq->cmd->data; 466 char *buffer; 467 int i, idx, fsr, fifo; 468 469 /* 470 * Check that we aren't being called after the 471 * entire buffer has been transferred. 472 */ 473 if (host->num_sg == 0) 474 return; 475 476 buffer = wbsd_map_sg(host) + host->offset; 477 idx = 0; 478 479 /* 480 * Fill the fifo. This has a tendency to loop longer 481 * than the FIFO length (usually one block). 482 */ 483 while (!((fsr = inb(host->base + WBSD_FSR)) & WBSD_FIFO_FULL)) { 484 /* 485 * The size field in the FSR is broken so we have to 486 * do some guessing. 487 */ 488 if (fsr & WBSD_FIFO_EMPTY) 489 fifo = 0; 490 else if (fsr & WBSD_FIFO_EMTHRE) 491 fifo = 8; 492 else 493 fifo = 15; 494 495 for (i = 16; i > fifo; i--) { 496 outb(buffer[idx], host->base + WBSD_DFR); 497 host->offset++; 498 host->remain--; 499 500 data->bytes_xfered++; 501 502 /* 503 * End of scatter list entry? 504 */ 505 if (host->remain == 0) { 506 kunmap_atomic(buffer); 507 /* 508 * Get next entry. Check if last. 509 */ 510 if (!wbsd_next_sg(host)) 511 return; 512 513 buffer = wbsd_map_sg(host); 514 idx = 0; 515 } 516 } 517 } 518 kunmap_atomic(buffer); 519 520 /* 521 * The controller stops sending interrupts for 522 * 'FIFO empty' under certain conditions. So we 523 * need to be a bit more pro-active. 524 */ 525 tasklet_schedule(&host->fifo_tasklet); 526 } 527 528 static void wbsd_prepare_data(struct wbsd_host *host, struct mmc_data *data) 529 { 530 u16 blksize; 531 u8 setup; 532 unsigned long dmaflags; 533 unsigned int size; 534 535 /* 536 * Calculate size. 537 */ 538 size = data->blocks * data->blksz; 539 540 /* 541 * Check timeout values for overflow. 542 * (Yes, some cards cause this value to overflow). 543 */ 544 if (data->timeout_ns > 127000000) 545 wbsd_write_index(host, WBSD_IDX_TAAC, 127); 546 else { 547 wbsd_write_index(host, WBSD_IDX_TAAC, 548 data->timeout_ns / 1000000); 549 } 550 551 if (data->timeout_clks > 255) 552 wbsd_write_index(host, WBSD_IDX_NSAC, 255); 553 else 554 wbsd_write_index(host, WBSD_IDX_NSAC, data->timeout_clks); 555 556 /* 557 * Inform the chip of how large blocks will be 558 * sent. It needs this to determine when to 559 * calculate CRC. 560 * 561 * Space for CRC must be included in the size. 562 * Two bytes are needed for each data line. 563 */ 564 if (host->bus_width == MMC_BUS_WIDTH_1) { 565 blksize = data->blksz + 2; 566 567 wbsd_write_index(host, WBSD_IDX_PBSMSB, (blksize >> 4) & 0xF0); 568 wbsd_write_index(host, WBSD_IDX_PBSLSB, blksize & 0xFF); 569 } else if (host->bus_width == MMC_BUS_WIDTH_4) { 570 blksize = data->blksz + 2 * 4; 571 572 wbsd_write_index(host, WBSD_IDX_PBSMSB, 573 ((blksize >> 4) & 0xF0) | WBSD_DATA_WIDTH); 574 wbsd_write_index(host, WBSD_IDX_PBSLSB, blksize & 0xFF); 575 } else { 576 data->error = -EINVAL; 577 return; 578 } 579 580 /* 581 * Clear the FIFO. This is needed even for DMA 582 * transfers since the chip still uses the FIFO 583 * internally. 584 */ 585 setup = wbsd_read_index(host, WBSD_IDX_SETUP); 586 setup |= WBSD_FIFO_RESET; 587 wbsd_write_index(host, WBSD_IDX_SETUP, setup); 588 589 /* 590 * DMA transfer? 591 */ 592 if (host->dma >= 0) { 593 /* 594 * The buffer for DMA is only 64 kB. 595 */ 596 BUG_ON(size > 0x10000); 597 if (size > 0x10000) { 598 data->error = -EINVAL; 599 return; 600 } 601 602 /* 603 * Transfer data from the SG list to 604 * the DMA buffer. 605 */ 606 if (data->flags & MMC_DATA_WRITE) 607 wbsd_sg_to_dma(host, data); 608 609 /* 610 * Initialise the ISA DMA controller. 611 */ 612 dmaflags = claim_dma_lock(); 613 disable_dma(host->dma); 614 clear_dma_ff(host->dma); 615 if (data->flags & MMC_DATA_READ) 616 set_dma_mode(host->dma, DMA_MODE_READ & ~0x40); 617 else 618 set_dma_mode(host->dma, DMA_MODE_WRITE & ~0x40); 619 set_dma_addr(host->dma, host->dma_addr); 620 set_dma_count(host->dma, size); 621 622 enable_dma(host->dma); 623 release_dma_lock(dmaflags); 624 625 /* 626 * Enable DMA on the host. 627 */ 628 wbsd_write_index(host, WBSD_IDX_DMA, WBSD_DMA_ENABLE); 629 } else { 630 /* 631 * This flag is used to keep printk 632 * output to a minimum. 633 */ 634 host->firsterr = 1; 635 636 /* 637 * Initialise the SG list. 638 */ 639 wbsd_init_sg(host, data); 640 641 /* 642 * Turn off DMA. 643 */ 644 wbsd_write_index(host, WBSD_IDX_DMA, 0); 645 646 /* 647 * Set up FIFO threshold levels (and fill 648 * buffer if doing a write). 649 */ 650 if (data->flags & MMC_DATA_READ) { 651 wbsd_write_index(host, WBSD_IDX_FIFOEN, 652 WBSD_FIFOEN_FULL | 8); 653 } else { 654 wbsd_write_index(host, WBSD_IDX_FIFOEN, 655 WBSD_FIFOEN_EMPTY | 8); 656 wbsd_fill_fifo(host); 657 } 658 } 659 660 data->error = 0; 661 } 662 663 static void wbsd_finish_data(struct wbsd_host *host, struct mmc_data *data) 664 { 665 unsigned long dmaflags; 666 int count; 667 u8 status; 668 669 WARN_ON(host->mrq == NULL); 670 671 /* 672 * Send a stop command if needed. 673 */ 674 if (data->stop) 675 wbsd_send_command(host, data->stop); 676 677 /* 678 * Wait for the controller to leave data 679 * transfer state. 680 */ 681 do { 682 status = wbsd_read_index(host, WBSD_IDX_STATUS); 683 } while (status & (WBSD_BLOCK_READ | WBSD_BLOCK_WRITE)); 684 685 /* 686 * DMA transfer? 687 */ 688 if (host->dma >= 0) { 689 /* 690 * Disable DMA on the host. 691 */ 692 wbsd_write_index(host, WBSD_IDX_DMA, 0); 693 694 /* 695 * Turn of ISA DMA controller. 696 */ 697 dmaflags = claim_dma_lock(); 698 disable_dma(host->dma); 699 clear_dma_ff(host->dma); 700 count = get_dma_residue(host->dma); 701 release_dma_lock(dmaflags); 702 703 data->bytes_xfered = host->mrq->data->blocks * 704 host->mrq->data->blksz - count; 705 data->bytes_xfered -= data->bytes_xfered % data->blksz; 706 707 /* 708 * Any leftover data? 709 */ 710 if (count) { 711 pr_err("%s: Incomplete DMA transfer. " 712 "%d bytes left.\n", 713 mmc_hostname(host->mmc), count); 714 715 if (!data->error) 716 data->error = -EIO; 717 } else { 718 /* 719 * Transfer data from DMA buffer to 720 * SG list. 721 */ 722 if (data->flags & MMC_DATA_READ) 723 wbsd_dma_to_sg(host, data); 724 } 725 726 if (data->error) { 727 if (data->bytes_xfered) 728 data->bytes_xfered -= data->blksz; 729 } 730 } 731 732 wbsd_request_end(host, host->mrq); 733 } 734 735 /*****************************************************************************\ 736 * * 737 * MMC layer callbacks * 738 * * 739 \*****************************************************************************/ 740 741 static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq) 742 { 743 struct wbsd_host *host = mmc_priv(mmc); 744 struct mmc_command *cmd; 745 746 /* 747 * Disable tasklets to avoid a deadlock. 748 */ 749 spin_lock_bh(&host->lock); 750 751 BUG_ON(host->mrq != NULL); 752 753 cmd = mrq->cmd; 754 755 host->mrq = mrq; 756 757 /* 758 * Check that there is actually a card in the slot. 759 */ 760 if (!(host->flags & WBSD_FCARD_PRESENT)) { 761 cmd->error = -ENOMEDIUM; 762 goto done; 763 } 764 765 if (cmd->data) { 766 /* 767 * The hardware is so delightfully stupid that it has a list 768 * of "data" commands. If a command isn't on this list, it'll 769 * just go back to the idle state and won't send any data 770 * interrupts. 771 */ 772 switch (cmd->opcode) { 773 case 11: 774 case 17: 775 case 18: 776 case 20: 777 case 24: 778 case 25: 779 case 26: 780 case 27: 781 case 30: 782 case 42: 783 case 56: 784 break; 785 786 /* ACMDs. We don't keep track of state, so we just treat them 787 * like any other command. */ 788 case 51: 789 break; 790 791 default: 792 pr_warn("%s: Data command %d is not supported by this controller\n", 793 mmc_hostname(host->mmc), cmd->opcode); 794 cmd->error = -EINVAL; 795 796 goto done; 797 } 798 } 799 800 /* 801 * Does the request include data? 802 */ 803 if (cmd->data) { 804 wbsd_prepare_data(host, cmd->data); 805 806 if (cmd->data->error) 807 goto done; 808 } 809 810 wbsd_send_command(host, cmd); 811 812 /* 813 * If this is a data transfer the request 814 * will be finished after the data has 815 * transferred. 816 */ 817 if (cmd->data && !cmd->error) { 818 /* 819 * Dirty fix for hardware bug. 820 */ 821 if (host->dma == -1) 822 tasklet_schedule(&host->fifo_tasklet); 823 824 spin_unlock_bh(&host->lock); 825 826 return; 827 } 828 829 done: 830 wbsd_request_end(host, mrq); 831 832 spin_unlock_bh(&host->lock); 833 } 834 835 static void wbsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) 836 { 837 struct wbsd_host *host = mmc_priv(mmc); 838 u8 clk, setup, pwr; 839 840 spin_lock_bh(&host->lock); 841 842 /* 843 * Reset the chip on each power off. 844 * Should clear out any weird states. 845 */ 846 if (ios->power_mode == MMC_POWER_OFF) 847 wbsd_init_device(host); 848 849 if (ios->clock >= 24000000) 850 clk = WBSD_CLK_24M; 851 else if (ios->clock >= 16000000) 852 clk = WBSD_CLK_16M; 853 else if (ios->clock >= 12000000) 854 clk = WBSD_CLK_12M; 855 else 856 clk = WBSD_CLK_375K; 857 858 /* 859 * Only write to the clock register when 860 * there is an actual change. 861 */ 862 if (clk != host->clk) { 863 wbsd_write_index(host, WBSD_IDX_CLK, clk); 864 host->clk = clk; 865 } 866 867 /* 868 * Power up card. 869 */ 870 if (ios->power_mode != MMC_POWER_OFF) { 871 pwr = inb(host->base + WBSD_CSR); 872 pwr &= ~WBSD_POWER_N; 873 outb(pwr, host->base + WBSD_CSR); 874 } 875 876 /* 877 * MMC cards need to have pin 1 high during init. 878 * It wreaks havoc with the card detection though so 879 * that needs to be disabled. 880 */ 881 setup = wbsd_read_index(host, WBSD_IDX_SETUP); 882 if (ios->chip_select == MMC_CS_HIGH) { 883 BUG_ON(ios->bus_width != MMC_BUS_WIDTH_1); 884 setup |= WBSD_DAT3_H; 885 host->flags |= WBSD_FIGNORE_DETECT; 886 } else { 887 if (setup & WBSD_DAT3_H) { 888 setup &= ~WBSD_DAT3_H; 889 890 /* 891 * We cannot resume card detection immediately 892 * because of capacitance and delays in the chip. 893 */ 894 mod_timer(&host->ignore_timer, jiffies + HZ / 100); 895 } 896 } 897 wbsd_write_index(host, WBSD_IDX_SETUP, setup); 898 899 /* 900 * Store bus width for later. Will be used when 901 * setting up the data transfer. 902 */ 903 host->bus_width = ios->bus_width; 904 905 spin_unlock_bh(&host->lock); 906 } 907 908 static int wbsd_get_ro(struct mmc_host *mmc) 909 { 910 struct wbsd_host *host = mmc_priv(mmc); 911 u8 csr; 912 913 spin_lock_bh(&host->lock); 914 915 csr = inb(host->base + WBSD_CSR); 916 csr |= WBSD_MSLED; 917 outb(csr, host->base + WBSD_CSR); 918 919 mdelay(1); 920 921 csr = inb(host->base + WBSD_CSR); 922 csr &= ~WBSD_MSLED; 923 outb(csr, host->base + WBSD_CSR); 924 925 spin_unlock_bh(&host->lock); 926 927 return !!(csr & WBSD_WRPT); 928 } 929 930 static const struct mmc_host_ops wbsd_ops = { 931 .request = wbsd_request, 932 .set_ios = wbsd_set_ios, 933 .get_ro = wbsd_get_ro, 934 }; 935 936 /*****************************************************************************\ 937 * * 938 * Interrupt handling * 939 * * 940 \*****************************************************************************/ 941 942 /* 943 * Helper function to reset detection ignore 944 */ 945 946 static void wbsd_reset_ignore(struct timer_list *t) 947 { 948 struct wbsd_host *host = from_timer(host, t, ignore_timer); 949 950 BUG_ON(host == NULL); 951 952 DBG("Resetting card detection ignore\n"); 953 954 spin_lock_bh(&host->lock); 955 956 host->flags &= ~WBSD_FIGNORE_DETECT; 957 958 /* 959 * Card status might have changed during the 960 * blackout. 961 */ 962 tasklet_schedule(&host->card_tasklet); 963 964 spin_unlock_bh(&host->lock); 965 } 966 967 /* 968 * Tasklets 969 */ 970 971 static inline struct mmc_data *wbsd_get_data(struct wbsd_host *host) 972 { 973 WARN_ON(!host->mrq); 974 if (!host->mrq) 975 return NULL; 976 977 WARN_ON(!host->mrq->cmd); 978 if (!host->mrq->cmd) 979 return NULL; 980 981 WARN_ON(!host->mrq->cmd->data); 982 if (!host->mrq->cmd->data) 983 return NULL; 984 985 return host->mrq->cmd->data; 986 } 987 988 static void wbsd_tasklet_card(unsigned long param) 989 { 990 struct wbsd_host *host = (struct wbsd_host *)param; 991 u8 csr; 992 int delay = -1; 993 994 spin_lock(&host->lock); 995 996 if (host->flags & WBSD_FIGNORE_DETECT) { 997 spin_unlock(&host->lock); 998 return; 999 } 1000 1001 csr = inb(host->base + WBSD_CSR); 1002 WARN_ON(csr == 0xff); 1003 1004 if (csr & WBSD_CARDPRESENT) { 1005 if (!(host->flags & WBSD_FCARD_PRESENT)) { 1006 DBG("Card inserted\n"); 1007 host->flags |= WBSD_FCARD_PRESENT; 1008 1009 delay = 500; 1010 } 1011 } else if (host->flags & WBSD_FCARD_PRESENT) { 1012 DBG("Card removed\n"); 1013 host->flags &= ~WBSD_FCARD_PRESENT; 1014 1015 if (host->mrq) { 1016 pr_err("%s: Card removed during transfer!\n", 1017 mmc_hostname(host->mmc)); 1018 wbsd_reset(host); 1019 1020 host->mrq->cmd->error = -ENOMEDIUM; 1021 tasklet_schedule(&host->finish_tasklet); 1022 } 1023 1024 delay = 0; 1025 } 1026 1027 /* 1028 * Unlock first since we might get a call back. 1029 */ 1030 1031 spin_unlock(&host->lock); 1032 1033 if (delay != -1) 1034 mmc_detect_change(host->mmc, msecs_to_jiffies(delay)); 1035 } 1036 1037 static void wbsd_tasklet_fifo(unsigned long param) 1038 { 1039 struct wbsd_host *host = (struct wbsd_host *)param; 1040 struct mmc_data *data; 1041 1042 spin_lock(&host->lock); 1043 1044 if (!host->mrq) 1045 goto end; 1046 1047 data = wbsd_get_data(host); 1048 if (!data) 1049 goto end; 1050 1051 if (data->flags & MMC_DATA_WRITE) 1052 wbsd_fill_fifo(host); 1053 else 1054 wbsd_empty_fifo(host); 1055 1056 /* 1057 * Done? 1058 */ 1059 if (host->num_sg == 0) { 1060 wbsd_write_index(host, WBSD_IDX_FIFOEN, 0); 1061 tasklet_schedule(&host->finish_tasklet); 1062 } 1063 1064 end: 1065 spin_unlock(&host->lock); 1066 } 1067 1068 static void wbsd_tasklet_crc(unsigned long param) 1069 { 1070 struct wbsd_host *host = (struct wbsd_host *)param; 1071 struct mmc_data *data; 1072 1073 spin_lock(&host->lock); 1074 1075 if (!host->mrq) 1076 goto end; 1077 1078 data = wbsd_get_data(host); 1079 if (!data) 1080 goto end; 1081 1082 DBGF("CRC error\n"); 1083 1084 data->error = -EILSEQ; 1085 1086 tasklet_schedule(&host->finish_tasklet); 1087 1088 end: 1089 spin_unlock(&host->lock); 1090 } 1091 1092 static void wbsd_tasklet_timeout(unsigned long param) 1093 { 1094 struct wbsd_host *host = (struct wbsd_host *)param; 1095 struct mmc_data *data; 1096 1097 spin_lock(&host->lock); 1098 1099 if (!host->mrq) 1100 goto end; 1101 1102 data = wbsd_get_data(host); 1103 if (!data) 1104 goto end; 1105 1106 DBGF("Timeout\n"); 1107 1108 data->error = -ETIMEDOUT; 1109 1110 tasklet_schedule(&host->finish_tasklet); 1111 1112 end: 1113 spin_unlock(&host->lock); 1114 } 1115 1116 static void wbsd_tasklet_finish(unsigned long param) 1117 { 1118 struct wbsd_host *host = (struct wbsd_host *)param; 1119 struct mmc_data *data; 1120 1121 spin_lock(&host->lock); 1122 1123 WARN_ON(!host->mrq); 1124 if (!host->mrq) 1125 goto end; 1126 1127 data = wbsd_get_data(host); 1128 if (!data) 1129 goto end; 1130 1131 wbsd_finish_data(host, data); 1132 1133 end: 1134 spin_unlock(&host->lock); 1135 } 1136 1137 /* 1138 * Interrupt handling 1139 */ 1140 1141 static irqreturn_t wbsd_irq(int irq, void *dev_id) 1142 { 1143 struct wbsd_host *host = dev_id; 1144 int isr; 1145 1146 isr = inb(host->base + WBSD_ISR); 1147 1148 /* 1149 * Was it actually our hardware that caused the interrupt? 1150 */ 1151 if (isr == 0xff || isr == 0x00) 1152 return IRQ_NONE; 1153 1154 host->isr |= isr; 1155 1156 /* 1157 * Schedule tasklets as needed. 1158 */ 1159 if (isr & WBSD_INT_CARD) 1160 tasklet_schedule(&host->card_tasklet); 1161 if (isr & WBSD_INT_FIFO_THRE) 1162 tasklet_schedule(&host->fifo_tasklet); 1163 if (isr & WBSD_INT_CRC) 1164 tasklet_hi_schedule(&host->crc_tasklet); 1165 if (isr & WBSD_INT_TIMEOUT) 1166 tasklet_hi_schedule(&host->timeout_tasklet); 1167 if (isr & WBSD_INT_TC) 1168 tasklet_schedule(&host->finish_tasklet); 1169 1170 return IRQ_HANDLED; 1171 } 1172 1173 /*****************************************************************************\ 1174 * * 1175 * Device initialisation and shutdown * 1176 * * 1177 \*****************************************************************************/ 1178 1179 /* 1180 * Allocate/free MMC structure. 1181 */ 1182 1183 static int wbsd_alloc_mmc(struct device *dev) 1184 { 1185 struct mmc_host *mmc; 1186 struct wbsd_host *host; 1187 1188 /* 1189 * Allocate MMC structure. 1190 */ 1191 mmc = mmc_alloc_host(sizeof(struct wbsd_host), dev); 1192 if (!mmc) 1193 return -ENOMEM; 1194 1195 host = mmc_priv(mmc); 1196 host->mmc = mmc; 1197 1198 host->dma = -1; 1199 1200 /* 1201 * Set host parameters. 1202 */ 1203 mmc->ops = &wbsd_ops; 1204 mmc->f_min = 375000; 1205 mmc->f_max = 24000000; 1206 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; 1207 mmc->caps = MMC_CAP_4_BIT_DATA; 1208 1209 spin_lock_init(&host->lock); 1210 1211 /* 1212 * Set up timers 1213 */ 1214 timer_setup(&host->ignore_timer, wbsd_reset_ignore, 0); 1215 1216 /* 1217 * Maximum number of segments. Worst case is one sector per segment 1218 * so this will be 64kB/512. 1219 */ 1220 mmc->max_segs = 128; 1221 1222 /* 1223 * Maximum request size. Also limited by 64KiB buffer. 1224 */ 1225 mmc->max_req_size = 65536; 1226 1227 /* 1228 * Maximum segment size. Could be one segment with the maximum number 1229 * of bytes. 1230 */ 1231 mmc->max_seg_size = mmc->max_req_size; 1232 1233 /* 1234 * Maximum block size. We have 12 bits (= 4095) but have to subtract 1235 * space for CRC. So the maximum is 4095 - 4*2 = 4087. 1236 */ 1237 mmc->max_blk_size = 4087; 1238 1239 /* 1240 * Maximum block count. There is no real limit so the maximum 1241 * request size will be the only restriction. 1242 */ 1243 mmc->max_blk_count = mmc->max_req_size; 1244 1245 dev_set_drvdata(dev, mmc); 1246 1247 return 0; 1248 } 1249 1250 static void wbsd_free_mmc(struct device *dev) 1251 { 1252 struct mmc_host *mmc; 1253 struct wbsd_host *host; 1254 1255 mmc = dev_get_drvdata(dev); 1256 if (!mmc) 1257 return; 1258 1259 host = mmc_priv(mmc); 1260 BUG_ON(host == NULL); 1261 1262 del_timer_sync(&host->ignore_timer); 1263 1264 mmc_free_host(mmc); 1265 1266 dev_set_drvdata(dev, NULL); 1267 } 1268 1269 /* 1270 * Scan for known chip id:s 1271 */ 1272 1273 static int wbsd_scan(struct wbsd_host *host) 1274 { 1275 int i, j, k; 1276 int id; 1277 1278 /* 1279 * Iterate through all ports, all codes to 1280 * find hardware that is in our known list. 1281 */ 1282 for (i = 0; i < ARRAY_SIZE(config_ports); i++) { 1283 if (!request_region(config_ports[i], 2, DRIVER_NAME)) 1284 continue; 1285 1286 for (j = 0; j < ARRAY_SIZE(unlock_codes); j++) { 1287 id = 0xFFFF; 1288 1289 host->config = config_ports[i]; 1290 host->unlock_code = unlock_codes[j]; 1291 1292 wbsd_unlock_config(host); 1293 1294 outb(WBSD_CONF_ID_HI, config_ports[i]); 1295 id = inb(config_ports[i] + 1) << 8; 1296 1297 outb(WBSD_CONF_ID_LO, config_ports[i]); 1298 id |= inb(config_ports[i] + 1); 1299 1300 wbsd_lock_config(host); 1301 1302 for (k = 0; k < ARRAY_SIZE(valid_ids); k++) { 1303 if (id == valid_ids[k]) { 1304 host->chip_id = id; 1305 1306 return 0; 1307 } 1308 } 1309 1310 if (id != 0xFFFF) { 1311 DBG("Unknown hardware (id %x) found at %x\n", 1312 id, config_ports[i]); 1313 } 1314 } 1315 1316 release_region(config_ports[i], 2); 1317 } 1318 1319 host->config = 0; 1320 host->unlock_code = 0; 1321 1322 return -ENODEV; 1323 } 1324 1325 /* 1326 * Allocate/free io port ranges 1327 */ 1328 1329 static int wbsd_request_region(struct wbsd_host *host, int base) 1330 { 1331 if (base & 0x7) 1332 return -EINVAL; 1333 1334 if (!request_region(base, 8, DRIVER_NAME)) 1335 return -EIO; 1336 1337 host->base = base; 1338 1339 return 0; 1340 } 1341 1342 static void wbsd_release_regions(struct wbsd_host *host) 1343 { 1344 if (host->base) 1345 release_region(host->base, 8); 1346 1347 host->base = 0; 1348 1349 if (host->config) 1350 release_region(host->config, 2); 1351 1352 host->config = 0; 1353 } 1354 1355 /* 1356 * Allocate/free DMA port and buffer 1357 */ 1358 1359 static void wbsd_request_dma(struct wbsd_host *host, int dma) 1360 { 1361 if (dma < 0) 1362 return; 1363 1364 if (request_dma(dma, DRIVER_NAME)) 1365 goto err; 1366 1367 /* 1368 * We need to allocate a special buffer in 1369 * order for ISA to be able to DMA to it. 1370 */ 1371 host->dma_buffer = kmalloc(WBSD_DMA_SIZE, 1372 GFP_NOIO | GFP_DMA | __GFP_RETRY_MAYFAIL | __GFP_NOWARN); 1373 if (!host->dma_buffer) 1374 goto free; 1375 1376 /* 1377 * Translate the address to a physical address. 1378 */ 1379 host->dma_addr = dma_map_single(mmc_dev(host->mmc), host->dma_buffer, 1380 WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); 1381 if (dma_mapping_error(mmc_dev(host->mmc), host->dma_addr)) 1382 goto kfree; 1383 1384 /* 1385 * ISA DMA must be aligned on a 64k basis. 1386 */ 1387 if ((host->dma_addr & 0xffff) != 0) 1388 goto unmap; 1389 /* 1390 * ISA cannot access memory above 16 MB. 1391 */ 1392 else if (host->dma_addr >= 0x1000000) 1393 goto unmap; 1394 1395 host->dma = dma; 1396 1397 return; 1398 1399 unmap: 1400 /* 1401 * If we've gotten here then there is some kind of alignment bug 1402 */ 1403 BUG_ON(1); 1404 1405 dma_unmap_single(mmc_dev(host->mmc), host->dma_addr, 1406 WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); 1407 host->dma_addr = 0; 1408 1409 kfree: 1410 kfree(host->dma_buffer); 1411 host->dma_buffer = NULL; 1412 1413 free: 1414 free_dma(dma); 1415 1416 err: 1417 pr_warn(DRIVER_NAME ": Unable to allocate DMA %d - falling back on FIFO\n", 1418 dma); 1419 } 1420 1421 static void wbsd_release_dma(struct wbsd_host *host) 1422 { 1423 /* 1424 * host->dma_addr is valid here iff host->dma_buffer is not NULL. 1425 */ 1426 if (host->dma_buffer) { 1427 dma_unmap_single(mmc_dev(host->mmc), host->dma_addr, 1428 WBSD_DMA_SIZE, DMA_BIDIRECTIONAL); 1429 kfree(host->dma_buffer); 1430 } 1431 if (host->dma >= 0) 1432 free_dma(host->dma); 1433 1434 host->dma = -1; 1435 host->dma_buffer = NULL; 1436 host->dma_addr = 0; 1437 } 1438 1439 /* 1440 * Allocate/free IRQ. 1441 */ 1442 1443 static int wbsd_request_irq(struct wbsd_host *host, int irq) 1444 { 1445 int ret; 1446 1447 /* 1448 * Set up tasklets. Must be done before requesting interrupt. 1449 */ 1450 tasklet_init(&host->card_tasklet, wbsd_tasklet_card, 1451 (unsigned long)host); 1452 tasklet_init(&host->fifo_tasklet, wbsd_tasklet_fifo, 1453 (unsigned long)host); 1454 tasklet_init(&host->crc_tasklet, wbsd_tasklet_crc, 1455 (unsigned long)host); 1456 tasklet_init(&host->timeout_tasklet, wbsd_tasklet_timeout, 1457 (unsigned long)host); 1458 tasklet_init(&host->finish_tasklet, wbsd_tasklet_finish, 1459 (unsigned long)host); 1460 1461 /* 1462 * Allocate interrupt. 1463 */ 1464 ret = request_irq(irq, wbsd_irq, IRQF_SHARED, DRIVER_NAME, host); 1465 if (ret) 1466 return ret; 1467 1468 host->irq = irq; 1469 1470 return 0; 1471 } 1472 1473 static void wbsd_release_irq(struct wbsd_host *host) 1474 { 1475 if (!host->irq) 1476 return; 1477 1478 free_irq(host->irq, host); 1479 1480 host->irq = 0; 1481 1482 tasklet_kill(&host->card_tasklet); 1483 tasklet_kill(&host->fifo_tasklet); 1484 tasklet_kill(&host->crc_tasklet); 1485 tasklet_kill(&host->timeout_tasklet); 1486 tasklet_kill(&host->finish_tasklet); 1487 } 1488 1489 /* 1490 * Allocate all resources for the host. 1491 */ 1492 1493 static int wbsd_request_resources(struct wbsd_host *host, 1494 int base, int irq, int dma) 1495 { 1496 int ret; 1497 1498 /* 1499 * Allocate I/O ports. 1500 */ 1501 ret = wbsd_request_region(host, base); 1502 if (ret) 1503 return ret; 1504 1505 /* 1506 * Allocate interrupt. 1507 */ 1508 ret = wbsd_request_irq(host, irq); 1509 if (ret) 1510 return ret; 1511 1512 /* 1513 * Allocate DMA. 1514 */ 1515 wbsd_request_dma(host, dma); 1516 1517 return 0; 1518 } 1519 1520 /* 1521 * Release all resources for the host. 1522 */ 1523 1524 static void wbsd_release_resources(struct wbsd_host *host) 1525 { 1526 wbsd_release_dma(host); 1527 wbsd_release_irq(host); 1528 wbsd_release_regions(host); 1529 } 1530 1531 /* 1532 * Configure the resources the chip should use. 1533 */ 1534 1535 static void wbsd_chip_config(struct wbsd_host *host) 1536 { 1537 wbsd_unlock_config(host); 1538 1539 /* 1540 * Reset the chip. 1541 */ 1542 wbsd_write_config(host, WBSD_CONF_SWRST, 1); 1543 wbsd_write_config(host, WBSD_CONF_SWRST, 0); 1544 1545 /* 1546 * Select SD/MMC function. 1547 */ 1548 wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); 1549 1550 /* 1551 * Set up card detection. 1552 */ 1553 wbsd_write_config(host, WBSD_CONF_PINS, WBSD_PINS_DETECT_GP11); 1554 1555 /* 1556 * Configure chip 1557 */ 1558 wbsd_write_config(host, WBSD_CONF_PORT_HI, host->base >> 8); 1559 wbsd_write_config(host, WBSD_CONF_PORT_LO, host->base & 0xff); 1560 1561 wbsd_write_config(host, WBSD_CONF_IRQ, host->irq); 1562 1563 if (host->dma >= 0) 1564 wbsd_write_config(host, WBSD_CONF_DRQ, host->dma); 1565 1566 /* 1567 * Enable and power up chip. 1568 */ 1569 wbsd_write_config(host, WBSD_CONF_ENABLE, 1); 1570 wbsd_write_config(host, WBSD_CONF_POWER, 0x20); 1571 1572 wbsd_lock_config(host); 1573 } 1574 1575 /* 1576 * Check that configured resources are correct. 1577 */ 1578 1579 static int wbsd_chip_validate(struct wbsd_host *host) 1580 { 1581 int base, irq, dma; 1582 1583 wbsd_unlock_config(host); 1584 1585 /* 1586 * Select SD/MMC function. 1587 */ 1588 wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); 1589 1590 /* 1591 * Read configuration. 1592 */ 1593 base = wbsd_read_config(host, WBSD_CONF_PORT_HI) << 8; 1594 base |= wbsd_read_config(host, WBSD_CONF_PORT_LO); 1595 1596 irq = wbsd_read_config(host, WBSD_CONF_IRQ); 1597 1598 dma = wbsd_read_config(host, WBSD_CONF_DRQ); 1599 1600 wbsd_lock_config(host); 1601 1602 /* 1603 * Validate against given configuration. 1604 */ 1605 if (base != host->base) 1606 return 0; 1607 if (irq != host->irq) 1608 return 0; 1609 if ((dma != host->dma) && (host->dma != -1)) 1610 return 0; 1611 1612 return 1; 1613 } 1614 1615 /* 1616 * Powers down the SD function 1617 */ 1618 1619 static void wbsd_chip_poweroff(struct wbsd_host *host) 1620 { 1621 wbsd_unlock_config(host); 1622 1623 wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD); 1624 wbsd_write_config(host, WBSD_CONF_ENABLE, 0); 1625 1626 wbsd_lock_config(host); 1627 } 1628 1629 /*****************************************************************************\ 1630 * * 1631 * Devices setup and shutdown * 1632 * * 1633 \*****************************************************************************/ 1634 1635 static int wbsd_init(struct device *dev, int base, int irq, int dma, 1636 int pnp) 1637 { 1638 struct wbsd_host *host = NULL; 1639 struct mmc_host *mmc = NULL; 1640 int ret; 1641 1642 ret = wbsd_alloc_mmc(dev); 1643 if (ret) 1644 return ret; 1645 1646 mmc = dev_get_drvdata(dev); 1647 host = mmc_priv(mmc); 1648 1649 /* 1650 * Scan for hardware. 1651 */ 1652 ret = wbsd_scan(host); 1653 if (ret) { 1654 if (pnp && (ret == -ENODEV)) { 1655 pr_warn(DRIVER_NAME ": Unable to confirm device presence - you may experience lock-ups\n"); 1656 } else { 1657 wbsd_free_mmc(dev); 1658 return ret; 1659 } 1660 } 1661 1662 /* 1663 * Request resources. 1664 */ 1665 ret = wbsd_request_resources(host, base, irq, dma); 1666 if (ret) { 1667 wbsd_release_resources(host); 1668 wbsd_free_mmc(dev); 1669 return ret; 1670 } 1671 1672 /* 1673 * See if chip needs to be configured. 1674 */ 1675 if (pnp) { 1676 if ((host->config != 0) && !wbsd_chip_validate(host)) { 1677 pr_warn(DRIVER_NAME ": PnP active but chip not configured! You probably have a buggy BIOS. Configuring chip manually.\n"); 1678 wbsd_chip_config(host); 1679 } 1680 } else 1681 wbsd_chip_config(host); 1682 1683 /* 1684 * Power Management stuff. No idea how this works. 1685 * Not tested. 1686 */ 1687 #ifdef CONFIG_PM 1688 if (host->config) { 1689 wbsd_unlock_config(host); 1690 wbsd_write_config(host, WBSD_CONF_PME, 0xA0); 1691 wbsd_lock_config(host); 1692 } 1693 #endif 1694 /* 1695 * Allow device to initialise itself properly. 1696 */ 1697 mdelay(5); 1698 1699 /* 1700 * Reset the chip into a known state. 1701 */ 1702 wbsd_init_device(host); 1703 1704 mmc_add_host(mmc); 1705 1706 pr_info("%s: W83L51xD", mmc_hostname(mmc)); 1707 if (host->chip_id != 0) 1708 printk(" id %x", (int)host->chip_id); 1709 printk(" at 0x%x irq %d", (int)host->base, (int)host->irq); 1710 if (host->dma >= 0) 1711 printk(" dma %d", (int)host->dma); 1712 else 1713 printk(" FIFO"); 1714 if (pnp) 1715 printk(" PnP"); 1716 printk("\n"); 1717 1718 return 0; 1719 } 1720 1721 static void wbsd_shutdown(struct device *dev, int pnp) 1722 { 1723 struct mmc_host *mmc = dev_get_drvdata(dev); 1724 struct wbsd_host *host; 1725 1726 if (!mmc) 1727 return; 1728 1729 host = mmc_priv(mmc); 1730 1731 mmc_remove_host(mmc); 1732 1733 /* 1734 * Power down the SD/MMC function. 1735 */ 1736 if (!pnp) 1737 wbsd_chip_poweroff(host); 1738 1739 wbsd_release_resources(host); 1740 1741 wbsd_free_mmc(dev); 1742 } 1743 1744 /* 1745 * Non-PnP 1746 */ 1747 1748 static int wbsd_probe(struct platform_device *dev) 1749 { 1750 /* Use the module parameters for resources */ 1751 return wbsd_init(&dev->dev, param_io, param_irq, param_dma, 0); 1752 } 1753 1754 static int wbsd_remove(struct platform_device *dev) 1755 { 1756 wbsd_shutdown(&dev->dev, 0); 1757 1758 return 0; 1759 } 1760 1761 /* 1762 * PnP 1763 */ 1764 1765 #ifdef CONFIG_PNP 1766 1767 static int 1768 wbsd_pnp_probe(struct pnp_dev *pnpdev, const struct pnp_device_id *dev_id) 1769 { 1770 int io, irq, dma; 1771 1772 /* 1773 * Get resources from PnP layer. 1774 */ 1775 io = pnp_port_start(pnpdev, 0); 1776 irq = pnp_irq(pnpdev, 0); 1777 if (pnp_dma_valid(pnpdev, 0)) 1778 dma = pnp_dma(pnpdev, 0); 1779 else 1780 dma = -1; 1781 1782 DBGF("PnP resources: port %3x irq %d dma %d\n", io, irq, dma); 1783 1784 return wbsd_init(&pnpdev->dev, io, irq, dma, 1); 1785 } 1786 1787 static void wbsd_pnp_remove(struct pnp_dev *dev) 1788 { 1789 wbsd_shutdown(&dev->dev, 1); 1790 } 1791 1792 #endif /* CONFIG_PNP */ 1793 1794 /* 1795 * Power management 1796 */ 1797 1798 #ifdef CONFIG_PM 1799 1800 static int wbsd_platform_suspend(struct platform_device *dev, 1801 pm_message_t state) 1802 { 1803 struct mmc_host *mmc = platform_get_drvdata(dev); 1804 struct wbsd_host *host; 1805 1806 if (mmc == NULL) 1807 return 0; 1808 1809 DBGF("Suspending...\n"); 1810 1811 host = mmc_priv(mmc); 1812 1813 wbsd_chip_poweroff(host); 1814 return 0; 1815 } 1816 1817 static int wbsd_platform_resume(struct platform_device *dev) 1818 { 1819 struct mmc_host *mmc = platform_get_drvdata(dev); 1820 struct wbsd_host *host; 1821 1822 if (mmc == NULL) 1823 return 0; 1824 1825 DBGF("Resuming...\n"); 1826 1827 host = mmc_priv(mmc); 1828 1829 wbsd_chip_config(host); 1830 1831 /* 1832 * Allow device to initialise itself properly. 1833 */ 1834 mdelay(5); 1835 1836 wbsd_init_device(host); 1837 return 0; 1838 } 1839 1840 #ifdef CONFIG_PNP 1841 1842 static int wbsd_pnp_suspend(struct pnp_dev *pnp_dev, pm_message_t state) 1843 { 1844 struct mmc_host *mmc = dev_get_drvdata(&pnp_dev->dev); 1845 1846 if (mmc == NULL) 1847 return 0; 1848 1849 DBGF("Suspending...\n"); 1850 return 0; 1851 } 1852 1853 static int wbsd_pnp_resume(struct pnp_dev *pnp_dev) 1854 { 1855 struct mmc_host *mmc = dev_get_drvdata(&pnp_dev->dev); 1856 struct wbsd_host *host; 1857 1858 if (mmc == NULL) 1859 return 0; 1860 1861 DBGF("Resuming...\n"); 1862 1863 host = mmc_priv(mmc); 1864 1865 /* 1866 * See if chip needs to be configured. 1867 */ 1868 if (host->config != 0) { 1869 if (!wbsd_chip_validate(host)) { 1870 pr_warn(DRIVER_NAME ": PnP active but chip not configured! You probably have a buggy BIOS. Configuring chip manually.\n"); 1871 wbsd_chip_config(host); 1872 } 1873 } 1874 1875 /* 1876 * Allow device to initialise itself properly. 1877 */ 1878 mdelay(5); 1879 1880 wbsd_init_device(host); 1881 return 0; 1882 } 1883 1884 #endif /* CONFIG_PNP */ 1885 1886 #else /* CONFIG_PM */ 1887 1888 #define wbsd_platform_suspend NULL 1889 #define wbsd_platform_resume NULL 1890 1891 #define wbsd_pnp_suspend NULL 1892 #define wbsd_pnp_resume NULL 1893 1894 #endif /* CONFIG_PM */ 1895 1896 static struct platform_device *wbsd_device; 1897 1898 static struct platform_driver wbsd_driver = { 1899 .probe = wbsd_probe, 1900 .remove = wbsd_remove, 1901 1902 .suspend = wbsd_platform_suspend, 1903 .resume = wbsd_platform_resume, 1904 .driver = { 1905 .name = DRIVER_NAME, 1906 }, 1907 }; 1908 1909 #ifdef CONFIG_PNP 1910 1911 static struct pnp_driver wbsd_pnp_driver = { 1912 .name = DRIVER_NAME, 1913 .id_table = pnp_dev_table, 1914 .probe = wbsd_pnp_probe, 1915 .remove = wbsd_pnp_remove, 1916 1917 .suspend = wbsd_pnp_suspend, 1918 .resume = wbsd_pnp_resume, 1919 }; 1920 1921 #endif /* CONFIG_PNP */ 1922 1923 /* 1924 * Module loading/unloading 1925 */ 1926 1927 static int __init wbsd_drv_init(void) 1928 { 1929 int result; 1930 1931 pr_info(DRIVER_NAME 1932 ": Winbond W83L51xD SD/MMC card interface driver\n"); 1933 pr_info(DRIVER_NAME ": Copyright(c) Pierre Ossman\n"); 1934 1935 #ifdef CONFIG_PNP 1936 1937 if (!param_nopnp) { 1938 result = pnp_register_driver(&wbsd_pnp_driver); 1939 if (result < 0) 1940 return result; 1941 } 1942 #endif /* CONFIG_PNP */ 1943 1944 if (param_nopnp) { 1945 result = platform_driver_register(&wbsd_driver); 1946 if (result < 0) 1947 return result; 1948 1949 wbsd_device = platform_device_alloc(DRIVER_NAME, -1); 1950 if (!wbsd_device) { 1951 platform_driver_unregister(&wbsd_driver); 1952 return -ENOMEM; 1953 } 1954 1955 result = platform_device_add(wbsd_device); 1956 if (result) { 1957 platform_device_put(wbsd_device); 1958 platform_driver_unregister(&wbsd_driver); 1959 return result; 1960 } 1961 } 1962 1963 return 0; 1964 } 1965 1966 static void __exit wbsd_drv_exit(void) 1967 { 1968 #ifdef CONFIG_PNP 1969 1970 if (!param_nopnp) 1971 pnp_unregister_driver(&wbsd_pnp_driver); 1972 1973 #endif /* CONFIG_PNP */ 1974 1975 if (param_nopnp) { 1976 platform_device_unregister(wbsd_device); 1977 1978 platform_driver_unregister(&wbsd_driver); 1979 } 1980 1981 DBG("unloaded\n"); 1982 } 1983 1984 module_init(wbsd_drv_init); 1985 module_exit(wbsd_drv_exit); 1986 #ifdef CONFIG_PNP 1987 module_param_hw_named(nopnp, param_nopnp, uint, other, 0444); 1988 #endif 1989 module_param_hw_named(io, param_io, uint, ioport, 0444); 1990 module_param_hw_named(irq, param_irq, uint, irq, 0444); 1991 module_param_hw_named(dma, param_dma, int, dma, 0444); 1992 1993 MODULE_LICENSE("GPL"); 1994 MODULE_AUTHOR("Pierre Ossman <pierre@ossman.eu>"); 1995 MODULE_DESCRIPTION("Winbond W83L51xD SD/MMC card interface driver"); 1996 1997 #ifdef CONFIG_PNP 1998 MODULE_PARM_DESC(nopnp, "Scan for device instead of relying on PNP. (default 0)"); 1999 #endif 2000 MODULE_PARM_DESC(io, "I/O base to allocate. Must be 8 byte aligned. (default 0x248)"); 2001 MODULE_PARM_DESC(irq, "IRQ to allocate. (default 6)"); 2002 MODULE_PARM_DESC(dma, "DMA channel to allocate. -1 for no DMA. (default 2)"); 2003