Commit 31cd7afa authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Tomi Valkeinen

drm/omap: panels: Don't modify fixed timings

Panels drivers store their timings in a device data structure field that
is initialized at probe time, either from hardcoded values or from
firmware-supplied values. Those timings are then reported through the
.get_timings() operation to construct the panel display mode.

The panel timings are further modified by the .set_timings() operation,
which is called with the timings retrieved by .get_timings(), and
mangled by .check_timings(). The latter potentially adjusts the pixel
clock only.

Conceptually, modifying the panel timings is wrong, as the timings are
an intrinsic property of the panel and should thus be fixed.
Furthermore, modifying them this way at runtime can result in display
modes reported to userspace varying between calls, which is also wrong.

There's no actual need to store the mangled pixel clock value in the
timings. Don't modify the panel timings in the .set_timings() operation,
just forward it to the previous device in the display pipeline.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent ca6e968b
......@@ -96,11 +96,8 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev)
static void panel_dpi_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -166,11 +166,8 @@ static void lb035q02_disable(struct omap_dss_device *dssdev)
static void lb035q02_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -159,11 +159,8 @@ static void nec_8048_disable(struct omap_dss_device *dssdev)
static void nec_8048_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -129,11 +129,8 @@ static void sharp_ls_disable(struct omap_dss_device *dssdev)
static void sharp_ls_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -632,11 +632,8 @@ static void acx565akm_disable(struct omap_dss_device *dssdev)
static void acx565akm_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -298,11 +298,8 @@ static void td028ttec1_panel_disable(struct omap_dss_device *dssdev)
static void td028ttec1_panel_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
......@@ -372,11 +372,8 @@ static void tpo_td043_disable(struct omap_dss_device *dssdev)
static void tpo_td043_set_timings(struct omap_dss_device *dssdev,
const struct videomode *vm)
{
struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *src = dssdev->src;
ddata->vm = *vm;
src->ops->set_timings(src, vm);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment