Skip to content

Commit

Permalink
drm/bridge: tc358762: Add reset GPIO support
Browse files Browse the repository at this point in the history
Add reset GPIO support. The reset GPIO is cleared after supply regulator
was enabled, and set before supply regulator is disabled.

Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Robert Foss <rfoss@kernel.org>
Signed-off-by: Robert Foss <rfoss@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230530192805.648646-2-marex@denx.de
  • Loading branch information
Marek Vasut authored and Robert Foss committed Jun 1, 2023
1 parent e800197 commit 3355f4e
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/gpu/drm/bridge/tc358762.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
*/

#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/of_graph.h>
Expand Down Expand Up @@ -63,6 +64,7 @@ struct tc358762 {
struct drm_bridge bridge;
struct regulator *regulator;
struct drm_bridge *panel_bridge;
struct gpio_desc *reset_gpio;
bool pre_enabled;
int error;
};
Expand Down Expand Up @@ -138,6 +140,9 @@ static void tc358762_post_disable(struct drm_bridge *bridge)

ctx->pre_enabled = false;

if (ctx->reset_gpio)
gpiod_set_value_cansleep(ctx->reset_gpio, 0);

ret = regulator_disable(ctx->regulator);
if (ret < 0)
dev_err(ctx->dev, "error disabling regulators (%d)\n", ret);
Expand All @@ -152,6 +157,11 @@ static void tc358762_pre_enable(struct drm_bridge *bridge)
if (ret < 0)
dev_err(ctx->dev, "error enabling regulators (%d)\n", ret);

if (ctx->reset_gpio) {
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
usleep_range(5000, 10000);
}

ret = tc358762_init(ctx);
if (ret < 0)
dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
Expand Down Expand Up @@ -185,6 +195,11 @@ static int tc358762_parse_dt(struct tc358762 *ctx)

ctx->panel_bridge = panel_bridge;

/* Reset GPIO is optional */
ctx->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(ctx->reset_gpio))
return PTR_ERR(ctx->reset_gpio);

return 0;
}

Expand Down

0 comments on commit 3355f4e

Please sign in to comment.