Commit 615534bc490606685621d63a40c0670d0f049d86
Committed by
David S. Miller
1 parent
9a4e328eb2
Exists in
master
and in
39 other branches
can: fix setting mcp251x bit timing on open
Signed-off-by: Christian Pellegrin <chripell@fsfe.org> Signed-off-by: Wolfgang Grandegger <wg@grandegger.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 1 changed file with 10 additions and 8 deletions Side-by-side Diff
drivers/net/can/mcp251x.c
... | ... | @@ -594,14 +594,8 @@ |
594 | 594 | static int mcp251x_setup(struct net_device *net, struct mcp251x_priv *priv, |
595 | 595 | struct spi_device *spi) |
596 | 596 | { |
597 | - int ret; | |
597 | + mcp251x_do_set_bittiming(net); | |
598 | 598 | |
599 | - ret = open_candev(net); | |
600 | - if (ret) { | |
601 | - dev_err(&spi->dev, "unable to set initial baudrate!\n"); | |
602 | - return ret; | |
603 | - } | |
604 | - | |
605 | 599 | /* Enable RX0->RX1 buffer roll over and disable filters */ |
606 | 600 | mcp251x_write_bits(spi, RXBCTRL(0), |
607 | 601 | RXBCTRL_BUKT | RXBCTRL_RXM0 | RXBCTRL_RXM1, |
... | ... | @@ -671,6 +665,12 @@ |
671 | 665 | struct mcp251x_platform_data *pdata = spi->dev.platform_data; |
672 | 666 | int ret; |
673 | 667 | |
668 | + ret = open_candev(net); | |
669 | + if (ret) { | |
670 | + dev_err(&spi->dev, "unable to set initial baudrate!\n"); | |
671 | + return ret; | |
672 | + } | |
673 | + | |
674 | 674 | if (pdata->transceiver_enable) |
675 | 675 | pdata->transceiver_enable(1); |
676 | 676 | |
... | ... | @@ -684,6 +684,7 @@ |
684 | 684 | dev_err(&spi->dev, "failed to acquire irq %d\n", spi->irq); |
685 | 685 | if (pdata->transceiver_enable) |
686 | 686 | pdata->transceiver_enable(0); |
687 | + close_candev(net); | |
687 | 688 | return ret; |
688 | 689 | } |
689 | 690 | |
690 | 691 | |
... | ... | @@ -692,8 +693,10 @@ |
692 | 693 | ret = mcp251x_setup(net, priv, spi); |
693 | 694 | if (ret) { |
694 | 695 | free_irq(spi->irq, net); |
696 | + mcp251x_hw_sleep(spi); | |
695 | 697 | if (pdata->transceiver_enable) |
696 | 698 | pdata->transceiver_enable(0); |
699 | + close_candev(net); | |
697 | 700 | return ret; |
698 | 701 | } |
699 | 702 | mcp251x_set_normal_mode(spi); |
... | ... | @@ -956,7 +959,6 @@ |
956 | 959 | priv->can.bittiming_const = &mcp251x_bittiming_const; |
957 | 960 | priv->can.do_set_mode = mcp251x_do_set_mode; |
958 | 961 | priv->can.clock.freq = pdata->oscillator_frequency / 2; |
959 | - priv->can.do_set_bittiming = mcp251x_do_set_bittiming; | |
960 | 962 | priv->net = net; |
961 | 963 | dev_set_drvdata(&spi->dev, priv); |
962 | 964 |