Commit 19368f0f authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Greg Kroah-Hartman
Browse files

spi: Use helper for safer setting of driver_override



Use a helper to set driver_override to the reduce amount of duplicated
code.

Reviewed-by: default avatarMark Brown <broonie@kernel.org>
Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20220419113435.246203-8-krzysztof.kozlowski@linaro.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1e8ee512
Loading
Loading
Loading
Loading
+4 −22
Original line number Diff line number Diff line
@@ -71,29 +71,11 @@ static ssize_t driver_override_store(struct device *dev,
				     const char *buf, size_t count)
{
	struct spi_device *spi = to_spi_device(dev);
	const char *end = memchr(buf, '\n', count);
	const size_t len = end ? end - buf : count;
	const char *driver_override, *old;

	/* We need to keep extra room for a newline when displaying value */
	if (len >= (PAGE_SIZE - 1))
		return -EINVAL;

	driver_override = kstrndup(buf, len, GFP_KERNEL);
	if (!driver_override)
		return -ENOMEM;
	int ret;

	device_lock(dev);
	old = spi->driver_override;
	if (len) {
		spi->driver_override = driver_override;
	} else {
		/* Empty string, disable driver override */
		spi->driver_override = NULL;
		kfree(driver_override);
	}
	device_unlock(dev);
	kfree(old);
	ret = driver_set_override(dev, &spi->driver_override, buf, count);
	if (ret)
		return ret;

	return count;
}
+2 −0
Original line number Diff line number Diff line
@@ -138,6 +138,8 @@ extern int spi_delay_exec(struct spi_delay *_delay, struct spi_transfer *xfer);
 *	for driver coldplugging, and in uevents used for hotplugging
 * @driver_override: If the name of a driver is written to this attribute, then
 *	the device will bind to the named driver and only the named driver.
 *	Do not set directly, because core frees it; use driver_set_override() to
 *	set or clear it.
 * @cs_gpiod: gpio descriptor of the chipselect line (optional, NULL when
 *	not using a GPIO line)
 * @word_delay: delay to be inserted between consecutive