r592.c 22 KB

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