Commit 83c784e7 authored by Marek Vasut's avatar Marek Vasut
Browse files

drm/panel: lvds: Use bus_flags from DT panel-timing property



This driver currently rewrites bus_flags based solely on the value of
DT property 'data-mirror' and ignores bus_flags which might have been
set in DT panel-timing node. Specificaly, the 'de-active' DT property
sets DRM_BUS_FLAG_DE_ bus_flags.

Since of_get_drm_panel_display_mode() conveniently parses the bus_flags
out of DT panel-timing property, just ORR them with bus_flags inferred
from 'data-mirror' DT property and use the result as panel bus_flags.

This fixes handling of panels with 'panel-timing { de-active = <1>; };'.

Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: default avatarChristoph Niedermaier <cniedermaier@dh-electronics.com>
Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Christoph Niedermaier <cniedermaier@dh-electronics.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Dmitry Osipenko <digetx@gmail.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Robert Foss <robert.foss@linaro.org>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
To: dri-devel@lists.freedesktop.org
Link: https://patchwork.freedesktop.org/patch/msgid/20220401162154.295152-2-marex@denx.de
parent 03fa454b
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ struct panel_lvds {
	struct drm_display_mode dmode;
	u32 bus_flags;
	unsigned int bus_format;
	bool data_mirror;

	struct regulator *supply;

@@ -99,9 +98,7 @@ static int panel_lvds_get_modes(struct drm_panel *panel,
	connector->display_info.height_mm = lvds->dmode.height_mm;
	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;
	connector->display_info.bus_flags = lvds->bus_flags;
	drm_connector_set_panel_orientation(connector, lvds->orientation);

	return 1;
@@ -154,7 +151,9 @@ static int panel_lvds_parse_dt(struct panel_lvds *lvds)

	lvds->bus_format = ret;

	lvds->data_mirror = of_property_read_bool(np, "data-mirror");
	lvds->bus_flags |= of_property_read_bool(np, "data-mirror") ?
			   DRM_BUS_FLAG_DATA_LSB_TO_MSB :
			   DRM_BUS_FLAG_DATA_MSB_TO_LSB;

	return 0;
}