Hi, On Tue, Aug 17, 2021 at 05:50:44PM +0800, CK Hu wrote: > Hi, Markus: > > On Mon, 2021-08-16 at 21:25 +0200, Markus Schneider-Pargmann wrote: > > dpintf is the displayport interface hardware unit. This unit is similar > > to dpi and can reuse most of the code. > > > > This patch adds support for mt8195-dpintf to this dpi driver. Main > > differences are: > > - Some features/functional components are not available for dpintf > > which are now excluded from code execution once is_dpintf is set > > - dpintf can and needs to choose between different clockdividers based > > on the clockspeed. This is done by choosing a different clock parent. > > - There are two additional clocks that need to be managed. These are > > only set for dpintf and will be set to NULL if not supplied. The > > clk_* calls handle these as normal clocks then. > > - Some register contents differ slightly between the two components. To > > work around this I added register bits/masks with a DPINTF_ prefix > > and use them where different. > > > > Based on a separate driver for dpintf created by > > Jason-JH.Lin <jason-jh.lin@xxxxxxxxxxxx>. > > > > Signed-off-by: Markus Schneider-Pargmann <msp@xxxxxxxxxxxx> > > --- > > drivers/gpu/drm/mediatek/mtk_dpi.c | 282 ++++++++++++++++++++---- > > drivers/gpu/drm/mediatek/mtk_dpi_regs.h | 12 + > > 2 files changed, 247 insertions(+), 47 deletions(-) > > > > [snip] > > > > > +static void mtk_dpi_set_pixel_clk_parent(struct mtk_dpi *dpi, > > + unsigned int factor) > > +{ > > + struct clk *new_parent; > > + > > + switch (factor) { > > + case 16: > > + new_parent = dpi->tvd_clks[MTK_DPI_TVDPLL_D16].clk; > > + break; > > + case 8: > > + new_parent = dpi->tvd_clks[MTK_DPI_TVDPLL_D8].clk; > > + break; > > + case 4: > > + new_parent = dpi->tvd_clks[MTK_DPI_TVDPLL_D4].clk; > > + break; > > + case 2: > > + new_parent = dpi->tvd_clks[MTK_DPI_TVDPLL_D2].clk; > > + break; > > + default: > > + new_parent = NULL; > > + } > > + if (new_parent) > > + clk_set_parent(dpi->pixel_clk, new_parent); > > I prefer that dpi->pixel_clk provide set_rate() interface, and let clock > driver to control the parent of dpi->pixel_clk. Good point, will do that, thanks. Best, Markus > > Regards, > CK > > > +} > > + > > static int mtk_dpi_set_display_mode(struct mtk_dpi *dpi, > > struct drm_display_mode *mode) > > { > > @@ -465,6 +568,8 @@ static int mtk_dpi_set_display_mode(struct mtk_dpi *dpi, > > drm_display_mode_to_videomode(mode, &vm); > > pll_rate = vm.pixelclock * factor; > > > > + mtk_dpi_set_pixel_clk_parent(dpi, factor); > > + > > dev_dbg(dpi->dev, "Want PLL %lu Hz, pixel clock %lu Hz\n", > > pll_rate, vm.pixelclock); > > > >