From c3c5a46136cec454460e4bfceddf37507d245ed4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=B6ppner?= <jonas.hoeppner@garz-fricke.com> Date: Tue, 26 Sep 2023 17:21:32 +0200 Subject: [PATCH] gpu:drm:panel-lvds: Add sel6/8 gpio support The sel6/8 gpio is needed to toggle between 18bpp and 24bpp. This allow to specify the gpio in the devicetree. (cherry picked from commit b6581905c9c020fd28f6f788a60aa170a1ceb031) --- drivers/gpu/drm/panel/panel-lvds.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/gpu/drm/panel/panel-lvds.c b/drivers/gpu/drm/panel/panel-lvds.c index 66c7d765b8f78..fdb63ec317a3a 100644 --- a/drivers/gpu/drm/panel/panel-lvds.c +++ b/drivers/gpu/drm/panel/panel-lvds.c @@ -37,6 +37,7 @@ struct panel_lvds { struct gpio_desc *enable_gpio; struct gpio_desc *reset_gpio; + struct gpio_desc *sel6_8_gpio; enum drm_panel_orientation orientation; }; @@ -63,6 +64,12 @@ static int panel_lvds_prepare(struct drm_panel *panel) { struct panel_lvds *lvds = to_panel_lvds(panel); + /* The sel6_8_gpio configures some displays to use 6 or 8 bit per color + */ + if (lvds->sel6_8_gpio) + gpiod_set_value_cansleep(lvds->sel6_8_gpio, + (lvds->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG )); + if (lvds->supply) { int err; @@ -221,6 +228,15 @@ static int panel_lvds_probe(struct platform_device *pdev) return ret; } + lvds->sel6_8_gpio = devm_gpiod_get_optional(lvds->dev, "sel6_8", + GPIOD_OUT_LOW); + if (IS_ERR(lvds->sel6_8_gpio)) { + ret = PTR_ERR(lvds->sel6_8_gpio); + dev_info(lvds->dev, "failed to request %s GPIO: %d\n", + "sel6_8", ret); + return ret; + } + /* * TODO: Handle all power supplies specified in the DT node in a generic * way for panels that don't care about power supply ordering. LVDS -- GitLab