sa1100_ir.c 23 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073
  1. /*
  2. * linux/drivers/net/irda/sa1100_ir.c
  3. *
  4. * Copyright (C) 2000-2001 Russell King
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. *
  10. * Infra-red driver for the StrongARM SA1100 embedded microprocessor
  11. *
  12. * Note that we don't have to worry about the SA1111's DMA bugs in here,
  13. * so we use the straight forward dma_map_* functions with a null pointer.
  14. *
  15. * This driver takes one kernel command line parameter, sa1100ir=, with
  16. * the following options:
  17. * max_rate:baudrate - set the maximum baud rate
  18. * power_level:level - set the transmitter power level
  19. * tx_lpm:0|1 - set transmit low power mode
  20. */
  21. #include <linux/module.h>
  22. #include <linux/moduleparam.h>
  23. #include <linux/types.h>
  24. #include <linux/init.h>
  25. #include <linux/errno.h>
  26. #include <linux/netdevice.h>
  27. #include <linux/slab.h>
  28. #include <linux/rtnetlink.h>
  29. #include <linux/interrupt.h>
  30. #include <linux/delay.h>
  31. #include <linux/platform_device.h>
  32. #include <linux/dma-mapping.h>
  33. #include <net/irda/irda.h>
  34. #include <net/irda/wrapper.h>
  35. #include <net/irda/irda_device.h>
  36. #include <mach/dma.h>
  37. #include <mach/hardware.h>
  38. #include <asm/mach/irda.h>
  39. static int power_level = 3;
  40. static int tx_lpm;
  41. static int max_rate = 4000000;
  42. struct sa1100_buf {
  43. struct sk_buff *skb;
  44. dma_addr_t dma;
  45. dma_regs_t *regs;
  46. };
  47. struct sa1100_irda {
  48. unsigned char hscr0;
  49. unsigned char utcr4;
  50. unsigned char power;
  51. unsigned char open;
  52. int speed;
  53. int newspeed;
  54. struct sa1100_buf dma_rx;
  55. struct sa1100_buf dma_tx;
  56. struct device *dev;
  57. struct irda_platform_data *pdata;
  58. struct irlap_cb *irlap;
  59. struct qos_info qos;
  60. iobuff_t tx_buff;
  61. iobuff_t rx_buff;
  62. int (*tx_start)(struct sk_buff *, struct net_device *, struct sa1100_irda *);
  63. irqreturn_t (*irq)(struct net_device *, struct sa1100_irda *);
  64. };
  65. static int sa1100_irda_set_speed(struct sa1100_irda *, int);
  66. #define IS_FIR(si) ((si)->speed >= 4000000)
  67. #define HPSIR_MAX_RXLEN 2047
  68. /*
  69. * Allocate and map the receive buffer, unless it is already allocated.
  70. */
  71. static int sa1100_irda_rx_alloc(struct sa1100_irda *si)
  72. {
  73. if (si->dma_rx.skb)
  74. return 0;
  75. si->dma_rx.skb = alloc_skb(HPSIR_MAX_RXLEN + 1, GFP_ATOMIC);
  76. if (!si->dma_rx.skb) {
  77. printk(KERN_ERR "sa1100_ir: out of memory for RX SKB\n");
  78. return -ENOMEM;
  79. }
  80. /*
  81. * Align any IP headers that may be contained
  82. * within the frame.
  83. */
  84. skb_reserve(si->dma_rx.skb, 1);
  85. si->dma_rx.dma = dma_map_single(si->dev, si->dma_rx.skb->data,
  86. HPSIR_MAX_RXLEN,
  87. DMA_FROM_DEVICE);
  88. if (dma_mapping_error(si->dev, si->dma_rx.dma)) {
  89. dev_kfree_skb_any(si->dma_rx.skb);
  90. return -ENOMEM;
  91. }
  92. return 0;
  93. }
  94. /*
  95. * We want to get here as soon as possible, and get the receiver setup.
  96. * We use the existing buffer.
  97. */
  98. static void sa1100_irda_rx_dma_start(struct sa1100_irda *si)
  99. {
  100. if (!si->dma_rx.skb) {
  101. printk(KERN_ERR "sa1100_ir: rx buffer went missing\n");
  102. return;
  103. }
  104. /*
  105. * First empty receive FIFO
  106. */
  107. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  108. /*
  109. * Enable the DMA, receiver and receive interrupt.
  110. */
  111. sa1100_clear_dma(si->dma_rx.regs);
  112. sa1100_start_dma(si->dma_rx.regs, si->dma_rx.dma, HPSIR_MAX_RXLEN);
  113. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_RXE;
  114. }
  115. static void sa1100_irda_check_speed(struct sa1100_irda *si)
  116. {
  117. if (si->newspeed) {
  118. sa1100_irda_set_speed(si, si->newspeed);
  119. si->newspeed = 0;
  120. }
  121. }
  122. /*
  123. * HP-SIR format support.
  124. */
  125. static int sa1100_irda_sir_tx_start(struct sk_buff *skb, struct net_device *dev,
  126. struct sa1100_irda *si)
  127. {
  128. si->tx_buff.data = si->tx_buff.head;
  129. si->tx_buff.len = async_wrap_skb(skb, si->tx_buff.data,
  130. si->tx_buff.truesize);
  131. /*
  132. * Set the transmit interrupt enable. This will fire off an
  133. * interrupt immediately. Note that we disable the receiver
  134. * so we won't get spurious characters received.
  135. */
  136. Ser2UTCR3 = UTCR3_TIE | UTCR3_TXE;
  137. dev_kfree_skb(skb);
  138. return NETDEV_TX_OK;
  139. }
  140. static irqreturn_t sa1100_irda_sir_irq(struct net_device *dev, struct sa1100_irda *si)
  141. {
  142. int status;
  143. status = Ser2UTSR0;
  144. /*
  145. * Deal with any receive errors first. The bytes in error may be
  146. * the only bytes in the receive FIFO, so we do this first.
  147. */
  148. while (status & UTSR0_EIF) {
  149. int stat, data;
  150. stat = Ser2UTSR1;
  151. data = Ser2UTDR;
  152. if (stat & (UTSR1_FRE | UTSR1_ROR)) {
  153. dev->stats.rx_errors++;
  154. if (stat & UTSR1_FRE)
  155. dev->stats.rx_frame_errors++;
  156. if (stat & UTSR1_ROR)
  157. dev->stats.rx_fifo_errors++;
  158. } else
  159. async_unwrap_char(dev, &dev->stats, &si->rx_buff, data);
  160. status = Ser2UTSR0;
  161. }
  162. /*
  163. * We must clear certain bits.
  164. */
  165. Ser2UTSR0 = status & (UTSR0_RID | UTSR0_RBB | UTSR0_REB);
  166. if (status & UTSR0_RFS) {
  167. /*
  168. * There are at least 4 bytes in the FIFO. Read 3 bytes
  169. * and leave the rest to the block below.
  170. */
  171. async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR);
  172. async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR);
  173. async_unwrap_char(dev, &dev->stats, &si->rx_buff, Ser2UTDR);
  174. }
  175. if (status & (UTSR0_RFS | UTSR0_RID)) {
  176. /*
  177. * Fifo contains more than 1 character.
  178. */
  179. do {
  180. async_unwrap_char(dev, &dev->stats, &si->rx_buff,
  181. Ser2UTDR);
  182. } while (Ser2UTSR1 & UTSR1_RNE);
  183. }
  184. if (status & UTSR0_TFS && si->tx_buff.len) {
  185. /*
  186. * Transmitter FIFO is not full
  187. */
  188. do {
  189. Ser2UTDR = *si->tx_buff.data++;
  190. si->tx_buff.len -= 1;
  191. } while (Ser2UTSR1 & UTSR1_TNF && si->tx_buff.len);
  192. if (si->tx_buff.len == 0) {
  193. dev->stats.tx_packets++;
  194. dev->stats.tx_bytes += si->tx_buff.data -
  195. si->tx_buff.head;
  196. /*
  197. * We need to ensure that the transmitter has
  198. * finished.
  199. */
  200. do
  201. rmb();
  202. while (Ser2UTSR1 & UTSR1_TBY);
  203. /*
  204. * Ok, we've finished transmitting. Now enable
  205. * the receiver. Sometimes we get a receive IRQ
  206. * immediately after a transmit...
  207. */
  208. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  209. Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
  210. sa1100_irda_check_speed(si);
  211. /* I'm hungry! */
  212. netif_wake_queue(dev);
  213. }
  214. }
  215. return IRQ_HANDLED;
  216. }
  217. /*
  218. * FIR format support.
  219. */
  220. static int sa1100_irda_fir_tx_start(struct sk_buff *skb, struct net_device *dev,
  221. struct sa1100_irda *si)
  222. {
  223. int mtt = irda_get_mtt(skb);
  224. si->dma_tx.skb = skb;
  225. si->dma_tx.dma = dma_map_single(si->dev, skb->data, skb->len,
  226. DMA_TO_DEVICE);
  227. if (dma_mapping_error(si->dev, si->dma_tx.dma)) {
  228. si->dma_tx.skb = NULL;
  229. netif_wake_queue(dev);
  230. dev->stats.tx_dropped++;
  231. dev_kfree_skb(skb);
  232. return NETDEV_TX_OK;
  233. }
  234. sa1100_start_dma(si->dma_tx.regs, si->dma_tx.dma, skb->len);
  235. /*
  236. * If we have a mean turn-around time, impose the specified
  237. * specified delay. We could shorten this by timing from
  238. * the point we received the packet.
  239. */
  240. if (mtt)
  241. udelay(mtt);
  242. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP | HSCR0_TXE;
  243. return NETDEV_TX_OK;
  244. }
  245. static void sa1100_irda_fir_error(struct sa1100_irda *si, struct net_device *dev)
  246. {
  247. struct sk_buff *skb = si->dma_rx.skb;
  248. dma_addr_t dma_addr;
  249. unsigned int len, stat, data;
  250. if (!skb) {
  251. printk(KERN_ERR "sa1100_ir: SKB is NULL!\n");
  252. return;
  253. }
  254. /*
  255. * Get the current data position.
  256. */
  257. dma_addr = sa1100_get_dma_pos(si->dma_rx.regs);
  258. len = dma_addr - si->dma_rx.dma;
  259. if (len > HPSIR_MAX_RXLEN)
  260. len = HPSIR_MAX_RXLEN;
  261. dma_unmap_single(si->dev, si->dma_rx.dma, len, DMA_FROM_DEVICE);
  262. do {
  263. /*
  264. * Read Status, and then Data.
  265. */
  266. stat = Ser2HSSR1;
  267. rmb();
  268. data = Ser2HSDR;
  269. if (stat & (HSSR1_CRE | HSSR1_ROR)) {
  270. dev->stats.rx_errors++;
  271. if (stat & HSSR1_CRE)
  272. dev->stats.rx_crc_errors++;
  273. if (stat & HSSR1_ROR)
  274. dev->stats.rx_frame_errors++;
  275. } else
  276. skb->data[len++] = data;
  277. /*
  278. * If we hit the end of frame, there's
  279. * no point in continuing.
  280. */
  281. if (stat & HSSR1_EOF)
  282. break;
  283. } while (Ser2HSSR0 & HSSR0_EIF);
  284. if (stat & HSSR1_EOF) {
  285. si->dma_rx.skb = NULL;
  286. skb_put(skb, len);
  287. skb->dev = dev;
  288. skb_reset_mac_header(skb);
  289. skb->protocol = htons(ETH_P_IRDA);
  290. dev->stats.rx_packets++;
  291. dev->stats.rx_bytes += len;
  292. /*
  293. * Before we pass the buffer up, allocate a new one.
  294. */
  295. sa1100_irda_rx_alloc(si);
  296. netif_rx(skb);
  297. } else {
  298. /*
  299. * Remap the buffer - it was previously mapped, and we
  300. * hope that this succeeds.
  301. */
  302. si->dma_rx.dma = dma_map_single(si->dev, si->dma_rx.skb->data,
  303. HPSIR_MAX_RXLEN,
  304. DMA_FROM_DEVICE);
  305. }
  306. }
  307. /*
  308. * We only have to handle RX events here; transmit events go via the TX
  309. * DMA handler. We disable RX, process, and the restart RX.
  310. */
  311. static irqreturn_t sa1100_irda_fir_irq(struct net_device *dev, struct sa1100_irda *si)
  312. {
  313. /*
  314. * Stop RX DMA
  315. */
  316. sa1100_stop_dma(si->dma_rx.regs);
  317. /*
  318. * Framing error - we throw away the packet completely.
  319. * Clearing RXE flushes the error conditions and data
  320. * from the fifo.
  321. */
  322. if (Ser2HSSR0 & (HSSR0_FRE | HSSR0_RAB)) {
  323. dev->stats.rx_errors++;
  324. if (Ser2HSSR0 & HSSR0_FRE)
  325. dev->stats.rx_frame_errors++;
  326. /*
  327. * Clear out the DMA...
  328. */
  329. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  330. /*
  331. * Clear selected status bits now, so we
  332. * don't miss them next time around.
  333. */
  334. Ser2HSSR0 = HSSR0_FRE | HSSR0_RAB;
  335. }
  336. /*
  337. * Deal with any receive errors. The any of the lowest
  338. * 8 bytes in the FIFO may contain an error. We must read
  339. * them one by one. The "error" could even be the end of
  340. * packet!
  341. */
  342. if (Ser2HSSR0 & HSSR0_EIF)
  343. sa1100_irda_fir_error(si, dev);
  344. /*
  345. * No matter what happens, we must restart reception.
  346. */
  347. sa1100_irda_rx_dma_start(si);
  348. return IRQ_HANDLED;
  349. }
  350. /*
  351. * Set the IrDA communications speed.
  352. */
  353. static int sa1100_irda_set_speed(struct sa1100_irda *si, int speed)
  354. {
  355. unsigned long flags;
  356. int brd, ret = -EINVAL;
  357. switch (speed) {
  358. case 9600: case 19200: case 38400:
  359. case 57600: case 115200:
  360. brd = 3686400 / (16 * speed) - 1;
  361. /*
  362. * Stop the receive DMA.
  363. */
  364. if (IS_FIR(si))
  365. sa1100_stop_dma(si->dma_rx.regs);
  366. local_irq_save(flags);
  367. Ser2UTCR3 = 0;
  368. Ser2HSCR0 = HSCR0_UART;
  369. Ser2UTCR1 = brd >> 8;
  370. Ser2UTCR2 = brd;
  371. /*
  372. * Clear status register
  373. */
  374. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  375. Ser2UTCR3 = UTCR3_RIE | UTCR3_RXE | UTCR3_TXE;
  376. if (si->pdata->set_speed)
  377. si->pdata->set_speed(si->dev, speed);
  378. si->speed = speed;
  379. si->tx_start = sa1100_irda_sir_tx_start;
  380. si->irq = sa1100_irda_sir_irq;
  381. local_irq_restore(flags);
  382. ret = 0;
  383. break;
  384. case 4000000:
  385. local_irq_save(flags);
  386. si->hscr0 = 0;
  387. Ser2HSSR0 = 0xff;
  388. Ser2HSCR0 = si->hscr0 | HSCR0_HSSP;
  389. Ser2UTCR3 = 0;
  390. si->speed = speed;
  391. si->tx_start = sa1100_irda_fir_tx_start;
  392. si->irq = sa1100_irda_fir_irq;
  393. if (si->pdata->set_speed)
  394. si->pdata->set_speed(si->dev, speed);
  395. sa1100_irda_rx_alloc(si);
  396. sa1100_irda_rx_dma_start(si);
  397. local_irq_restore(flags);
  398. break;
  399. default:
  400. break;
  401. }
  402. return ret;
  403. }
  404. /*
  405. * Control the power state of the IrDA transmitter.
  406. * State:
  407. * 0 - off
  408. * 1 - short range, lowest power
  409. * 2 - medium range, medium power
  410. * 3 - maximum range, high power
  411. *
  412. * Currently, only assabet is known to support this.
  413. */
  414. static int
  415. __sa1100_irda_set_power(struct sa1100_irda *si, unsigned int state)
  416. {
  417. int ret = 0;
  418. if (si->pdata->set_power)
  419. ret = si->pdata->set_power(si->dev, state);
  420. return ret;
  421. }
  422. static inline int
  423. sa1100_set_power(struct sa1100_irda *si, unsigned int state)
  424. {
  425. int ret;
  426. ret = __sa1100_irda_set_power(si, state);
  427. if (ret == 0)
  428. si->power = state;
  429. return ret;
  430. }
  431. static irqreturn_t sa1100_irda_irq(int irq, void *dev_id)
  432. {
  433. struct net_device *dev = dev_id;
  434. struct sa1100_irda *si = netdev_priv(dev);
  435. return si->irq(dev, si);
  436. }
  437. /*
  438. * TX DMA completion handler.
  439. */
  440. static void sa1100_irda_txdma_irq(void *id)
  441. {
  442. struct net_device *dev = id;
  443. struct sa1100_irda *si = netdev_priv(dev);
  444. struct sk_buff *skb;
  445. /*
  446. * Wait for the transmission to complete. Unfortunately,
  447. * the hardware doesn't give us an interrupt to indicate
  448. * "end of frame".
  449. */
  450. do
  451. rmb();
  452. while (!(Ser2HSSR0 & HSSR0_TUR) || Ser2HSSR1 & HSSR1_TBY);
  453. /*
  454. * Clear the transmit underrun bit.
  455. */
  456. Ser2HSSR0 = HSSR0_TUR;
  457. /*
  458. * Do we need to change speed? Note that we're lazy
  459. * here - we don't free the old dma_rx.skb. We don't need
  460. * to allocate a buffer either.
  461. */
  462. sa1100_irda_check_speed(si);
  463. /*
  464. * Start reception. This disables the transmitter for
  465. * us. This will be using the existing RX buffer.
  466. */
  467. sa1100_irda_rx_dma_start(si);
  468. /* Account and free the packet. */
  469. skb = si->dma_tx.skb;
  470. if (skb) {
  471. dma_unmap_single(si->dev, si->dma_tx.dma, skb->len,
  472. DMA_TO_DEVICE);
  473. dev->stats.tx_packets ++;
  474. dev->stats.tx_bytes += skb->len;
  475. dev_kfree_skb_irq(skb);
  476. si->dma_tx.skb = NULL;
  477. }
  478. /*
  479. * Make sure that the TX queue is available for sending
  480. * (for retries). TX has priority over RX at all times.
  481. */
  482. netif_wake_queue(dev);
  483. }
  484. static int sa1100_irda_hard_xmit(struct sk_buff *skb, struct net_device *dev)
  485. {
  486. struct sa1100_irda *si = netdev_priv(dev);
  487. int speed = irda_get_next_speed(skb);
  488. /*
  489. * Does this packet contain a request to change the interface
  490. * speed? If so, remember it until we complete the transmission
  491. * of this frame.
  492. */
  493. if (speed != si->speed && speed != -1)
  494. si->newspeed = speed;
  495. /* If this is an empty frame, we can bypass a lot. */
  496. if (skb->len == 0) {
  497. sa1100_irda_check_speed(si);
  498. dev_kfree_skb(skb);
  499. return NETDEV_TX_OK;
  500. }
  501. netif_stop_queue(dev);
  502. /* We must not already have a skb to transmit... */
  503. BUG_ON(si->dma_tx.skb);
  504. return si->tx_start(skb, dev, si);
  505. }
  506. static int
  507. sa1100_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
  508. {
  509. struct if_irda_req *rq = (struct if_irda_req *)ifreq;
  510. struct sa1100_irda *si = netdev_priv(dev);
  511. int ret = -EOPNOTSUPP;
  512. switch (cmd) {
  513. case SIOCSBANDWIDTH:
  514. if (capable(CAP_NET_ADMIN)) {
  515. /*
  516. * We are unable to set the speed if the
  517. * device is not running.
  518. */
  519. if (si->open) {
  520. ret = sa1100_irda_set_speed(si,
  521. rq->ifr_baudrate);
  522. } else {
  523. printk("sa1100_irda_ioctl: SIOCSBANDWIDTH: !netif_running\n");
  524. ret = 0;
  525. }
  526. }
  527. break;
  528. case SIOCSMEDIABUSY:
  529. ret = -EPERM;
  530. if (capable(CAP_NET_ADMIN)) {
  531. irda_device_set_media_busy(dev, TRUE);
  532. ret = 0;
  533. }
  534. break;
  535. case SIOCGRECEIVING:
  536. rq->ifr_receiving = IS_FIR(si) ? 0
  537. : si->rx_buff.state != OUTSIDE_FRAME;
  538. break;
  539. default:
  540. break;
  541. }
  542. return ret;
  543. }
  544. static int sa1100_irda_startup(struct sa1100_irda *si)
  545. {
  546. int ret;
  547. /*
  548. * Ensure that the ports for this device are setup correctly.
  549. */
  550. if (si->pdata->startup) {
  551. ret = si->pdata->startup(si->dev);
  552. if (ret)
  553. return ret;
  554. }
  555. /*
  556. * Configure PPC for IRDA - we want to drive TXD2 low.
  557. * We also want to drive this pin low during sleep.
  558. */
  559. PPSR &= ~PPC_TXD2;
  560. PSDR &= ~PPC_TXD2;
  561. PPDR |= PPC_TXD2;
  562. /*
  563. * Enable HP-SIR modulation, and ensure that the port is disabled.
  564. */
  565. Ser2UTCR3 = 0;
  566. Ser2HSCR0 = HSCR0_UART;
  567. Ser2UTCR4 = si->utcr4;
  568. Ser2UTCR0 = UTCR0_8BitData;
  569. Ser2HSCR2 = HSCR2_TrDataH | HSCR2_RcDataL;
  570. /*
  571. * Clear status register
  572. */
  573. Ser2UTSR0 = UTSR0_REB | UTSR0_RBB | UTSR0_RID;
  574. ret = sa1100_irda_set_speed(si, si->speed = 9600);
  575. if (ret) {
  576. Ser2UTCR3 = 0;
  577. Ser2HSCR0 = 0;
  578. if (si->pdata->shutdown)
  579. si->pdata->shutdown(si->dev);
  580. }
  581. return ret;
  582. }
  583. static void sa1100_irda_shutdown(struct sa1100_irda *si)
  584. {
  585. /*
  586. * Stop all DMA activity.
  587. */
  588. sa1100_stop_dma(si->dma_rx.regs);
  589. sa1100_stop_dma(si->dma_tx.regs);
  590. /* Disable the port. */
  591. Ser2UTCR3 = 0;
  592. Ser2HSCR0 = 0;
  593. if (si->pdata->shutdown)
  594. si->pdata->shutdown(si->dev);
  595. }
  596. static int sa1100_irda_start(struct net_device *dev)
  597. {
  598. struct sa1100_irda *si = netdev_priv(dev);
  599. int err;
  600. si->speed = 9600;
  601. err = sa1100_request_dma(DMA_Ser2HSSPRd, "IrDA receive",
  602. NULL, NULL, &si->dma_rx.regs);
  603. if (err)
  604. goto err_rx_dma;
  605. err = sa1100_request_dma(DMA_Ser2HSSPWr, "IrDA transmit",
  606. sa1100_irda_txdma_irq, dev, &si->dma_tx.regs);
  607. if (err)
  608. goto err_tx_dma;
  609. /*
  610. * Setup the serial port for the specified speed.
  611. */
  612. err = sa1100_irda_startup(si);
  613. if (err)
  614. goto err_startup;
  615. /*
  616. * Open a new IrLAP layer instance.
  617. */
  618. si->irlap = irlap_open(dev, &si->qos, "sa1100");
  619. err = -ENOMEM;
  620. if (!si->irlap)
  621. goto err_irlap;
  622. err = request_irq(dev->irq, sa1100_irda_irq, 0, dev->name, dev);
  623. if (err)
  624. goto err_irq;
  625. /*
  626. * Now enable the interrupt and start the queue
  627. */
  628. si->open = 1;
  629. sa1100_set_power(si, power_level); /* low power mode */
  630. netif_start_queue(dev);
  631. return 0;
  632. err_irq:
  633. irlap_close(si->irlap);
  634. err_irlap:
  635. si->open = 0;
  636. sa1100_irda_shutdown(si);
  637. err_startup:
  638. sa1100_free_dma(si->dma_tx.regs);
  639. err_tx_dma:
  640. sa1100_free_dma(si->dma_rx.regs);
  641. err_rx_dma:
  642. return err;
  643. }
  644. static int sa1100_irda_stop(struct net_device *dev)
  645. {
  646. struct sa1100_irda *si = netdev_priv(dev);
  647. struct sk_buff *skb;
  648. netif_stop_queue(dev);
  649. si->open = 0;
  650. sa1100_irda_shutdown(si);
  651. /*
  652. * If we have been doing any DMA activity, make sure we
  653. * tidy that up cleanly.
  654. */
  655. skb = si->dma_rx.skb;
  656. if (skb) {
  657. dma_unmap_single(si->dev, si->dma_rx.dma, HPSIR_MAX_RXLEN,
  658. DMA_FROM_DEVICE);
  659. dev_kfree_skb(skb);
  660. si->dma_rx.skb = NULL;
  661. }
  662. skb = si->dma_tx.skb;
  663. if (skb) {
  664. dma_unmap_single(si->dev, si->dma_tx.dma, skb->len,
  665. DMA_TO_DEVICE);
  666. dev_kfree_skb(skb);
  667. si->dma_tx.skb = NULL;
  668. }
  669. /* Stop IrLAP */
  670. if (si->irlap) {
  671. irlap_close(si->irlap);
  672. si->irlap = NULL;
  673. }
  674. /*
  675. * Free resources
  676. */
  677. sa1100_free_dma(si->dma_tx.regs);
  678. sa1100_free_dma(si->dma_rx.regs);
  679. free_irq(dev->irq, dev);
  680. sa1100_set_power(si, 0);
  681. return 0;
  682. }
  683. static int sa1100_irda_init_iobuf(iobuff_t *io, int size)
  684. {
  685. io->head = kmalloc(size, GFP_KERNEL | GFP_DMA);
  686. if (io->head != NULL) {
  687. io->truesize = size;
  688. io->in_frame = FALSE;
  689. io->state = OUTSIDE_FRAME;
  690. io->data = io->head;
  691. }
  692. return io->head ? 0 : -ENOMEM;
  693. }
  694. static const struct net_device_ops sa1100_irda_netdev_ops = {
  695. .ndo_open = sa1100_irda_start,
  696. .ndo_stop = sa1100_irda_stop,
  697. .ndo_start_xmit = sa1100_irda_hard_xmit,
  698. .ndo_do_ioctl = sa1100_irda_ioctl,
  699. };
  700. static int sa1100_irda_probe(struct platform_device *pdev)
  701. {
  702. struct net_device *dev;
  703. struct sa1100_irda *si;
  704. unsigned int baudrate_mask;
  705. int err, irq;
  706. if (!pdev->dev.platform_data)
  707. return -EINVAL;
  708. irq = platform_get_irq(pdev, 0);
  709. if (irq <= 0)
  710. return irq < 0 ? irq : -ENXIO;
  711. err = request_mem_region(__PREG(Ser2UTCR0), 0x24, "IrDA") ? 0 : -EBUSY;
  712. if (err)
  713. goto err_mem_1;
  714. err = request_mem_region(__PREG(Ser2HSCR0), 0x1c, "IrDA") ? 0 : -EBUSY;
  715. if (err)
  716. goto err_mem_2;
  717. err = request_mem_region(__PREG(Ser2HSCR2), 0x04, "IrDA") ? 0 : -EBUSY;
  718. if (err)
  719. goto err_mem_3;
  720. dev = alloc_irdadev(sizeof(struct sa1100_irda));
  721. if (!dev)
  722. goto err_mem_4;
  723. SET_NETDEV_DEV(dev, &pdev->dev);
  724. si = netdev_priv(dev);
  725. si->dev = &pdev->dev;
  726. si->pdata = pdev->dev.platform_data;
  727. /*
  728. * Initialise the HP-SIR buffers
  729. */
  730. err = sa1100_irda_init_iobuf(&si->rx_buff, 14384);
  731. if (err)
  732. goto err_mem_5;
  733. err = sa1100_irda_init_iobuf(&si->tx_buff, 4000);
  734. if (err)
  735. goto err_mem_5;
  736. dev->netdev_ops = &sa1100_irda_netdev_ops;
  737. dev->irq = irq;
  738. irda_init_max_qos_capabilies(&si->qos);
  739. /*
  740. * We support original IRDA up to 115k2. (we don't currently
  741. * support 4Mbps). Min Turn Time set to 1ms or greater.
  742. */
  743. baudrate_mask = IR_9600;
  744. switch (max_rate) {
  745. case 4000000: baudrate_mask |= IR_4000000 << 8;
  746. case 115200: baudrate_mask |= IR_115200;
  747. case 57600: baudrate_mask |= IR_57600;
  748. case 38400: baudrate_mask |= IR_38400;
  749. case 19200: baudrate_mask |= IR_19200;
  750. }
  751. si->qos.baud_rate.bits &= baudrate_mask;
  752. si->qos.min_turn_time.bits = 7;
  753. irda_qos_bits_to_value(&si->qos);
  754. si->utcr4 = UTCR4_HPSIR;
  755. if (tx_lpm)
  756. si->utcr4 |= UTCR4_Z1_6us;
  757. /*
  758. * Initially enable HP-SIR modulation, and ensure that the port
  759. * is disabled.
  760. */
  761. Ser2UTCR3 = 0;
  762. Ser2UTCR4 = si->utcr4;
  763. Ser2HSCR0 = HSCR0_UART;
  764. err = register_netdev(dev);
  765. if (err == 0)
  766. platform_set_drvdata(pdev, dev);
  767. if (err) {
  768. err_mem_5:
  769. kfree(si->tx_buff.head);
  770. kfree(si->rx_buff.head);
  771. free_netdev(dev);
  772. err_mem_4:
  773. release_mem_region(__PREG(Ser2HSCR2), 0x04);
  774. err_mem_3:
  775. release_mem_region(__PREG(Ser2HSCR0), 0x1c);
  776. err_mem_2:
  777. release_mem_region(__PREG(Ser2UTCR0), 0x24);
  778. }
  779. err_mem_1:
  780. return err;
  781. }
  782. static int sa1100_irda_remove(struct platform_device *pdev)
  783. {
  784. struct net_device *dev = platform_get_drvdata(pdev);
  785. if (dev) {
  786. struct sa1100_irda *si = netdev_priv(dev);
  787. unregister_netdev(dev);
  788. kfree(si->tx_buff.head);
  789. kfree(si->rx_buff.head);
  790. free_netdev(dev);
  791. }
  792. release_mem_region(__PREG(Ser2HSCR2), 0x04);
  793. release_mem_region(__PREG(Ser2HSCR0), 0x1c);
  794. release_mem_region(__PREG(Ser2UTCR0), 0x24);
  795. return 0;
  796. }
  797. #ifdef CONFIG_PM
  798. /*
  799. * Suspend the IrDA interface.
  800. */
  801. static int sa1100_irda_suspend(struct platform_device *pdev, pm_message_t state)
  802. {
  803. struct net_device *dev = platform_get_drvdata(pdev);
  804. struct sa1100_irda *si;
  805. if (!dev)
  806. return 0;
  807. si = netdev_priv(dev);
  808. if (si->open) {
  809. /*
  810. * Stop the transmit queue
  811. */
  812. netif_device_detach(dev);
  813. disable_irq(dev->irq);
  814. sa1100_irda_shutdown(si);
  815. __sa1100_irda_set_power(si, 0);
  816. }
  817. return 0;
  818. }
  819. /*
  820. * Resume the IrDA interface.
  821. */
  822. static int sa1100_irda_resume(struct platform_device *pdev)
  823. {
  824. struct net_device *dev = platform_get_drvdata(pdev);
  825. struct sa1100_irda *si;
  826. if (!dev)
  827. return 0;
  828. si = netdev_priv(dev);
  829. if (si->open) {
  830. /*
  831. * If we missed a speed change, initialise at the new speed
  832. * directly. It is debatable whether this is actually
  833. * required, but in the interests of continuing from where
  834. * we left off it is desirable. The converse argument is
  835. * that we should re-negotiate at 9600 baud again.
  836. */
  837. if (si->newspeed) {
  838. si->speed = si->newspeed;
  839. si->newspeed = 0;
  840. }
  841. sa1100_irda_startup(si);
  842. __sa1100_irda_set_power(si, si->power);
  843. enable_irq(dev->irq);
  844. /*
  845. * This automatically wakes up the queue
  846. */
  847. netif_device_attach(dev);
  848. }
  849. return 0;
  850. }
  851. #else
  852. #define sa1100_irda_suspend NULL
  853. #define sa1100_irda_resume NULL
  854. #endif
  855. static struct platform_driver sa1100ir_driver = {
  856. .probe = sa1100_irda_probe,
  857. .remove = sa1100_irda_remove,
  858. .suspend = sa1100_irda_suspend,
  859. .resume = sa1100_irda_resume,
  860. .driver = {
  861. .name = "sa11x0-ir",
  862. .owner = THIS_MODULE,
  863. },
  864. };
  865. static int __init sa1100_irda_init(void)
  866. {
  867. /*
  868. * Limit power level a sensible range.
  869. */
  870. if (power_level < 1)
  871. power_level = 1;
  872. if (power_level > 3)
  873. power_level = 3;
  874. return platform_driver_register(&sa1100ir_driver);
  875. }
  876. static void __exit sa1100_irda_exit(void)
  877. {
  878. platform_driver_unregister(&sa1100ir_driver);
  879. }
  880. module_init(sa1100_irda_init);
  881. module_exit(sa1100_irda_exit);
  882. module_param(power_level, int, 0);
  883. module_param(tx_lpm, int, 0);
  884. module_param(max_rate, int, 0);
  885. MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
  886. MODULE_DESCRIPTION("StrongARM SA1100 IrDA driver");
  887. MODULE_LICENSE("GPL");
  888. MODULE_PARM_DESC(power_level, "IrDA power level, 1 (low) to 3 (high)");
  889. MODULE_PARM_DESC(tx_lpm, "Enable transmitter low power (1.6us) mode");
  890. MODULE_PARM_DESC(max_rate, "Maximum baud rate (4000000, 115200, 57600, 38400, 19200, 9600)");
  891. MODULE_ALIAS("platform:sa11x0-ir");