Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
- Loading branch information
Showing
2 changed files
with
217 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
From 18059dc985a3f2523553a560bbc5100653fd3158 Mon Sep 17 00:00:00 2001 | ||
From: Alessandro Zummo <a.zummo@towertech.it> | ||
Date: Thu, 23 May 2013 20:57:04 +0200 | ||
Subject: [PATCH 4/4] beaglebone: TT3201 MCP2515 fixes | ||
|
||
Signed-off-by: Alessandro Zummo <a.zummo@towertech.it> | ||
--- | ||
drivers/net/can/mcp251x.c | 47 +++++++++++++++++++++++++++++++++++++---------- | ||
1 file changed, 37 insertions(+), 10 deletions(-) | ||
|
||
diff --git a/drivers/net/can/mcp251x.c b/drivers/net/can/mcp251x.c | ||
index 42b6d69..3555ef44 100644 | ||
--- a/drivers/net/can/mcp251x.c | ||
+++ b/drivers/net/can/mcp251x.c | ||
@@ -98,8 +98,9 @@ | ||
# define CANCTRL_REQOP_LOOPBACK 0x40 | ||
# define CANCTRL_REQOP_SLEEP 0x20 | ||
# define CANCTRL_REQOP_NORMAL 0x00 | ||
-# define CANCTRL_OSM 0x08 | ||
# define CANCTRL_ABAT 0x10 | ||
+# define CANCTRL_OSM 0x08 | ||
+# define CANCTRL_CLKEN 0x04 | ||
#define TEC 0x1c | ||
#define REC 0x1d | ||
#define CNF1 0x2a | ||
@@ -292,7 +293,7 @@ static void mcp251x_clean(struct net_device *net) | ||
/* | ||
* Note about handling of error return of mcp251x_spi_trans: accessing | ||
* registers via SPI is not really different conceptually than using | ||
- * normal I/O assembler instructions, although it's much more | ||
+ * normal I/O assembly 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) | ||
@@ -499,7 +500,7 @@ static void mcp251x_hw_rx(struct spi_device *spi, int buf_idx) | ||
|
||
static void mcp251x_hw_sleep(struct spi_device *spi) | ||
{ | ||
- mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP); | ||
+// mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_SLEEP); | ||
} | ||
|
||
static netdev_tx_t mcp251x_hard_start_xmit(struct sk_buff *skb, | ||
@@ -556,13 +557,16 @@ static int mcp251x_set_normal_mode(struct spi_device *spi) | ||
|
||
if (priv->can.ctrlmode & CAN_CTRLMODE_LOOPBACK) { | ||
/* Put device into loopback mode */ | ||
- mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK); | ||
+ mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LOOPBACK | CANCTRL_CLKEN); | ||
} else if (priv->can.ctrlmode & CAN_CTRLMODE_LISTENONLY) { | ||
/* Put device into listen-only mode */ | ||
- mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY); | ||
+ mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_LISTEN_ONLY | CANCTRL_CLKEN); | ||
} else { | ||
/* Put device into normal mode */ | ||
- mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL); | ||
+ mcp251x_write_reg(spi, CANCTRL, CANCTRL_REQOP_NORMAL | CANCTRL_CLKEN); | ||
+ | ||
+ netdev_info(priv->net, "CANCTRL: 0x%02x\n", | ||
+ mcp251x_read_reg(spi, CANCTRL)); | ||
|
||
/* Wait for the device to enter normal mode */ | ||
timeout = jiffies + HZ; | ||
@@ -594,11 +598,15 @@ static int mcp251x_do_set_bittiming(struct net_device *net) | ||
(bt->prop_seg - 1)); | ||
mcp251x_write_bits(spi, CNF3, CNF3_PHSEG2_MASK, | ||
(bt->phase_seg2 - 1)); | ||
- dev_info(&spi->dev, "CNF: 0x%02x 0x%02x 0x%02x\n", | ||
+ | ||
+ netdev_info(net, "CNF: 0x%02x 0x%02x 0x%02x\n", | ||
mcp251x_read_reg(spi, CNF1), | ||
mcp251x_read_reg(spi, CNF2), | ||
mcp251x_read_reg(spi, CNF3)); | ||
|
||
+ netdev_info(net, "CANCTRL: 0x%02x\n", | ||
+ mcp251x_read_reg(spi, CANCTRL)); | ||
+ | ||
return 0; | ||
} | ||
|
||
@@ -609,6 +617,7 @@ static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv, | ||
|
||
mcp251x_write_reg(spi, RXBCTRL(0), | ||
RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1); | ||
+ | ||
mcp251x_write_reg(spi, RXBCTRL(1), | ||
RXBCTRL_RXM0 | RXBCTRL_RXM1); | ||
return 0; | ||
@@ -736,7 +745,9 @@ static void mcp251x_tx_work_handler(struct work_struct *ws) | ||
mutex_lock(&priv->mcp_lock); | ||
if (priv->tx_skb) { | ||
if (priv->can.state == CAN_STATE_BUS_OFF) { | ||
+ | ||
mcp251x_clean(net); | ||
+ | ||
} else { | ||
frame = (struct can_frame *)priv->tx_skb->data; | ||
|
||
@@ -835,21 +846,37 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id) | ||
|
||
/* Update can state */ | ||
if (eflag & EFLG_TXBO) { | ||
+ | ||
+ netdev_err(net, "err: bus off\n"); | ||
+ | ||
new_state = CAN_STATE_BUS_OFF; | ||
can_id |= CAN_ERR_BUSOFF; | ||
} else if (eflag & EFLG_TXEP) { | ||
+ | ||
+ netdev_err(net, "err: txep\n"); | ||
+ | ||
new_state = CAN_STATE_ERROR_PASSIVE; | ||
can_id |= CAN_ERR_CRTL; | ||
data1 |= CAN_ERR_CRTL_TX_PASSIVE; | ||
+ | ||
} else if (eflag & EFLG_RXEP) { | ||
+ | ||
+ netdev_err(net, "err: rxep\n"); | ||
+ | ||
new_state = CAN_STATE_ERROR_PASSIVE; | ||
can_id |= CAN_ERR_CRTL; | ||
data1 |= CAN_ERR_CRTL_RX_PASSIVE; | ||
} else if (eflag & EFLG_TXWAR) { | ||
+ | ||
+ netdev_err(net, "err: txwar\n"); | ||
+ | ||
new_state = CAN_STATE_ERROR_WARNING; | ||
can_id |= CAN_ERR_CRTL; | ||
data1 |= CAN_ERR_CRTL_TX_WARNING; | ||
} else if (eflag & EFLG_RXWAR) { | ||
+ | ||
+ netdev_err(net, "err: rxwar\n"); | ||
+ | ||
new_state = CAN_STATE_ERROR_WARNING; | ||
can_id |= CAN_ERR_CRTL; | ||
data1 |= CAN_ERR_CRTL_RX_WARNING; | ||
@@ -927,7 +954,7 @@ static int mcp251x_open(struct net_device *net) | ||
|
||
ret = open_candev(net); | ||
if (ret) { | ||
- dev_err(&spi->dev, "unable to set initial baudrate!\n"); | ||
+ netdev_err(net, "failed to open can device\n"); | ||
return ret; | ||
} | ||
|
||
@@ -948,7 +975,7 @@ static int mcp251x_open(struct net_device *net) | ||
ret = request_threaded_irq(spi->irq, NULL, mcp251x_can_ist, | ||
flags, DEVICE_NAME, priv); | ||
if (ret) { | ||
- dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); | ||
+ netdev_err(net, "failed to acquire irq %d\n", spi->irq); | ||
if (pdata->transceiver_enable) | ||
pdata->transceiver_enable(0); | ||
close_candev(net); | ||
@@ -1084,7 +1111,7 @@ static int mcp251x_can_probe(struct spi_device *spi) | ||
|
||
ret = register_candev(net); | ||
if (!ret) { | ||
- dev_info(&spi->dev, "probed\n"); | ||
+ netdev_info(priv->net, "probed\n"); | ||
return ret; | ||
} | ||
error_probe: | ||
-- | ||
1.8.1.4 | ||
|
51 changes: 51 additions & 0 deletions
51
patches/resources/0004-capes-Update-RS232-CAN-capes-with-resources.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
From de3ce36b51d63f87ed68251bc64dd20c79cf74c7 Mon Sep 17 00:00:00 2001 | ||
From: Pantelis Antoniou <panto@antoniou-consulting.com> | ||
Date: Mon, 20 May 2013 16:11:38 +0300 | ||
Subject: [PATCH 4/4] capes: Update RS232 + CAN capes with resources | ||
|
||
--- | ||
firmware/capes/BB-BONE-RS232-00A0.dts | 8 ++++++++ | ||
firmware/capes/BB-BONE-SERL-01-00A1.dts | 8 ++++++++ | ||
2 files changed, 16 insertions(+) | ||
|
||
diff --git a/firmware/capes/BB-BONE-RS232-00A0.dts b/firmware/capes/BB-BONE-RS232-00A0.dts | ||
index 220c85d..ad627c58 100644 | ||
--- a/firmware/capes/BB-BONE-RS232-00A0.dts | ||
+++ b/firmware/capes/BB-BONE-RS232-00A0.dts | ||
@@ -15,6 +15,14 @@ | ||
part-number = "BB-BONE-RS232"; | ||
version = "00A0"; | ||
|
||
+ /* state the resources this cape uses */ | ||
+ exclusive-use = | ||
+ /* the pin header uses */ | ||
+ "P9.22", /* rs232: uart2_rxd */ | ||
+ "P9.21", /* rs232: uart2_txd */ | ||
+ /* the hardware IP uses */ | ||
+ "uart2"; | ||
+ | ||
fragment@0 { | ||
target = <&am33xx_pinmux>; | ||
__overlay__ { | ||
diff --git a/firmware/capes/BB-BONE-SERL-01-00A1.dts b/firmware/capes/BB-BONE-SERL-01-00A1.dts | ||
index b0459c8..93b1bfc 100644 | ||
--- a/firmware/capes/BB-BONE-SERL-01-00A1.dts | ||
+++ b/firmware/capes/BB-BONE-SERL-01-00A1.dts | ||
@@ -14,6 +14,14 @@ | ||
part-number = "BB-BONE-SERL-01"; | ||
version = "00A1"; | ||
|
||
+ /* state the resources this cape uses */ | ||
+ exclusive-use = | ||
+ /* the pin header uses */ | ||
+ "P9.26", /* dcan1: dcan1_tx */ | ||
+ "P9.24", /* dcan1: dcan1_rx */ | ||
+ /* the hardware IP uses */ | ||
+ "dcan1"; | ||
+ | ||
fragment@0 { | ||
target = <&am33xx_pinmux>; | ||
__overlay__ { | ||
-- | ||
1.8.1.4 | ||
|