Commit f57796a4 authored by David S. Miller's avatar David S. Miller

Merge tag 'linux-can-fixes-for-5.12-20210406' of...

Merge tag 'linux-can-fixes-for-5.12-20210406' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can

Marc Kleine-Budde says:

====================
pull-request: can 2021-04-06

this is a pull request of 1 patch for net/master.

The patch is by me and fixes the SPI half duplex support in the
mcp251x CAN driver.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 66c3f05d 617085fc
...@@ -314,6 +314,18 @@ static int mcp251x_spi_trans(struct spi_device *spi, int len) ...@@ -314,6 +314,18 @@ static int mcp251x_spi_trans(struct spi_device *spi, int len)
return ret; return ret;
} }
static int mcp251x_spi_write(struct spi_device *spi, int len)
{
struct mcp251x_priv *priv = spi_get_drvdata(spi);
int ret;
ret = spi_write(spi, priv->spi_tx_buf, len);
if (ret)
dev_err(&spi->dev, "spi write failed: ret = %d\n", ret);
return ret;
}
static u8 mcp251x_read_reg(struct spi_device *spi, u8 reg) static u8 mcp251x_read_reg(struct spi_device *spi, u8 reg)
{ {
struct mcp251x_priv *priv = spi_get_drvdata(spi); struct mcp251x_priv *priv = spi_get_drvdata(spi);
...@@ -361,7 +373,7 @@ static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val) ...@@ -361,7 +373,7 @@ static void mcp251x_write_reg(struct spi_device *spi, u8 reg, u8 val)
priv->spi_tx_buf[1] = reg; priv->spi_tx_buf[1] = reg;
priv->spi_tx_buf[2] = val; priv->spi_tx_buf[2] = val;
mcp251x_spi_trans(spi, 3); mcp251x_spi_write(spi, 3);
} }
static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2) static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2)
...@@ -373,7 +385,7 @@ static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2) ...@@ -373,7 +385,7 @@ static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2)
priv->spi_tx_buf[2] = v1; priv->spi_tx_buf[2] = v1;
priv->spi_tx_buf[3] = v2; priv->spi_tx_buf[3] = v2;
mcp251x_spi_trans(spi, 4); mcp251x_spi_write(spi, 4);
} }
static void mcp251x_write_bits(struct spi_device *spi, u8 reg, static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
...@@ -386,7 +398,7 @@ static void mcp251x_write_bits(struct spi_device *spi, u8 reg, ...@@ -386,7 +398,7 @@ static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
priv->spi_tx_buf[2] = mask; priv->spi_tx_buf[2] = mask;
priv->spi_tx_buf[3] = val; priv->spi_tx_buf[3] = val;
mcp251x_spi_trans(spi, 4); mcp251x_spi_write(spi, 4);
} }
static u8 mcp251x_read_stat(struct spi_device *spi) static u8 mcp251x_read_stat(struct spi_device *spi)
...@@ -618,7 +630,7 @@ static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf, ...@@ -618,7 +630,7 @@ static void mcp251x_hw_tx_frame(struct spi_device *spi, u8 *buf,
buf[i]); buf[i]);
} else { } else {
memcpy(priv->spi_tx_buf, buf, TXBDAT_OFF + len); memcpy(priv->spi_tx_buf, buf, TXBDAT_OFF + len);
mcp251x_spi_trans(spi, TXBDAT_OFF + len); mcp251x_spi_write(spi, TXBDAT_OFF + len);
} }
} }
...@@ -650,7 +662,7 @@ static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame, ...@@ -650,7 +662,7 @@ static void mcp251x_hw_tx(struct spi_device *spi, struct can_frame *frame,
/* use INSTRUCTION_RTS, to avoid "repeated frame problem" */ /* use INSTRUCTION_RTS, to avoid "repeated frame problem" */
priv->spi_tx_buf[0] = INSTRUCTION_RTS(1 << tx_buf_idx); priv->spi_tx_buf[0] = INSTRUCTION_RTS(1 << tx_buf_idx);
mcp251x_spi_trans(priv->spi, 1); mcp251x_spi_write(priv->spi, 1);
} }
static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf, static void mcp251x_hw_rx_frame(struct spi_device *spi, u8 *buf,
...@@ -888,7 +900,7 @@ static int mcp251x_hw_reset(struct spi_device *spi) ...@@ -888,7 +900,7 @@ static int mcp251x_hw_reset(struct spi_device *spi)
mdelay(MCP251X_OST_DELAY_MS); mdelay(MCP251X_OST_DELAY_MS);
priv->spi_tx_buf[0] = INSTRUCTION_RESET; priv->spi_tx_buf[0] = INSTRUCTION_RESET;
ret = mcp251x_spi_trans(spi, 1); ret = mcp251x_spi_write(spi, 1);
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment