|
@@ -678,19 +678,43 @@ static int peak_usb_set_mode(struct net_device *netdev, enum can_mode mode)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * candev callback used to set device bitrate.
|
|
|
+ * candev callback used to set device nominal/arbitration bitrate.
|
|
|
*/
|
|
|
static int peak_usb_set_bittiming(struct net_device *netdev)
|
|
|
{
|
|
|
struct peak_usb_device *dev = netdev_priv(netdev);
|
|
|
- struct can_bittiming *bt = &dev->can.bittiming;
|
|
|
+ const struct peak_usb_adapter *pa = dev->adapter;
|
|
|
|
|
|
- if (dev->adapter->dev_set_bittiming) {
|
|
|
- int err = dev->adapter->dev_set_bittiming(dev, bt);
|
|
|
+ if (pa->dev_set_bittiming) {
|
|
|
+ struct can_bittiming *bt = &dev->can.bittiming;
|
|
|
+ int err = pa->dev_set_bittiming(dev, bt);
|
|
|
|
|
|
if (err)
|
|
|
netdev_info(netdev, "couldn't set bitrate (err %d)\n",
|
|
|
- err);
|
|
|
+ err);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * candev callback used to set device data bitrate.
|
|
|
+ */
|
|
|
+static int peak_usb_set_data_bittiming(struct net_device *netdev)
|
|
|
+{
|
|
|
+ struct peak_usb_device *dev = netdev_priv(netdev);
|
|
|
+ const struct peak_usb_adapter *pa = dev->adapter;
|
|
|
+
|
|
|
+ if (pa->dev_set_data_bittiming) {
|
|
|
+ struct can_bittiming *bt = &dev->can.data_bittiming;
|
|
|
+ int err = pa->dev_set_data_bittiming(dev, bt);
|
|
|
+
|
|
|
+ if (err)
|
|
|
+ netdev_info(netdev,
|
|
|
+ "couldn't set data bitrate (err %d)\n",
|
|
|
+ err);
|
|
|
+
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -749,6 +773,8 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter,
|
|
|
dev->can.clock = peak_usb_adapter->clock;
|
|
|
dev->can.bittiming_const = &peak_usb_adapter->bittiming_const;
|
|
|
dev->can.do_set_bittiming = peak_usb_set_bittiming;
|
|
|
+ dev->can.data_bittiming_const = &peak_usb_adapter->data_bittiming_const;
|
|
|
+ dev->can.do_set_data_bittiming = peak_usb_set_data_bittiming;
|
|
|
dev->can.do_set_mode = peak_usb_set_mode;
|
|
|
dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter;
|
|
|
dev->can.ctrlmode_supported = peak_usb_adapter->ctrlmode_supported;
|