@@ -1317,8 +1317,10 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
return ret;
}
-static int ingenic_drm_bind_with_components(struct device *dev)
+static int ingenic_drm_bind_with_components(struct aggregate_device *adev)
{
+ struct device *dev = aggregate_device_parent(adev);
+
return ingenic_drm_bind(dev, true);
}
@@ -1341,9 +1343,20 @@ static void ingenic_drm_unbind(struct device *dev)
drm_atomic_helper_shutdown(&priv->drm);
}
-static const struct component_master_ops ingenic_master_ops = {
- .bind = ingenic_drm_bind_with_components,
- .unbind = ingenic_drm_unbind,
+static void ingenic_aggregate_remove(struct aggregate_device *adev)
+{
+ struct device *dev = aggregate_device_parent(adev);
+
+ ingenic_drm_unbind(dev);
+}
+
+static struct aggregate_driver ingenic_aggregate_driver = {
+ .probe = ingenic_drm_bind_with_components,
+ .remove = ingenic_aggregate_remove,
+ .driver = {
+ .name = "ingenic_drm",
+ .owner = THIS_MODULE,
+ },
};
static int ingenic_drm_probe(struct platform_device *pdev)
@@ -1363,7 +1376,7 @@ static int ingenic_drm_probe(struct platform_device *pdev)
drm_of_component_match_add(dev, &match, compare_of, np);
of_node_put(np);
- return component_master_add_with_match(dev, &ingenic_master_ops, match);
+ return component_aggregate_register(dev, &ingenic_aggregate_driver, match);
}
static int ingenic_drm_remove(struct platform_device *pdev)
@@ -1373,7 +1386,7 @@ static int ingenic_drm_remove(struct platform_device *pdev)
if (!IS_ENABLED(CONFIG_DRM_INGENIC_IPU))
ingenic_drm_unbind(dev);
else
- component_master_del(dev, &ingenic_master_ops);
+ component_aggregate_unregister(dev, &ingenic_aggregate_driver);
return 0;
}