aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/dss
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-06-04 18:57:09 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2018-09-03 09:13:30 -0400
commit7c27fa57ef31debf62c5529725d4fa096b336a99 (patch)
tree7c21c68f5d509b16249838efbf33d00e18844169 /drivers/gpu/drm/omapdrm/dss
parent3fbda31e814868d8477ddf52d74b7b8f596578e8 (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.c18
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dpi.c4
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dss.h3
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi4.c12
-rw-r--r--drivers/gpu/drm/omapdrm/dss/hdmi5.c12
-rw-r--r--drivers/gpu/drm/omapdrm/dss/omapdss.h3
-rw-r--r--drivers/gpu/drm/omapdrm/dss/sdi.c6
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
3116bool dispc_mgr_timings_ok(struct dispc_device *dispc, enum omap_channel channel, 3116static 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
3140static void _dispc_mgr_set_lcd_timings(struct dispc_device *dispc, 3141static 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
420bool dispc_mgr_timings_ok(struct dispc_device *dispc,
421 enum omap_channel channel,
422 const struct videomode *vm);
423int dispc_calc_clock_rates(struct dispc_device *dispc, 420int 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
254static 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
265static void hdmi_display_set_timings(struct omap_dss_device *dssdev, 254static 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
253static 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
264static void hdmi_display_set_timings(struct omap_dss_device *dssdev, 253static 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,
237static int sdi_check_timings(struct omap_dss_device *dssdev, 237static 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