drm/exynos/hdmi: convert to gpiod API
authorAndrzej Hajda <a.hajda@samsung.com>
Fri, 25 Sep 2015 12:48:24 +0000 (14:48 +0200)
committerInki Dae <daeinki@gmail.com>
Mon, 26 Oct 2015 06:09:55 +0000 (15:09 +0900)
The patch converts API to gpiod and moves initialization code
to hdmi_resources_init.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
drivers/gpu/drm/exynos/exynos_hdmi.c

index 475341f3f9e0204dd2ff7ec0e6fc17477fb78a53..c0664d53ce2e03a407670bdd009194ce96572b6d 100644 (file)
 #include <linux/delay.h>
 #include <linux/pm_runtime.h>
 #include <linux/clk.h>
+#include <linux/gpio/consumer.h>
 #include <linux/regulator/consumer.h>
 #include <linux/io.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
-#include <linux/of_gpio.h>
 #include <linux/hdmi.h>
 #include <linux/component.h>
 #include <linux/mfd/syscon.h>
@@ -46,8 +46,6 @@
 #include "exynos_drm_crtc.h"
 #include "exynos_mixer.h"
 
-#include <linux/gpio.h>
-
 #define ctx_from_connector(c)  container_of(c, struct hdmi_context, connector)
 
 #define HOTPLUG_DEBOUNCE_MS            1100
@@ -129,7 +127,7 @@ struct hdmi_context {
        struct hdmi_resources           res;
        const struct hdmi_driver_data   *drv_data;
 
-       int                             hpd_gpio;
+       struct gpio_desc                *hpd_gpio;
        void __iomem                    *regs_hdmiphy;
 
        struct regmap                   *pmureg;
@@ -949,7 +947,7 @@ static enum drm_connector_status hdmi_detect(struct drm_connector *connector,
 {
        struct hdmi_context *hdata = ctx_from_connector(connector);
 
-       if (gpio_get_value(hdata->hpd_gpio))
+       if (gpiod_get_value(hdata->hpd_gpio))
                return connector_status_connected;
 
        return connector_status_disconnected;
@@ -1748,6 +1746,17 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
 
        DRM_DEBUG_KMS("HDMI resource init\n");
 
+       hdata->hpd_gpio = devm_gpiod_get(dev, "hpd", GPIOD_IN);
+       if (IS_ERR(hdata->hpd_gpio)) {
+               DRM_ERROR("cannot get hpd gpio property\n");
+               return PTR_ERR(hdata->hpd_gpio);
+       }
+
+       hdata->irq = gpiod_to_irq(hdata->hpd_gpio);
+       if (hdata->irq < 0) {
+               DRM_ERROR("failed to get GPIO irq\n");
+               return  hdata->irq;
+       }
        /* get clocks, power */
        res->hdmi = devm_clk_get(dev, "hdmi");
        if (IS_ERR(res->hdmi)) {
@@ -1909,11 +1918,6 @@ static int hdmi_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, hdata);
 
        hdata->dev = dev;
-       hdata->hpd_gpio = of_get_named_gpio(dev->of_node, "hpd-gpio", 0);
-       if (hdata->hpd_gpio < 0) {
-               DRM_ERROR("cannot get hpd gpio property\n");
-               return hdata->hpd_gpio;
-       }
 
        ret = hdmi_resources_init(hdata);
        if (ret) {
@@ -1928,12 +1932,6 @@ static int hdmi_probe(struct platform_device *pdev)
                return ret;
        }
 
-       ret = devm_gpio_request(dev, hdata->hpd_gpio, "HPD");
-       if (ret) {
-               DRM_ERROR("failed to request HPD gpio\n");
-               return ret;
-       }
-
        ddc_node = hdmi_legacy_ddc_dt_binding(dev);
        if (ddc_node)
                goto out_get_ddc_adpt;
@@ -1981,13 +1979,6 @@ out_get_phy_port:
                }
        }
 
-       hdata->irq = gpio_to_irq(hdata->hpd_gpio);
-       if (hdata->irq < 0) {
-               DRM_ERROR("failed to get GPIO irq\n");
-               ret = hdata->irq;
-               goto err_hdmiphy;
-       }
-
        INIT_DELAYED_WORK(&hdata->hotplug_work, hdmi_hotplug_work_func);
 
        ret = devm_request_threaded_irq(dev, hdata->irq, NULL,