diff options
author | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2018-06-04 18:57:09 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2018-09-03 09:13:30 -0400 |
commit | 7c27fa57ef31debf62c5529725d4fa096b336a99 (patch) | |
tree | 7c21c68f5d509b16249838efbf33d00e18844169 /drivers/gpu/drm/omapdrm/dss | |
parent | 3fbda31e814868d8477ddf52d74b7b8f596578e8 (diff) |
drm/omap: Call dispc timings check operation directly
Instead of call the dispc timings check function dispc_mgr_timings_ok()
from the internal encoders .check_timings() operation, expose it through
the dispc ops (after renaming it to check_timings) and call it directly
from omapdrm. This allows removal of now empty omap_dss_device
.check_timings() operations.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dispc.c | 18 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dpi.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/dss.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/hdmi4.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/hdmi5.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/omapdss.h | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/sdi.c | 6 |
7 files changed, 13 insertions, 45 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c index da95dbfdf790..e61a9592a650 100644 --- a/drivers/gpu/drm/omapdrm/dss/dispc.c +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c | |||
@@ -3113,28 +3113,29 @@ static bool _dispc_mgr_pclk_ok(struct dispc_device *dispc, | |||
3113 | return pclk <= dispc->feat->max_tv_pclk; | 3113 | return pclk <= dispc->feat->max_tv_pclk; |
3114 | } | 3114 | } |
3115 | 3115 | ||
3116 | bool dispc_mgr_timings_ok(struct dispc_device *dispc, enum omap_channel channel, | 3116 | static int dispc_mgr_check_timings(struct dispc_device *dispc, |
3117 | const struct videomode *vm) | 3117 | enum omap_channel channel, |
3118 | const struct videomode *vm) | ||
3118 | { | 3119 | { |
3119 | if (!_dispc_mgr_size_ok(dispc, vm->hactive, vm->vactive)) | 3120 | if (!_dispc_mgr_size_ok(dispc, vm->hactive, vm->vactive)) |
3120 | return false; | 3121 | return MODE_BAD; |
3121 | 3122 | ||
3122 | if (!_dispc_mgr_pclk_ok(dispc, channel, vm->pixelclock)) | 3123 | if (!_dispc_mgr_pclk_ok(dispc, channel, vm->pixelclock)) |
3123 | return false; | 3124 | return MODE_BAD; |
3124 | 3125 | ||
3125 | if (dss_mgr_is_lcd(channel)) { | 3126 | if (dss_mgr_is_lcd(channel)) { |
3126 | /* TODO: OMAP4+ supports interlace for LCD outputs */ | 3127 | /* TODO: OMAP4+ supports interlace for LCD outputs */ |
3127 | if (vm->flags & DISPLAY_FLAGS_INTERLACED) | 3128 | if (vm->flags & DISPLAY_FLAGS_INTERLACED) |
3128 | return false; | 3129 | return MODE_BAD; |
3129 | 3130 | ||
3130 | if (!_dispc_lcd_timings_ok(dispc, vm->hsync_len, | 3131 | if (!_dispc_lcd_timings_ok(dispc, vm->hsync_len, |
3131 | vm->hfront_porch, vm->hback_porch, | 3132 | vm->hfront_porch, vm->hback_porch, |
3132 | vm->vsync_len, vm->vfront_porch, | 3133 | vm->vsync_len, vm->vfront_porch, |
3133 | vm->vback_porch)) | 3134 | vm->vback_porch)) |
3134 | return false; | 3135 | return MODE_BAD; |
3135 | } | 3136 | } |
3136 | 3137 | ||
3137 | return true; | 3138 | return MODE_OK; |
3138 | } | 3139 | } |
3139 | 3140 | ||
3140 | static void _dispc_mgr_set_lcd_timings(struct dispc_device *dispc, | 3141 | static void _dispc_mgr_set_lcd_timings(struct dispc_device *dispc, |
@@ -3236,7 +3237,7 @@ static void dispc_mgr_set_timings(struct dispc_device *dispc, | |||
3236 | 3237 | ||
3237 | DSSDBG("channel %d xres %u yres %u\n", channel, t.hactive, t.vactive); | 3238 | DSSDBG("channel %d xres %u yres %u\n", channel, t.hactive, t.vactive); |
3238 | 3239 | ||
3239 | if (!dispc_mgr_timings_ok(dispc, channel, &t)) { | 3240 | if (dispc_mgr_check_timings(dispc, channel, &t)) { |
3240 | BUG(); | 3241 | BUG(); |
3241 | return; | 3242 | return; |
3242 | } | 3243 | } |
@@ -4733,6 +4734,7 @@ static const struct dispc_ops dispc_ops = { | |||
4733 | .mgr_go_busy = dispc_mgr_go_busy, | 4734 | .mgr_go_busy = dispc_mgr_go_busy, |
4734 | .mgr_go = dispc_mgr_go, | 4735 | .mgr_go = dispc_mgr_go, |
4735 | .mgr_set_lcd_config = dispc_mgr_set_lcd_config, | 4736 | .mgr_set_lcd_config = dispc_mgr_set_lcd_config, |
4737 | .mgr_check_timings = dispc_mgr_check_timings, | ||
4736 | .mgr_set_timings = dispc_mgr_set_timings, | 4738 | .mgr_set_timings = dispc_mgr_set_timings, |
4737 | .mgr_setup = dispc_mgr_setup, | 4739 | .mgr_setup = dispc_mgr_setup, |
4738 | .mgr_gamma_size = dispc_mgr_gamma_size, | 4740 | .mgr_gamma_size = dispc_mgr_gamma_size, |
diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c index 58237decb5a8..d814d71fffbc 100644 --- a/drivers/gpu/drm/omapdrm/dss/dpi.c +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c | |||
@@ -496,7 +496,6 @@ static int dpi_check_timings(struct omap_dss_device *dssdev, | |||
496 | struct videomode *vm) | 496 | struct videomode *vm) |
497 | { | 497 | { |
498 | struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); | 498 | struct dpi_data *dpi = dpi_get_data_from_dssdev(dssdev); |
499 | enum omap_channel channel = dpi->output.dispc_channel; | ||
500 | int lck_div, pck_div; | 499 | int lck_div, pck_div; |
501 | unsigned long fck; | 500 | unsigned long fck; |
502 | unsigned long pck; | 501 | unsigned long pck; |
@@ -506,9 +505,6 @@ static int dpi_check_timings(struct omap_dss_device *dssdev, | |||
506 | if (vm->hactive % 8 != 0) | 505 | if (vm->hactive % 8 != 0) |
507 | return -EINVAL; | 506 | return -EINVAL; |
508 | 507 | ||
509 | if (!dispc_mgr_timings_ok(dpi->dss->dispc, channel, vm)) | ||
510 | return -EINVAL; | ||
511 | |||
512 | if (vm->pixelclock == 0) | 508 | if (vm->pixelclock == 0) |
513 | return -EINVAL; | 509 | return -EINVAL; |
514 | 510 | ||
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h index ee06051933c5..37790c363128 100644 --- a/drivers/gpu/drm/omapdrm/dss/dss.h +++ b/drivers/gpu/drm/omapdrm/dss/dss.h | |||
@@ -417,9 +417,6 @@ bool dispc_div_calc(struct dispc_device *dispc, unsigned long dispc_freq, | |||
417 | unsigned long pck_min, unsigned long pck_max, | 417 | unsigned long pck_min, unsigned long pck_max, |
418 | dispc_div_calc_func func, void *data); | 418 | dispc_div_calc_func func, void *data); |
419 | 419 | ||
420 | bool dispc_mgr_timings_ok(struct dispc_device *dispc, | ||
421 | enum omap_channel channel, | ||
422 | const struct videomode *vm); | ||
423 | int dispc_calc_clock_rates(struct dispc_device *dispc, | 420 | int dispc_calc_clock_rates(struct dispc_device *dispc, |
424 | unsigned long dispc_fclk_rate, | 421 | unsigned long dispc_fclk_rate, |
425 | struct dispc_clock_info *cinfo); | 422 | struct dispc_clock_info *cinfo); |
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c index a66bdbe3b969..3e2bc85ef538 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c | |||
@@ -251,17 +251,6 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi) | |||
251 | hdmi_power_off_core(hdmi); | 251 | hdmi_power_off_core(hdmi); |
252 | } | 252 | } |
253 | 253 | ||
254 | static int hdmi_display_check_timings(struct omap_dss_device *dssdev, | ||
255 | struct videomode *vm) | ||
256 | { | ||
257 | struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); | ||
258 | |||
259 | if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm)) | ||
260 | return -EINVAL; | ||
261 | |||
262 | return 0; | ||
263 | } | ||
264 | |||
265 | static void hdmi_display_set_timings(struct omap_dss_device *dssdev, | 254 | static void hdmi_display_set_timings(struct omap_dss_device *dssdev, |
266 | const struct videomode *vm) | 255 | const struct videomode *vm) |
267 | { | 256 | { |
@@ -508,7 +497,6 @@ static const struct omap_dss_device_ops hdmi_ops = { | |||
508 | .enable = hdmi_display_enable, | 497 | .enable = hdmi_display_enable, |
509 | .disable = hdmi_display_disable, | 498 | .disable = hdmi_display_disable, |
510 | 499 | ||
511 | .check_timings = hdmi_display_check_timings, | ||
512 | .set_timings = hdmi_display_set_timings, | 500 | .set_timings = hdmi_display_set_timings, |
513 | 501 | ||
514 | .read_edid = hdmi_read_edid, | 502 | .read_edid = hdmi_read_edid, |
diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c index d63831c9eacf..c02e08299155 100644 --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c | |||
@@ -250,17 +250,6 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi) | |||
250 | hdmi_power_off_core(hdmi); | 250 | hdmi_power_off_core(hdmi); |
251 | } | 251 | } |
252 | 252 | ||
253 | static int hdmi_display_check_timings(struct omap_dss_device *dssdev, | ||
254 | struct videomode *vm) | ||
255 | { | ||
256 | struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); | ||
257 | |||
258 | if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm)) | ||
259 | return -EINVAL; | ||
260 | |||
261 | return 0; | ||
262 | } | ||
263 | |||
264 | static void hdmi_display_set_timings(struct omap_dss_device *dssdev, | 253 | static void hdmi_display_set_timings(struct omap_dss_device *dssdev, |
265 | const struct videomode *vm) | 254 | const struct videomode *vm) |
266 | { | 255 | { |
@@ -502,7 +491,6 @@ static const struct omap_dss_device_ops hdmi_ops = { | |||
502 | .enable = hdmi_display_enable, | 491 | .enable = hdmi_display_enable, |
503 | .disable = hdmi_display_disable, | 492 | .disable = hdmi_display_disable, |
504 | 493 | ||
505 | .check_timings = hdmi_display_check_timings, | ||
506 | .set_timings = hdmi_display_set_timings, | 494 | .set_timings = hdmi_display_set_timings, |
507 | 495 | ||
508 | .read_edid = hdmi_read_edid, | 496 | .read_edid = hdmi_read_edid, |
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h index 251e092dfb05..1f698a95a94a 100644 --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h | |||
@@ -608,6 +608,9 @@ struct dispc_ops { | |||
608 | void (*mgr_set_lcd_config)(struct dispc_device *dispc, | 608 | void (*mgr_set_lcd_config)(struct dispc_device *dispc, |
609 | enum omap_channel channel, | 609 | enum omap_channel channel, |
610 | const struct dss_lcd_mgr_config *config); | 610 | const struct dss_lcd_mgr_config *config); |
611 | int (*mgr_check_timings)(struct dispc_device *dispc, | ||
612 | enum omap_channel channel, | ||
613 | const struct videomode *vm); | ||
611 | void (*mgr_set_timings)(struct dispc_device *dispc, | 614 | void (*mgr_set_timings)(struct dispc_device *dispc, |
612 | enum omap_channel channel, | 615 | enum omap_channel channel, |
613 | const struct videomode *vm); | 616 | const struct videomode *vm); |
diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c index 8e111afe5958..736a74db3ad5 100644 --- a/drivers/gpu/drm/omapdrm/dss/sdi.c +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c | |||
@@ -237,12 +237,6 @@ static void sdi_set_timings(struct omap_dss_device *dssdev, | |||
237 | static int sdi_check_timings(struct omap_dss_device *dssdev, | 237 | static int sdi_check_timings(struct omap_dss_device *dssdev, |
238 | struct videomode *vm) | 238 | struct videomode *vm) |
239 | { | 239 | { |
240 | struct sdi_device *sdi = dssdev_to_sdi(dssdev); | ||
241 | enum omap_channel channel = dssdev->dispc_channel; | ||
242 | |||
243 | if (!dispc_mgr_timings_ok(sdi->dss->dispc, channel, vm)) | ||
244 | return -EINVAL; | ||
245 | |||
246 | if (vm->pixelclock == 0) | 240 | if (vm->pixelclock == 0) |
247 | return -EINVAL; | 241 | return -EINVAL; |
248 | 242 | ||