Skip to content

Commit 3355f4e

Browse files
Marek Vasutrobertfoss
authored andcommitted
drm/bridge: tc358762: Add reset GPIO support
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
1 parent e800197 commit 3355f4e

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

drivers/gpu/drm/bridge/tc358762.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
*/
1212

1313
#include <linux/delay.h>
14+
#include <linux/gpio/consumer.h>
1415
#include <linux/mod_devicetable.h>
1516
#include <linux/module.h>
1617
#include <linux/of_graph.h>
@@ -63,6 +64,7 @@ struct tc358762 {
6364
struct drm_bridge bridge;
6465
struct regulator *regulator;
6566
struct drm_bridge *panel_bridge;
67+
struct gpio_desc *reset_gpio;
6668
bool pre_enabled;
6769
int error;
6870
};
@@ -138,6 +140,9 @@ static void tc358762_post_disable(struct drm_bridge *bridge)
138140

139141
ctx->pre_enabled = false;
140142

143+
if (ctx->reset_gpio)
144+
gpiod_set_value_cansleep(ctx->reset_gpio, 0);
145+
141146
ret = regulator_disable(ctx->regulator);
142147
if (ret < 0)
143148
dev_err(ctx->dev, "error disabling regulators (%d)\n", ret);
@@ -152,6 +157,11 @@ static void tc358762_pre_enable(struct drm_bridge *bridge)
152157
if (ret < 0)
153158
dev_err(ctx->dev, "error enabling regulators (%d)\n", ret);
154159

160+
if (ctx->reset_gpio) {
161+
gpiod_set_value_cansleep(ctx->reset_gpio, 1);
162+
usleep_range(5000, 10000);
163+
}
164+
155165
ret = tc358762_init(ctx);
156166
if (ret < 0)
157167
dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
@@ -185,6 +195,11 @@ static int tc358762_parse_dt(struct tc358762 *ctx)
185195

186196
ctx->panel_bridge = panel_bridge;
187197

198+
/* Reset GPIO is optional */
199+
ctx->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
200+
if (IS_ERR(ctx->reset_gpio))
201+
return PTR_ERR(ctx->reset_gpio);
202+
188203
return 0;
189204
}
190205

0 commit comments

Comments
 (0)