@@ -914,6 +914,7 @@ static int kvaser_usb_probe(struct usb_interface *intf,
914914 const struct usb_device_id * id )
915915{
916916 struct kvaser_usb * dev ;
917+ struct devlink * devlink ;
917918 int err ;
918919 int i ;
919920 const struct kvaser_usb_driver_info * driver_info ;
@@ -923,17 +924,20 @@ static int kvaser_usb_probe(struct usb_interface *intf,
923924 if (!driver_info )
924925 return - ENODEV ;
925926
926- dev = devm_kzalloc ( & intf -> dev , sizeof (* dev ), GFP_KERNEL );
927- if (!dev )
927+ devlink = devlink_alloc ( & kvaser_usb_devlink_ops , sizeof (* dev ), & intf -> dev );
928+ if (!devlink )
928929 return - ENOMEM ;
929930
931+ dev = devlink_priv (devlink );
930932 dev -> intf = intf ;
931933 dev -> driver_info = driver_info ;
932934 ops = driver_info -> ops ;
933935
934936 err = ops -> dev_setup_endpoints (dev );
935- if (err )
936- return dev_err_probe (& intf -> dev , err , "Cannot get usb endpoint(s)" );
937+ if (err ) {
938+ dev_err_probe (& intf -> dev , err , "Cannot get usb endpoint(s)" );
939+ goto free_devlink ;
940+ }
937941
938942 dev -> udev = interface_to_usbdev (intf );
939943
@@ -944,50 +948,66 @@ static int kvaser_usb_probe(struct usb_interface *intf,
944948 dev -> card_data .ctrlmode_supported = 0 ;
945949 dev -> card_data .capabilities = 0 ;
946950 err = ops -> dev_init_card (dev );
947- if (err )
948- return dev_err_probe (& intf -> dev , err ,
949- "Failed to initialize card\n" );
951+ if (err ) {
952+ dev_err_probe (& intf -> dev , err ,
953+ "Failed to initialize card\n" );
954+ goto free_devlink ;
955+ }
950956
951957 err = ops -> dev_get_software_info (dev );
952- if (err )
953- return dev_err_probe (& intf -> dev , err ,
954- "Cannot get software info\n" );
958+ if (err ) {
959+ dev_err_probe (& intf -> dev , err ,
960+ "Cannot get software info\n" );
961+ goto free_devlink ;
962+ }
955963
956964 if (ops -> dev_get_software_details ) {
957965 err = ops -> dev_get_software_details (dev );
958- if (err )
959- return dev_err_probe (& intf -> dev , err ,
960- "Cannot get software details\n" );
966+ if (err ) {
967+ dev_err_probe (& intf -> dev , err ,
968+ "Cannot get software details\n" );
969+ goto free_devlink ;
970+ }
961971 }
962972
963- if (WARN_ON (!dev -> cfg ))
964- return - ENODEV ;
973+ if (WARN_ON (!dev -> cfg )) {
974+ err = - ENODEV ;
975+ goto free_devlink ;
976+ }
965977
966978 dev_dbg (& intf -> dev , "Max outstanding tx = %d URBs\n" , dev -> max_tx_urbs );
967979
968980 err = ops -> dev_get_card_info (dev );
969- if (err )
970- return dev_err_probe (& intf -> dev , err ,
971- "Cannot get card info\n" );
981+ if (err ) {
982+ dev_err_probe (& intf -> dev , err ,
983+ "Cannot get card info\n" );
984+ goto free_devlink ;
985+ }
972986
973987 if (ops -> dev_get_capabilities ) {
974988 err = ops -> dev_get_capabilities (dev );
975989 if (err ) {
976- kvaser_usb_remove_interfaces ( dev );
977- return dev_err_probe ( & intf -> dev , err ,
978- "Cannot get capabilities\n" ) ;
990+ dev_err_probe ( & intf -> dev , err ,
991+ "Cannot get capabilities\n" );
992+ goto remove_interfaces ;
979993 }
980994 }
981995
982996 for (i = 0 ; i < dev -> nchannels ; i ++ ) {
983997 err = kvaser_usb_init_one (dev , i );
984- if (err ) {
985- kvaser_usb_remove_interfaces (dev );
986- return err ;
987- }
998+ if (err )
999+ goto remove_interfaces ;
9881000 }
1001+ devlink_register (devlink );
9891002
9901003 return 0 ;
1004+
1005+ remove_interfaces :
1006+ kvaser_usb_remove_interfaces (dev );
1007+ free_devlink :
1008+ devlink_free (devlink );
1009+
1010+ return err ;
9911011}
9921012
9931013static void kvaser_usb_disconnect (struct usb_interface * intf )
@@ -1000,6 +1020,8 @@ static void kvaser_usb_disconnect(struct usb_interface *intf)
10001020 return ;
10011021
10021022 kvaser_usb_remove_interfaces (dev );
1023+ devlink_unregister (priv_to_devlink (dev ));
1024+ devlink_free (priv_to_devlink (dev ));
10031025}
10041026
10051027static struct usb_driver kvaser_usb_driver = {
0 commit comments