imx-drm: update to use component match support
[linux-2.6-block.git] / drivers / staging / imx-drm / imx-drm-core.c
index c270c9ae6d27711d531ebb54a07b1cdc125be9da..47ee6c79857a4b59009025df6b4750b890349f0f 100644 (file)
@@ -200,13 +200,6 @@ static const struct file_operations imx_drm_driver_fops = {
        .llseek = noop_llseek,
 };
 
-int imx_drm_connector_mode_valid(struct drm_connector *connector,
-       struct drm_display_mode *mode)
-{
-       return MODE_OK;
-}
-EXPORT_SYMBOL(imx_drm_connector_mode_valid);
-
 void imx_drm_connector_destroy(struct drm_connector *connector)
 {
        drm_sysfs_connector_remove(connector);
@@ -305,7 +298,7 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
                        dev_err(drm->dev,
                                "[CONNECTOR:%d:%s] drm_sysfs_connector_add failed: %d\n",
                                connector->base.id,
-                               drm_get_connector_name(connector), ret);
+                               connector->name, ret);
                        goto err_unbind;
                }
        }
@@ -577,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));
@@ -604,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;
 
@@ -654,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) {
@@ -682,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);
        }
@@ -694,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)