i2c: mt65xx: allow optional pmic clock
authorDaniel Golle <daniel@makrotopia.org>
Sun, 27 Aug 2023 02:13:30 +0000 (03:13 +0100)
committerWolfram Sang <wsa@kernel.org>
Tue, 19 Sep 2023 20:00:22 +0000 (22:00 +0200)
Using the I2C host controller on the MT7981 SoC requires 4 clocks to
be enabled. One of them, the pmic clk, is only enabled in case
'mediatek,have-pmic' is also set which has other consequences which
are not desired in this case.

Allow defining a pmic clk even in case the 'mediatek,have-pmic' propterty
is not present and the bus is not used to connect to a pmic, but may
still require to enable the pmic clock.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Reviewed-by: Andi Shyti <andi.shyti@kernel.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-mt65xx.c

index 1a9b5a068ef1b2e45c6d3e4d995563969a7561d4..a8b5719c33729ec888fa56bfce82bc8b90bc4ebe 100644 (file)
@@ -1442,15 +1442,19 @@ 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_PMIC].clk = devm_clk_get_optional(&pdev->dev, "pmic");
+       if (IS_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk)) {
+               dev_err(&pdev->dev, "cannot get pmic clock\n");
+               return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].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)) {
+               if (!i2c->clocks[I2C_MT65XX_CLK_PMIC].clk) {
                        dev_err(&pdev->dev, "cannot get pmic clock\n");
-                       return PTR_ERR(i2c->clocks[I2C_MT65XX_CLK_PMIC].clk);
+                       return -ENODEV;
                }
                speed_clk = I2C_MT65XX_CLK_PMIC;
        } else {
-               i2c->clocks[I2C_MT65XX_CLK_PMIC].clk = NULL;
                speed_clk = I2C_MT65XX_CLK_MAIN;
        }