Add device tree properties to the panel-lvds driver to set the bus
flags properly.

Signed-off-by: Maxime Ripard <max...@cerno.tech>
---
 drivers/gpu/drm/panel/panel-lvds.c | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/panel/panel-lvds.c 
b/drivers/gpu/drm/panel/panel-lvds.c
index 5ce3f4a2b7a1..c0d6dcd9e9fc 100644
--- a/drivers/gpu/drm/panel/panel-lvds.c
+++ b/drivers/gpu/drm/panel/panel-lvds.c
@@ -31,6 +31,8 @@ struct panel_lvds {
        unsigned int height;
        struct videomode video_mode;
        unsigned int bus_format;
+       bool clk_active_low;
+       bool data_active_low;
        bool data_mirror;
 
        struct regulator *supply;
@@ -83,6 +85,7 @@ static int panel_lvds_get_modes(struct drm_panel *panel,
 {
        struct panel_lvds *lvds = to_panel_lvds(panel);
        struct drm_display_mode *mode;
+       unsigned int flags = 0;
 
        mode = drm_mode_create(connector->dev);
        if (!mode)
@@ -96,9 +99,23 @@ static int panel_lvds_get_modes(struct drm_panel *panel,
        connector->display_info.height_mm = lvds->height;
        drm_display_info_set_bus_formats(&connector->display_info,
                                         &lvds->bus_format, 1);
-       connector->display_info.bus_flags = lvds->data_mirror
-                                         ? DRM_BUS_FLAG_DATA_LSB_TO_MSB
-                                         : DRM_BUS_FLAG_DATA_MSB_TO_LSB;
+
+       if (lvds->data_mirror)
+               flags |= DRM_BUS_FLAG_DATA_LSB_TO_MSB;
+       else
+               flags |= DRM_BUS_FLAG_DATA_MSB_TO_LSB;
+
+       if (lvds->clk_active_low)
+               flags |= DRM_BUS_FLAG_PIXDATA_NEGEDGE;
+       else
+               flags |= DRM_BUS_FLAG_PIXDATA_POSEDGE;
+
+       if (lvds->data_active_low)
+               flags |= DRM_BUS_FLAG_DATA_LOW;
+       else
+               flags |= DRM_BUS_FLAG_DATA_HIGH;
+
+       connector->display_info.bus_flags = flags;
 
        return 1;
 }
@@ -159,6 +176,8 @@ static int panel_lvds_parse_dt(struct panel_lvds *lvds)
                return -EINVAL;
        }
 
+       lvds->clk_active_low = of_property_read_bool(np, "clock-active-low");
+       lvds->data_active_low = of_property_read_bool(np, "data-active-low");
        lvds->data_mirror = of_property_read_bool(np, "data-mirror");
 
        return 0;
-- 
git-series 0.9.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to