christian pellegrin wrote: > Thanks to Paul we discovered the problem: in the socketcan version > with SYSFS enabled the set_bittiming is called during open.
Ah, right, I already forgot :-(. > Unfortunately it doesn't happen without SYSFS or in the netdev-next > version. Here is the patch that fixes this (the state restore stuff is > needed because the mcp251x is usually kept in sleep mode to avoid > power consumption (let's be green! ;-) )) > > Should I post it to netdev-next too? Yes, please. > Signed-off-by: Christian Pellegrin <[email protected]> > > --- > Index: drivers/net/can/mcp251x.c > =================================================================== > --- drivers/net/can/mcp251x.c (revision 1082) > +++ drivers/net/can/mcp251x.c (working copy) > @@ -581,7 +581,13 @@ > struct mcp251x_priv *priv = netdev_priv(net); > struct can_bittiming *bt = &priv->can.bittiming; > struct spi_device *spi = priv->spi; > + u8 state; > > + /* Store original mode and set mode to config */ > + state = mcp251x_read_reg(spi, CANSTAT) & CANCTRL_REQOP_MASK; > + mcp251x_write_bits(spi, CANCTRL, CANCTRL_REQOP_MASK, > + CANCTRL_REQOP_CONF); > + > mcp251x_write_reg(spi, CNF1, ((bt->sjw - 1) << CNF1_SJW_SHIFT) | > (bt->brp - 1)); > mcp251x_write_reg(spi, CNF2, CNF2_BTLMODE | > @@ -596,6 +602,9 @@ > mcp251x_read_reg(spi, CNF2), > mcp251x_read_reg(spi, CNF3)); > > + /* Restore original state */ > + mcp251x_write_bits(spi, CANCTRL, CANCTRL_REQOP_MASK, state); > + > return 0; > } > > @@ -610,6 +619,8 @@ > return ret; > } > > + mcp251x_do_set_bittiming(net); > + > /* Enable RX0->RX1 buffer roll over and disable filters */ > mcp251x_write_bits(spi, RXBCTRL(0), > RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1, > @@ -1027,7 +1038,15 @@ > SET_NETDEV_DEV(net, &spi->dev); > I think you should then also remove the line: priv->can.do_set_bittiming = mcp251x_do_set_bittiming; Wolfgang. _______________________________________________ Socketcan-core mailing list [email protected] https://lists.berlios.de/mailman/listinfo/socketcan-core
