Marc Kleine-Budde says: ==================== this is the updated pull request of one patch by me for the peak_usb driver. It fixes the driver, so that non FD adapters don't provide CAN FD bittimings. ====================
Unified · Split
| @@ -854,6 +854,18 @@ static int pcan_usb_probe(struct usb_interface *intf) · 853 unmodified lines | ||
| 854 | 854 | /* |
| 855 | 855 | * describe the PCAN-USB adapter |
| 856 | 856 | */ |
| 857 | +static const struct can_bittiming_const pcan_usb_const = { | |
| 858 | + .name = "pcan_usb", | |
| 859 | + .tseg1_min = 1, | |
| 860 | + .tseg1_max = 16, | |
| 861 | + .tseg2_min = 1, | |
| 862 | + .tseg2_max = 8, | |
| 863 | + .sjw_max = 4, | |
| 864 | + .brp_min = 1, | |
| 865 | + .brp_max = 64, | |
| 866 | + .brp_inc = 1, | |
| 867 | +}; | |
| 868 | + | |
| 857 | 869 | const struct peak_usb_adapter pcan_usb = { |
| 858 | 870 | .name = "PCAN-USB", |
| 859 | 871 | .device_id = PCAN_USB_PRODUCT_ID, |
| @@ -862,17 +874,7 @@ const struct peak_usb_adapter pcan_usb = { · 2 unmodified lines | ||
| 862 | 874 | .clock = { |
| 863 | 875 | .freq = PCAN_USB_CRYSTAL_HZ / 2 , |
| 864 | 876 | }, |
| 865 | − .bittiming_const = { | |
| 866 | − .name = "pcan_usb", | |
| 867 | − .tseg1_min = 1, | |
| 868 | − .tseg1_max = 16, | |
| 869 | − .tseg2_min = 1, | |
| 870 | − .tseg2_max = 8, | |
| 871 | − .sjw_max = 4, | |
| 872 | − .brp_min = 1, | |
| 873 | − .brp_max = 64, | |
| 874 | − .brp_inc = 1, | |
| 875 | − }, | |
| 877 | + .bittiming_const = &pcan_usb_const, | |
| 876 | 878 | |
| 877 | 879 | /* size of device private data */ |
| 878 | 880 | .sizeof_dev_private = sizeof(struct pcan_usb), |
| @@ -792,9 +792,9 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter, · 791 unmodified lines | ||
| 792 | 792 | dev->ep_msg_out = peak_usb_adapter->ep_msg_out[ctrl_idx]; |
| 793 | 793 | |
| 794 | 794 | dev->can.clock = peak_usb_adapter->clock; |
| 795 | − dev->can.bittiming_const = &peak_usb_adapter->bittiming_const; | |
| 795 | + dev->can.bittiming_const = peak_usb_adapter->bittiming_const; | |
| 796 | 796 | dev->can.do_set_bittiming = peak_usb_set_bittiming; |
| 797 | − dev->can.data_bittiming_const = &peak_usb_adapter->data_bittiming_const; | |
| 797 | + dev->can.data_bittiming_const = peak_usb_adapter->data_bittiming_const; | |
| 798 | 798 | dev->can.do_set_data_bittiming = peak_usb_set_data_bittiming; |
| 799 | 799 | dev->can.do_set_mode = peak_usb_set_mode; |
| 800 | 800 | dev->can.do_get_berr_counter = peak_usb_adapter->do_get_berr_counter; |
| @@ -48,8 +48,8 @@ struct peak_usb_adapter { · 47 unmodified lines | ||
| 48 | 48 | u32 device_id; |
| 49 | 49 | u32 ctrlmode_supported; |
| 50 | 50 | struct can_clock clock; |
| 51 | − const struct can_bittiming_const bittiming_const; | |
| 52 | − const struct can_bittiming_const data_bittiming_const; | |
| 51 | + const struct can_bittiming_const * const bittiming_const; | |
| 52 | + const struct can_bittiming_const * const data_bittiming_const; | |
| 53 | 53 | unsigned int ctrl_count; |
| 54 | 54 | |
| 55 | 55 | int (*intf_probe)(struct usb_interface *intf); |
| @@ -990,6 +990,30 @@ static void pcan_usb_fd_free(struct peak_usb_device *dev) · 989 unmodified lines | ||
| 990 | 990 | } |
| 991 | 991 | |
| 992 | 992 | /* describes the PCAN-USB FD adapter */ |
| 993 | +static const struct can_bittiming_const pcan_usb_fd_const = { | |
| 994 | + .name = "pcan_usb_fd", | |
| 995 | + .tseg1_min = 1, | |
| 996 | + .tseg1_max = 64, | |
| 997 | + .tseg2_min = 1, | |
| 998 | + .tseg2_max = 16, | |
| 999 | + .sjw_max = 16, | |
| 1000 | + .brp_min = 1, | |
| 1001 | + .brp_max = 1024, | |
| 1002 | + .brp_inc = 1, | |
| 1003 | +}; | |
| 1004 | + | |
| 1005 | +static const struct can_bittiming_const pcan_usb_fd_data_const = { | |
| 1006 | + .name = "pcan_usb_fd", | |
| 1007 | + .tseg1_min = 1, | |
| 1008 | + .tseg1_max = 16, | |
| 1009 | + .tseg2_min = 1, | |
| 1010 | + .tseg2_max = 8, | |
| 1011 | + .sjw_max = 4, | |
| 1012 | + .brp_min = 1, | |
| 1013 | + .brp_max = 1024, | |
| 1014 | + .brp_inc = 1, | |
| 1015 | +}; | |
| 1016 | + | |
| 993 | 1017 | const struct peak_usb_adapter pcan_usb_fd = { |
| 994 | 1018 | .name = "PCAN-USB FD", |
| 995 | 1019 | .device_id = PCAN_USBFD_PRODUCT_ID, |
| @@ -999,28 +1023,8 @@ const struct peak_usb_adapter pcan_usb_fd = { · 3 unmodified lines | ||
| 999 | 1023 | .clock = { |
| 1000 | 1024 | .freq = PCAN_UFD_CRYSTAL_HZ, |
| 1001 | 1025 | }, |
| 1002 | − .bittiming_const = { | |
| 1003 | − .name = "pcan_usb_fd", | |
| 1004 | − .tseg1_min = 1, | |
| 1005 | − .tseg1_max = 64, | |
| 1006 | − .tseg2_min = 1, | |
| 1007 | − .tseg2_max = 16, | |
| 1008 | − .sjw_max = 16, | |
| 1009 | − .brp_min = 1, | |
| 1010 | − .brp_max = 1024, | |
| 1011 | − .brp_inc = 1, | |
| 1012 | − }, | |
| 1013 | − .data_bittiming_const = { | |
| 1014 | − .name = "pcan_usb_fd", | |
| 1015 | − .tseg1_min = 1, | |
| 1016 | − .tseg1_max = 16, | |
| 1017 | − .tseg2_min = 1, | |
| 1018 | − .tseg2_max = 8, | |
| 1019 | − .sjw_max = 4, | |
| 1020 | − .brp_min = 1, | |
| 1021 | − .brp_max = 1024, | |
| 1022 | − .brp_inc = 1, | |
| 1023 | − }, | |
| 1026 | + .bittiming_const = &pcan_usb_fd_const, | |
| 1027 | + .data_bittiming_const = &pcan_usb_fd_data_const, | |
| 1024 | 1028 | |
| 1025 | 1029 | /* size of device private data */ |
| 1026 | 1030 | .sizeof_dev_private = sizeof(struct pcan_usb_fd_device), |
| @@ -1058,6 +1062,30 @@ const struct peak_usb_adapter pcan_usb_fd = { · 31 unmodified lines | ||
| 1058 | 1062 | }; |
| 1059 | 1063 | |
| 1060 | 1064 | /* describes the PCAN-USB Pro FD adapter */ |
| 1065 | +static const struct can_bittiming_const pcan_usb_pro_fd_const = { | |
| 1066 | + .name = "pcan_usb_pro_fd", | |
| 1067 | + .tseg1_min = 1, | |
| 1068 | + .tseg1_max = 64, | |
| 1069 | + .tseg2_min = 1, | |
| 1070 | + .tseg2_max = 16, | |
| 1071 | + .sjw_max = 16, | |
| 1072 | + .brp_min = 1, | |
| 1073 | + .brp_max = 1024, | |
| 1074 | + .brp_inc = 1, | |
| 1075 | +}; | |
| 1076 | + | |
| 1077 | +static const struct can_bittiming_const pcan_usb_pro_fd_data_const = { | |
| 1078 | + .name = "pcan_usb_pro_fd", | |
| 1079 | + .tseg1_min = 1, | |
| 1080 | + .tseg1_max = 16, | |
| 1081 | + .tseg2_min = 1, | |
| 1082 | + .tseg2_max = 8, | |
| 1083 | + .sjw_max = 4, | |
| 1084 | + .brp_min = 1, | |
| 1085 | + .brp_max = 1024, | |
| 1086 | + .brp_inc = 1, | |
| 1087 | +}; | |
| 1088 | + | |
| 1061 | 1089 | const struct peak_usb_adapter pcan_usb_pro_fd = { |
| 1062 | 1090 | .name = "PCAN-USB Pro FD", |
| 1063 | 1091 | .device_id = PCAN_USBPROFD_PRODUCT_ID, |
| @@ -1067,28 +1095,8 @@ const struct peak_usb_adapter pcan_usb_pro_fd = { · 3 unmodified lines | ||
| 1067 | 1095 | .clock = { |
| 1068 | 1096 | .freq = PCAN_UFD_CRYSTAL_HZ, |
| 1069 | 1097 | }, |
| 1070 | − .bittiming_const = { | |
| 1071 | − .name = "pcan_usb_pro_fd", | |
| 1072 | − .tseg1_min = 1, | |
| 1073 | − .tseg1_max = 64, | |
| 1074 | − .tseg2_min = 1, | |
| 1075 | − .tseg2_max = 16, | |
| 1076 | − .sjw_max = 16, | |
| 1077 | − .brp_min = 1, | |
| 1078 | − .brp_max = 1024, | |
| 1079 | − .brp_inc = 1, | |
| 1080 | − }, | |
| 1081 | − .data_bittiming_const = { | |
| 1082 | − .name = "pcan_usb_pro_fd", | |
| 1083 | − .tseg1_min = 1, | |
| 1084 | − .tseg1_max = 16, | |
| 1085 | − .tseg2_min = 1, | |
| 1086 | − .tseg2_max = 8, | |
| 1087 | − .sjw_max = 4, | |
| 1088 | − .brp_min = 1, | |
| 1089 | − .brp_max = 1024, | |
| 1090 | − .brp_inc = 1, | |
| 1091 | − }, | |
| 1098 | + .bittiming_const = &pcan_usb_pro_fd_const, | |
| 1099 | + .data_bittiming_const = &pcan_usb_pro_fd_data_const, | |
| 1092 | 1100 | |
| 1093 | 1101 | /* size of device private data */ |
| 1094 | 1102 | .sizeof_dev_private = sizeof(struct pcan_usb_fd_device), |
| @@ -1004,6 +1004,18 @@ int pcan_usb_pro_probe(struct usb_interface *intf) · 1003 unmodified lines | ||
| 1004 | 1004 | /* |
| 1005 | 1005 | * describe the PCAN-USB Pro adapter |
| 1006 | 1006 | */ |
| 1007 | +static const struct can_bittiming_const pcan_usb_pro_const = { | |
| 1008 | + .name = "pcan_usb_pro", | |
| 1009 | + .tseg1_min = 1, | |
| 1010 | + .tseg1_max = 16, | |
| 1011 | + .tseg2_min = 1, | |
| 1012 | + .tseg2_max = 8, | |
| 1013 | + .sjw_max = 4, | |
| 1014 | + .brp_min = 1, | |
| 1015 | + .brp_max = 1024, | |
| 1016 | + .brp_inc = 1, | |
| 1017 | +}; | |
| 1018 | + | |
| 1007 | 1019 | const struct peak_usb_adapter pcan_usb_pro = { |
| 1008 | 1020 | .name = "PCAN-USB Pro", |
| 1009 | 1021 | .device_id = PCAN_USBPRO_PRODUCT_ID, |
| @@ -1012,17 +1024,7 @@ const struct peak_usb_adapter pcan_usb_pro = { · 2 unmodified lines | ||
| 1012 | 1024 | .clock = { |
| 1013 | 1025 | .freq = PCAN_USBPRO_CRYSTAL_HZ, |
| 1014 | 1026 | }, |
| 1015 | − .bittiming_const = { | |
| 1016 | − .name = "pcan_usb_pro", | |
| 1017 | − .tseg1_min = 1, | |
| 1018 | − .tseg1_max = 16, | |
| 1019 | − .tseg2_min = 1, | |
| 1020 | − .tseg2_max = 8, | |
| 1021 | − .sjw_max = 4, | |
| 1022 | − .brp_min = 1, | |
| 1023 | − .brp_max = 1024, | |
| 1024 | − .brp_inc = 1, | |
| 1025 | − }, | |
| 1027 | + .bittiming_const = &pcan_usb_pro_const, | |
| 1026 | 1028 | |
| 1027 | 1029 | /* size of device private data */ |
| 1028 | 1030 | .sizeof_dev_private = sizeof(struct pcan_usb_pro_device), |