mcp251x.c 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211
  1. /*
  2. * CAN bus driver for Microchip 251x CAN Controller with SPI Interface
  3. *
  4. * MCP2510 support and bug fixes by Christian Pellegrin
  5. * <chripell@evolware.org>
  6. *
  7. * Copyright 2009 Christian Pellegrin EVOL S.r.l.
  8. *
  9. * Copyright 2007 Raymarine UK, Ltd. All Rights Reserved.
  10. * Written under contract by:
  11. * Chris Elston, Katalix Systems, Ltd.
  12. *
  13. * Based on Microchip MCP251x CAN controller driver written by
  14. * David Vrabel, Copyright 2006 Arcom Control Systems Ltd.
  15. *
  16. * Based on CAN bus driver for the CCAN controller written by
  17. * - Sascha Hauer, Marc Kleine-Budde, Pengutronix
  18. * - Simon Kallweit, intefo AG
  19. * Copyright 2007
  20. *
  21. * This program is free software; you can redistribute it and/or modify
  22. * it under the terms of the version 2 of the GNU General Public License
  23. * as published by the Free Software Foundation
  24. *
  25. * This program is distributed in the hope that it will be useful,
  26. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  27. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  28. * GNU General Public License for more details.
  29. *
  30. * You should have received a copy of the GNU General Public License
  31. * along with this program; if not, write to the Free Software
  32. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  33. *
  34. *
  35. *
  36. * Your platform definition file should specify something like:
  37. *
  38. * static struct mcp251x_platform_data mcp251x_info = {
  39. * .oscillator_frequency = 8000000,
  40. * .board_specific_setup = &mcp251x_setup,
  41. * .power_enable = mcp251x_power_enable,
  42. * .transceiver_enable = NULL,
  43. * };
  44. *
  45. * static struct spi_board_info spi_board_info[] = {
  46. * {
  47. * .modalias = "mcp2510",
  48. * // or "mcp2515" depending on your controller
  49. * .platform_data = &mcp251x_info,
  50. * .irq = IRQ_EINT13,
  51. * .max_speed_hz = 2*1000*1000,
  52. * .chip_select = 2,
  53. * },
  54. * };
  55. *
  56. * Please see mcp251x.h for a description of the fields in
  57. * struct mcp251x_platform_data.
  58. *
  59. */
  60. #include <linux/can/core.h>
  61. #include <linux/can/dev.h>
  62. #include <linux/can/platform/mcp251x.h>
  63. #include <linux/completion.h>
  64. #include <linux/delay.h>
  65. #include <linux/device.h>
  66. #include <linux/dma-mapping.h>
  67. #include <linux/freezer.h>
  68. #include <linux/interrupt.h>
  69. #include <linux/io.h>
  70. #include <linux/kernel.h>
  71. #include <linux/module.h>
  72. #include <linux/netdevice.h>
  73. #include <linux/platform_device.h>
  74. #include <linux/slab.h>
  75. #include <linux/spi/spi.h>
  76. #include <linux/uaccess.h>
  77. /* SPI interface instruction set */
  78. #define INSTRUCTION_WRITE 0x02
  79. #define INSTRUCTION_READ 0x03
  80. #define INSTRUCTION_BIT_MODIFY 0x05
  81. #define INSTRUCTION_LOAD_TXB(n) (0x40 + 2 * (n))
  82. #define INSTRUCTION_READ_RXB(n) (((n) == 0) ? 0x90 : 0x94)
  83. #define INSTRUCTION_RESET 0xC0
  84. /* MPC251x registers */
  85. #define CANSTAT 0x0e
  86. #define CANCTRL 0x0f
  87. # define CANCTRL_REQOP_MASK 0xe0
  88. # define CANCTRL_REQOP_CONF 0x80
  89. # define CANCTRL_REQOP_LISTEN_ONLY 0x60
  90. # define CANCTRL_REQOP_LOOPBACK 0x40
  91. # define CANCTRL_REQOP_SLEEP 0x20
  92. # define CANCTRL_REQOP_NORMAL 0x00
  93. # define CANCTRL_OSM 0x08
  94. # define CANCTRL_ABAT 0x10
  95. #define TEC 0x1c
  96. #define REC 0x1d
  97. #define CNF1 0x2a
  98. # define CNF1_SJW_SHIFT 6
  99. #define CNF2 0x29
  100. # define CNF2_BTLMODE 0x80
  101. # define CNF2_SAM 0x40
  102. # define CNF2_PS1_SHIFT 3
  103. #define CNF3 0x28
  104. # define CNF3_SOF 0x08
  105. # define CNF3_WAKFIL 0x04
  106. # define CNF3_PHSEG2_MASK 0x07
  107. #define CANINTE 0x2b
  108. # define CANINTE_MERRE 0x80
  109. # define CANINTE_WAKIE 0x40
  110. # define CANINTE_ERRIE 0x20
  111. # define CANINTE_TX2IE 0x10
  112. # define CANINTE_TX1IE 0x08
  113. # define CANINTE_TX0IE 0x04
  114. # define CANINTE_RX1IE 0x02
  115. # define CANINTE_RX0IE 0x01
  116. #define CANINTF 0x2c
  117. # define CANINTF_MERRF 0x80
  118. # define CANINTF_WAKIF 0x40
  119. # define CANINTF_ERRIF 0x20
  120. # define CANINTF_TX2IF 0x10
  121. # define CANINTF_TX1IF 0x08
  122. # define CANINTF_TX0IF 0x04
  123. # define CANINTF_RX1IF 0x02
  124. # define CANINTF_RX0IF 0x01
  125. # define CANINTF_RX (CANINTF_RX0IF | CANINTF_RX1IF)
  126. # define CANINTF_TX (CANINTF_TX2IF | CANINTF_TX1IF | CANINTF_TX0IF)
  127. # define CANINTF_ERR (CANINTF_ERRIF)
  128. #define EFLG 0x2d
  129. # define EFLG_EWARN 0x01
  130. # define EFLG_RXWAR 0x02
  131. # define EFLG_TXWAR 0x04
  132. # define EFLG_RXEP 0x08
  133. # define EFLG_TXEP 0x10
  134. # define EFLG_TXBO 0x20
  135. # define EFLG_RX0OVR 0x40
  136. # define EFLG_RX1OVR 0x80
  137. #define TXBCTRL(n) (((n) * 0x10) + 0x30 + TXBCTRL_OFF)
  138. # define TXBCTRL_ABTF 0x40
  139. # define TXBCTRL_MLOA 0x20
  140. # define TXBCTRL_TXERR 0x10
  141. # define TXBCTRL_TXREQ 0x08
  142. #define TXBSIDH(n) (((n) * 0x10) + 0x30 + TXBSIDH_OFF)
  143. # define SIDH_SHIFT 3
  144. #define TXBSIDL(n) (((n) * 0x10) + 0x30 + TXBSIDL_OFF)
  145. # define SIDL_SID_MASK 7
  146. # define SIDL_SID_SHIFT 5
  147. # define SIDL_EXIDE_SHIFT 3
  148. # define SIDL_EID_SHIFT 16
  149. # define SIDL_EID_MASK 3
  150. #define TXBEID8(n) (((n) * 0x10) + 0x30 + TXBEID8_OFF)
  151. #define TXBEID0(n) (((n) * 0x10) + 0x30 + TXBEID0_OFF)
  152. #define TXBDLC(n) (((n) * 0x10) + 0x30 + TXBDLC_OFF)
  153. # define DLC_RTR_SHIFT 6
  154. #define TXBCTRL_OFF 0
  155. #define TXBSIDH_OFF 1
  156. #define TXBSIDL_OFF 2
  157. #define TXBEID8_OFF 3
  158. #define TXBEID0_OFF 4
  159. #define TXBDLC_OFF 5
  160. #define TXBDAT_OFF 6
  161. #define RXBCTRL(n) (((n) * 0x10) + 0x60 + RXBCTRL_OFF)
  162. # define RXBCTRL_BUKT 0x04
  163. # define RXBCTRL_RXM0 0x20
  164. # define RXBCTRL_RXM1 0x40
  165. #define RXBSIDH(n) (((n) * 0x10) + 0x60 + RXBSIDH_OFF)
  166. # define RXBSIDH_SHIFT 3
  167. #define RXBSIDL(n) (((n) * 0x10) + 0x60 + RXBSIDL_OFF)
  168. # define RXBSIDL_IDE 0x08
  169. # define RXBSIDL_EID 3
  170. # define RXBSIDL_SHIFT 5
  171. #define RXBEID8(n) (((n) * 0x10) + 0x60 + RXBEID8_OFF)
  172. #define RXBEID0(n) (((n) * 0x10) + 0x60 + RXBEID0_OFF)
  173. #define RXBDLC(n) (((n) * 0x10) + 0x60 + RXBDLC_OFF)
  174. # define RXBDLC_LEN_MASK 0x0f
  175. # define RXBDLC_RTR 0x40
  176. #define RXBCTRL_OFF 0
  177. #define RXBSIDH_OFF 1
  178. #define RXBSIDL_OFF 2
  179. #define RXBEID8_OFF 3
  180. #define RXBEID0_OFF 4
  181. #define RXBDLC_OFF 5
  182. #define RXBDAT_OFF 6
  183. #define RXFSIDH(n) ((n) * 4)
  184. #define RXFSIDL(n) ((n) * 4 + 1)
  185. #define RXFEID8(n) ((n) * 4 + 2)
  186. #define RXFEID0(n) ((n) * 4 + 3)
  187. #define RXMSIDH(n) ((n) * 4 + 0x20)
  188. #define RXMSIDL(n) ((n) * 4 + 0x21)
  189. #define RXMEID8(n) ((n) * 4 + 0x22)
  190. #define RXMEID0(n) ((n) * 4 + 0x23)
  191. #define GET_BYTE(val, byte) \
  192. (((val) >> ((byte) * 8)) & 0xff)
  193. #define SET_BYTE(val, byte) \
  194. (((val) & 0xff) << ((byte) * 8))
  195. /*
  196. * Buffer size required for the largest SPI transfer (i.e., reading a
  197. * frame)
  198. */
  199. #define CAN_FRAME_MAX_DATA_LEN 8
  200. #define SPI_TRANSFER_BUF_LEN (6 + CAN_FRAME_MAX_DATA_LEN)
  201. #define CAN_FRAME_MAX_BITS 128
  202. #define TX_ECHO_SKB_MAX 1
  203. #define DEVICE_NAME "mcp251x"
  204. static int mcp251x_enable_dma; /* Enable SPI DMA. Default: 0 (Off) */
  205. module_param(mcp251x_enable_dma, int, S_IRUGO);
  206. MODULE_PARM_DESC(mcp251x_enable_dma, "Enable SPI DMA. Default: 0 (Off)");
  207. static struct can_bittiming_const mcp251x_bittiming_const = {
  208. .name = DEVICE_NAME,
  209. .tseg1_min = 3,
  210. .tseg1_max = 16,
  211. .tseg2_min = 2,
  212. .tseg2_max = 8,
  213. .sjw_max = 4,
  214. .brp_min = 1,
  215. .brp_max = 64,
  216. .brp_inc = 1,
  217. };
  218. enum mcp251x_model {
  219. CAN_MCP251X_MCP2510 = 0x2510,
  220. CAN_MCP251X_MCP2515 = 0x2515,
  221. };
  222. struct mcp251x_priv {
  223. struct can_priv can;
  224. struct net_device *net;
  225. struct spi_device *spi;
  226. enum mcp251x_model model;
  227. struct mutex mcp_lock; /* SPI device lock */
  228. u8 *spi_tx_buf;
  229. u8 *spi_rx_buf;
  230. dma_addr_t spi_tx_dma;
  231. dma_addr_t spi_rx_dma;
  232. struct sk_buff *tx_skb;
  233. int tx_len;
  234. struct workqueue_struct *wq;
  235. struct work_struct tx_work;
  236. struct work_struct restart_work;
  237. int force_quit;
  238. int after_suspend;
  239. #define AFTER_SUSPEND_UP 1
  240. #define AFTER_SUSPEND_DOWN 2
  241. #define AFTER_SUSPEND_POWER 4
  242. #define AFTER_SUSPEND_RESTART 8
  243. int restart_tx;
  244. };
  245. #define MCP251X_IS(_model) \
  246. static inline int mcp251x_is_##_model(struct spi_device *spi) \
  247. { \
  248. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev); \
  249. return priv->model == CAN_MCP251X_MCP##_model; \
  250. }
  251. MCP251X_IS(2510);
  252. MCP251X_IS(2515);
  253. static void mcp251x_clean(struct net_device *net)
  254. {
  255. struct mcp251x_priv *priv = netdev_priv(net);
  256. if (priv->tx_skb || priv->tx_len)
  257. net->stats.tx_errors++;
  258. if (priv->tx_skb)
  259. dev_kfree_skb(priv->tx_skb);
  260. if (priv->tx_len)
  261. can_free_echo_skb(priv->net, 0);
  262. priv->tx_skb = NULL;
  263. priv->tx_len = 0;
  264. }
  265. /*
  266. * Note about handling of error return of mcp251x_spi_trans: accessing
  267. * registers via SPI is not really different conceptually than using
  268. * normal I/O assembler instructions, although it's much more
  269. * complicated from a practical POV. So it's not advisable to always
  270. * check the return value of this function. Imagine that every
  271. * read{b,l}, write{b,l} and friends would be bracketed in "if ( < 0)
  272. * error();", it would be a great mess (well there are some situation
  273. * when exception handling C++ like could be useful after all). So we
  274. * just check that transfers are OK at the beginning of our
  275. * conversation with the chip and to avoid doing really nasty things
  276. * (like injecting bogus packets in the network stack).
  277. */
  278. static int mcp251x_spi_trans(struct spi_device *spi, int len)
  279. {
  280. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  281. struct spi_transfer t = {
  282. .tx_buf = priv->spi_tx_buf,
  283. .rx_buf = priv->spi_rx_buf,
  284. .len = len,
  285. .cs_change = 0,
  286. };
  287. struct spi_message m;
  288. int ret;
  289. spi_message_init(&m);
  290. if (mcp251x_enable_dma) {
  291. t.tx_dma = priv->spi_tx_dma;
  292. t.rx_dma = priv->spi_rx_dma;
  293. m.is_dma_mapped = 1;
  294. }
  295. spi_message_add_tail(&t, &m);
  296. ret = spi_sync(spi, &m);
  297. if (ret)
  298. dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret);
  299. return ret;
  300. }
  301. static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg)
  302. {
  303. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  304. u8 val = 0;
  305. priv->spi_tx_buf[0] = INSTRUCTION_READ;
  306. priv->spi_tx_buf[1] = reg;
  307. mcp251x_spi_trans(spi, 3);
  308. val = priv->spi_rx_buf[2];
  309. return val;
  310. }
  311. static void mcp251x_read_2regs(struct spi_device *spi, uint8_t reg,
  312. uint8_t *v1, uint8_t *v2)
  313. {
  314. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  315. priv->spi_tx_buf[0] = INSTRUCTION_READ;
  316. priv->spi_tx_buf[1] = reg;
  317. mcp251x_spi_trans(spi, 4);
  318. *v1 = priv->spi_rx_buf[2];
  319. *v2 = priv->spi_rx_buf[3];
  320. }
  321. static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val)
  322. {
  323. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  324. priv->spi_tx_buf[0] = INSTRUCTION_WRITE;
  325. priv->spi_tx_buf[1] = reg;
  326. priv->spi_tx_buf[2] = val;
  327. mcp251x_spi_trans(spi, 3);
  328. }
  329. static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
  330. u8 mask, uint8_t val)
  331. {
  332. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  333. priv->spi_tx_buf[0] = INSTRUCTION_BIT_MODIFY;
  334. priv->spi_tx_buf[1] = reg;
  335. priv->spi_tx_buf[2] = mask;
  336. priv->spi_tx_buf[3] = val;
  337. mcp251x_spi_trans(spi, 4);
  338. }
  339. static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
  340. int len, int tx_buf_idx)
  341. {
  342. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  343. if (mcp251x_is_2510(spi)) {
  344. int i;
  345. for (i = 1; i < TXBDAT_OFF + len; i++)
  346. mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i,
  347. buf[i]);
  348. } else {
  349. memcpy(priv->spi_tx_buf, buf, TXBDAT_OFF + len);
  350. mcp251x_spi_trans(spi, TXBDAT_OFF + len);
  351. }
  352. }
  353. static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,
  354. int tx_buf_idx)
  355. {
  356. u32 sid, eid, exide, rtr;
  357. u8 buf[SPI_TRANSFER_BUF_LEN];
  358. exide = (frame->can_id & CAN_EFF_FLAG) ? 1 : 0; /* Extended ID Enable */
  359. if (exide)
  360. sid = (frame->can_id & CAN_EFF_MASK) >> 18;
  361. else
  362. sid = frame->can_id & CAN_SFF_MASK; /* Standard ID */
  363. eid = frame->can_id & CAN_EFF_MASK; /* Extended ID */
  364. rtr = (frame->can_id & CAN_RTR_FLAG) ? 1 : 0; /* Remote transmission */
  365. buf[TXBCTRL_OFF] = INSTRUCTION_LOAD_TXB(tx_buf_idx);
  366. buf[TXBSIDH_OFF] = sid >> SIDH_SHIFT;
  367. buf[TXBSIDL_OFF] = ((sid & SIDL_SID_MASK) << SIDL_SID_SHIFT) |
  368. (exide << SIDL_EXIDE_SHIFT) |
  369. ((eid >> SIDL_EID_SHIFT) & SIDL_EID_MASK);
  370. buf[TXBEID8_OFF] = GET_BYTE(eid, 1);
  371. buf[TXBEID0_OFF] = GET_BYTE(eid, 0);
  372. buf[TXBDLC_OFF] = (rtr << DLC_RTR_SHIFT) | frame->can_dlc;
  373. memcpy(buf + TXBDAT_OFF, frame->data, frame->can_dlc);
  374. mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx);
  375. mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx), TXBCTRL_TXREQ);
  376. }
  377. static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
  378. int buf_idx)
  379. {
  380. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  381. if (mcp251x_is_2510(spi)) {
  382. int i, len;
  383. for (i = 1; i < RXBDAT_OFF; i++)
  384. buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
  385. len = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK);
  386. for (; i < (RXBDAT_OFF + len); i++)
  387. buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
  388. } else {
  389. priv->spi_tx_buf[RXBCTRL_OFF] = INSTRUCTION_READ_RXB(buf_idx);
  390. mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
  391. memcpy(buf, priv->spi_rx_buf, SPI_TRANSFER_BUF_LEN);
  392. }
  393. }
  394. static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
  395. {
  396. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  397. struct sk_buff *skb;
  398. struct can_frame *frame;
  399. u8 buf[SPI_TRANSFER_BUF_LEN];
  400. skb = alloc_can_skb(priv->net, &frame);
  401. if (!skb) {
  402. dev_err(&spi->dev, "cannot allocate RX skb\n");
  403. priv->net->stats.rx_dropped++;
  404. return;
  405. }
  406. mcp251x_hw_rx_frame(spi, buf, buf_idx);
  407. if (buf[RXBSIDL_OFF] & RXBSIDL_IDE) {
  408. /* Extended ID format */
  409. frame->can_id = CAN_EFF_FLAG;
  410. frame->can_id |=
  411. /* Extended ID part */
  412. SET_BYTE(buf[RXBSIDL_OFF] & RXBSIDL_EID, 2) |
  413. SET_BYTE(buf[RXBEID8_OFF], 1) |
  414. SET_BYTE(buf[RXBEID0_OFF], 0) |
  415. /* Standard ID part */
  416. (((buf[RXBSIDH_OFF] << RXBSIDH_SHIFT) |
  417. (buf[RXBSIDL_OFF] >> RXBSIDL_SHIFT)) << 18);
  418. /* Remote transmission request */
  419. if (buf[RXBDLC_OFF] & RXBDLC_RTR)
  420. frame->can_id |= CAN_RTR_FLAG;
  421. } else {
  422. /* Standard ID format */
  423. frame->can_id =
  424. (buf[RXBSIDH_OFF] << RXBSIDH_SHIFT) |
  425. (buf[RXBSIDL_OFF] >> RXBSIDL_SHIFT);
  426. }
  427. /* Data length */
  428. frame->can_dlc = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK);
  429. memcpy(frame->data, buf + RXBDAT_OFF, frame->can_dlc);
  430. priv->net->stats.rx_packets++;
  431. priv->net->stats.rx_bytes += frame->can_dlc;
  432. netif_rx_ni(skb);
  433. }
  434. static void mcp251x_hw_sleep(struct spi_device *spi)
  435. {
  436. mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP);
  437. }
  438. static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb,
  439. struct net_device *net)
  440. {
  441. struct mcp251x_priv *priv = netdev_priv(net);
  442. struct spi_device *spi = priv->spi;
  443. if (priv->tx_skb || priv->tx_len) {
  444. dev_warn(&spi->dev, "hard_xmit called while tx busy\n");
  445. return NETDEV_TX_BUSY;
  446. }
  447. if (can_dropped_invalid_skb(net, skb))
  448. return NETDEV_TX_OK;
  449. netif_stop_queue(net);
  450. priv->tx_skb = skb;
  451. queue_work(priv->wq, &priv->tx_work);
  452. return NETDEV_TX_OK;
  453. }
  454. static int mcp251x_do_set_mode(struct net_device *net, enum can_mode mode)
  455. {
  456. struct mcp251x_priv *priv = netdev_priv(net);
  457. switch (mode) {
  458. case CAN_MODE_START:
  459. mcp251x_clean(net);
  460. /* We have to delay work since SPI I/O may sleep */
  461. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  462. priv->restart_tx = 1;
  463. if (priv->can.restart_ms == 0)
  464. priv->after_suspend = AFTER_SUSPEND_RESTART;
  465. queue_work(priv->wq, &priv->restart_work);
  466. break;
  467. default:
  468. return -EOPNOTSUPP;
  469. }
  470. return 0;
  471. }
  472. static int mcp251x_set_normal_mode(struct spi_device *spi)
  473. {
  474. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  475. unsigned long timeout;
  476. /* Enable interrupts */
  477. mcp251x_write_reg(spi, CANINTE,
  478. CANINTE_ERRIE | CANINTE_TX2IE | CANINTE_TX1IE |
  479. CANINTE_TX0IE | CANINTE_RX1IE | CANINTE_RX0IE);
  480. if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
  481. /* Put device into loopback mode */
  482. mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK);
  483. } else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
  484. /* Put device into listen-only mode */
  485. mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY);
  486. } else {
  487. /* Put device into normal mode */
  488. mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL);
  489. /* Wait for the device to enter normal mode */
  490. timeout = jiffies + HZ;
  491. while (mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) {
  492. schedule();
  493. if (time_after(jiffies, timeout)) {
  494. dev_err(&spi->dev, "MCP251x didn't"
  495. " enter in normal mode\n");
  496. return -EBUSY;
  497. }
  498. }
  499. }
  500. priv->can.state = CAN_STATE_ERROR_ACTIVE;
  501. return 0;
  502. }
  503. static int mcp251x_do_set_bittiming(struct net_device *net)
  504. {
  505. struct mcp251x_priv *priv = netdev_priv(net);
  506. struct can_bittiming *bt = &priv->can.bittiming;
  507. struct spi_device *spi = priv->spi;
  508. mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) |
  509. (bt->brp - 1));
  510. mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE |
  511. (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES ?
  512. CNF2_SAM : 0) |
  513. ((bt->phase_seg1 - 1) << CNF2_PS1_SHIFT) |
  514. (bt->prop_seg - 1));
  515. mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK,
  516. (bt->phase_seg2 - 1));
  517. dev_info(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n",
  518. mcp251x_read_reg(spi, CNF1),
  519. mcp251x_read_reg(spi, CNF2),
  520. mcp251x_read_reg(spi, CNF3));
  521. return 0;
  522. }
  523. static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv,
  524. struct spi_device *spi)
  525. {
  526. mcp251x_do_set_bittiming(net);
  527. mcp251x_write_reg(spi, RXBCTRL(0),
  528. RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1);
  529. mcp251x_write_reg(spi, RXBCTRL(1),
  530. RXBCTRL_RXM0 | RXBCTRL_RXM1);
  531. return 0;
  532. }
  533. static int mcp251x_hw_reset(struct spi_device *spi)
  534. {
  535. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  536. int ret;
  537. unsigned long timeout;
  538. priv->spi_tx_buf[0] = INSTRUCTION_RESET;
  539. ret = spi_write(spi, priv->spi_tx_buf, 1);
  540. if (ret) {
  541. dev_err(&spi->dev, "reset failed: ret = %d\n", ret);
  542. return -EIO;
  543. }
  544. /* Wait for reset to finish */
  545. timeout = jiffies + HZ;
  546. mdelay(10);
  547. while ((mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK)
  548. != CANCTRL_REQOP_CONF) {
  549. schedule();
  550. if (time_after(jiffies, timeout)) {
  551. dev_err(&spi->dev, "MCP251x didn't"
  552. " enter in conf mode after reset\n");
  553. return -EBUSY;
  554. }
  555. }
  556. return 0;
  557. }
  558. static int mcp251x_hw_probe(struct spi_device *spi)
  559. {
  560. int st1, st2;
  561. mcp251x_hw_reset(spi);
  562. /*
  563. * Please note that these are "magic values" based on after
  564. * reset defaults taken from data sheet which allows us to see
  565. * if we really have a chip on the bus (we avoid common all
  566. * zeroes or all ones situations)
  567. */
  568. st1 = mcp251x_read_reg(spi, CANSTAT) & 0xEE;
  569. st2 = mcp251x_read_reg(spi, CANCTRL) & 0x17;
  570. dev_dbg(&spi->dev, "CANSTAT 0x%02x CANCTRL 0x%02x\n", st1, st2);
  571. /* Check for power up default values */
  572. return (st1 == 0x80 && st2 == 0x07) ? 1 : 0;
  573. }
  574. static void mcp251x_open_clean(struct net_device *net)
  575. {
  576. struct mcp251x_priv *priv = netdev_priv(net);
  577. struct spi_device *spi = priv->spi;
  578. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  579. free_irq(spi->irq, priv);
  580. mcp251x_hw_sleep(spi);
  581. if (pdata->transceiver_enable)
  582. pdata->transceiver_enable(0);
  583. close_candev(net);
  584. }
  585. static int mcp251x_stop(struct net_device *net)
  586. {
  587. struct mcp251x_priv *priv = netdev_priv(net);
  588. struct spi_device *spi = priv->spi;
  589. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  590. close_candev(net);
  591. priv->force_quit = 1;
  592. free_irq(spi->irq, priv);
  593. destroy_workqueue(priv->wq);
  594. priv->wq = NULL;
  595. mutex_lock(&priv->mcp_lock);
  596. /* Disable and clear pending interrupts */
  597. mcp251x_write_reg(spi, CANINTE, 0x00);
  598. mcp251x_write_reg(spi, CANINTF, 0x00);
  599. mcp251x_write_reg(spi, TXBCTRL(0), 0);
  600. mcp251x_clean(net);
  601. mcp251x_hw_sleep(spi);
  602. if (pdata->transceiver_enable)
  603. pdata->transceiver_enable(0);
  604. priv->can.state = CAN_STATE_STOPPED;
  605. mutex_unlock(&priv->mcp_lock);
  606. return 0;
  607. }
  608. static void mcp251x_error_skb(struct net_device *net, int can_id, int data1)
  609. {
  610. struct sk_buff *skb;
  611. struct can_frame *frame;
  612. skb = alloc_can_err_skb(net, &frame);
  613. if (skb) {
  614. frame->can_id |= can_id;
  615. frame->data[1] = data1;
  616. netif_rx_ni(skb);
  617. } else {
  618. dev_err(&net->dev,
  619. "cannot allocate error skb\n");
  620. }
  621. }
  622. static void mcp251x_tx_work_handler(struct work_struct *ws)
  623. {
  624. struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
  625. tx_work);
  626. struct spi_device *spi = priv->spi;
  627. struct net_device *net = priv->net;
  628. struct can_frame *frame;
  629. mutex_lock(&priv->mcp_lock);
  630. if (priv->tx_skb) {
  631. if (priv->can.state == CAN_STATE_BUS_OFF) {
  632. mcp251x_clean(net);
  633. } else {
  634. frame = (struct can_frame *)priv->tx_skb->data;
  635. if (frame->can_dlc > CAN_FRAME_MAX_DATA_LEN)
  636. frame->can_dlc = CAN_FRAME_MAX_DATA_LEN;
  637. mcp251x_hw_tx(spi, frame, 0);
  638. priv->tx_len = 1 + frame->can_dlc;
  639. can_put_echo_skb(priv->tx_skb, net, 0);
  640. priv->tx_skb = NULL;
  641. }
  642. }
  643. mutex_unlock(&priv->mcp_lock);
  644. }
  645. static void mcp251x_restart_work_handler(struct work_struct *ws)
  646. {
  647. struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
  648. restart_work);
  649. struct spi_device *spi = priv->spi;
  650. struct net_device *net = priv->net;
  651. mutex_lock(&priv->mcp_lock);
  652. if (priv->after_suspend) {
  653. mdelay(10);
  654. mcp251x_hw_reset(spi);
  655. mcp251x_setup(net, priv, spi);
  656. if (priv->after_suspend & AFTER_SUSPEND_RESTART) {
  657. mcp251x_set_normal_mode(spi);
  658. } else if (priv->after_suspend & AFTER_SUSPEND_UP) {
  659. netif_device_attach(net);
  660. mcp251x_clean(net);
  661. mcp251x_set_normal_mode(spi);
  662. netif_wake_queue(net);
  663. } else {
  664. mcp251x_hw_sleep(spi);
  665. }
  666. priv->after_suspend = 0;
  667. priv->force_quit = 0;
  668. }
  669. if (priv->restart_tx) {
  670. priv->restart_tx = 0;
  671. mcp251x_write_reg(spi, TXBCTRL(0), 0);
  672. mcp251x_clean(net);
  673. netif_wake_queue(net);
  674. mcp251x_error_skb(net, CAN_ERR_RESTARTED, 0);
  675. }
  676. mutex_unlock(&priv->mcp_lock);
  677. }
  678. static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
  679. {
  680. struct mcp251x_priv *priv = dev_id;
  681. struct spi_device *spi = priv->spi;
  682. struct net_device *net = priv->net;
  683. mutex_lock(&priv->mcp_lock);
  684. while (!priv->force_quit) {
  685. enum can_state new_state;
  686. u8 intf, eflag;
  687. u8 clear_intf = 0;
  688. int can_id = 0, data1 = 0;
  689. mcp251x_read_2regs(spi, CANINTF, &intf, &eflag);
  690. /* mask out flags we don't care about */
  691. intf &= CANINTF_RX | CANINTF_TX | CANINTF_ERR;
  692. /* receive buffer 0 */
  693. if (intf & CANINTF_RX0IF) {
  694. mcp251x_hw_rx(spi, 0);
  695. /*
  696. * Free one buffer ASAP
  697. * (The MCP2515 does this automatically.)
  698. */
  699. if (mcp251x_is_2510(spi))
  700. mcp251x_write_bits(spi, CANINTF, CANINTF_RX0IF, 0x00);
  701. }
  702. /* receive buffer 1 */
  703. if (intf & CANINTF_RX1IF) {
  704. mcp251x_hw_rx(spi, 1);
  705. /* the MCP2515 does this automatically */
  706. if (mcp251x_is_2510(spi))
  707. clear_intf |= CANINTF_RX1IF;
  708. }
  709. /* any error or tx interrupt we need to clear? */
  710. if (intf & (CANINTF_ERR | CANINTF_TX))
  711. clear_intf |= intf & (CANINTF_ERR | CANINTF_TX);
  712. if (clear_intf)
  713. mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00);
  714. if (eflag)
  715. mcp251x_write_bits(spi, EFLG, eflag, 0x00);
  716. /* Update can state */
  717. if (eflag & EFLG_TXBO) {
  718. new_state = CAN_STATE_BUS_OFF;
  719. can_id |= CAN_ERR_BUSOFF;
  720. } else if (eflag & EFLG_TXEP) {
  721. new_state = CAN_STATE_ERROR_PASSIVE;
  722. can_id |= CAN_ERR_CRTL;
  723. data1 |= CAN_ERR_CRTL_TX_PASSIVE;
  724. } else if (eflag & EFLG_RXEP) {
  725. new_state = CAN_STATE_ERROR_PASSIVE;
  726. can_id |= CAN_ERR_CRTL;
  727. data1 |= CAN_ERR_CRTL_RX_PASSIVE;
  728. } else if (eflag & EFLG_TXWAR) {
  729. new_state = CAN_STATE_ERROR_WARNING;
  730. can_id |= CAN_ERR_CRTL;
  731. data1 |= CAN_ERR_CRTL_TX_WARNING;
  732. } else if (eflag & EFLG_RXWAR) {
  733. new_state = CAN_STATE_ERROR_WARNING;
  734. can_id |= CAN_ERR_CRTL;
  735. data1 |= CAN_ERR_CRTL_RX_WARNING;
  736. } else {
  737. new_state = CAN_STATE_ERROR_ACTIVE;
  738. }
  739. /* Update can state statistics */
  740. switch (priv->can.state) {
  741. case CAN_STATE_ERROR_ACTIVE:
  742. if (new_state >= CAN_STATE_ERROR_WARNING &&
  743. new_state <= CAN_STATE_BUS_OFF)
  744. priv->can.can_stats.error_warning++;
  745. case CAN_STATE_ERROR_WARNING: /* fallthrough */
  746. if (new_state >= CAN_STATE_ERROR_PASSIVE &&
  747. new_state <= CAN_STATE_BUS_OFF)
  748. priv->can.can_stats.error_passive++;
  749. break;
  750. default:
  751. break;
  752. }
  753. priv->can.state = new_state;
  754. if (intf & CANINTF_ERRIF) {
  755. /* Handle overflow counters */
  756. if (eflag & (EFLG_RX0OVR | EFLG_RX1OVR)) {
  757. if (eflag & EFLG_RX0OVR) {
  758. net->stats.rx_over_errors++;
  759. net->stats.rx_errors++;
  760. }
  761. if (eflag & EFLG_RX1OVR) {
  762. net->stats.rx_over_errors++;
  763. net->stats.rx_errors++;
  764. }
  765. can_id |= CAN_ERR_CRTL;
  766. data1 |= CAN_ERR_CRTL_RX_OVERFLOW;
  767. }
  768. mcp251x_error_skb(net, can_id, data1);
  769. }
  770. if (priv->can.state == CAN_STATE_BUS_OFF) {
  771. if (priv->can.restart_ms == 0) {
  772. priv->force_quit = 1;
  773. can_bus_off(net);
  774. mcp251x_hw_sleep(spi);
  775. break;
  776. }
  777. }
  778. if (intf == 0)
  779. break;
  780. if (intf & CANINTF_TX) {
  781. net->stats.tx_packets++;
  782. net->stats.tx_bytes += priv->tx_len - 1;
  783. if (priv->tx_len) {
  784. can_get_echo_skb(net, 0);
  785. priv->tx_len = 0;
  786. }
  787. netif_wake_queue(net);
  788. }
  789. }
  790. mutex_unlock(&priv->mcp_lock);
  791. return IRQ_HANDLED;
  792. }
  793. static int mcp251x_open(struct net_device *net)
  794. {
  795. struct mcp251x_priv *priv = netdev_priv(net);
  796. struct spi_device *spi = priv->spi;
  797. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  798. int ret;
  799. ret = open_candev(net);
  800. if (ret) {
  801. dev_err(&spi->dev, "unable to set initial baudrate!\n");
  802. return ret;
  803. }
  804. mutex_lock(&priv->mcp_lock);
  805. if (pdata->transceiver_enable)
  806. pdata->transceiver_enable(1);
  807. priv->force_quit = 0;
  808. priv->tx_skb = NULL;
  809. priv->tx_len = 0;
  810. ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
  811. IRQF_TRIGGER_FALLING, DEVICE_NAME, priv);
  812. if (ret) {
  813. dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
  814. if (pdata->transceiver_enable)
  815. pdata->transceiver_enable(0);
  816. close_candev(net);
  817. goto open_unlock;
  818. }
  819. priv->wq = create_freezeable_workqueue("mcp251x_wq");
  820. INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
  821. INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);
  822. ret = mcp251x_hw_reset(spi);
  823. if (ret) {
  824. mcp251x_open_clean(net);
  825. goto open_unlock;
  826. }
  827. ret = mcp251x_setup(net, priv, spi);
  828. if (ret) {
  829. mcp251x_open_clean(net);
  830. goto open_unlock;
  831. }
  832. ret = mcp251x_set_normal_mode(spi);
  833. if (ret) {
  834. mcp251x_open_clean(net);
  835. goto open_unlock;
  836. }
  837. netif_wake_queue(net);
  838. open_unlock:
  839. mutex_unlock(&priv->mcp_lock);
  840. return ret;
  841. }
  842. static const struct net_device_ops mcp251x_netdev_ops = {
  843. .ndo_open = mcp251x_open,
  844. .ndo_stop = mcp251x_stop,
  845. .ndo_start_xmit = mcp251x_hard_start_xmit,
  846. };
  847. static int __devinit mcp251x_can_probe(struct spi_device *spi)
  848. {
  849. struct net_device *net;
  850. struct mcp251x_priv *priv;
  851. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  852. int ret = -ENODEV;
  853. if (!pdata)
  854. /* Platform data is required for osc freq */
  855. goto error_out;
  856. /* Allocate can/net device */
  857. net = alloc_candev(sizeof(struct mcp251x_priv), TX_ECHO_SKB_MAX);
  858. if (!net) {
  859. ret = -ENOMEM;
  860. goto error_alloc;
  861. }
  862. net->netdev_ops = &mcp251x_netdev_ops;
  863. net->flags |= IFF_ECHO;
  864. priv = netdev_priv(net);
  865. priv->can.bittiming_const = &mcp251x_bittiming_const;
  866. priv->can.do_set_mode = mcp251x_do_set_mode;
  867. priv->can.clock.freq = pdata->oscillator_frequency / 2;
  868. priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
  869. CAN_CTRLMODE_LOOPBACK | CAN_CTRLMODE_LISTENONLY;
  870. priv->model = spi_get_device_id(spi)->driver_data;
  871. priv->net = net;
  872. dev_set_drvdata(&spi->dev, priv);
  873. priv->spi = spi;
  874. mutex_init(&priv->mcp_lock);
  875. /* If requested, allocate DMA buffers */
  876. if (mcp251x_enable_dma) {
  877. spi->dev.coherent_dma_mask = ~0;
  878. /*
  879. * Minimum coherent DMA allocation is PAGE_SIZE, so allocate
  880. * that much and share it between Tx and Rx DMA buffers.
  881. */
  882. priv->spi_tx_buf = dma_alloc_coherent(&spi->dev,
  883. PAGE_SIZE,
  884. &priv->spi_tx_dma,
  885. GFP_DMA);
  886. if (priv->spi_tx_buf) {
  887. priv->spi_rx_buf = (u8 *)(priv->spi_tx_buf +
  888. (PAGE_SIZE / 2));
  889. priv->spi_rx_dma = (dma_addr_t)(priv->spi_tx_dma +
  890. (PAGE_SIZE / 2));
  891. } else {
  892. /* Fall back to non-DMA */
  893. mcp251x_enable_dma = 0;
  894. }
  895. }
  896. /* Allocate non-DMA buffers */
  897. if (!mcp251x_enable_dma) {
  898. priv->spi_tx_buf = kmalloc(SPI_TRANSFER_BUF_LEN, GFP_KERNEL);
  899. if (!priv->spi_tx_buf) {
  900. ret = -ENOMEM;
  901. goto error_tx_buf;
  902. }
  903. priv->spi_rx_buf = kmalloc(SPI_TRANSFER_BUF_LEN, GFP_KERNEL);
  904. if (!priv->spi_rx_buf) {
  905. ret = -ENOMEM;
  906. goto error_rx_buf;
  907. }
  908. }
  909. if (pdata->power_enable)
  910. pdata->power_enable(1);
  911. /* Call out to platform specific setup */
  912. if (pdata->board_specific_setup)
  913. pdata->board_specific_setup(spi);
  914. SET_NETDEV_DEV(net, &spi->dev);
  915. /* Configure the SPI bus */
  916. spi->mode = SPI_MODE_0;
  917. spi->bits_per_word = 8;
  918. spi_setup(spi);
  919. /* Here is OK to not lock the MCP, no one knows about it yet */
  920. if (!mcp251x_hw_probe(spi)) {
  921. dev_info(&spi->dev, "Probe failed\n");
  922. goto error_probe;
  923. }
  924. mcp251x_hw_sleep(spi);
  925. if (pdata->transceiver_enable)
  926. pdata->transceiver_enable(0);
  927. ret = register_candev(net);
  928. if (!ret) {
  929. dev_info(&spi->dev, "probed\n");
  930. return ret;
  931. }
  932. error_probe:
  933. if (!mcp251x_enable_dma)
  934. kfree(priv->spi_rx_buf);
  935. error_rx_buf:
  936. if (!mcp251x_enable_dma)
  937. kfree(priv->spi_tx_buf);
  938. error_tx_buf:
  939. free_candev(net);
  940. if (mcp251x_enable_dma)
  941. dma_free_coherent(&spi->dev, PAGE_SIZE,
  942. priv->spi_tx_buf, priv->spi_tx_dma);
  943. error_alloc:
  944. if (pdata->power_enable)
  945. pdata->power_enable(0);
  946. dev_err(&spi->dev, "probe failed\n");
  947. error_out:
  948. return ret;
  949. }
  950. static int __devexit mcp251x_can_remove(struct spi_device *spi)
  951. {
  952. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  953. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  954. struct net_device *net = priv->net;
  955. unregister_candev(net);
  956. free_candev(net);
  957. if (mcp251x_enable_dma) {
  958. dma_free_coherent(&spi->dev, PAGE_SIZE,
  959. priv->spi_tx_buf, priv->spi_tx_dma);
  960. } else {
  961. kfree(priv->spi_tx_buf);
  962. kfree(priv->spi_rx_buf);
  963. }
  964. if (pdata->power_enable)
  965. pdata->power_enable(0);
  966. return 0;
  967. }
  968. #ifdef CONFIG_PM
  969. static int mcp251x_can_suspend(struct spi_device *spi, pm_message_t state)
  970. {
  971. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  972. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  973. struct net_device *net = priv->net;
  974. priv->force_quit = 1;
  975. disable_irq(spi->irq);
  976. /*
  977. * Note: at this point neither IST nor workqueues are running.
  978. * open/stop cannot be called anyway so locking is not needed
  979. */
  980. if (netif_running(net)) {
  981. netif_device_detach(net);
  982. mcp251x_hw_sleep(spi);
  983. if (pdata->transceiver_enable)
  984. pdata->transceiver_enable(0);
  985. priv->after_suspend = AFTER_SUSPEND_UP;
  986. } else {
  987. priv->after_suspend = AFTER_SUSPEND_DOWN;
  988. }
  989. if (pdata->power_enable) {
  990. pdata->power_enable(0);
  991. priv->after_suspend |= AFTER_SUSPEND_POWER;
  992. }
  993. return 0;
  994. }
  995. static int mcp251x_can_resume(struct spi_device *spi)
  996. {
  997. struct mcp251x_platform_data *pdata = spi->dev.platform_data;
  998. struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
  999. if (priv->after_suspend & AFTER_SUSPEND_POWER) {
  1000. pdata->power_enable(1);
  1001. queue_work(priv->wq, &priv->restart_work);
  1002. } else {
  1003. if (priv->after_suspend & AFTER_SUSPEND_UP) {
  1004. if (pdata->transceiver_enable)
  1005. pdata->transceiver_enable(1);
  1006. queue_work(priv->wq, &priv->restart_work);
  1007. } else {
  1008. priv->after_suspend = 0;
  1009. }
  1010. }
  1011. priv->force_quit = 0;
  1012. enable_irq(spi->irq);
  1013. return 0;
  1014. }
  1015. #else
  1016. #define mcp251x_can_suspend NULL
  1017. #define mcp251x_can_resume NULL
  1018. #endif
  1019. static const struct spi_device_id mcp251x_id_table[] = {
  1020. { "mcp2510", CAN_MCP251X_MCP2510 },
  1021. { "mcp2515", CAN_MCP251X_MCP2515 },
  1022. { },
  1023. };
  1024. MODULE_DEVICE_TABLE(spi, mcp251x_id_table);
  1025. static struct spi_driver mcp251x_can_driver = {
  1026. .driver = {
  1027. .name = DEVICE_NAME,
  1028. .bus = &spi_bus_type,
  1029. .owner = THIS_MODULE,
  1030. },
  1031. .id_table = mcp251x_id_table,
  1032. .probe = mcp251x_can_probe,
  1033. .remove = __devexit_p(mcp251x_can_remove),
  1034. .suspend = mcp251x_can_suspend,
  1035. .resume = mcp251x_can_resume,
  1036. };
  1037. static int __init mcp251x_can_init(void)
  1038. {
  1039. return spi_register_driver(&mcp251x_can_driver);
  1040. }
  1041. static void __exit mcp251x_can_exit(void)
  1042. {
  1043. spi_unregister_driver(&mcp251x_can_driver);
  1044. }
  1045. module_init(mcp251x_can_init);
  1046. module_exit(mcp251x_can_exit);
  1047. MODULE_AUTHOR("Chris Elston <celston@katalix.com>, "
  1048. "Christian Pellegrin <chripell@evolware.org>");
  1049. MODULE_DESCRIPTION("Microchip 251x CAN driver");
  1050. MODULE_LICENSE("GPL v2");