imx-drm: update to use component match support
authorRussell King <rmk+kernel@arm.linux.org.uk>
Sat, 19 Apr 2014 10:21:33 +0000 (11:21 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 4 Jul 2014 17:06:06 +0000 (18:06 +0100)
Update the imx-drm driver to use the component match support rather than
add_components.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
drivers/staging/imx-drm/imx-drm-core.c

index def8280..47ee6c7 100644 (file)
@@ -570,22 +570,6 @@ static int compare_of(struct device *dev, void *data)
        return dev->of_node == np;
 }
 
-static LIST_HEAD(imx_drm_components);
-
-static int imx_drm_add_components(struct device *master, struct master *m)
-{
-       struct imx_drm_component *component;
-       int ret;
-
-       list_for_each_entry(component, &imx_drm_components, list) {
-               ret = component_master_add_child(m, compare_of,
-                                                component->of_node);
-               if (ret)
-                       return ret;
-       }
-       return 0;
-}
-
 static int imx_drm_bind(struct device *dev)
 {
        return drm_platform_init(&imx_drm_driver, to_platform_device(dev));
@@ -597,43 +581,14 @@ static void imx_drm_unbind(struct device *dev)
 }
 
 static const struct component_master_ops imx_drm_ops = {
-       .add_components = imx_drm_add_components,
        .bind = imx_drm_bind,
        .unbind = imx_drm_unbind,
 };
 
-static struct imx_drm_component *imx_drm_find_component(struct device *dev,
-               struct device_node *node)
-{
-       struct imx_drm_component *component;
-
-       list_for_each_entry(component, &imx_drm_components, list)
-               if (component->of_node == node)
-                       return component;
-
-       return NULL;
-}
-
-static int imx_drm_add_component(struct device *dev, struct device_node *node)
-{
-       struct imx_drm_component *component;
-
-       if (imx_drm_find_component(dev, node))
-               return 0;
-
-       component = devm_kzalloc(dev, sizeof(*component), GFP_KERNEL);
-       if (!component)
-               return -ENOMEM;
-
-       component->of_node = node;
-       list_add_tail(&component->list, &imx_drm_components);
-
-       return 0;
-}
-
 static int imx_drm_platform_probe(struct platform_device *pdev)
 {
        struct device_node *ep, *port, *remote;
+       struct component_match *match = NULL;
        int ret;
        int i;
 
@@ -647,9 +602,7 @@ static int imx_drm_platform_probe(struct platform_device *pdev)
                if (!port)
                        break;
 
-               ret = imx_drm_add_component(&pdev->dev, port);
-               if (ret < 0)
-                       return ret;
+               component_match_add(&pdev->dev, &match, compare_of, port);
        }
 
        if (i == 0) {
@@ -675,10 +628,8 @@ static int imx_drm_platform_probe(struct platform_device *pdev)
                                continue;
                        }
 
-                       ret = imx_drm_add_component(&pdev->dev, remote);
+                       component_match_add(&pdev->dev, &match, compare_of, remote);
                        of_node_put(remote);
-                       if (ret < 0)
-                               return ret;
                }
                of_node_put(port);
        }
@@ -687,7 +638,7 @@ static int imx_drm_platform_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       return component_master_add(&pdev->dev, &imx_drm_ops);
+       return component_master_add_with_match(&pdev->dev, &imx_drm_ops, match);
 }
 
 static int imx_drm_platform_remove(struct platform_device *pdev)