Hi, On Mon, Dec 02, 2019 at 08:32:11PM +0100, Sam Ravnborg wrote: > There was no users - so remove it. > The callback was implemented in two drivers - deleted. > > Signed-off-by: Sam Ravnborg > Cc: Thierry Reding > Cc: Laurent Pinchart > Cc: Sam Ravnborg > Cc: Maarten Lankhorst > Cc: Maxime Ripard > Cc: David Airlie > Cc: Daniel Vetter > --- > drivers/gpu/drm/panel/panel-seiko-43wvf1g.c | 18 ------------------ > drivers/gpu/drm/panel/panel-simple.c | 18 ------------------ > include/drm/drm_panel.h | 9 --------- > 3 files changed, 45 deletions(-) > > diff --git a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c > index b878930b17e4..3bcba64235c4 100644 > --- a/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c > +++ b/drivers/gpu/drm/panel/panel-seiko-43wvf1g.c > @@ -217,30 +217,12 @@ static int seiko_panel_get_modes(struct drm_panel *panel, > return seiko_panel_get_fixed_modes(p, connector); > } > > -static int seiko_panel_get_timings(struct drm_panel *panel, > - unsigned int num_timings, > - struct display_timing *timings) > -{ > - struct seiko_panel *p = to_seiko_panel(panel); > - unsigned int i; > - > - if (p->desc->num_timings < num_timings) > - num_timings = p->desc->num_timings; > - > - if (timings) > - for (i = 0; i < num_timings; i++) > - timings[i] = p->desc->timings[i]; > - > - return p->desc->num_timings; > -} > - > static const struct drm_panel_funcs seiko_panel_funcs = { > .disable = seiko_panel_disable, > .unprepare = seiko_panel_unprepare, > .prepare = seiko_panel_prepare, > .enable = seiko_panel_enable, > .get_modes = seiko_panel_get_modes, > - .get_timings = seiko_panel_get_timings, > }; If anything, I think we should grow the usage of timings and / or make it usable by everyone. Using only the mode as we do currently has a bunch of shortcomings as almost no encoder will be able to provide the typical pixel clock, and that situation leads to multiple things: - If someone working on one encoder wants to upstream a panel they have tested, chances are this will not be the typical pixel clock / timings being used but rather the one that will match what that SoC is capable of. Trouble comes when a second user comes in with a different encoder and different capabilities, and then we have a maintainance fight over which timing is the true timing (with a significant chance that none of them are). - If we can't match the pixel clock, we currently have no easy way to make the usual measures of reducing / growing the porches and blankings areas to match the pixel clock we can provide, since we don't have an easy way to get the tolerance on those timings for a given panel. There's some ad hoc solutions on some drivers (I think vc4 has that?) to ignore the panel and just play around with the timings, but I think this should be generalised. Timings solves the first case since we have the operating range now and not a single set of timings, and it solves the second since we can use that range to take those measures instead of taking a shot in the dark. I appreciate that it's pretty far from where we are today, but removing the get_timings means that all the timings already defined in the panel drivers are becoming useless too, and that eventually it will get removed. Maxime