Skip to content

Commit

Permalink
can: mcp251x: allow to read two registers in one spi transfer
Browse files Browse the repository at this point in the history
This patch bases on work done earlier by David Jander.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Acked-by: David Jander <david@protonic.nl>
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
  • Loading branch information
Sascha Hauer authored and Marc Kleine-Budde committed Oct 18, 2010
1 parent 711e4d6 commit f3a3ed3
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions drivers/net/can/mcp251x.c
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,20 @@ static u8 mcp251x_read_reg(struct spi_device *spi, uint8_t reg)
return val;
}

static void mcp251x_read_2regs(struct spi_device *spi, uint8_t reg,
uint8_t *v1, uint8_t *v2)
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);

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];
}

static void mcp251x_write_reg(struct spi_device *spi, u8 reg, uint8_t val)
{
struct mcp251x_priv *priv = dev_get_drvdata(&spi->dev);
Expand Down Expand Up @@ -754,10 +768,11 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)
mutex_lock(&priv->mcp_lock);
while (!priv->force_quit) {
enum can_state new_state;
u8 intf = mcp251x_read_reg(spi, CANINTF);
u8 eflag;
u8 intf, eflag;
int can_id = 0, data1 = 0;

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

if (intf & CANINTF_RX0IF) {
mcp251x_hw_rx(spi, 0);
/* Free one buffer ASAP */
Expand All @@ -770,7 +785,6 @@ static irqreturn_t mcp251x_can_ist(int irq, void *dev_id)

mcp251x_write_bits(spi, CANINTF, intf, 0x00);

eflag = mcp251x_read_reg(spi, EFLG);
mcp251x_write_reg(spi, EFLG, 0x00);

/* Update can state */
Expand Down

0 comments on commit f3a3ed3

Please sign in to comment.