Commit 267ad94b authored by Claudiu Beznea's avatar Claudiu Beznea Committed by Stephen Boyd
Browse files

clk: si5341: free unused memory on probe failure



Pointers from synth_clock_names[] should be freed at the end of probe
either on probe success or failure path.

Fixes: b7bbf6ec ("clk: si5341: Allow different output VDD_SEL values")
Fixes: 9b13ff43 ("clk: si5341: Add sysfs properties to allow checking/resetting device faults")
Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20230530093913.1656095-6-claudiu.beznea@microchip.com


Signed-off-by: default avatarStephen Boyd <sboyd@kernel.org>
parent 36e4ef82
Loading
Loading
Loading
Loading
+7 −9
Original line number Diff line number Diff line
@@ -1744,7 +1744,7 @@ static int si5341_probe(struct i2c_client *client)
		if (err) {
			dev_err(&client->dev,
				"output %u registration failed\n", i);
			goto cleanup;
			goto free_clk_names;
		}
		if (config[i].always_on)
			clk_prepare(data->clk[i].hw.clk);
@@ -1754,7 +1754,7 @@ static int si5341_probe(struct i2c_client *client)
			data);
	if (err) {
		dev_err(&client->dev, "unable to add clk provider\n");
		goto cleanup;
		goto free_clk_names;
	}

	if (initialization_required) {
@@ -1762,11 +1762,11 @@ static int si5341_probe(struct i2c_client *client)
		regcache_cache_only(data->regmap, false);
		err = regcache_sync(data->regmap);
		if (err < 0)
			goto cleanup;
			goto free_clk_names;

		err = si5341_finalize_defaults(data);
		if (err < 0)
			goto cleanup;
			goto free_clk_names;
	}

	/* wait for device to report input clock present and PLL lock */
@@ -1775,21 +1775,19 @@ static int si5341_probe(struct i2c_client *client)
	       10000, 250000);
	if (err) {
		dev_err(&client->dev, "Error waiting for input clock or PLL lock\n");
		goto cleanup;
		goto free_clk_names;
	}

	/* clear sticky alarm bits from initialization */
	err = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0);
	if (err) {
		dev_err(&client->dev, "unable to clear sticky status\n");
		goto cleanup;
		goto free_clk_names;
	}

	err = sysfs_create_files(&client->dev.kobj, si5341_attributes);
	if (err) {
	if (err)
		dev_err(&client->dev, "unable to create sysfs files\n");
		goto cleanup;
	}

free_clk_names:
	/* Free the names, clk framework makes copies */