Hi Maxime. On Tue, Dec 03, 2019 at 08:46:59AM +0100, Maxime Ripard wrote: > 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 <sam@xxxxxxxxxxxx> > > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > > Cc: Laurent Pinchart <Laurent.pinchart@xxxxxxxxxxxxxxxx> > > Cc: Sam Ravnborg <sam@xxxxxxxxxxxx> > > Cc: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> > > Cc: Maxime Ripard <mripard@xxxxxxxxxx> > > Cc: David Airlie <airlied@xxxxxxxx> > > Cc: Daniel Vetter <daniel@xxxxxxxx> > > --- > > 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. Thanks for this nice explanation. I will drop the patch, and add an entry to my TODO list to look closer at this later. There are things to improve in this area. So the conclusion is more work rather than removing code :-) Sam