Commit f7e41b65 authored by Huan Yang's avatar Huan Yang Committed by Stephen Boyd
Browse files

clk: lmk04832: Use devm_clk_get_enabled() helpers



The devm_clk_get_enabled() helpers:
    - call devm_clk_get()
    - call clk_prepare_enable() and register what is needed in order to
     call clk_disable_unprepare() when needed, as a managed resource.

This simplifies the code and avoids the calls to clk_disable_unprepare().

Signed-off-by: default avatarHuan Yang <link@vivo.com>
Link: https://lore.kernel.org/r/20240820102119.130298-1-link@vivo.com


Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent 1b2ed9df
Loading
Loading
Loading
Loading
+13 −30
Original line number Diff line number Diff line
@@ -1405,16 +1405,12 @@ static int lmk04832_probe(struct spi_device *spi)

	lmk->dev = &spi->dev;

	lmk->oscin = devm_clk_get(lmk->dev, "oscin");
	lmk->oscin = devm_clk_get_enabled(lmk->dev, "oscin");
	if (IS_ERR(lmk->oscin)) {
		dev_err(lmk->dev, "failed to get oscin clock\n");
		return PTR_ERR(lmk->oscin);
	}

	ret = clk_prepare_enable(lmk->oscin);
	if (ret)
		return ret;

	lmk->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset",
						  GPIOD_OUT_LOW);

@@ -1422,14 +1418,14 @@ static int lmk04832_probe(struct spi_device *spi)
				 sizeof(struct lmk_dclk), GFP_KERNEL);
	if (!lmk->dclk) {
		ret = -ENOMEM;
		goto err_disable_oscin;
		return ret;
	}

	lmk->clkout = devm_kcalloc(lmk->dev, info->num_channels,
				   sizeof(*lmk->clkout), GFP_KERNEL);
	if (!lmk->clkout) {
		ret = -ENOMEM;
		goto err_disable_oscin;
		return ret;
	}

	lmk->clk_data = devm_kzalloc(lmk->dev, struct_size(lmk->clk_data, hws,
@@ -1437,7 +1433,7 @@ static int lmk04832_probe(struct spi_device *spi)
				     GFP_KERNEL);
	if (!lmk->clk_data) {
		ret = -ENOMEM;
		goto err_disable_oscin;
		return ret;
	}

	device_property_read_u32(lmk->dev, "ti,vco-hz", &lmk->vco_rate);
@@ -1465,7 +1461,7 @@ static int lmk04832_probe(struct spi_device *spi)
			dev_err(lmk->dev, "missing reg property in child: %s\n",
				child->full_name);
			of_node_put(child);
			goto err_disable_oscin;
			return ret;
		}

		of_property_read_u32(child, "ti,clkout-fmt",
@@ -1486,7 +1482,7 @@ static int lmk04832_probe(struct spi_device *spi)

			__func__, PTR_ERR(lmk->regmap));
		ret = PTR_ERR(lmk->regmap);
		goto err_disable_oscin;
		return ret;
	}

	regmap_write(lmk->regmap, LMK04832_REG_RST3W, LMK04832_BIT_RESET);
@@ -1496,7 +1492,7 @@ static int lmk04832_probe(struct spi_device *spi)
					 &rdbk_pin);
		ret = lmk04832_set_spi_rdbk(lmk, rdbk_pin);
		if (ret)
			goto err_disable_oscin;
			return ret;
	}

	regmap_bulk_read(lmk->regmap, LMK04832_REG_ID_PROD_MSB, &tmp, 3);
@@ -1504,13 +1500,13 @@ static int lmk04832_probe(struct spi_device *spi)
		dev_err(lmk->dev, "unsupported device type: pid 0x%04x, maskrev 0x%02x\n",
			tmp[0] << 8 | tmp[1], tmp[2]);
		ret = -EINVAL;
		goto err_disable_oscin;
		return ret;
	}

	ret = lmk04832_register_vco(lmk);
	if (ret) {
		dev_err(lmk->dev, "failed to init device clock path\n");
		goto err_disable_oscin;
		return ret;
	}

	if (lmk->vco_rate) {
@@ -1518,21 +1514,21 @@ static int lmk04832_probe(struct spi_device *spi)
		ret = clk_set_rate(lmk->vco.clk, lmk->vco_rate);
		if (ret) {
			dev_err(lmk->dev, "failed to set VCO rate\n");
			goto err_disable_oscin;
			return ret;
		}
	}

	ret = lmk04832_register_sclk(lmk);
	if (ret) {
		dev_err(lmk->dev, "failed to init SYNC/SYSREF clock path\n");
		goto err_disable_oscin;
		return ret;
	}

	for (i = 0; i < info->num_channels; i++) {
		ret = lmk04832_register_clkout(lmk, i);
		if (ret) {
			dev_err(lmk->dev, "failed to register clk %d\n", i);
			goto err_disable_oscin;
			return ret;
		}
	}

@@ -1541,24 +1537,12 @@ static int lmk04832_probe(struct spi_device *spi)
					  lmk->clk_data);
	if (ret) {
		dev_err(lmk->dev, "failed to add provider (%d)\n", ret);
		goto err_disable_oscin;
		return ret;
	}

	spi_set_drvdata(spi, lmk);

	return 0;

err_disable_oscin:
	clk_disable_unprepare(lmk->oscin);

	return ret;
}

static void lmk04832_remove(struct spi_device *spi)
{
	struct lmk04832 *lmk = spi_get_drvdata(spi);

	clk_disable_unprepare(lmk->oscin);
}

static const struct spi_device_id lmk04832_id[] = {
@@ -1579,7 +1563,6 @@ static struct spi_driver lmk04832_driver = {
		.of_match_table = lmk04832_of_id,
	},
	.probe		= lmk04832_probe,
	.remove		= lmk04832_remove,
	.id_table	= lmk04832_id,
};
module_spi_driver(lmk04832_driver);