On Sat, Dec 3, 2022 at 8:01 PM Chris Morgan <macroalpha82@xxxxxxxxx> wrote: > Will do. I'll make the changes and resubmit. For what it's worth the > documentation says this one is a Samsung AMS495QA01 panel on a > Magnachip D53E6EA8966 controller IC. I would name the driver panel-magnachip-d53e6ea8966.c and KConfig PANEL_MAGNACHIP_D53E6EA8966 for now but keep the Samsung compatible string & match. Maybe this driver will match more magnachips in the future, maybe not. Sometimes people get hold of datasheets and submit proper code and #defines etc. > > > + if (db->reg_elvdd) { > > > > Do you really need to if() this? I thought the regulator > > framework would just ignore the calls for an optional > > regulator. > > I don't know for sure, but I'll make the change if you request it. I > think other drivers had an if in this scenario which is why I did it. Okay but I don't think that is necessary. > > > + mode->type = DRM_MODE_TYPE_DRIVER; > > > + if (panel_info->num_modes == 1) > > > + mode->type |= DRM_MODE_TYPE_PREFERRED; > > > > I think you should probably set the preferred mode even > > if there are several of them? But maybe just on the first > > or something. (A bit unsure here, Sam?) > > I'll keep 60hz as the preferred. 50hz was added at the request of some > userspace folks for running PAL based emulators and stuff. OK > This is the path that "works", but I'll happily change to something > else. > > > > + db->dsi_dev->lanes = 2; > > > + db->dsi_dev->format = MIPI_DSI_FMT_RGB888; > > > + db->dsi_dev->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | > > > + MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_NO_EOT_PACKET; > > > + > > > + drm_panel_init(&db->panel, dev, &ams495qa01_drm_funcs, > > > + DRM_MODE_CONNECTOR_DSI); > > > > Pixel data passes to the display using DSI but all display control > > is done over SPI, and the core will not help with this. > > > > So from the display controller POV this is a DSI display > > and from the display POV this is an SPI-controlled display. > > So it sits on two buses. Data path is on DSI, control path > > is on SPI. > > > > This would be kind of odd actually, normally DSI displays > > do the display control over DSI as well. SPI control is usually > > used on DPI displays. But I'm not surprised. > > > > If this is necessary, isn't this something we need to teach the > > core to handle instead of adding quirks like this to all drivers that > > have this characteristic? > > > > You are correct, this panel is controlled via 3-wire SPI in my example. > The panel can be controlled either by 3-wire SPI or DSI commands > depending on whether or not pin 15 is driven high or low. Unfortunately > in my case it's hardwired high, so I am forced to do it via 3-wire SPI. > I have no way of testing it with pure DSI but that would simplify > things quite a bit. Pixel data is transmitted soley through DSI. OK > The way I have it implemented currently is to put the panel on the SPI > bus as a DBI panel; traverse through the DT bindings to find the > associated DSI controller, then attach it as a DSI device so the DSI > bus can transmit the pixel data. > > I'm absolutely cool with making those functions part of the core and > not just specific to this panel, only I might need a bit of help on > that part to make sure I do it the right way. I just wasn't sure how > often that would be needed since this is the only panel I've ever seen > driven this way, especially since it seems like any sane person would > just want to do the whole control data/pixel data over DSI to keep > things simple. It doesn't seem all that unique. Can you put some helper in drivers/gpu/drm/drm_of.c with the rest and it will (hopefully) not be linked in unless used anyway. Yours, Linus Walleij