i2c: exynos5: Fix getting the optional clock
authorSam Protsenko <semen.protsenko@linaro.org>
Sun, 12 Dec 2021 18:10:57 +0000 (20:10 +0200)
committerWolfram Sang <wsa@kernel.org>
Thu, 16 Dec 2021 21:21:27 +0000 (22:21 +0100)
"hsi2c_pclk" clock is optional and may not be present for some SoCs
supported by this driver. Nevertheless, in case the clock is provided
but some error happens during its getting, that error should be handled
properly. Use devm_clk_get_optional() API for that. Also report possible
errors using dev_err_probe() to handle properly -EPROBE_DEFER error (if
clock provider is not ready by the time I2C probe function is executed).

Fixes: 697ad2490c96 ("i2c: exynos5: Add bus clock support")
Signed-off-by: Sam Protsenko <semen.protsenko@linaro.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Reviewed-by: Chanho Park <chanho61.park@samsung.com>
[wsa: fixed SHA1 of Fixes tag]
Signed-off-by: Wolfram Sang <wsa@kernel.org>
drivers/i2c/busses/i2c-exynos5.c

index 693903e8089211cdf9baed12fb7970dd6558c696..b812d1090c0f6cc128d1bc9b2f0a17395132b4bc 100644 (file)
@@ -814,9 +814,11 @@ static int exynos5_i2c_probe(struct platform_device *pdev)
                return -ENOENT;
        }
 
-       i2c->pclk = devm_clk_get(&pdev->dev, "hsi2c_pclk");
-       if (IS_ERR(i2c->pclk))
-               i2c->pclk = NULL; /* pclk is optional */
+       i2c->pclk = devm_clk_get_optional(&pdev->dev, "hsi2c_pclk");
+       if (IS_ERR(i2c->pclk)) {
+               return dev_err_probe(&pdev->dev, PTR_ERR(i2c->pclk),
+                                    "cannot get pclk");
+       }
 
        ret = clk_prepare_enable(i2c->pclk);
        if (ret)