mcp251x.c 32 KB

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