UPSTREAM: drm: Pass 'name' to drm_encoder_init()
[firefly-linux-kernel-4.4.55.git] / drivers / gpu / drm / tilcdc / tilcdc_tfp410.c
index 986131dd9f471ec78a4c2e6e726197e14df6c68b..5052a8af7ecb75613ba6c2635da38598776167c7 100644 (file)
@@ -16,7 +16,6 @@
  */
 
 #include <linux/i2c.h>
-#include <linux/of_i2c.h>
 #include <linux/gpio.h>
 #include <linux/of_gpio.h>
 #include <linux/pinctrl/pinmux.h>
@@ -139,7 +138,7 @@ static struct drm_encoder *tfp410_encoder_create(struct drm_device *dev,
        encoder->possible_crtcs = 1;
 
        ret = drm_encoder_init(dev, encoder, &tfp410_encoder_funcs,
-                       DRM_MODE_ENCODER_TMDS);
+                       DRM_MODE_ENCODER_TMDS, NULL);
        if (ret < 0)
                goto fail;
 
@@ -168,7 +167,7 @@ struct tfp410_connector {
 static void tfp410_connector_destroy(struct drm_connector *connector)
 {
        struct tfp410_connector *tfp410_connector = to_tfp410_connector(connector);
-       drm_sysfs_connector_remove(connector);
+       drm_connector_unregister(connector);
        drm_connector_cleanup(connector);
        kfree(tfp410_connector);
 }
@@ -263,7 +262,7 @@ static struct drm_connector *tfp410_connector_create(struct drm_device *dev,
        if (ret)
                goto fail;
 
-       drm_sysfs_connector_add(connector);
+       drm_connector_register(connector);
 
        return connector;
 
@@ -297,23 +296,8 @@ static int tfp410_modeset_init(struct tilcdc_module *mod, struct drm_device *dev
        return 0;
 }
 
-static void tfp410_destroy(struct tilcdc_module *mod)
-{
-       struct tfp410_module *tfp410_mod = to_tfp410_module(mod);
-
-       if (tfp410_mod->i2c)
-               i2c_put_adapter(tfp410_mod->i2c);
-
-       if (!IS_ERR_VALUE(tfp410_mod->gpio))
-               gpio_free(tfp410_mod->gpio);
-
-       tilcdc_module_cleanup(mod);
-       kfree(tfp410_mod);
-}
-
 static const struct tilcdc_module_ops tfp410_module_ops = {
                .modeset_init = tfp410_modeset_init,
-               .destroy = tfp410_destroy,
 };
 
 /*
@@ -343,6 +327,7 @@ static int tfp410_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        mod = &tfp410_mod->base;
+       pdev->dev.platform_data = mod;
 
        tilcdc_module_init(mod, "tfp410", &tfp410_module_ops);
 
@@ -355,6 +340,8 @@ static int tfp410_probe(struct platform_device *pdev)
                goto fail;
        }
 
+       mod->preferred_bpp = dvi_info.bpp;
+
        i2c_node = of_find_node_by_phandle(i2c_phandle);
        if (!i2c_node) {
                dev_err(&pdev->dev, "could not get i2c bus node\n");
@@ -364,6 +351,7 @@ static int tfp410_probe(struct platform_device *pdev)
        tfp410_mod->i2c = of_find_i2c_adapter_by_node(i2c_node);
        if (!tfp410_mod->i2c) {
                dev_err(&pdev->dev, "could not get i2c\n");
+               of_node_put(i2c_node);
                goto fail;
        }
 
@@ -377,19 +365,32 @@ static int tfp410_probe(struct platform_device *pdev)
                ret = gpio_request(tfp410_mod->gpio, "DVI_PDn");
                if (ret) {
                        dev_err(&pdev->dev, "could not get DVI_PDn gpio\n");
-                       goto fail;
+                       goto fail_adapter;
                }
        }
 
        return 0;
 
+fail_adapter:
+       i2c_put_adapter(tfp410_mod->i2c);
+
 fail:
-       tfp410_destroy(mod);
+       kfree(tfp410_mod);
+       tilcdc_module_cleanup(mod);
        return ret;
 }
 
 static int tfp410_remove(struct platform_device *pdev)
 {
+       struct tilcdc_module *mod = dev_get_platdata(&pdev->dev);
+       struct tfp410_module *tfp410_mod = to_tfp410_module(mod);
+
+       i2c_put_adapter(tfp410_mod->i2c);
+       gpio_free(tfp410_mod->gpio);
+
+       tilcdc_module_cleanup(mod);
+       kfree(tfp410_mod);
+
        return 0;
 }