if (err)
                goto err_hwmon_init;
 
-       err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info);
-       if (err)
-               goto err_driver_init;
+       if (mlxsw_driver->init) {
+               err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info);
+               if (err)
+                       goto err_driver_init;
+       }
 
        err = mlxsw_core_debugfs_init(mlxsw_core);
        if (err)
        return 0;
 
 err_debugfs_init:
-       mlxsw_core->driver->fini(mlxsw_core);
+       if (mlxsw_core->driver->fini)
+               mlxsw_core->driver->fini(mlxsw_core);
 err_driver_init:
 err_hwmon_init:
        devlink_unregister(devlink);
        struct devlink *devlink = priv_to_devlink(mlxsw_core);
 
        mlxsw_core_debugfs_fini(mlxsw_core);
-       mlxsw_core->driver->fini(mlxsw_core);
+       if (mlxsw_core->driver->fini)
+               mlxsw_core->driver->fini(mlxsw_core);
        devlink_unregister(devlink);
        mlxsw_emad_fini(mlxsw_core);
        mlxsw_core->bus->fini(mlxsw_core->bus_priv);