Commit c9598d04 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Wolfram Sang
Browse files

i2c: mpc: Use devm_clk_get_optional()



The peripheral clock is optional and we may get an -EPROBE_DEFER error code
which would not be propagated correctly, fix this by using
devm_clk_get_optional().

Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
Signed-off-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
parent 97b4dff1
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -737,17 +737,18 @@ static int fsl_i2c_probe(struct platform_device *op)
	 * enable clock for the I2C peripheral (non fatal),
	 * keep a reference upon successful allocation
	 */
	clk = devm_clk_get(&op->dev, NULL);
	if (!IS_ERR(clk)) {
	clk = devm_clk_get_optional(&op->dev, NULL);
	if (IS_ERR(clk))
		return PTR_ERR(clk);

	err = clk_prepare_enable(clk);
	if (err) {
		dev_err(&op->dev, "failed to enable clock\n");
		return err;
		} else {
			i2c->clk_per = clk;
		}
	}

	i2c->clk_per = clk;

	if (of_property_read_bool(op->dev.of_node, "fsl,preserve-clocking")) {
		clock = MPC_I2C_CLOCK_PRESERVE;
	} else {
@@ -791,7 +792,6 @@ static int fsl_i2c_probe(struct platform_device *op)
	return 0;

 fail_add:
	if (i2c->clk_per)
	clk_disable_unprepare(i2c->clk_per);

	return result;
@@ -803,7 +803,6 @@ static int fsl_i2c_remove(struct platform_device *op)

	i2c_del_adapter(&i2c->adap);

	if (i2c->clk_per)
	clk_disable_unprepare(i2c->clk_per);

	return 0;