Commit 9263271a authored by Uwe Kleine-König's avatar Uwe Kleine-König Committed by Greg Kroah-Hartman
Browse files

misc: sram: Improve and simplify clk handling



The current code tries to get an associated clk, ignores any errors in the
process and if there is a clock enables it unconditionally for the whole
lifetime of the sram device.

Instead use an "optional" variant of devm_clk_get() which handles the case
where no clk is needed for the sram device and do proper error handling
for the remaining error cases. Also use an "enabled" variant of
devm_clk_get() to simplify. With that .probe() is the only function using
struct sram_dev::clk, so it can be replaced by a local variable.

Signed-off-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Link: https://lore.kernel.org/r/20230302091251.1852454-1-u.kleine-koenig@pengutronix.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7ef1a2c1
Loading
Loading
Loading
Loading
+5 −12
Original line number Diff line number Diff line
@@ -381,6 +381,7 @@ static int sram_probe(struct platform_device *pdev)
	struct sram_dev *sram;
	int ret;
	struct resource *res;
	struct clk *clk;

	config = of_device_get_match_data(&pdev->dev);

@@ -409,16 +410,14 @@ static int sram_probe(struct platform_device *pdev)
			return PTR_ERR(sram->pool);
	}

	sram->clk = devm_clk_get(sram->dev, NULL);
	if (IS_ERR(sram->clk))
		sram->clk = NULL;
	else
		clk_prepare_enable(sram->clk);
	clk = devm_clk_get_optional_enabled(sram->dev, NULL);
	if (IS_ERR(clk))
		return PTR_ERR(clk);

	ret = sram_reserve_regions(sram,
			platform_get_resource(pdev, IORESOURCE_MEM, 0));
	if (ret)
		goto err_disable_clk;
		return ret;

	platform_set_drvdata(pdev, sram);

@@ -436,9 +435,6 @@ static int sram_probe(struct platform_device *pdev)

err_free_partitions:
	sram_free_partitions(sram);
err_disable_clk:
	if (sram->clk)
		clk_disable_unprepare(sram->clk);

	return ret;
}
@@ -452,9 +448,6 @@ static int sram_remove(struct platform_device *pdev)
	if (sram->pool && gen_pool_avail(sram->pool) < gen_pool_size(sram->pool))
		dev_err(sram->dev, "removed while SRAM allocated\n");

	if (sram->clk)
		clk_disable_unprepare(sram->clk);

	return 0;
}

+0 −1
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ struct sram_dev {
	bool no_memory_wc;

	struct gen_pool *pool;
	struct clk *clk;

	struct sram_partition *partition;
	u32 partitions;