r592.c 21 KB

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