Messages in this thread Patch in this message |  | | Subject | Re: [PATCH] soc: mediatek: mmsys: fix HDMI output on mt7623/bananapi-r2 | From | Dafna Hirschfeld <> | Date | Mon, 12 Jul 2021 13:50:08 +0200 |
| |
Hi
On 10.07.21 15:24, Frank Wunderlich wrote: > From: Frank Wunderlich <frank-w@public-files.de> > > HDMI output was broken on mt7623/BPI-R2 in 5.13 because function for > special output selection (mtk_mmsys_ddp_sout_sel) was dropped. > This function wrote 3 registers at one time and so it is not compatible > with the array-approach. > > I re-added the old function and call this after the default routing table > was applied. This default routing table can still be used as the only > connection handled by mmsys on BPI-R2 is OVL0->RDMA0 and this is already > present in the default routing table > > Fixes: 440147639ac7 ("soc: mediatek: mmsys: Use an array for setting the routing registers") > Signed-off-by: Frank Wunderlich <frank-w@public-files.de> > --- > drivers/soc/mediatek/mtk-mmsys.c | 21 +++++++++++++++++++++ > 1 file changed, 21 insertions(+) > > diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c > index 080660ef11bf..f91b7fdd417a 100644 > --- a/drivers/soc/mediatek/mtk-mmsys.c > +++ b/drivers/soc/mediatek/mtk-mmsys.c > @@ -57,6 +57,25 @@ struct mtk_mmsys { > const struct mtk_mmsys_driver_data *data; > }; > > +static void mtk_mmsys_ddp_sout_sel(struct device *dev, > + enum mtk_ddp_comp_id cur, > + enum mtk_ddp_comp_id next) > +{ > + struct mtk_mmsys *mmsys = dev_get_drvdata(dev); > + > + if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DSI0) { > + writel_relaxed(BLS_TO_DSI_RDMA1_TO_DPI1, > + mmsys->regs + DISP_REG_CONFIG_OUT_SEL); > + } else if (cur == DDP_COMPONENT_BLS && next == DDP_COMPONENT_DPI0) { > + writel_relaxed(BLS_TO_DPI_RDMA1_TO_DSI, > + mmsys->regs + DISP_REG_CONFIG_OUT_SEL); > + writel_relaxed(DSI_SEL_IN_RDMA, > + mmsys->regs + DISP_REG_CONFIG_DSI_SEL); > + writel_relaxed(DPI_SEL_IN_BLS, > + mmsys->regs + DISP_REG_CONFIG_DPI_SEL);
you can still use the array approach for this like that:
{ DDP_COMPONENT_BLS, DDP_COMPONENT_DSI0, DISP_REG_CONFIG_OUT_SEL, BLS_TO_DSI_RDMA1_TO_DPI1 }, { { DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0, DISP_REG_CONFIG_OUT_SEL, BLS_TO_DPI_RDMA1_TO_DSI }, { { DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0, DISP_REG_CONFIG_DSI_SEL, DSI_SEL_IN_RDMA }, { { DDP_COMPONENT_BLS, DDP_COMPONENT_DPI0, DISP_REG_CONFIG_DPI_SEL, DPI_SEL_IN_BLS }, {
Thanks, Dafna
> + } > +} > + > void mtk_mmsys_ddp_connect(struct device *dev, > enum mtk_ddp_comp_id cur, > enum mtk_ddp_comp_id next) > @@ -71,6 +90,8 @@ void mtk_mmsys_ddp_connect(struct device *dev, > reg = readl_relaxed(mmsys->regs + routes[i].addr) | routes[i].val; > writel_relaxed(reg, mmsys->regs + routes[i].addr); > } > + > + mtk_mmsys_ddp_sout_sel(dev, cur, next); > } > EXPORT_SYMBOL_GPL(mtk_mmsys_ddp_connect); > >
|  |