Commit 615534bc490606685621d63a40c0670d0f049d86

Authored by Christian Pellegrin
Committed by David S. Miller
1 parent 9a4e328eb2

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