On Tue 20 Jul 10:33 CDT 2021, Caleb Connolly wrote: > The OnePlus 6T panel fails to initialise if it has been reset, > workaround this by allowing panels to not specify a reset GPIO. > > Signed-off-by: Caleb Connolly <caleb@xxxxxxxxxxxxx> > --- > drivers/gpu/drm/panel/panel-samsung-sofef00.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/panel/panel-samsung-sofef00.c b/drivers/gpu/drm/panel/panel-samsung-sofef00.c > index 8cb1853574bb..a20a5af14653 100644 > --- a/drivers/gpu/drm/panel/panel-samsung-sofef00.c > +++ b/drivers/gpu/drm/panel/panel-samsung-sofef00.c > @@ -44,6 +44,8 @@ struct sofef00_panel *to_sofef00_panel(struct drm_panel *panel) > > static void sofef00_panel_reset(struct sofef00_panel *ctx) > { > + if (!ctx->reset_gpio) gpiod_set_value_cansleep(NULL, 1) is a perfectly valid nop, so I don't think you need to make this conditional. That said, don't you need this to get the panel out of reset once you apply power after it being powered off? > + return; > gpiod_set_value_cansleep(ctx->reset_gpio, 0); > usleep_range(5000, 6000); > gpiod_set_value_cansleep(ctx->reset_gpio, 1); > @@ -137,7 +139,8 @@ static int sofef00_panel_prepare(struct drm_panel *panel) > ret = sofef00_panel_on(ctx); > if (ret < 0) { > dev_err(dev, "Failed to initialize panel: %d\n", ret); > - gpiod_set_value_cansleep(ctx->reset_gpio, 1); > + if (ctx->reset_gpio) Ditto. Regards, Bjorn > + gpiod_set_value_cansleep(ctx->reset_gpio, 1); > return ret; > } > > @@ -276,7 +279,7 @@ static int sofef00_panel_probe(struct mipi_dsi_device *dsi) > return ret; > } > > - ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); > + ctx->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); > if (IS_ERR(ctx->reset_gpio)) { > ret = PTR_ERR(ctx->reset_gpio); > dev_warn(dev, "Failed to get reset-gpios: %d\n", ret); > -- > 2.32.0 > >