r592.c (21774B)
1// SPDX-License-Identifier: GPL-2.0-only 2/* 3 * Copyright (C) 2010 - Maxim Levitsky 4 * driver for Ricoh memstick readers 5 */ 6 7#include <linux/kernel.h> 8#include <linux/module.h> 9#include <linux/freezer.h> 10#include <linux/jiffies.h> 11#include <linux/interrupt.h> 12#include <linux/pci.h> 13#include <linux/pci_ids.h> 14#include <linux/delay.h> 15#include <linux/slab.h> 16#include <linux/kthread.h> 17#include <linux/sched.h> 18#include <linux/highmem.h> 19#include <asm/byteorder.h> 20#include <linux/swab.h> 21#include "r592.h" 22 23static bool r592_enable_dma = 1; 24static int debug; 25 26static const char *tpc_names[] = { 27 "MS_TPC_READ_MG_STATUS", 28 "MS_TPC_READ_LONG_DATA", 29 "MS_TPC_READ_SHORT_DATA", 30 "MS_TPC_READ_REG", 31 "MS_TPC_READ_QUAD_DATA", 32 "INVALID", 33 "MS_TPC_GET_INT", 34 "MS_TPC_SET_RW_REG_ADRS", 35 "MS_TPC_EX_SET_CMD", 36 "MS_TPC_WRITE_QUAD_DATA", 37 "MS_TPC_WRITE_REG", 38 "MS_TPC_WRITE_SHORT_DATA", 39 "MS_TPC_WRITE_LONG_DATA", 40 "MS_TPC_SET_CMD", 41}; 42 43/** 44 * memstick_debug_get_tpc_name - debug helper that returns string for 45 * a TPC number 46 */ 47const char *memstick_debug_get_tpc_name(int tpc) 48{ 49 return tpc_names[tpc-1]; 50} 51EXPORT_SYMBOL(memstick_debug_get_tpc_name); 52 53 54/* Read a register*/ 55static inline u32 r592_read_reg(struct r592_device *dev, int address) 56{ 57 u32 value = readl(dev->mmio + address); 58 dbg_reg("reg #%02d == 0x%08x", address, value); 59 return value; 60} 61 62/* Write a register */ 63static inline void r592_write_reg(struct r592_device *dev, 64 int address, u32 value) 65{ 66 dbg_reg("reg #%02d <- 0x%08x", address, value); 67 writel(value, dev->mmio + address); 68} 69 70/* Reads a big endian DWORD register */ 71static inline u32 r592_read_reg_raw_be(struct r592_device *dev, int address) 72{ 73 u32 value = __raw_readl(dev->mmio + address); 74 dbg_reg("reg #%02d == 0x%08x", address, value); 75 return be32_to_cpu(value); 76} 77 78/* Writes a big endian DWORD register */ 79static inline void r592_write_reg_raw_be(struct r592_device *dev, 80 int address, u32 value) 81{ 82 dbg_reg("reg #%02d <- 0x%08x", address, value); 83 __raw_writel(cpu_to_be32(value), dev->mmio + address); 84} 85 86/* Set specific bits in a register (little endian) */ 87static inline void r592_set_reg_mask(struct r592_device *dev, 88 int address, u32 mask) 89{ 90 u32 reg = readl(dev->mmio + address); 91 dbg_reg("reg #%02d |= 0x%08x (old =0x%08x)", address, mask, reg); 92 writel(reg | mask , dev->mmio + address); 93} 94 95/* Clear specific bits in a register (little endian) */ 96static inline void r592_clear_reg_mask(struct r592_device *dev, 97 int address, u32 mask) 98{ 99 u32 reg = readl(dev->mmio + address); 100 dbg_reg("reg #%02d &= 0x%08x (old = 0x%08x, mask = 0x%08x)", 101 address, ~mask, reg, mask); 102 writel(reg & ~mask, dev->mmio + address); 103} 104 105 106/* Wait for status bits while checking for errors */ 107static int r592_wait_status(struct r592_device *dev, u32 mask, u32 wanted_mask) 108{ 109 unsigned long timeout = jiffies + msecs_to_jiffies(1000); 110 u32 reg = r592_read_reg(dev, R592_STATUS); 111 112 if ((reg & mask) == wanted_mask) 113 return 0; 114 115 while (time_before(jiffies, timeout)) { 116 117 reg = r592_read_reg(dev, R592_STATUS); 118 119 if ((reg & mask) == wanted_mask) 120 return 0; 121 122 if (reg & (R592_STATUS_SEND_ERR | R592_STATUS_RECV_ERR)) 123 return -EIO; 124 125 cpu_relax(); 126 } 127 return -ETIME; 128} 129 130 131/* Enable/disable device */ 132static int r592_enable_device(struct r592_device *dev, bool enable) 133{ 134 dbg("%sabling the device", enable ? "en" : "dis"); 135 136 if (enable) { 137 138 /* Power up the card */ 139 r592_write_reg(dev, R592_POWER, R592_POWER_0 | R592_POWER_1); 140 141 /* Perform a reset */ 142 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); 143 144 msleep(100); 145 } else 146 /* Power down the card */ 147 r592_write_reg(dev, R592_POWER, 0); 148 149 return 0; 150} 151 152/* Set serial/parallel mode */ 153static int r592_set_mode(struct r592_device *dev, bool parallel_mode) 154{ 155 if (!parallel_mode) { 156 dbg("switching to serial mode"); 157 158 /* Set serial mode */ 159 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_SERIAL); 160 161 r592_clear_reg_mask(dev, R592_POWER, R592_POWER_20); 162 163 } else { 164 dbg("switching to parallel mode"); 165 166 /* This setting should be set _before_ switch TPC */ 167 r592_set_reg_mask(dev, R592_POWER, R592_POWER_20); 168 169 r592_clear_reg_mask(dev, R592_IO, 170 R592_IO_SERIAL1 | R592_IO_SERIAL2); 171 172 /* Set the parallel mode now */ 173 r592_write_reg(dev, R592_IO_MODE, R592_IO_MODE_PARALLEL); 174 } 175 176 dev->parallel_mode = parallel_mode; 177 return 0; 178} 179 180/* Perform a controller reset without powering down the card */ 181static void r592_host_reset(struct r592_device *dev) 182{ 183 r592_set_reg_mask(dev, R592_IO, R592_IO_RESET); 184 msleep(100); 185 r592_set_mode(dev, dev->parallel_mode); 186} 187 188#ifdef CONFIG_PM_SLEEP 189/* Disable all hardware interrupts */ 190static void r592_clear_interrupts(struct r592_device *dev) 191{ 192 /* Disable & ACK all interrupts */ 193 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_ACK_MASK); 194 r592_clear_reg_mask(dev, R592_REG_MSC, IRQ_ALL_EN_MASK); 195} 196#endif 197 198/* Tests if there is an CRC error */ 199static int r592_test_io_error(struct r592_device *dev) 200{ 201 if (!(r592_read_reg(dev, R592_STATUS) & 202 (R592_STATUS_SEND_ERR | R592_STATUS_RECV_ERR))) 203 return 0; 204 205 return -EIO; 206} 207 208/* Ensure that FIFO is ready for use */ 209static int r592_test_fifo_empty(struct r592_device *dev) 210{ 211 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) 212 return 0; 213 214 dbg("FIFO not ready, trying to reset the device"); 215 r592_host_reset(dev); 216 217 if (r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_FIFO_EMPTY) 218 return 0; 219 220 message("FIFO still not ready, giving up"); 221 return -EIO; 222} 223 224/* Activates the DMA transfer from to FIFO */ 225static void r592_start_dma(struct r592_device *dev, bool is_write) 226{ 227 unsigned long flags; 228 u32 reg; 229 spin_lock_irqsave(&dev->irq_lock, flags); 230 231 /* Ack interrupts (just in case) + enable them */ 232 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); 233 r592_set_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); 234 235 /* Set DMA address */ 236 r592_write_reg(dev, R592_FIFO_DMA, sg_dma_address(&dev->req->sg)); 237 238 /* Enable the DMA */ 239 reg = r592_read_reg(dev, R592_FIFO_DMA_SETTINGS); 240 reg |= R592_FIFO_DMA_SETTINGS_EN; 241 242 if (!is_write) 243 reg |= R592_FIFO_DMA_SETTINGS_DIR; 244 else 245 reg &= ~R592_FIFO_DMA_SETTINGS_DIR; 246 r592_write_reg(dev, R592_FIFO_DMA_SETTINGS, reg); 247 248 spin_unlock_irqrestore(&dev->irq_lock, flags); 249} 250 251/* Cleanups DMA related settings */ 252static void r592_stop_dma(struct r592_device *dev, int error) 253{ 254 r592_clear_reg_mask(dev, R592_FIFO_DMA_SETTINGS, 255 R592_FIFO_DMA_SETTINGS_EN); 256 257 /* This is only a precation */ 258 r592_write_reg(dev, R592_FIFO_DMA, 259 dev->dummy_dma_page_physical_address); 260 261 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_EN_MASK); 262 r592_clear_reg_mask(dev, R592_REG_MSC, DMA_IRQ_ACK_MASK); 263 dev->dma_error = error; 264} 265 266/* Test if hardware supports DMA */ 267static void r592_check_dma(struct r592_device *dev) 268{ 269 dev->dma_capable = r592_enable_dma && 270 (r592_read_reg(dev, R592_FIFO_DMA_SETTINGS) & 271 R592_FIFO_DMA_SETTINGS_CAP); 272} 273 274/* Transfers fifo contents in/out using DMA */ 275static int r592_transfer_fifo_dma(struct r592_device *dev) 276{ 277 int len, sg_count; 278 bool is_write; 279 280 if (!dev->dma_capable || !dev->req->long_data) 281 return -EINVAL; 282 283 len = dev->req->sg.length; 284 is_write = dev->req->data_dir == WRITE; 285 286 if (len != R592_LFIFO_SIZE) 287 return -EINVAL; 288 289 dbg_verbose("doing dma transfer"); 290 291 dev->dma_error = 0; 292 reinit_completion(&dev->dma_done); 293 294 /* TODO: hidden assumption about nenth beeing always 1 */ 295 sg_count = dma_map_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? 296 DMA_TO_DEVICE : DMA_FROM_DEVICE); 297 298 if (sg_count != 1 || sg_dma_len(&dev->req->sg) < R592_LFIFO_SIZE) { 299 message("problem in dma_map_sg"); 300 return -EIO; 301 } 302 303 r592_start_dma(dev, is_write); 304 305 /* Wait for DMA completion */ 306 if (!wait_for_completion_timeout( 307 &dev->dma_done, msecs_to_jiffies(1000))) { 308 message("DMA timeout"); 309 r592_stop_dma(dev, -ETIMEDOUT); 310 } 311 312 dma_unmap_sg(&dev->pci_dev->dev, &dev->req->sg, 1, is_write ? 313 DMA_TO_DEVICE : DMA_FROM_DEVICE); 314 315 return dev->dma_error; 316} 317 318/* 319 * Writes the FIFO in 4 byte chunks. 320 * If length isn't 4 byte aligned, rest of the data if put to a fifo 321 * to be written later 322 * Use r592_flush_fifo_write to flush that fifo when writing for the 323 * last time 324 */ 325static void r592_write_fifo_pio(struct r592_device *dev, 326 unsigned char *buffer, int len) 327{ 328 /* flush spill from former write */ 329 if (!kfifo_is_empty(&dev->pio_fifo)) { 330 331 u8 tmp[4] = {0}; 332 int copy_len = kfifo_in(&dev->pio_fifo, buffer, len); 333 334 if (!kfifo_is_full(&dev->pio_fifo)) 335 return; 336 len -= copy_len; 337 buffer += copy_len; 338 339 copy_len = kfifo_out(&dev->pio_fifo, tmp, 4); 340 WARN_ON(copy_len != 4); 341 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)tmp); 342 } 343 344 WARN_ON(!kfifo_is_empty(&dev->pio_fifo)); 345 346 /* write full dwords */ 347 while (len >= 4) { 348 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); 349 buffer += 4; 350 len -= 4; 351 } 352 353 /* put remaining bytes to the spill */ 354 if (len) 355 kfifo_in(&dev->pio_fifo, buffer, len); 356} 357 358/* Flushes the temporary FIFO used to make aligned DWORD writes */ 359static void r592_flush_fifo_write(struct r592_device *dev) 360{ 361 int ret; 362 u8 buffer[4] = { 0 }; 363 364 if (kfifo_is_empty(&dev->pio_fifo)) 365 return; 366 367 ret = kfifo_out(&dev->pio_fifo, buffer, 4); 368 /* intentionally ignore __must_check return code */ 369 (void)ret; 370 r592_write_reg_raw_be(dev, R592_FIFO_PIO, *(u32 *)buffer); 371} 372 373/* 374 * Read a fifo in 4 bytes chunks. 375 * If input doesn't fit the buffer, it places bytes of last dword in spill 376 * buffer, so that they don't get lost on last read, just throw these away. 377 */ 378static void r592_read_fifo_pio(struct r592_device *dev, 379 unsigned char *buffer, int len) 380{ 381 u8 tmp[4]; 382 383 /* Read from last spill */ 384 if (!kfifo_is_empty(&dev->pio_fifo)) { 385 int bytes_copied = 386 kfifo_out(&dev->pio_fifo, buffer, min(4, len)); 387 buffer += bytes_copied; 388 len -= bytes_copied; 389 390 if (!kfifo_is_empty(&dev->pio_fifo)) 391 return; 392 } 393 394 /* Reads dwords from FIFO */ 395 while (len >= 4) { 396 *(u32 *)buffer = r592_read_reg_raw_be(dev, R592_FIFO_PIO); 397 buffer += 4; 398 len -= 4; 399 } 400 401 if (len) { 402 *(u32 *)tmp = r592_read_reg_raw_be(dev, R592_FIFO_PIO); 403 kfifo_in(&dev->pio_fifo, tmp, 4); 404 len -= kfifo_out(&dev->pio_fifo, buffer, len); 405 } 406 407 WARN_ON(len); 408 return; 409} 410 411/* Transfers actual data using PIO. */ 412static int r592_transfer_fifo_pio(struct r592_device *dev) 413{ 414 unsigned long flags; 415 416 bool is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; 417 struct sg_mapping_iter miter; 418 419 kfifo_reset(&dev->pio_fifo); 420 421 if (!dev->req->long_data) { 422 if (is_write) { 423 r592_write_fifo_pio(dev, dev->req->data, 424 dev->req->data_len); 425 r592_flush_fifo_write(dev); 426 } else 427 r592_read_fifo_pio(dev, dev->req->data, 428 dev->req->data_len); 429 return 0; 430 } 431 432 local_irq_save(flags); 433 sg_miter_start(&miter, &dev->req->sg, 1, SG_MITER_ATOMIC | 434 (is_write ? SG_MITER_FROM_SG : SG_MITER_TO_SG)); 435 436 /* Do the transfer fifo<->memory*/ 437 while (sg_miter_next(&miter)) 438 if (is_write) 439 r592_write_fifo_pio(dev, miter.addr, miter.length); 440 else 441 r592_read_fifo_pio(dev, miter.addr, miter.length); 442 443 444 /* Write last few non aligned bytes*/ 445 if (is_write) 446 r592_flush_fifo_write(dev); 447 448 sg_miter_stop(&miter); 449 local_irq_restore(flags); 450 return 0; 451} 452 453/* Executes one TPC (data is read/written from small or large fifo) */ 454static void r592_execute_tpc(struct r592_device *dev) 455{ 456 bool is_write; 457 int len, error; 458 u32 status, reg; 459 460 if (!dev->req) { 461 message("BUG: tpc execution without request!"); 462 return; 463 } 464 465 is_write = dev->req->tpc >= MS_TPC_SET_RW_REG_ADRS; 466 len = dev->req->long_data ? 467 dev->req->sg.length : dev->req->data_len; 468 469 /* Ensure that FIFO can hold the input data */ 470 if (len > R592_LFIFO_SIZE) { 471 message("IO: hardware doesn't support TPCs longer that 512"); 472 error = -ENOSYS; 473 goto out; 474 } 475 476 if (!(r592_read_reg(dev, R592_REG_MSC) & R592_REG_MSC_PRSNT)) { 477 dbg("IO: refusing to send TPC because card is absent"); 478 error = -ENODEV; 479 goto out; 480 } 481 482 dbg("IO: executing %s LEN=%d", 483 memstick_debug_get_tpc_name(dev->req->tpc), len); 484 485 /* Set IO direction */ 486 if (is_write) 487 r592_set_reg_mask(dev, R592_IO, R592_IO_DIRECTION); 488 else 489 r592_clear_reg_mask(dev, R592_IO, R592_IO_DIRECTION); 490 491 492 error = r592_test_fifo_empty(dev); 493 if (error) 494 goto out; 495 496 /* Transfer write data */ 497 if (is_write) { 498 error = r592_transfer_fifo_dma(dev); 499 if (error == -EINVAL) 500 error = r592_transfer_fifo_pio(dev); 501 } 502 503 if (error) 504 goto out; 505 506 /* Trigger the TPC */ 507 reg = (len << R592_TPC_EXEC_LEN_SHIFT) | 508 (dev->req->tpc << R592_TPC_EXEC_TPC_SHIFT) | 509 R592_TPC_EXEC_BIG_FIFO; 510 511 r592_write_reg(dev, R592_TPC_EXEC, reg); 512 513 /* Wait for TPC completion */ 514 status = R592_STATUS_RDY; 515 if (dev->req->need_card_int) 516 status |= R592_STATUS_CED; 517 518 error = r592_wait_status(dev, status, status); 519 if (error) { 520 message("card didn't respond"); 521 goto out; 522 } 523 524 /* Test IO errors */ 525 error = r592_test_io_error(dev); 526 if (error) { 527 dbg("IO error"); 528 goto out; 529 } 530 531 /* Read data from FIFO */ 532 if (!is_write) { 533 error = r592_transfer_fifo_dma(dev); 534 if (error == -EINVAL) 535 error = r592_transfer_fifo_pio(dev); 536 } 537 538 /* read INT reg. This can be shortened with shifts, but that way 539 its more readable */ 540 if (dev->parallel_mode && dev->req->need_card_int) { 541 542 dev->req->int_reg = 0; 543 status = r592_read_reg(dev, R592_STATUS); 544 545 if (status & R592_STATUS_P_CMDNACK) 546 dev->req->int_reg |= MEMSTICK_INT_CMDNAK; 547 if (status & R592_STATUS_P_BREQ) 548 dev->req->int_reg |= MEMSTICK_INT_BREQ; 549 if (status & R592_STATUS_P_INTERR) 550 dev->req->int_reg |= MEMSTICK_INT_ERR; 551 if (status & R592_STATUS_P_CED) 552 dev->req->int_reg |= MEMSTICK_INT_CED; 553 } 554 555 if (error) 556 dbg("FIFO read error"); 557out: 558 dev->req->error = error; 559 r592_clear_reg_mask(dev, R592_REG_MSC, R592_REG_MSC_LED); 560 return; 561} 562 563/* Main request processing thread */ 564static int r592_process_thread(void *data) 565{ 566 int error; 567 struct r592_device *dev = (struct r592_device *)data; 568 unsigned long flags; 569 570 while (!kthread_should_stop()) { 571 spin_lock_irqsave(&dev->io_thread_lock, flags); 572 set_current_state(TASK_INTERRUPTIBLE); 573 error = memstick_next_req(dev->host, &dev->req); 574 spin_unlock_irqrestore(&dev->io_thread_lock, flags); 575 576 if (error) { 577 if (error == -ENXIO || error == -EAGAIN) { 578 dbg_verbose("IO: done IO, sleeping"); 579 } else { 580 dbg("IO: unknown error from " 581 "memstick_next_req %d", error); 582 } 583 584 if (kthread_should_stop()) 585 set_current_state(TASK_RUNNING); 586 587 schedule(); 588 } else { 589 set_current_state(TASK_RUNNING); 590 r592_execute_tpc(dev); 591 } 592 } 593 return 0; 594} 595 596/* Reprogram chip to detect change in card state */ 597/* eg, if card is detected, arm it to detect removal, and vice versa */ 598static void r592_update_card_detect(struct r592_device *dev) 599{ 600 u32 reg = r592_read_reg(dev, R592_REG_MSC); 601 bool card_detected = reg & R592_REG_MSC_PRSNT; 602 603 dbg("update card detect. card state: %s", card_detected ? 604 "present" : "absent"); 605 606 reg &= ~((R592_REG_MSC_IRQ_REMOVE | R592_REG_MSC_IRQ_INSERT) << 16); 607 608 if (card_detected) 609 reg |= (R592_REG_MSC_IRQ_REMOVE << 16); 610 else 611 reg |= (R592_REG_MSC_IRQ_INSERT << 16); 612 613 r592_write_reg(dev, R592_REG_MSC, reg); 614} 615 616/* Timer routine that fires 1 second after last card detection event, */ 617static void r592_detect_timer(struct timer_list *t) 618{ 619 struct r592_device *dev = from_timer(dev, t, detect_timer); 620 r592_update_card_detect(dev); 621 memstick_detect_change(dev->host); 622} 623 624/* Interrupt handler */ 625static irqreturn_t r592_irq(int irq, void *data) 626{ 627 struct r592_device *dev = (struct r592_device *)data; 628 irqreturn_t ret = IRQ_NONE; 629 u32 reg; 630 u16 irq_enable, irq_status; 631 unsigned long flags; 632 int error; 633 634 spin_lock_irqsave(&dev->irq_lock, flags); 635 636 reg = r592_read_reg(dev, R592_REG_MSC); 637 irq_enable = reg >> 16; 638 irq_status = reg & 0xFFFF; 639 640 /* Ack the interrupts */ 641 reg &= ~irq_status; 642 r592_write_reg(dev, R592_REG_MSC, reg); 643 644 /* Get the IRQ status minus bits that aren't enabled */ 645 irq_status &= (irq_enable); 646 647 /* Due to limitation of memstick core, we don't look at bits that 648 indicate that card was removed/inserted and/or present */ 649 if (irq_status & (R592_REG_MSC_IRQ_INSERT | R592_REG_MSC_IRQ_REMOVE)) { 650 651 bool card_was_added = irq_status & R592_REG_MSC_IRQ_INSERT; 652 ret = IRQ_HANDLED; 653 654 message("IRQ: card %s", card_was_added ? "added" : "removed"); 655 656 mod_timer(&dev->detect_timer, 657 jiffies + msecs_to_jiffies(card_was_added ? 500 : 50)); 658 } 659 660 if (irq_status & 661 (R592_REG_MSC_FIFO_DMA_DONE | R592_REG_MSC_FIFO_DMA_ERR)) { 662 ret = IRQ_HANDLED; 663 664 if (irq_status & R592_REG_MSC_FIFO_DMA_ERR) { 665 message("IRQ: DMA error"); 666 error = -EIO; 667 } else { 668 dbg_verbose("IRQ: dma done"); 669 error = 0; 670 } 671 672 r592_stop_dma(dev, error); 673 complete(&dev->dma_done); 674 } 675 676 spin_unlock_irqrestore(&dev->irq_lock, flags); 677 return ret; 678} 679 680/* External inteface: set settings */ 681static int r592_set_param(struct memstick_host *host, 682 enum memstick_param param, int value) 683{ 684 struct r592_device *dev = memstick_priv(host); 685 686 switch (param) { 687 case MEMSTICK_POWER: 688 switch (value) { 689 case MEMSTICK_POWER_ON: 690 return r592_enable_device(dev, true); 691 case MEMSTICK_POWER_OFF: 692 return r592_enable_device(dev, false); 693 default: 694 return -EINVAL; 695 } 696 case MEMSTICK_INTERFACE: 697 switch (value) { 698 case MEMSTICK_SERIAL: 699 return r592_set_mode(dev, 0); 700 case MEMSTICK_PAR4: 701 return r592_set_mode(dev, 1); 702 default: 703 return -EINVAL; 704 } 705 default: 706 return -EINVAL; 707 } 708} 709 710/* External interface: submit requests */ 711static void r592_submit_req(struct memstick_host *host) 712{ 713 struct r592_device *dev = memstick_priv(host); 714 unsigned long flags; 715 716 if (dev->req) 717 return; 718 719 spin_lock_irqsave(&dev->io_thread_lock, flags); 720 if (wake_up_process(dev->io_thread)) 721 dbg_verbose("IO thread woken to process requests"); 722 spin_unlock_irqrestore(&dev->io_thread_lock, flags); 723} 724 725static const struct pci_device_id r592_pci_id_tbl[] = { 726 727 { PCI_VDEVICE(RICOH, 0x0592), }, 728 { }, 729}; 730 731/* Main entry */ 732static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) 733{ 734 int error = -ENOMEM; 735 struct memstick_host *host; 736 struct r592_device *dev; 737 738 /* Allocate memory */ 739 host = memstick_alloc_host(sizeof(struct r592_device), &pdev->dev); 740 if (!host) 741 goto error1; 742 743 dev = memstick_priv(host); 744 dev->host = host; 745 dev->pci_dev = pdev; 746 pci_set_drvdata(pdev, dev); 747 748 /* pci initialization */ 749 error = pci_enable_device(pdev); 750 if (error) 751 goto error2; 752 753 pci_set_master(pdev); 754 error = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); 755 if (error) 756 goto error3; 757 758 error = pci_request_regions(pdev, DRV_NAME); 759 if (error) 760 goto error3; 761 762 dev->mmio = pci_ioremap_bar(pdev, 0); 763 if (!dev->mmio) { 764 error = -ENOMEM; 765 goto error4; 766 } 767 768 dev->irq = pdev->irq; 769 spin_lock_init(&dev->irq_lock); 770 spin_lock_init(&dev->io_thread_lock); 771 init_completion(&dev->dma_done); 772 INIT_KFIFO(dev->pio_fifo); 773 timer_setup(&dev->detect_timer, r592_detect_timer, 0); 774 775 /* Host initialization */ 776 host->caps = MEMSTICK_CAP_PAR4; 777 host->request = r592_submit_req; 778 host->set_param = r592_set_param; 779 r592_check_dma(dev); 780 781 dev->io_thread = kthread_run(r592_process_thread, dev, "r592_io"); 782 if (IS_ERR(dev->io_thread)) { 783 error = PTR_ERR(dev->io_thread); 784 goto error5; 785 } 786 787 /* This is just a precation, so don't fail */ 788 dev->dummy_dma_page = dma_alloc_coherent(&pdev->dev, PAGE_SIZE, 789 &dev->dummy_dma_page_physical_address, GFP_KERNEL); 790 r592_stop_dma(dev , 0); 791 792 error = request_irq(dev->irq, &r592_irq, IRQF_SHARED, 793 DRV_NAME, dev); 794 if (error) 795 goto error6; 796 797 r592_update_card_detect(dev); 798 error = memstick_add_host(host); 799 if (error) 800 goto error7; 801 802 message("driver successfully loaded"); 803 return 0; 804error7: 805 free_irq(dev->irq, dev); 806error6: 807 if (dev->dummy_dma_page) 808 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, 809 dev->dummy_dma_page_physical_address); 810 811 kthread_stop(dev->io_thread); 812error5: 813 iounmap(dev->mmio); 814error4: 815 pci_release_regions(pdev); 816error3: 817 pci_disable_device(pdev); 818error2: 819 memstick_free_host(host); 820error1: 821 return error; 822} 823 824static void r592_remove(struct pci_dev *pdev) 825{ 826 int error = 0; 827 struct r592_device *dev = pci_get_drvdata(pdev); 828 829 /* Stop the processing thread. 830 That ensures that we won't take any more requests */ 831 kthread_stop(dev->io_thread); 832 833 r592_enable_device(dev, false); 834 835 while (!error && dev->req) { 836 dev->req->error = -ETIME; 837 error = memstick_next_req(dev->host, &dev->req); 838 } 839 memstick_remove_host(dev->host); 840 841 if (dev->dummy_dma_page) 842 dma_free_coherent(&pdev->dev, PAGE_SIZE, dev->dummy_dma_page, 843 dev->dummy_dma_page_physical_address); 844 845 free_irq(dev->irq, dev); 846 iounmap(dev->mmio); 847 pci_release_regions(pdev); 848 pci_disable_device(pdev); 849 memstick_free_host(dev->host); 850} 851 852#ifdef CONFIG_PM_SLEEP 853static int r592_suspend(struct device *core_dev) 854{ 855 struct r592_device *dev = dev_get_drvdata(core_dev); 856 857 r592_clear_interrupts(dev); 858 memstick_suspend_host(dev->host); 859 del_timer_sync(&dev->detect_timer); 860 return 0; 861} 862 863static int r592_resume(struct device *core_dev) 864{ 865 struct r592_device *dev = dev_get_drvdata(core_dev); 866 867 r592_clear_interrupts(dev); 868 r592_enable_device(dev, false); 869 memstick_resume_host(dev->host); 870 r592_update_card_detect(dev); 871 return 0; 872} 873#endif 874 875static SIMPLE_DEV_PM_OPS(r592_pm_ops, r592_suspend, r592_resume); 876 877MODULE_DEVICE_TABLE(pci, r592_pci_id_tbl); 878 879static struct pci_driver r592_pci_driver = { 880 .name = DRV_NAME, 881 .id_table = r592_pci_id_tbl, 882 .probe = r592_probe, 883 .remove = r592_remove, 884 .driver.pm = &r592_pm_ops, 885}; 886 887module_pci_driver(r592_pci_driver); 888 889module_param_named(enable_dma, r592_enable_dma, bool, S_IRUGO); 890MODULE_PARM_DESC(enable_dma, "Enable usage of the DMA (default)"); 891module_param(debug, int, S_IRUGO | S_IWUSR); 892MODULE_PARM_DESC(debug, "Debug level (0-3)"); 893 894MODULE_LICENSE("GPL"); 895MODULE_AUTHOR("Maxim Levitsky <maximlevitsky@gmail.com>"); 896MODULE_DESCRIPTION("Ricoh R5C592 Memstick/Memstick PRO card reader driver");