return 0;
 }
 
-static int ssam_hub_remove_devices_fn(struct device *dev, void *data)
-{
-       if (!is_ssam_device(dev))
-               return 0;
-
-       ssam_device_remove(to_ssam_device(dev));
-       return 0;
-}
-
-static void ssam_hub_remove_devices(struct device *parent)
-{
-       device_for_each_child_reverse(parent, NULL, ssam_hub_remove_devices_fn);
-}
-
 static int ssam_hub_add_device(struct device *parent, struct ssam_controller *ctrl,
                               struct fwnode_handle *node)
 {
 
        return 0;
 err:
-       ssam_hub_remove_devices(parent);
+       ssam_remove_clients(parent);
        return status;
 }
 
        if (hub->state == SSAM_BASE_HUB_CONNECTED)
                status = ssam_hub_add_devices(&hub->sdev->dev, hub->sdev->ctrl, node);
        else
-               ssam_hub_remove_devices(&hub->sdev->dev);
+               ssam_remove_clients(&hub->sdev->dev);
 
        if (status)
                dev_err(&hub->sdev->dev, "failed to update base-hub devices: %d\n", status);
 err:
        ssam_notifier_unregister(sdev->ctrl, &hub->notif);
        cancel_delayed_work_sync(&hub->update_work);
-       ssam_hub_remove_devices(&sdev->dev);
+       ssam_remove_clients(&sdev->dev);
        return status;
 }
 
 
        ssam_notifier_unregister(sdev->ctrl, &hub->notif);
        cancel_delayed_work_sync(&hub->update_work);
-       ssam_hub_remove_devices(&sdev->dev);
+       ssam_remove_clients(&sdev->dev);
 }
 
 static const struct ssam_device_id ssam_base_hub_match[] = {
 {
        const struct software_node **nodes = platform_get_drvdata(pdev);
 
-       ssam_hub_remove_devices(&pdev->dev);
+       ssam_remove_clients(&pdev->dev);
        set_secondary_fwnode(&pdev->dev, NULL);
        software_node_unregister_node_group(nodes);
        return 0;