diff options
| -rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_core.c | 36 | ||||
| -rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_core.h | 3 |
2 files changed, 34 insertions, 5 deletions
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c index 38634323ec51..10553ffc453f 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c | |||
| @@ -678,19 +678,43 @@ static int peak_usb_set_mode(struct net_device *netdev, enum can_mode mode) | |||
| 678 | } | 678 | } |
| 679 | 679 | ||
| 680 | /* | 680 | /* |
| 681 | * candev callback used to set device bitrate. | 681 | * candev callback used to set device nominal/arbitration bitrate. |
| 682 | */ | 682 | */ |
| 683 | static int peak_usb_set_bittiming(struct net_device *netdev) | 683 | static int peak_usb_set_bittiming(struct net_device *netdev) |
| 684 | { | 684 | { |
| 685 | struct peak_usb_device *dev = netdev_priv(netdev); | 685 | struct peak_usb_device *dev = netdev_priv(netdev); |
| 686 | struct can_bittiming *bt = &dev->can.bittiming; | 686 | const struct peak_usb_adapter *pa = dev->adapter; |
| 687 | 687 | ||
| 688 | if (dev->adapter->dev_set_bittiming) { | 688 | if (pa->dev_set_bittiming) { |
| 689 | int err = dev->adapter->dev_set_bittiming(dev, bt); | 689 | struct can_bittiming *bt = &dev->can.bittiming; |
| 690 | int err = pa->dev_set_bittiming(dev, bt); | ||
| 690 | 691 | ||
| 691 | if (err) | 692 | if (err) |
| 692 | netdev_info(netdev, "couldn't set bitrate (err %d)\n", | 693 | netdev_info(netdev, "couldn't set bitrate (err %d)\n", |
| 693 | err); | 694 | err); |
| 695 | return err; | ||
| 696 | } | ||
| 697 | |||
| 698 | return 0; | ||
| 699 | } | ||
| 700 | |||
| 701 | /* | ||
| 702 | * candev callback used to set device data bitrate. | ||
| 703 | */ | ||
| 704 | static int peak_usb_set_data_bittiming(struct net_device *netdev) | ||
| 705 | { | ||
| 706 | struct peak_usb_device *dev = netdev_priv(netdev); | ||
| 707 | const struct peak_usb_adapter *pa = dev->adapter; | ||
| 708 | |||
| 709 | if (pa->dev_set_data_bittiming) { | ||
| 710 | struct can_bittiming *bt = &dev->can.data_bittiming; | ||
| 711 | int err = pa->dev_set_data_bittiming(dev, bt); | ||
| 712 | |||
| 713 | if (err) | ||
| 714 | netdev_info(netdev, | ||
| 715 | "couldn't set data bitrate (err %d)\n", | ||
| 716 | err); | ||
| 717 | |||
| 694 | return err; | 718 | return err; |
| 695 | } | 719 | } |
| 696 | 720 | ||
| @@ -749,6 +773,8 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter, | |||
| 749 | dev->can.clock = peak_usb_adapter->clock; | 773 | dev->can.clock = peak_usb_adapter->clock; |
| 750 | dev->can.bittiming_const = &peak_usb_adapter->bittiming_const; | 774 | dev->can.bittiming_const = &peak_usb_adapter->bittiming_const; |
| 751 | dev->can.do_set_bittiming = peak_usb_set_bittiming; | 775 | dev->can.do_set_bittiming = peak_usb_set_bittiming; |
| 776 | dev->can.data_bittiming_const = &peak_usb_adapter->data_bittiming_const; | ||
| 777 | dev->can.do_set_data_bittiming = peak_usb_set_data_bittiming; | ||
| 752 | dev->can.do_set_mode = peak_usb_set_mode; | 778 | dev->can.do_set_mode = peak_usb_set_mode; |
| 753 | dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter; | 779 | dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter; |
| 754 | dev->can.ctrlmode_supported = peak_usb_adapter->ctrlmode_supported; | 780 | dev->can.ctrlmode_supported = peak_usb_adapter->ctrlmode_supported; |
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.h b/drivers/net/can/usb/peak_usb/pcan_usb_core.h index 739a344427a2..c0e8dfaef526 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.h +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.h | |||
| @@ -47,6 +47,7 @@ struct peak_usb_adapter { | |||
| 47 | u32 ctrlmode_supported; | 47 | u32 ctrlmode_supported; |
| 48 | struct can_clock clock; | 48 | struct can_clock clock; |
| 49 | const struct can_bittiming_const bittiming_const; | 49 | const struct can_bittiming_const bittiming_const; |
| 50 | const struct can_bittiming_const data_bittiming_const; | ||
| 50 | unsigned int ctrl_count; | 51 | unsigned int ctrl_count; |
| 51 | 52 | ||
| 52 | int (*intf_probe)(struct usb_interface *intf); | 53 | int (*intf_probe)(struct usb_interface *intf); |
| @@ -58,6 +59,8 @@ struct peak_usb_adapter { | |||
| 58 | int (*dev_close)(struct peak_usb_device *dev); | 59 | int (*dev_close)(struct peak_usb_device *dev); |
| 59 | int (*dev_set_bittiming)(struct peak_usb_device *dev, | 60 | int (*dev_set_bittiming)(struct peak_usb_device *dev, |
| 60 | struct can_bittiming *bt); | 61 | struct can_bittiming *bt); |
| 62 | int (*dev_set_data_bittiming)(struct peak_usb_device *dev, | ||
| 63 | struct can_bittiming *bt); | ||
| 61 | int (*dev_set_bus)(struct peak_usb_device *dev, u8 onoff); | 64 | int (*dev_set_bus)(struct peak_usb_device *dev, u8 onoff); |
| 62 | int (*dev_get_device_id)(struct peak_usb_device *dev, u32 *device_id); | 65 | int (*dev_get_device_id)(struct peak_usb_device *dev, u32 *device_id); |
| 63 | int (*dev_decode_buf)(struct peak_usb_device *dev, struct urb *urb); | 66 | int (*dev_decode_buf)(struct peak_usb_device *dev, struct urb *urb); |
