mcp251x.c 37.3 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0-only
2
/* CAN bus driver for Microchip 251x/25625 CAN Controller with SPI Interface
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
 *
 * MCP2510 support and bug fixes by Christian Pellegrin
 * <chripell@evolware.org>
 *
 * Copyright 2009 Christian Pellegrin EVOL S.r.l.
 *
 * Copyright 2007 Raymarine UK, Ltd. All Rights Reserved.
 * Written under contract by:
 *   Chris Elston, Katalix Systems, Ltd.
 *
 * Based on Microchip MCP251x CAN controller driver written by
 * David Vrabel, Copyright 2006 Arcom Control Systems Ltd.
 *
 * Based on CAN bus driver for the CCAN controller written by
 * - Sascha Hauer, Marc Kleine-Budde, Pengutronix
 * - Simon Kallweit, intefo AG
 * Copyright 2007
 */

22
#include <linux/bitfield.h>
23 24
#include <linux/can/core.h>
#include <linux/can/dev.h>
25
#include <linux/can/led.h>
26
#include <linux/clk.h>
27 28 29 30
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/freezer.h>
31 32
#include <linux/gpio.h>
#include <linux/gpio/driver.h>
33 34 35 36 37 38
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/netdevice.h>
#include <linux/platform_device.h>
39 40
#include <linux/property.h>
#include <linux/regulator/consumer.h>
41
#include <linux/slab.h>
42 43 44 45 46 47 48 49 50 51
#include <linux/spi/spi.h>
#include <linux/uaccess.h>

/* SPI interface instruction set */
#define INSTRUCTION_WRITE	0x02
#define INSTRUCTION_READ	0x03
#define INSTRUCTION_BIT_MODIFY	0x05
#define INSTRUCTION_LOAD_TXB(n)	(0x40 + 2 * (n))
#define INSTRUCTION_READ_RXB(n)	(((n) == 0) ? 0x90 : 0x94)
#define INSTRUCTION_RESET	0xC0
52 53 54 55 56
#define RTS_TXB0		0x01
#define RTS_TXB1		0x02
#define RTS_TXB2		0x04
#define INSTRUCTION_RTS(n)	(0x80 | ((n) & 0x07))

57
/* MPC251x registers */
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
#define BFPCTRL			0x0c
#  define BFPCTRL_B0BFM		BIT(0)
#  define BFPCTRL_B1BFM		BIT(1)
#  define BFPCTRL_BFM(n)	(BFPCTRL_B0BFM << (n))
#  define BFPCTRL_BFM_MASK	GENMASK(1, 0)
#  define BFPCTRL_B0BFE		BIT(2)
#  define BFPCTRL_B1BFE		BIT(3)
#  define BFPCTRL_BFE(n)	(BFPCTRL_B0BFE << (n))
#  define BFPCTRL_BFE_MASK	GENMASK(3, 2)
#  define BFPCTRL_B0BFS		BIT(4)
#  define BFPCTRL_B1BFS		BIT(5)
#  define BFPCTRL_BFS(n)	(BFPCTRL_B0BFS << (n))
#  define BFPCTRL_BFS_MASK	GENMASK(5, 4)
#define TXRTSCTRL		0x0d
#  define TXRTSCTRL_B0RTSM	BIT(0)
#  define TXRTSCTRL_B1RTSM	BIT(1)
#  define TXRTSCTRL_B2RTSM	BIT(2)
#  define TXRTSCTRL_RTSM(n)	(TXRTSCTRL_B0RTSM << (n))
#  define TXRTSCTRL_RTSM_MASK	GENMASK(2, 0)
#  define TXRTSCTRL_B0RTS	BIT(3)
#  define TXRTSCTRL_B1RTS	BIT(4)
#  define TXRTSCTRL_B2RTS	BIT(5)
#  define TXRTSCTRL_RTS(n)	(TXRTSCTRL_B0RTS << (n))
#  define TXRTSCTRL_RTS_MASK	GENMASK(5, 3)
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
#define CANSTAT	      0x0e
#define CANCTRL	      0x0f
#  define CANCTRL_REQOP_MASK	    0xe0
#  define CANCTRL_REQOP_CONF	    0x80
#  define CANCTRL_REQOP_LISTEN_ONLY 0x60
#  define CANCTRL_REQOP_LOOPBACK    0x40
#  define CANCTRL_REQOP_SLEEP	    0x20
#  define CANCTRL_REQOP_NORMAL	    0x00
#  define CANCTRL_OSM		    0x08
#  define CANCTRL_ABAT		    0x10
#define TEC	      0x1c
#define REC	      0x1d
#define CNF1	      0x2a
#  define CNF1_SJW_SHIFT   6
#define CNF2	      0x29
#  define CNF2_BTLMODE	   0x80
#  define CNF2_SAM         0x40
#  define CNF2_PS1_SHIFT   3
#define CNF3	      0x28
#  define CNF3_SOF	   0x08
#  define CNF3_WAKFIL	   0x04
#  define CNF3_PHSEG2_MASK 0x07
#define CANINTE	      0x2b
#  define CANINTE_MERRE 0x80
#  define CANINTE_WAKIE 0x40
#  define CANINTE_ERRIE 0x20
#  define CANINTE_TX2IE 0x10
#  define CANINTE_TX1IE 0x08
#  define CANINTE_TX0IE 0x04
#  define CANINTE_RX1IE 0x02
#  define CANINTE_RX0IE 0x01
#define CANINTF	      0x2c
#  define CANINTF_MERRF 0x80
#  define CANINTF_WAKIF 0x40
#  define CANINTF_ERRIF 0x20
#  define CANINTF_TX2IF 0x10
#  define CANINTF_TX1IF 0x08
#  define CANINTF_TX0IF 0x04
#  define CANINTF_RX1IF 0x02
#  define CANINTF_RX0IF 0x01
122 123 124
#  define CANINTF_RX (CANINTF_RX0IF | CANINTF_RX1IF)
#  define CANINTF_TX (CANINTF_TX2IF | CANINTF_TX1IF | CANINTF_TX0IF)
#  define CANINTF_ERR (CANINTF_ERRIF)
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
#define EFLG	      0x2d
#  define EFLG_EWARN	0x01
#  define EFLG_RXWAR	0x02
#  define EFLG_TXWAR	0x04
#  define EFLG_RXEP	0x08
#  define EFLG_TXEP	0x10
#  define EFLG_TXBO	0x20
#  define EFLG_RX0OVR	0x40
#  define EFLG_RX1OVR	0x80
#define TXBCTRL(n)  (((n) * 0x10) + 0x30 + TXBCTRL_OFF)
#  define TXBCTRL_ABTF	0x40
#  define TXBCTRL_MLOA	0x20
#  define TXBCTRL_TXERR 0x10
#  define TXBCTRL_TXREQ 0x08
#define TXBSIDH(n)  (((n) * 0x10) + 0x30 + TXBSIDH_OFF)
#  define SIDH_SHIFT    3
#define TXBSIDL(n)  (((n) * 0x10) + 0x30 + TXBSIDL_OFF)
#  define SIDL_SID_MASK    7
#  define SIDL_SID_SHIFT   5
#  define SIDL_EXIDE_SHIFT 3
#  define SIDL_EID_SHIFT   16
#  define SIDL_EID_MASK    3
#define TXBEID8(n)  (((n) * 0x10) + 0x30 + TXBEID8_OFF)
#define TXBEID0(n)  (((n) * 0x10) + 0x30 + TXBEID0_OFF)
#define TXBDLC(n)   (((n) * 0x10) + 0x30 + TXBDLC_OFF)
#  define DLC_RTR_SHIFT    6
#define TXBCTRL_OFF 0
#define TXBSIDH_OFF 1
#define TXBSIDL_OFF 2
#define TXBEID8_OFF 3
#define TXBEID0_OFF 4
#define TXBDLC_OFF  5
#define TXBDAT_OFF  6
#define RXBCTRL(n)  (((n) * 0x10) + 0x60 + RXBCTRL_OFF)
#  define RXBCTRL_BUKT	0x04
#  define RXBCTRL_RXM0	0x20
#  define RXBCTRL_RXM1	0x40
#define RXBSIDH(n)  (((n) * 0x10) + 0x60 + RXBSIDH_OFF)
#  define RXBSIDH_SHIFT 3
#define RXBSIDL(n)  (((n) * 0x10) + 0x60 + RXBSIDL_OFF)
#  define RXBSIDL_IDE   0x08
166
#  define RXBSIDL_SRR   0x10
167 168 169 170 171 172 173 174 175 176 177 178 179 180
#  define RXBSIDL_EID   3
#  define RXBSIDL_SHIFT 5
#define RXBEID8(n)  (((n) * 0x10) + 0x60 + RXBEID8_OFF)
#define RXBEID0(n)  (((n) * 0x10) + 0x60 + RXBEID0_OFF)
#define RXBDLC(n)   (((n) * 0x10) + 0x60 + RXBDLC_OFF)
#  define RXBDLC_LEN_MASK  0x0f
#  define RXBDLC_RTR       0x40
#define RXBCTRL_OFF 0
#define RXBSIDH_OFF 1
#define RXBSIDL_OFF 2
#define RXBEID8_OFF 3
#define RXBEID0_OFF 4
#define RXBDLC_OFF  5
#define RXBDAT_OFF  6
181 182 183 184 185
#define RXFSID(n) ((n < 3) ? 0 : 4)
#define RXFSIDH(n) ((n) * 4 + RXFSID(n))
#define RXFSIDL(n) ((n) * 4 + 1 + RXFSID(n))
#define RXFEID8(n) ((n) * 4 + 2 + RXFSID(n))
#define RXFEID0(n) ((n) * 4 + 3 + RXFSID(n))
186 187 188 189
#define RXMSIDH(n) ((n) * 4 + 0x20)
#define RXMSIDL(n) ((n) * 4 + 0x21)
#define RXMEID8(n) ((n) * 4 + 0x22)
#define RXMEID0(n) ((n) * 4 + 0x23)
190 191 192 193 194 195

#define GET_BYTE(val, byte)			\
	(((val) >> ((byte) * 8)) & 0xff)
#define SET_BYTE(val, byte)			\
	(((val) & 0xff) << ((byte) * 8))

196
/* Buffer size required for the largest SPI transfer (i.e., reading a
197 198 199 200 201 202 203 204
 * frame)
 */
#define CAN_FRAME_MAX_DATA_LEN	8
#define SPI_TRANSFER_BUF_LEN	(6 + CAN_FRAME_MAX_DATA_LEN)
#define CAN_FRAME_MAX_BITS	128

#define TX_ECHO_SKB_MAX	1

205 206
#define MCP251X_OST_DELAY_MS	(5)

207 208
#define DEVICE_NAME "mcp251x"

209
static const struct can_bittiming_const mcp251x_bittiming_const = {
210 211 212 213 214 215 216 217 218 219 220
	.name = DEVICE_NAME,
	.tseg1_min = 3,
	.tseg1_max = 16,
	.tseg2_min = 2,
	.tseg2_max = 8,
	.sjw_max = 4,
	.brp_min = 1,
	.brp_max = 64,
	.brp_inc = 1,
};

221 222 223
enum mcp251x_model {
	CAN_MCP251X_MCP2510	= 0x2510,
	CAN_MCP251X_MCP2515	= 0x2515,
224
	CAN_MCP251X_MCP25625	= 0x25625,
225 226
};

227 228 229 230
struct mcp251x_priv {
	struct can_priv	   can;
	struct net_device *net;
	struct spi_device *spi;
231
	enum mcp251x_model model;
232

233 234
	struct mutex mcp_lock; /* SPI device lock */

235 236 237 238 239
	u8 *spi_tx_buf;
	u8 *spi_rx_buf;

	struct sk_buff *tx_skb;
	int tx_len;
240

241 242
	struct workqueue_struct *wq;
	struct work_struct tx_work;
243 244
	struct work_struct restart_work;

245 246 247 248 249 250 251
	int force_quit;
	int after_suspend;
#define AFTER_SUSPEND_UP 1
#define AFTER_SUSPEND_DOWN 2
#define AFTER_SUSPEND_POWER 4
#define AFTER_SUSPEND_RESTART 8
	int restart_tx;
252 253
	struct regulator *power;
	struct regulator *transceiver;
254
	struct clk *clk;
255 256 257 258
#ifdef CONFIG_GPIOLIB
	struct gpio_chip gpio;
	u8 reg_bfpctrl;
#endif
259 260
};

261 262 263
#define MCP251X_IS(_model) \
static inline int mcp251x_is_##_model(struct spi_device *spi) \
{ \
264
	struct mcp251x_priv *priv = spi_get_drvdata(spi); \
265 266 267 268 269
	return priv->model == CAN_MCP251X_MCP##_model; \
}

MCP251X_IS(2510);

270 271 272 273
static void mcp251x_clean(struct net_device *net)
{
	struct mcp251x_priv *priv = netdev_priv(net);

274 275
	if (priv->tx_skb || priv->tx_len)
		net->stats.tx_errors++;
276
	dev_kfree_skb(priv->tx_skb);
277 278 279 280 281 282
	if (priv->tx_len)
		can_free_echo_skb(priv->net, 0);
	priv->tx_skb = NULL;
	priv->tx_len = 0;
}

283
/* Note about handling of error return of mcp251x_spi_trans: accessing
284 285 286 287 288 289 290 291 292 293 294 295 296
 * registers via SPI is not really different conceptually than using
 * normal I/O assembler instructions, although it's much more
 * complicated from a practical POV. So it's not advisable to always
 * check the return value of this function. Imagine that every
 * read{b,l}, write{b,l} and friends would be bracketed in "if ( < 0)
 * error();", it would be a great mess (well there are some situation
 * when exception handling C++ like could be useful after all). So we
 * just check that transfers are OK at the beginning of our
 * conversation with the chip and to avoid doing really nasty things
 * (like injecting bogus packets in the network stack).
 */
static int mcp251x_spi_trans(struct spi_device *spi, int len)
{
297
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315
	struct spi_transfer t = {
		.tx_buf = priv->spi_tx_buf,
		.rx_buf = priv->spi_rx_buf,
		.len = len,
		.cs_change = 0,
	};
	struct spi_message m;
	int ret;

	spi_message_init(&m);
	spi_message_add_tail(&t, &m);

	ret = spi_sync(spi, &m);
	if (ret)
		dev_err(&spi->dev, "spi transfer failed: ret = %d\n", ret);
	return ret;
}

316
static u8 mcp251x_read_reg(struct spi_device *spi, u8 reg)
317
{
318
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
319 320 321 322 323 324 325 326 327 328 329
	u8 val = 0;

	priv->spi_tx_buf[0] = INSTRUCTION_READ;
	priv->spi_tx_buf[1] = reg;

	mcp251x_spi_trans(spi, 3);
	val = priv->spi_rx_buf[2];

	return val;
}

330
static void mcp251x_read_2regs(struct spi_device *spi, u8 reg, u8 *v1, u8 *v2)
331
{
332
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
333 334 335 336 337 338 339 340 341 342

	priv->spi_tx_buf[0] = INSTRUCTION_READ;
	priv->spi_tx_buf[1] = reg;

	mcp251x_spi_trans(spi, 4);

	*v1 = priv->spi_rx_buf[2];
	*v2 = priv->spi_rx_buf[3];
}

343
static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val)
344
{
345
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
346 347 348 349 350 351 352 353

	priv->spi_tx_buf[0] = INSTRUCTION_WRITE;
	priv->spi_tx_buf[1] = reg;
	priv->spi_tx_buf[2] = val;

	mcp251x_spi_trans(spi, 3);
}

354 355 356 357 358 359 360 361 362 363 364 365
static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2)
{
	struct mcp251x_priv *priv = spi_get_drvdata(spi);

	priv->spi_tx_buf[0] = INSTRUCTION_WRITE;
	priv->spi_tx_buf[1] = reg;
	priv->spi_tx_buf[2] = v1;
	priv->spi_tx_buf[3] = v2;

	mcp251x_spi_trans(spi, 4);
}

366
static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
367
			       u8 mask, u8 val)
368
{
369
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
370 371 372 373 374 375 376 377 378

	priv->spi_tx_buf[0] = INSTRUCTION_BIT_MODIFY;
	priv->spi_tx_buf[1] = reg;
	priv->spi_tx_buf[2] = mask;
	priv->spi_tx_buf[3] = val;

	mcp251x_spi_trans(spi, 4);
}

379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585
#ifdef CONFIG_GPIOLIB
enum {
	MCP251X_GPIO_TX0RTS = 0,		/* inputs */
	MCP251X_GPIO_TX1RTS,
	MCP251X_GPIO_TX2RTS,
	MCP251X_GPIO_RX0BF,			/* outputs */
	MCP251X_GPIO_RX1BF,
};

#define MCP251X_GPIO_INPUT_MASK \
	GENMASK(MCP251X_GPIO_TX2RTS, MCP251X_GPIO_TX0RTS)
#define MCP251X_GPIO_OUTPUT_MASK \
	GENMASK(MCP251X_GPIO_RX1BF, MCP251X_GPIO_RX0BF)

static const char * const mcp251x_gpio_names[] = {
	[MCP251X_GPIO_TX0RTS] = "TX0RTS",	/* inputs */
	[MCP251X_GPIO_TX1RTS] = "TX1RTS",
	[MCP251X_GPIO_TX2RTS] = "TX2RTS",
	[MCP251X_GPIO_RX0BF] = "RX0BF",		/* outputs */
	[MCP251X_GPIO_RX1BF] = "RX1BF",
};

static inline bool mcp251x_gpio_is_input(unsigned int offset)
{
	return offset <= MCP251X_GPIO_TX2RTS;
}

static int mcp251x_gpio_request(struct gpio_chip *chip,
				unsigned int offset)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	u8 val;

	/* nothing to be done for inputs */
	if (mcp251x_gpio_is_input(offset))
		return 0;

	val = BFPCTRL_BFE(offset - MCP251X_GPIO_RX0BF);

	mutex_lock(&priv->mcp_lock);
	mcp251x_write_bits(priv->spi, BFPCTRL, val, val);
	mutex_unlock(&priv->mcp_lock);

	priv->reg_bfpctrl |= val;

	return 0;
}

static void mcp251x_gpio_free(struct gpio_chip *chip,
			      unsigned int offset)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	u8 val;

	/* nothing to be done for inputs */
	if (mcp251x_gpio_is_input(offset))
		return;

	val = BFPCTRL_BFE(offset - MCP251X_GPIO_RX0BF);

	mutex_lock(&priv->mcp_lock);
	mcp251x_write_bits(priv->spi, BFPCTRL, val, 0);
	mutex_unlock(&priv->mcp_lock);

	priv->reg_bfpctrl &= ~val;
}

static int mcp251x_gpio_get_direction(struct gpio_chip *chip,
				      unsigned int offset)
{
	if (mcp251x_gpio_is_input(offset))
		return GPIOF_DIR_IN;

	return GPIOF_DIR_OUT;
}

static int mcp251x_gpio_get(struct gpio_chip *chip, unsigned int offset)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	u8 reg, mask, val;

	if (mcp251x_gpio_is_input(offset)) {
		reg = TXRTSCTRL;
		mask = TXRTSCTRL_RTS(offset);
	} else {
		reg = BFPCTRL;
		mask = BFPCTRL_BFS(offset - MCP251X_GPIO_RX0BF);
	}

	mutex_lock(&priv->mcp_lock);
	val = mcp251x_read_reg(priv->spi, reg);
	mutex_unlock(&priv->mcp_lock);

	return !!(val & mask);
}

static int mcp251x_gpio_get_multiple(struct gpio_chip *chip,
				     unsigned long *maskp, unsigned long *bitsp)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	unsigned long bits = 0;
	u8 val;

	mutex_lock(&priv->mcp_lock);
	if (maskp[0] & MCP251X_GPIO_INPUT_MASK) {
		val = mcp251x_read_reg(priv->spi, TXRTSCTRL);
		val = FIELD_GET(TXRTSCTRL_RTS_MASK, val);
		bits |= FIELD_PREP(MCP251X_GPIO_INPUT_MASK, val);
	}
	if (maskp[0] & MCP251X_GPIO_OUTPUT_MASK) {
		val = mcp251x_read_reg(priv->spi, BFPCTRL);
		val = FIELD_GET(BFPCTRL_BFS_MASK, val);
		bits |= FIELD_PREP(MCP251X_GPIO_OUTPUT_MASK, val);
	}
	mutex_unlock(&priv->mcp_lock);

	bitsp[0] = bits;
	return 0;
}

static void mcp251x_gpio_set(struct gpio_chip *chip, unsigned int offset,
			     int value)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	u8 mask, val;

	mask = BFPCTRL_BFS(offset - MCP251X_GPIO_RX0BF);
	val = value ? mask : 0;

	mutex_lock(&priv->mcp_lock);
	mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
	mutex_unlock(&priv->mcp_lock);

	priv->reg_bfpctrl &= ~mask;
	priv->reg_bfpctrl |= val;
}

static void
mcp251x_gpio_set_multiple(struct gpio_chip *chip,
			  unsigned long *maskp, unsigned long *bitsp)
{
	struct mcp251x_priv *priv = gpiochip_get_data(chip);
	u8 mask, val;

	mask = FIELD_GET(MCP251X_GPIO_OUTPUT_MASK, maskp[0]);
	mask = FIELD_PREP(BFPCTRL_BFS_MASK, mask);

	val = FIELD_GET(MCP251X_GPIO_OUTPUT_MASK, bitsp[0]);
	val = FIELD_PREP(BFPCTRL_BFS_MASK, val);

	if (!mask)
		return;

	mutex_lock(&priv->mcp_lock);
	mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
	mutex_unlock(&priv->mcp_lock);

	priv->reg_bfpctrl &= ~mask;
	priv->reg_bfpctrl |= val;
}

static void mcp251x_gpio_restore(struct spi_device *spi)
{
	struct mcp251x_priv *priv = spi_get_drvdata(spi);

	mcp251x_write_reg(spi, BFPCTRL, priv->reg_bfpctrl);
}

static int mcp251x_gpio_setup(struct mcp251x_priv *priv)
{
	struct gpio_chip *gpio = &priv->gpio;

	if (!device_property_present(&priv->spi->dev, "gpio-controller"))
		return 0;

	/* gpiochip handles TX[0..2]RTS and RX[0..1]BF */
	gpio->label = priv->spi->modalias;
	gpio->parent = &priv->spi->dev;
	gpio->owner = THIS_MODULE;
	gpio->request = mcp251x_gpio_request;
	gpio->free = mcp251x_gpio_free;
	gpio->get_direction = mcp251x_gpio_get_direction;
	gpio->get = mcp251x_gpio_get;
	gpio->get_multiple = mcp251x_gpio_get_multiple;
	gpio->set = mcp251x_gpio_set;
	gpio->set_multiple = mcp251x_gpio_set_multiple;
	gpio->base = -1;
	gpio->ngpio = ARRAY_SIZE(mcp251x_gpio_names);
	gpio->names = mcp251x_gpio_names;
	gpio->can_sleep = true;
#ifdef CONFIG_OF_GPIO
	gpio->of_node = priv->spi->dev.of_node;
#endif

	return devm_gpiochip_add_data(&priv->spi->dev, gpio, priv);
}
#else
static inline void mcp251x_gpio_restore(struct spi_device *spi)
{
}

static inline int mcp251x_gpio_setup(struct mcp251x_priv *priv)
{
	return 0;
}
#endif

586 587 588
static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
				int len, int tx_buf_idx)
{
589
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
590

591
	if (mcp251x_is_2510(spi)) {
592 593 594 595 596 597 598 599 600 601 602 603 604 605
		int i;

		for (i = 1; i < TXBDAT_OFF + len; i++)
			mcp251x_write_reg(spi, TXBCTRL(tx_buf_idx) + i,
					  buf[i]);
	} else {
		memcpy(priv->spi_tx_buf, buf, TXBDAT_OFF + len);
		mcp251x_spi_trans(spi, TXBDAT_OFF + len);
	}
}

static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,
			  int tx_buf_idx)
{
606
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627
	u32 sid, eid, exide, rtr;
	u8 buf[SPI_TRANSFER_BUF_LEN];

	exide = (frame->can_id & CAN_EFF_FLAG) ? 1 : 0; /* Extended ID Enable */
	if (exide)
		sid = (frame->can_id & CAN_EFF_MASK) >> 18;
	else
		sid = frame->can_id & CAN_SFF_MASK; /* Standard ID */
	eid = frame->can_id & CAN_EFF_MASK; /* Extended ID */
	rtr = (frame->can_id & CAN_RTR_FLAG) ? 1 : 0; /* Remote transmission */

	buf[TXBCTRL_OFF] = INSTRUCTION_LOAD_TXB(tx_buf_idx);
	buf[TXBSIDH_OFF] = sid >> SIDH_SHIFT;
	buf[TXBSIDL_OFF] = ((sid & SIDL_SID_MASK) << SIDL_SID_SHIFT) |
		(exide << SIDL_EXIDE_SHIFT) |
		((eid >> SIDL_EID_SHIFT) & SIDL_EID_MASK);
	buf[TXBEID8_OFF] = GET_BYTE(eid, 1);
	buf[TXBEID0_OFF] = GET_BYTE(eid, 0);
	buf[TXBDLC_OFF] = (rtr << DLC_RTR_SHIFT) | frame->can_dlc;
	memcpy(buf + TXBDAT_OFF, frame->data, frame->can_dlc);
	mcp251x_hw_tx_frame(spi, buf, frame->can_dlc, tx_buf_idx);
628 629 630 631

	/* use INSTRUCTION_RTS, to avoid "repeated frame problem" */
	priv->spi_tx_buf[0] = INSTRUCTION_RTS(1 << tx_buf_idx);
	mcp251x_spi_trans(priv->spi, 1);
632 633 634 635 636
}

static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
				int buf_idx)
{
637
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
638

639
	if (mcp251x_is_2510(spi)) {
640 641 642 643
		int i, len;

		for (i = 1; i < RXBDAT_OFF; i++)
			buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
644 645

		len = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK);
646 647 648 649 650 651 652 653 654 655 656
		for (; i < (RXBDAT_OFF + len); i++)
			buf[i] = mcp251x_read_reg(spi, RXBCTRL(buf_idx) + i);
	} else {
		priv->spi_tx_buf[RXBCTRL_OFF] = INSTRUCTION_READ_RXB(buf_idx);
		mcp251x_spi_trans(spi, SPI_TRANSFER_BUF_LEN);
		memcpy(buf, priv->spi_rx_buf, SPI_TRANSFER_BUF_LEN);
	}
}

static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx)
{
657
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688
	struct sk_buff *skb;
	struct can_frame *frame;
	u8 buf[SPI_TRANSFER_BUF_LEN];

	skb = alloc_can_skb(priv->net, &frame);
	if (!skb) {
		dev_err(&spi->dev, "cannot allocate RX skb\n");
		priv->net->stats.rx_dropped++;
		return;
	}

	mcp251x_hw_rx_frame(spi, buf, buf_idx);
	if (buf[RXBSIDL_OFF] & RXBSIDL_IDE) {
		/* Extended ID format */
		frame->can_id = CAN_EFF_FLAG;
		frame->can_id |=
			/* Extended ID part */
			SET_BYTE(buf[RXBSIDL_OFF] & RXBSIDL_EID, 2) |
			SET_BYTE(buf[RXBEID8_OFF], 1) |
			SET_BYTE(buf[RXBEID0_OFF], 0) |
			/* Standard ID part */
			(((buf[RXBSIDH_OFF] << RXBSIDH_SHIFT) |
			  (buf[RXBSIDL_OFF] >> RXBSIDL_SHIFT)) << 18);
		/* Remote transmission request */
		if (buf[RXBDLC_OFF] & RXBDLC_RTR)
			frame->can_id |= CAN_RTR_FLAG;
	} else {
		/* Standard ID format */
		frame->can_id =
			(buf[RXBSIDH_OFF] << RXBSIDH_SHIFT) |
			(buf[RXBSIDL_OFF] >> RXBSIDL_SHIFT);
689 690
		if (buf[RXBSIDL_OFF] & RXBSIDL_SRR)
			frame->can_id |= CAN_RTR_FLAG;
691 692
	}
	/* Data length */
693
	frame->can_dlc = get_can_dlc(buf[RXBDLC_OFF] & RXBDLC_LEN_MASK);
694 695 696 697
	memcpy(frame->data, buf + RXBDAT_OFF, frame->can_dlc);

	priv->net->stats.rx_packets++;
	priv->net->stats.rx_bytes += frame->can_dlc;
698 699 700

	can_led_event(priv->net, CAN_LED_EVENT_RX);

701
	netif_rx_ni(skb);
702 703 704 705 706 707 708
}

static void mcp251x_hw_sleep(struct spi_device *spi)
{
	mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP);
}

709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741
/* May only be called when device is sleeping! */
static int mcp251x_hw_wake(struct spi_device *spi)
{
	unsigned long timeout;

	/* Force wakeup interrupt to wake device, but don't execute IST */
	disable_irq(spi->irq);
	mcp251x_write_2regs(spi, CANINTE, CANINTE_WAKIE, CANINTF_WAKIF);

	/* Wait for oscillator startup timer after wake up */
	mdelay(MCP251X_OST_DELAY_MS);

	/* Put device into config mode */
	mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_CONF);

	/* Wait for the device to enter config mode */
	timeout = jiffies + HZ;
	while ((mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) !=
			CANCTRL_REQOP_CONF) {
		schedule();
		if (time_after(jiffies, timeout)) {
			dev_err(&spi->dev, "MCP251x didn't enter in config mode\n");
			return -EBUSY;
		}
	}

	/* Disable and clear pending interrupts */
	mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00);
	enable_irq(spi->irq);

	return 0;
}

742 743 744 745 746 747 748 749 750 751 752
static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb,
					   struct net_device *net)
{
	struct mcp251x_priv *priv = netdev_priv(net);
	struct spi_device *spi = priv->spi;

	if (priv->tx_skb || priv->tx_len) {
		dev_warn(&spi->dev, "hard_xmit called while tx busy\n");
		return NETDEV_TX_BUSY;
	}

753
	if (can_dropped_invalid_skb(net, skb))
754 755 756 757 758 759 760 761 762 763 764 765 766 767 768
		return NETDEV_TX_OK;

	netif_stop_queue(net);
	priv->tx_skb = skb;
	queue_work(priv->wq, &priv->tx_work);

	return NETDEV_TX_OK;
}

static int mcp251x_do_set_mode(struct net_device *net, enum can_mode mode)
{
	struct mcp251x_priv *priv = netdev_priv(net);

	switch (mode) {
	case CAN_MODE_START:
769
		mcp251x_clean(net);
770 771 772 773 774
		/* We have to delay work since SPI I/O may sleep */
		priv->can.state = CAN_STATE_ERROR_ACTIVE;
		priv->restart_tx = 1;
		if (priv->can.restart_ms == 0)
			priv->after_suspend = AFTER_SUSPEND_RESTART;
775
		queue_work(priv->wq, &priv->restart_work);
776 777 778 779 780 781 782 783
		break;
	default:
		return -EOPNOTSUPP;
	}

	return 0;
}

784
static int mcp251x_set_normal_mode(struct spi_device *spi)
785
{
786
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
787 788 789 790 791
	unsigned long timeout;

	/* Enable interrupts */
	mcp251x_write_reg(spi, CANINTE,
			  CANINTE_ERRIE | CANINTE_TX2IE | CANINTE_TX1IE |
792
			  CANINTE_TX0IE | CANINTE_RX1IE | CANINTE_RX0IE);
793 794 795 796

	if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) {
		/* Put device into loopback mode */
		mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK);
797 798 799
	} else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) {
		/* Put device into listen-only mode */
		mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY);
800 801
	} else {
		/* Put device into normal mode */
802
		mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL);
803 804 805 806 807 808

		/* Wait for the device to enter normal mode */
		timeout = jiffies + HZ;
		while (mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) {
			schedule();
			if (time_after(jiffies, timeout)) {
809
				dev_err(&spi->dev, "MCP251x didn't enter in normal mode\n");
810
				return -EBUSY;
811 812 813 814
			}
		}
	}
	priv->can.state = CAN_STATE_ERROR_ACTIVE;
815
	return 0;
816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
}

static int mcp251x_do_set_bittiming(struct net_device *net)
{
	struct mcp251x_priv *priv = netdev_priv(net);
	struct can_bittiming *bt = &priv->can.bittiming;
	struct spi_device *spi = priv->spi;

	mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) |
			  (bt->brp - 1));
	mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE |
			  (priv->can.ctrlmode & CAN_CTRLMODE_3_SAMPLES ?
			   CNF2_SAM : 0) |
			  ((bt->phase_seg1 - 1) << CNF2_PS1_SHIFT) |
			  (bt->prop_seg - 1));
	mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK,
			   (bt->phase_seg2 - 1));
833 834 835 836
	dev_dbg(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n",
		mcp251x_read_reg(spi, CNF1),
		mcp251x_read_reg(spi, CNF2),
		mcp251x_read_reg(spi, CNF3));
837 838 839 840

	return 0;
}

841
static int mcp251x_setup(struct net_device *net, struct spi_device *spi)
842
{
843
	mcp251x_do_set_bittiming(net);
844

845 846 847 848
	mcp251x_write_reg(spi, RXBCTRL(0),
			  RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1);
	mcp251x_write_reg(spi, RXBCTRL(1),
			  RXBCTRL_RXM0 | RXBCTRL_RXM1);
849 850 851
	return 0;
}

852
static int mcp251x_hw_reset(struct spi_device *spi)
853
{
854
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
855
	unsigned long timeout;
856
	int ret;
857 858 859

	/* Wait for oscillator startup timer after power up */
	mdelay(MCP251X_OST_DELAY_MS);
860 861

	priv->spi_tx_buf[0] = INSTRUCTION_RESET;
862 863 864 865 866 867
	ret = mcp251x_spi_trans(spi, 1);
	if (ret)
		return ret;

	/* Wait for oscillator startup timer after reset */
	mdelay(MCP251X_OST_DELAY_MS);
868

869 870 871 872 873 874 875 876 877 878 879 880 881
	/* Wait for reset to finish */
	timeout = jiffies + HZ;
	while ((mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK) !=
	       CANCTRL_REQOP_CONF) {
		usleep_range(MCP251X_OST_DELAY_MS * 1000,
			     MCP251X_OST_DELAY_MS * 1000 * 2);

		if (time_after(jiffies, timeout)) {
			dev_err(&spi->dev,
				"MCP251x didn't enter in conf mode after reset\n");
			return -EBUSY;
		}
	}
882
	return 0;
883 884 885 886
}

static int mcp251x_hw_probe(struct spi_device *spi)
{
887 888 889 890 891 892
	u8 ctrl;
	int ret;

	ret = mcp251x_hw_reset(spi);
	if (ret)
		return ret;
893

894
	ctrl = mcp251x_read_reg(spi, CANCTRL);
895

896
	dev_dbg(&spi->dev, "CANCTRL 0x%02x\n", ctrl);
897

898 899 900
	/* Check for power up default value */
	if ((ctrl & 0x17) != 0x07)
		return -ENODEV;
901

902
	return 0;
903 904
}

905 906
static int mcp251x_power_enable(struct regulator *reg, int enable)
{
907
	if (IS_ERR_OR_NULL(reg))
908 909 910 911 912 913 914 915
		return 0;

	if (enable)
		return regulator_enable(reg);
	else
		return regulator_disable(reg);
}

916 917 918 919 920 921 922
static int mcp251x_stop(struct net_device *net)
{
	struct mcp251x_priv *priv = netdev_priv(net);
	struct spi_device *spi = priv->spi;

	close_candev(net);

923 924 925 926 927 928 929
	priv->force_quit = 1;
	free_irq(spi->irq, priv);
	destroy_workqueue(priv->wq);
	priv->wq = NULL;

	mutex_lock(&priv->mcp_lock);

930
	/* Disable and clear pending interrupts */
931
	mcp251x_write_2regs(spi, CANINTE, 0x00, 0x00);
932 933

	mcp251x_write_reg(spi, TXBCTRL(0), 0);
934
	mcp251x_clean(net);
935 936 937

	mcp251x_hw_sleep(spi);

938
	mcp251x_power_enable(priv->transceiver, 0);
939 940 941

	priv->can.state = CAN_STATE_STOPPED;

942 943
	mutex_unlock(&priv->mcp_lock);

944 945
	can_led_event(net, CAN_LED_EVENT_STOP);

946 947 948
	return 0;
}

949 950 951 952 953 954 955
static void mcp251x_error_skb(struct net_device *net, int can_id, int data1)
{
	struct sk_buff *skb;
	struct can_frame *frame;

	skb = alloc_can_err_skb(net, &frame);
	if (skb) {
956
		frame->can_id |= can_id;
957
		frame->data[1] = data1;
958
		netif_rx_ni(skb);
959
	} else {
960
		netdev_err(net, "cannot allocate error skb\n");
961 962 963
	}
}

964 965 966 967 968 969 970 971
static void mcp251x_tx_work_handler(struct work_struct *ws)
{
	struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
						 tx_work);
	struct spi_device *spi = priv->spi;
	struct net_device *net = priv->net;
	struct can_frame *frame;

972
	mutex_lock(&priv->mcp_lock);
973 974 975
	if (priv->tx_skb) {
		if (priv->can.state == CAN_STATE_BUS_OFF) {
			mcp251x_clean(net);
976 977 978 979 980 981 982 983 984
		} else {
			frame = (struct can_frame *)priv->tx_skb->data;

			if (frame->can_dlc > CAN_FRAME_MAX_DATA_LEN)
				frame->can_dlc = CAN_FRAME_MAX_DATA_LEN;
			mcp251x_hw_tx(spi, frame, 0);
			priv->tx_len = 1 + frame->can_dlc;
			can_put_echo_skb(priv->tx_skb, net, 0);
			priv->tx_skb = NULL;
985 986
		}
	}
987
	mutex_unlock(&priv->mcp_lock);
988 989
}

990
static void mcp251x_restart_work_handler(struct work_struct *ws)
991 992
{
	struct mcp251x_priv *priv = container_of(ws, struct mcp251x_priv,
993
						 restart_work);
994 995 996
	struct spi_device *spi = priv->spi;
	struct net_device *net = priv->net;

997
	mutex_lock(&priv->mcp_lock);
998
	if (priv->after_suspend) {
999 1000 1001
		if (priv->after_suspend & AFTER_SUSPEND_POWER) {
			mcp251x_hw_reset(spi);
			mcp251x_setup(net, spi);
1002
			mcp251x_gpio_restore(spi);
1003 1004 1005
		} else {
			mcp251x_hw_wake(spi);
		}
1006
		priv->force_quit = 0;
1007 1008 1009 1010
		if (priv->after_suspend & AFTER_SUSPEND_RESTART) {
			mcp251x_set_normal_mode(spi);
		} else if (priv->after_suspend & AFTER_SUSPEND_UP) {
			netif_device_attach(net);
1011
			mcp251x_clean(net);
1012
			mcp251x_set_normal_mode(spi);
1013
			netif_wake_queue(net);
1014 1015 1016 1017 1018 1019
		} else {
			mcp251x_hw_sleep(spi);
		}
		priv->after_suspend = 0;
	}

1020 1021 1022 1023 1024 1025 1026 1027 1028
	if (priv->restart_tx) {
		priv->restart_tx = 0;
		mcp251x_write_reg(spi, TXBCTRL(0), 0);
		mcp251x_clean(net);
		netif_wake_queue(net);
		mcp251x_error_skb(net, CAN_ERR_RESTARTED, 0);
	}
	mutex_unlock(&priv->mcp_lock);
}
1029

1030 1031 1032 1033 1034
static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
{
	struct mcp251x_priv *priv = dev_id;
	struct spi_device *spi = priv->spi;
	struct net_device *net = priv->net;
1035

1036 1037 1038
	mutex_lock(&priv->mcp_lock);
	while (!priv->force_quit) {
		enum can_state new_state;
1039
		u8 intf, eflag;
1040
		u8 clear_intf = 0;
1041
		int can_id = 0, data1 = 0;
1042

1043 1044
		mcp251x_read_2regs(spi, CANINTF, &intf, &eflag);

1045 1046 1047
		/* mask out flags we don't care about */
		intf &= CANINTF_RX | CANINTF_TX | CANINTF_ERR;

1048
		/* receive buffer 0 */
1049 1050
		if (intf & CANINTF_RX0IF) {
			mcp251x_hw_rx(spi, 0);
1051 1052
			/* Free one buffer ASAP
			 * (The MCP2515/25625 does this automatically.)
1053 1054
			 */
			if (mcp251x_is_2510(spi))
1055 1056
				mcp251x_write_bits(spi, CANINTF,
						   CANINTF_RX0IF, 0x00);
1057 1058
		}

1059 1060
		/* receive buffer 1 */
		if (intf & CANINTF_RX1IF) {
1061
			mcp251x_hw_rx(spi, 1);
1062
			/* The MCP2515/25625 does this automatically. */
1063 1064
			if (mcp251x_is_2510(spi))
				clear_intf |= CANINTF_RX1IF;
1065
		}
1066

1067
		/* any error or tx interrupt we need to clear? */
1068 1069
		if (intf & (CANINTF_ERR | CANINTF_TX))
			clear_intf |= intf & (CANINTF_ERR | CANINTF_TX);
1070 1071
		if (clear_intf)
			mcp251x_write_bits(spi, CANINTF, clear_intf, 0x00);
1072

1073
		if (eflag & (EFLG_RX0OVR | EFLG_RX1OVR))
1074
			mcp251x_write_bits(spi, EFLG, eflag, 0x00);
1075

1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105
		/* Update can state */
		if (eflag & EFLG_TXBO) {
			new_state = CAN_STATE_BUS_OFF;
			can_id |= CAN_ERR_BUSOFF;
		} else if (eflag & EFLG_TXEP) {
			new_state = CAN_STATE_ERROR_PASSIVE;
			can_id |= CAN_ERR_CRTL;
			data1 |= CAN_ERR_CRTL_TX_PASSIVE;
		} else if (eflag & EFLG_RXEP) {
			new_state = CAN_STATE_ERROR_PASSIVE;
			can_id |= CAN_ERR_CRTL;
			data1 |= CAN_ERR_CRTL_RX_PASSIVE;
		} else if (eflag & EFLG_TXWAR) {
			new_state = CAN_STATE_ERROR_WARNING;
			can_id |= CAN_ERR_CRTL;
			data1 |= CAN_ERR_CRTL_TX_WARNING;
		} else if (eflag & EFLG_RXWAR) {
			new_state = CAN_STATE_ERROR_WARNING;
			can_id |= CAN_ERR_CRTL;
			data1 |= CAN_ERR_CRTL_RX_WARNING;
		} else {
			new_state = CAN_STATE_ERROR_ACTIVE;
		}

		/* Update can state statistics */
		switch (priv->can.state) {
		case CAN_STATE_ERROR_ACTIVE:
			if (new_state >= CAN_STATE_ERROR_WARNING &&
			    new_state <= CAN_STATE_BUS_OFF)
				priv->can.can_stats.error_warning++;
1106
			fallthrough;
1107
		case CAN_STATE_ERROR_WARNING:
1108 1109 1110 1111 1112 1113 1114 1115 1116
			if (new_state >= CAN_STATE_ERROR_PASSIVE &&
			    new_state <= CAN_STATE_BUS_OFF)
				priv->can.can_stats.error_passive++;
			break;
		default:
			break;
		}
		priv->can.state = new_state;

1117 1118 1119
		if (intf & CANINTF_ERRIF) {
			/* Handle overflow counters */
			if (eflag & (EFLG_RX0OVR | EFLG_RX1OVR)) {
1120
				if (eflag & EFLG_RX0OVR) {
1121
					net->stats.rx_over_errors++;
1122 1123 1124
					net->stats.rx_errors++;
				}
				if (eflag & EFLG_RX1OVR) {
1125
					net->stats.rx_over_errors++;
1126 1127
					net->stats.rx_errors++;
				}
1128 1129
				can_id |= CAN_ERR_CRTL;
				data1 |= CAN_ERR_CRTL_RX_OVERFLOW;
1130
			}
1131
			mcp251x_error_skb(net, can_id, data1);
1132 1133 1134 1135
		}

		if (priv->can.state == CAN_STATE_BUS_OFF) {
			if (priv->can.restart_ms == 0) {
1136
				priv->force_quit = 1;
1137
				priv->can.can_stats.bus_off++;
1138 1139
				can_bus_off(net);
				mcp251x_hw_sleep(spi);
1140
				break;
1141 1142 1143 1144 1145 1146
			}
		}

		if (intf == 0)
			break;

1147
		if (intf & CANINTF_TX) {
1148 1149
			net->stats.tx_packets++;
			net->stats.tx_bytes += priv->tx_len - 1;
1150
			can_led_event(net, CAN_LED_EVENT_TX);
1151 1152 1153 1154 1155 1156
			if (priv->tx_len) {
				can_get_echo_skb(net, 0);
				priv->tx_len = 0;
			}
			netif_wake_queue(net);
		}
1157 1158 1159 1160
	}
	mutex_unlock(&priv->mcp_lock);
	return IRQ_HANDLED;
}
1161

1162 1163 1164 1165
static int mcp251x_open(struct net_device *net)
{
	struct mcp251x_priv *priv = netdev_priv(net);
	struct spi_device *spi = priv->spi;
1166
	unsigned long flags = 0;
1167 1168 1169 1170 1171 1172 1173 1174 1175
	int ret;

	ret = open_candev(net);
	if (ret) {
		dev_err(&spi->dev, "unable to set initial baudrate!\n");
		return ret;
	}

	mutex_lock(&priv->mcp_lock);
1176
	mcp251x_power_enable(priv->transceiver, 1);
1177 1178 1179 1180 1181

	priv->force_quit = 0;
	priv->tx_skb = NULL;
	priv->tx_len = 0;

1182
	if (!dev_fwnode(&spi->dev))
1183 1184
		flags = IRQF_TRIGGER_FALLING;

1185
	ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist,
1186 1187
				   flags | IRQF_ONESHOT, dev_name(&spi->dev),
				   priv);
1188 1189
	if (ret) {
		dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq);
1190
		goto out_close;
1191 1192
	}

1193 1194
	priv->wq = alloc_workqueue("mcp251x_wq", WQ_FREEZABLE | WQ_MEM_RECLAIM,
				   0);
1195 1196 1197 1198
	if (!priv->wq) {
		ret = -ENOMEM;
		goto out_clean;
	}
1199 1200 1201
	INIT_WORK(&priv->tx_work, mcp251x_tx_work_handler);
	INIT_WORK(&priv->restart_work, mcp251x_restart_work_handler);

1202
	ret = mcp251x_hw_wake(spi);
1203 1204
	if (ret)
		goto out_free_wq;
1205
	ret = mcp251x_setup(net, spi);
1206 1207
	if (ret)
		goto out_free_wq;
1208
	ret = mcp251x_set_normal_mode(spi);
1209 1210
	if (ret)
		goto out_free_wq;
1211 1212 1213

	can_led_event(net, CAN_LED_EVENT_OPEN);

1214
	netif_wake_queue(net);
1215
	mutex_unlock(&priv->mcp_lock);
1216

1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
	return 0;

out_free_wq:
	destroy_workqueue(priv->wq);
out_clean:
	free_irq(spi->irq, priv);
	mcp251x_hw_sleep(spi);
out_close:
	mcp251x_power_enable(priv->transceiver, 0);
	close_candev(net);
1227 1228
	mutex_unlock(&priv->mcp_lock);
	return ret;
1229 1230 1231 1232 1233 1234
}

static const struct net_device_ops mcp251x_netdev_ops = {
	.ndo_open = mcp251x_open,
	.ndo_stop = mcp251x_stop,
	.ndo_start_xmit = mcp251x_hard_start_xmit,
1235
	.ndo_change_mtu = can_change_mtu,
1236 1237
};

1238 1239 1240 1241 1242 1243 1244 1245 1246
static const struct of_device_id mcp251x_of_match[] = {
	{
		.compatible	= "microchip,mcp2510",
		.data		= (void *)CAN_MCP251X_MCP2510,
	},
	{
		.compatible	= "microchip,mcp2515",
		.data		= (void *)CAN_MCP251X_MCP2515,
	},
1247 1248 1249 1250
	{
		.compatible	= "microchip,mcp25625",
		.data		= (void *)CAN_MCP251X_MCP25625,
	},
1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263
	{ }
};
MODULE_DEVICE_TABLE(of, mcp251x_of_match);

static const struct spi_device_id mcp251x_id_table[] = {
	{
		.name		= "mcp2510",
		.driver_data	= (kernel_ulong_t)CAN_MCP251X_MCP2510,
	},
	{
		.name		= "mcp2515",
		.driver_data	= (kernel_ulong_t)CAN_MCP251X_MCP2515,
	},
1264 1265 1266 1267
	{
		.name		= "mcp25625",
		.driver_data	= (kernel_ulong_t)CAN_MCP251X_MCP25625,
	},
1268 1269 1270 1271
	{ }
};
MODULE_DEVICE_TABLE(spi, mcp251x_id_table);

B
Bill Pemberton 已提交
1272
static int mcp251x_can_probe(struct spi_device *spi)
1273
{
1274
	const void *match = device_get_match_data(&spi->dev);
1275 1276
	struct net_device *net;
	struct mcp251x_priv *priv;
1277
	struct clk *clk;
1278 1279
	u32 freq;
	int ret;
1280

1281 1282 1283 1284 1285
	clk = devm_clk_get_optional(&spi->dev, NULL);
	if (IS_ERR(clk))
		return PTR_ERR(clk);

	freq = clk_get_rate(clk);
1286 1287
	if (freq == 0)
		device_property_read_u32(&spi->dev, "clock-frequency", &freq);
1288

1289 1290 1291
	/* Sanity check */
	if (freq < 1000000 || freq > 25000000)
		return -ERANGE;
1292 1293 1294

	/* Allocate can/net device */
	net = alloc_candev(sizeof(struct mcp251x_priv), TX_ECHO_SKB_MAX);
1295 1296 1297
	if (!net)
		return -ENOMEM;

1298 1299 1300
	ret = clk_prepare_enable(clk);
	if (ret)
		goto out_free;
1301 1302 1303 1304 1305 1306 1307

	net->netdev_ops = &mcp251x_netdev_ops;
	net->flags |= IFF_ECHO;

	priv = netdev_priv(net);
	priv->can.bittiming_const = &mcp251x_bittiming_const;
	priv->can.do_set_mode = mcp251x_do_set_mode;
1308
	priv->can.clock.freq = freq / 2;
1309 1310
	priv->can.ctrlmode_supported = CAN_CTRLMODE_3_SAMPLES |
		CAN_CTRLMODE_LOOPBACK | CAN_CTRLMODE_LISTENONLY;
1311 1312
	if (match)
		priv->model = (enum mcp251x_model)match;
1313 1314
	else
		priv->model = spi_get_device_id(spi)->driver_data;
1315
	priv->net = net;
1316
	priv->clk = clk;
1317

1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329
	spi_set_drvdata(spi, priv);

	/* Configure the SPI bus */
	spi->bits_per_word = 8;
	if (mcp251x_is_2510(spi))
		spi->max_speed_hz = spi->max_speed_hz ? : 5 * 1000 * 1000;
	else
		spi->max_speed_hz = spi->max_speed_hz ? : 10 * 1000 * 1000;
	ret = spi_setup(spi);
	if (ret)
		goto out_clk;

1330 1331
	priv->power = devm_regulator_get_optional(&spi->dev, "vdd");
	priv->transceiver = devm_regulator_get_optional(&spi->dev, "xceiver");
1332 1333 1334
	if ((PTR_ERR(priv->power) == -EPROBE_DEFER) ||
	    (PTR_ERR(priv->transceiver) == -EPROBE_DEFER)) {
		ret = -EPROBE_DEFER;
1335
		goto out_clk;
1336 1337 1338 1339
	}

	ret = mcp251x_power_enable(priv->power, 1);
	if (ret)
1340
		goto out_clk;
1341

1342
	priv->spi = spi;
1343
	mutex_init(&priv->mcp_lock);
1344

1345 1346 1347 1348 1349
	priv->spi_tx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN,
					GFP_KERNEL);
	if (!priv->spi_tx_buf) {
		ret = -ENOMEM;
		goto error_probe;
1350 1351
	}

1352 1353 1354 1355 1356
	priv->spi_rx_buf = devm_kzalloc(&spi->dev, SPI_TRANSFER_BUF_LEN,
					GFP_KERNEL);
	if (!priv->spi_rx_buf) {
		ret = -ENOMEM;
		goto error_probe;
1357 1358 1359 1360
	}

	SET_NETDEV_DEV(net, &spi->dev);

1361
	/* Here is OK to not lock the MCP, no one knows about it yet */
1362
	ret = mcp251x_hw_probe(spi);
1363 1364
	if (ret) {
		if (ret == -ENODEV)
1365 1366
			dev_err(&spi->dev, "Cannot initialize MCP%x. Wrong wiring?\n",
				priv->model);
1367
		goto error_probe;
1368
	}
1369

1370 1371 1372
	mcp251x_hw_sleep(spi);

	ret = register_candev(net);
1373 1374 1375 1376 1377
	if (ret)
		goto error_probe;

	devm_can_led_init(net);

1378 1379 1380 1381
	ret = mcp251x_gpio_setup(priv);
	if (ret)
		goto error_probe;

1382
	netdev_info(net, "MCP%x successfully initialized.\n", priv->model);
1383
	return 0;
1384

1385
error_probe:
1386
	mcp251x_power_enable(priv->power, 0);
1387 1388

out_clk:
1389
	clk_disable_unprepare(clk);
1390 1391

out_free:
1392
	free_candev(net);
1393

1394
	dev_err(&spi->dev, "Probe failed, err=%d\n", -ret);
1395 1396 1397
	return ret;
}

B
Bill Pemberton 已提交
1398
static int mcp251x_can_remove(struct spi_device *spi)
1399
{
1400
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
1401 1402 1403 1404
	struct net_device *net = priv->net;

	unregister_candev(net);

1405 1406
	mcp251x_power_enable(priv->power, 0);

1407
	clk_disable_unprepare(priv->clk);
1408

1409
	free_candev(net);
1410 1411 1412 1413

	return 0;
}

1414
static int __maybe_unused mcp251x_can_suspend(struct device *dev)
1415
{
1416
	struct spi_device *spi = to_spi_device(dev);
1417
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
1418 1419
	struct net_device *net = priv->net;

1420 1421
	priv->force_quit = 1;
	disable_irq(spi->irq);
1422
	/* Note: at this point neither IST nor workqueues are running.
1423 1424
	 * open/stop cannot be called anyway so locking is not needed
	 */
1425 1426 1427 1428
	if (netif_running(net)) {
		netif_device_detach(net);

		mcp251x_hw_sleep(spi);
1429
		mcp251x_power_enable(priv->transceiver, 0);
1430 1431 1432 1433 1434
		priv->after_suspend = AFTER_SUSPEND_UP;
	} else {
		priv->after_suspend = AFTER_SUSPEND_DOWN;
	}

1435 1436
	mcp251x_power_enable(priv->power, 0);
	priv->after_suspend |= AFTER_SUSPEND_POWER;
1437 1438 1439 1440

	return 0;
}

1441
static int __maybe_unused mcp251x_can_resume(struct device *dev)
1442
{
1443
	struct spi_device *spi = to_spi_device(dev);
1444
	struct mcp251x_priv *priv = spi_get_drvdata(spi);
1445

1446
	if (priv->after_suspend & AFTER_SUSPEND_POWER)
1447
		mcp251x_power_enable(priv->power, 1);
1448
	if (priv->after_suspend & AFTER_SUSPEND_UP)
1449
		mcp251x_power_enable(priv->transceiver, 1);
1450 1451

	if (priv->after_suspend & (AFTER_SUSPEND_POWER | AFTER_SUSPEND_UP))
1452
		queue_work(priv->wq, &priv->restart_work);
1453
	else
1454 1455
		priv->after_suspend = 0;

1456 1457
	priv->force_quit = 0;
	enable_irq(spi->irq);
1458 1459
	return 0;
}
1460 1461 1462

static SIMPLE_DEV_PM_OPS(mcp251x_can_pm_ops, mcp251x_can_suspend,
	mcp251x_can_resume);
1463 1464 1465 1466

static struct spi_driver mcp251x_can_driver = {
	.driver = {
		.name = DEVICE_NAME,
1467
		.of_match_table = mcp251x_of_match,
1468
		.pm = &mcp251x_can_pm_ops,
1469
	},
1470
	.id_table = mcp251x_id_table,
1471
	.probe = mcp251x_can_probe,
B
Bill Pemberton 已提交
1472
	.remove = mcp251x_can_remove,
1473
};
1474
module_spi_driver(mcp251x_can_driver);
1475 1476 1477

MODULE_AUTHOR("Chris Elston <celston@katalix.com>, "
	      "Christian Pellegrin <chripell@evolware.org>");
1478
MODULE_DESCRIPTION("Microchip 251x/25625 CAN driver");
1479
MODULE_LICENSE("GPL v2");