Commit e2d8ea0a authored by Pierre-Louis Bossart's avatar Pierre-Louis Bossart Committed by Vinod Koul
Browse files

soundwire: fix usages of device_get_named_child_node()



The documentation for device_get_named_child_node() mentions this
important point:

"
The caller is responsible for calling fwnode_handle_put() on the
returned fwnode pointer.
"

Add fwnode_handle_put() to avoid leaked references.

Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20240429004935.2400191-1-yung-chuan.liao@linux.intel.com


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 1613e604
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -571,6 +571,9 @@ static int sdw_master_read_amd_prop(struct sdw_bus *bus)
	amd_manager->wake_en_mask = wake_en_mask;
	fwnode_property_read_u32(link, "amd-sdw-power-mode", &power_mode_mask);
	amd_manager->power_mode_mask = power_mode_mask;

	fwnode_handle_put(link);

	return 0;
}

+5 −1
Original line number Diff line number Diff line
@@ -155,8 +155,10 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
		SDW_MASTER_QUIRKS_CLEAR_INITIAL_PARITY;

	intel_prop = devm_kzalloc(bus->dev, sizeof(*intel_prop), GFP_KERNEL);
	if (!intel_prop)
	if (!intel_prop) {
		fwnode_handle_put(link);
		return -ENOMEM;
	}

	/* initialize with hardware defaults, in case the properties are not found */
	intel_prop->doaise = 0x1;
@@ -184,6 +186,8 @@ static int sdw_master_read_intel_prop(struct sdw_bus *bus)
		intel_prop->dodse,
		intel_prop->dods);

	fwnode_handle_put(link);

	return 0;
}

+24 −6
Original line number Diff line number Diff line
@@ -66,8 +66,10 @@ int sdw_master_read_prop(struct sdw_bus *bus)
		prop->clk_freq = devm_kcalloc(bus->dev, prop->num_clk_freq,
					      sizeof(*prop->clk_freq),
					      GFP_KERNEL);
		if (!prop->clk_freq)
		if (!prop->clk_freq) {
			fwnode_handle_put(link);
			return -ENOMEM;
		}

		fwnode_property_read_u32_array(link,
				"mipi-sdw-clock-frequencies-supported",
@@ -92,8 +94,10 @@ int sdw_master_read_prop(struct sdw_bus *bus)
		prop->clk_gears = devm_kcalloc(bus->dev, prop->num_clk_gears,
					       sizeof(*prop->clk_gears),
					       GFP_KERNEL);
		if (!prop->clk_gears)
		if (!prop->clk_gears) {
			fwnode_handle_put(link);
			return -ENOMEM;
		}

		fwnode_property_read_u32_array(link,
					       "mipi-sdw-supported-clock-gears",
@@ -116,6 +120,8 @@ int sdw_master_read_prop(struct sdw_bus *bus)
	fwnode_property_read_u32(link, "mipi-sdw-command-error-threshold",
				 &prop->err_threshold);

	fwnode_handle_put(link);

	return 0;
}
EXPORT_SYMBOL(sdw_master_read_prop);
@@ -197,8 +203,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
						    dpn[i].num_words,
						    sizeof(*dpn[i].words),
						    GFP_KERNEL);
			if (!dpn[i].words)
			if (!dpn[i].words) {
				fwnode_handle_put(node);
				return -ENOMEM;
			}

			fwnode_property_read_u32_array(node,
					"mipi-sdw-port-wordlength-configs",
@@ -236,8 +244,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
						       dpn[i].num_channels,
						       sizeof(*dpn[i].channels),
						 GFP_KERNEL);
			if (!dpn[i].channels)
			if (!dpn[i].channels) {
				fwnode_handle_put(node);
				return -ENOMEM;
			}

			fwnode_property_read_u32_array(node,
					"mipi-sdw-channel-number-list",
@@ -251,8 +261,10 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,
					dpn[i].num_ch_combinations,
					sizeof(*dpn[i].ch_combinations),
					GFP_KERNEL);
			if (!dpn[i].ch_combinations)
			if (!dpn[i].ch_combinations) {
				fwnode_handle_put(node);
				return -ENOMEM;
			}

			fwnode_property_read_u32_array(node,
					"mipi-sdw-channel-combination-list",
@@ -274,6 +286,8 @@ static int sdw_slave_read_dpn(struct sdw_slave *slave,

		/* TODO: Read audio mode */

		fwnode_handle_put(node);

		i++;
	}

@@ -348,10 +362,14 @@ int sdw_slave_read_prop(struct sdw_slave *slave)
		prop->dp0_prop = devm_kzalloc(&slave->dev,
					      sizeof(*prop->dp0_prop),
					      GFP_KERNEL);
		if (!prop->dp0_prop)
		if (!prop->dp0_prop) {
			fwnode_handle_put(port);
			return -ENOMEM;
		}

		sdw_slave_read_dp0(slave, port, prop->dp0_prop);

		fwnode_handle_put(port);
	}

	/*