Message ID | 6632ce37e260f5f5cbdd0c6a5da8fe9679352aee.1685549360.git.daniel@makrotopia.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] dt-bindings: i2c: i2c-mt65xx: add additional clocks | expand |
Il 31/05/23 18:11, Daniel Golle ha scritto: > On MT7981 additional clocks are required when accessing I2C registers. > Add MCK and PCK optional clocks to i2c-mt65xx driver so we don't have > to always have them enabled, but really only if I2C is used. > > Fixes: f82fd1845d309 ("i2c: mediatek: add support for MT7981 SoC") > Signed-off-by: Daniel Golle <daniel@makrotopia.org> PCK and MCK should really be P=PMIC and M=MEM as far as I understand, which means that they should effectively be CLK_PMIC and CLK_ARB. In that case, you don't need to add new clocks to the driver, as you're using the very same ones that the driver supports. Cheers, Angelo > --- > drivers/i2c/busses/i2c-mt65xx.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c > index a43c4d77739ab..cd28cbec2b96d 100644 > --- a/drivers/i2c/busses/i2c-mt65xx.c > +++ b/drivers/i2c/busses/i2c-mt65xx.c > @@ -93,6 +93,8 @@ > * @I2C_MT65XX_CLK_DMA: DMA clock for i2c via DMA > * @I2C_MT65XX_CLK_PMIC: PMIC clock for i2c from PMIC > * @I2C_MT65XX_CLK_ARB: Arbitrator clock for i2c > + * @I2C_MT65XX_CLK_MCK: MCK clock for i2c > + * @I2C_MT65XX_CLK_PCK: PCK clock for i2c > * @I2C_MT65XX_CLK_MAX: Number of supported clocks > */ > enum i2c_mt65xx_clks { > @@ -100,11 +102,13 @@ enum i2c_mt65xx_clks { > I2C_MT65XX_CLK_DMA, > I2C_MT65XX_CLK_PMIC, > I2C_MT65XX_CLK_ARB, > + I2C_MT65XX_CLK_MCK, > + I2C_MT65XX_CLK_PCK, > I2C_MT65XX_CLK_MAX > }; > > static const char * const i2c_mt65xx_clk_ids[I2C_MT65XX_CLK_MAX] = { > - "main", "dma", "pmic", "arb" > + "main", "dma", "pmic", "arb", "mck", "pck" > }; > > enum DMA_REGS_OFFSET { > @@ -1444,6 +1448,14 @@ static int mtk_i2c_probe(struct platform_device *pdev) > if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk)) > return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk); > > + i2c->clocks[I2C_MT65XX_CLK_MCK].clk = devm_clk_get_optional(&pdev->dev, "mck"); > + if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_MCK].clk)) > + return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_MCK].clk); > + > + i2c->clocks[I2C_MT65XX_CLK_PCK].clk = devm_clk_get_optional(&pdev->dev, "pck"); > + if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PCK].clk)) > + return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PCK].clk); > + > if (i2c->have_pmic) { > i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = devm_clk_get(&pdev->dev, "pmic"); > if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk)) {
diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c index a43c4d77739ab..cd28cbec2b96d 100644 --- a/drivers/i2c/busses/i2c-mt65xx.c +++ b/drivers/i2c/busses/i2c-mt65xx.c @@ -93,6 +93,8 @@ * @I2C_MT65XX_CLK_DMA: DMA clock for i2c via DMA * @I2C_MT65XX_CLK_PMIC: PMIC clock for i2c from PMIC * @I2C_MT65XX_CLK_ARB: Arbitrator clock for i2c + * @I2C_MT65XX_CLK_MCK: MCK clock for i2c + * @I2C_MT65XX_CLK_PCK: PCK clock for i2c * @I2C_MT65XX_CLK_MAX: Number of supported clocks */ enum i2c_mt65xx_clks { @@ -100,11 +102,13 @@ enum i2c_mt65xx_clks { I2C_MT65XX_CLK_DMA, I2C_MT65XX_CLK_PMIC, I2C_MT65XX_CLK_ARB, + I2C_MT65XX_CLK_MCK, + I2C_MT65XX_CLK_PCK, I2C_MT65XX_CLK_MAX }; static const char * const i2c_mt65xx_clk_ids[I2C_MT65XX_CLK_MAX] = { - "main", "dma", "pmic", "arb" + "main", "dma", "pmic", "arb", "mck", "pck" }; enum DMA_REGS_OFFSET { @@ -1444,6 +1448,14 @@ static int mtk_i2c_probe(struct platform_device *pdev) if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk)) return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_ARB].clk); + i2c->clocks[I2C_MT65XX_CLK_MCK].clk = devm_clk_get_optional(&pdev->dev, "mck"); + if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_MCK].clk)) + return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_MCK].clk); + + i2c->clocks[I2C_MT65XX_CLK_PCK].clk = devm_clk_get_optional(&pdev->dev, "pck"); + if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PCK].clk)) + return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PCK].clk); + if (i2c->have_pmic) { i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = devm_clk_get(&pdev->dev, "pmic"); if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk)) {
On MT7981 additional clocks are required when accessing I2C registers. Add MCK and PCK optional clocks to i2c-mt65xx driver so we don't have to always have them enabled, but really only if I2C is used. Fixes: f82fd1845d309 ("i2c: mediatek: add support for MT7981 SoC") Signed-off-by: Daniel Golle <daniel@makrotopia.org> --- drivers/i2c/busses/i2c-mt65xx.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)