drm/bridge: ti-tfp410: Add support for the powerdown GPIO
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Mon, 1 Oct 2018 15:07:48 +0000 (18:07 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 18 Mar 2019 09:42:13 +0000 (11:42 +0200)
The TFP410 has a powerdown pin that can be connected to a GPIO to
control power saving. The DT bindings define a corresponding property,
but the driver doesn't implement support for it. Fix that.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Jyri Sarha <jsarha@ti.com>
Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/bridge/ti-tfp410.c

index daf0967..b0213d5 100644 (file)
@@ -32,6 +32,7 @@ struct tfp410 {
        struct i2c_adapter      *ddc;
        struct gpio_desc        *hpd;
        struct delayed_work     hpd_work;
+       struct gpio_desc        *powerdown;
 
        struct device *dev;
 };
@@ -139,8 +140,24 @@ static int tfp410_attach(struct drm_bridge *bridge)
        return 0;
 }
 
+static void tfp410_enable(struct drm_bridge *bridge)
+{
+       struct tfp410 *dvi = drm_bridge_to_tfp410(bridge);
+
+       gpiod_set_value_cansleep(dvi->powerdown, 0);
+}
+
+static void tfp410_disable(struct drm_bridge *bridge)
+{
+       struct tfp410 *dvi = drm_bridge_to_tfp410(bridge);
+
+       gpiod_set_value_cansleep(dvi->powerdown, 1);
+}
+
 static const struct drm_bridge_funcs tfp410_bridge_funcs = {
        .attach         = tfp410_attach,
+       .enable         = tfp410_enable,
+       .disable        = tfp410_disable,
 };
 
 static void tfp410_hpd_work_func(struct work_struct *work)
@@ -229,6 +246,13 @@ static int tfp410_init(struct device *dev)
        if (ret)
                goto fail;
 
+       dvi->powerdown = devm_gpiod_get_optional(dev, "powerdown",
+                                                GPIOD_OUT_HIGH);
+       if (IS_ERR(dvi->powerdown)) {
+               dev_err(dev, "failed to parse powerdown gpio\n");
+               return PTR_ERR(dvi->powerdown);
+       }
+
        if (dvi->hpd) {
                INIT_DELAYED_WORK(&dvi->hpd_work, tfp410_hpd_work_func);