Commit 303392fd authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull LED updates from Pavel Machek:
 "This contains quite a lot of fixes, with more fixes in my inbox that
  did not make it (sorry)"

* tag 'leds-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/pavel/linux-leds: (36 commits)
  leds: lgm: Fix up includes
  leds: ktd2692: Fix an error handling path
  leds: as3645a: Fix error return code in as3645a_parse_node()
  leds: turris-omnia: add missing MODULE_DEVICE_TABLE
  leds: lp55xx: Initialize enable GPIO direction to output
  leds: lm36274: Add missed property.h
  leds: el15203000: Make error handling more robust
  leds: pwm: Make error handling more robust
  leds: lt3593: Make use of device properties
  leds: lp50xx: Put fwnode in error case during ->probe()
  leds: lm3697: Don't spam logs when probe is deferred
  leds: lm3692x: Put fwnode in any case during ->probe()
  leds: lm36274: Correct headers (of*.h -> mod_devicetable.h)
  leds: lm36274: Put fwnode in error case during ->probe()
  leds: lm3532: Make error handling more robust
  leds: lm3532: select regmap I2C API
  leds: lgm-sso: Drop duplicate NULL check for GPIO operations
  leds: lgm-sso: Remove unneeded of_match_ptr()
  leds: lgm-sso: Fix clock handling
  leds: el15203000: Introduce to_el15203000_led() helper
  ...
parents 8e8d9442 7b97174c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ config LEDS_LM3530

config LEDS_LM3532
	tristate "LCD Backlight driver for LM3532"
	select REGMAP_I2C
	depends on LEDS_CLASS
	depends on I2C
	help
@@ -616,7 +617,6 @@ config LEDS_LT3593
	tristate "LED driver for LT3593 controllers"
	depends on LEDS_CLASS
	depends on GPIOLIB || COMPILE_TEST
	depends on OF
	help
	  This option enables support for LEDs driven by a Linear Technology
	  LT3593 controller. This controller uses a special one-wire pulse
+22 −31
Original line number Diff line number Diff line
@@ -7,7 +7,8 @@

#include <linux/bitfield.h>
#include <linux/clk.h>
#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/leds.h>
@@ -132,8 +133,7 @@ struct sso_led_priv {
	struct regmap *mmap;
	struct device *dev;
	struct platform_device *pdev;
	struct clk *gclk;
	struct clk *fpid_clk;
	struct clk_bulk_data clocks[2];
	u32 fpid_clkrate;
	u32 gptc_clkrate;
	u32 freq[MAX_FREQ_RANK];
@@ -259,7 +259,7 @@ static void sso_led_brightness_set(struct led_classdev *led_cdev,
				   1 << desc->pin);
	}

	if (!desc->hw_trig && led->gpiod)
	if (!desc->hw_trig)
		gpiod_set_value(led->gpiod, val);
}

@@ -423,7 +423,7 @@ static void sso_gpio_free(struct gpio_chip *chip, unsigned int offset)

static int sso_gpio_get_dir(struct gpio_chip *chip, unsigned int offset)
{
	return GPIOF_DIR_OUT;
	return GPIO_LINE_DIRECTION_OUT;
}

static int
@@ -763,12 +763,11 @@ static int sso_probe_gpios(struct sso_led_priv *priv)
	return sso_gpio_gc_init(dev, priv);
}

static void sso_clk_disable(void *data)
static void sso_clock_disable_unprepare(void *data)
{
	struct sso_led_priv *priv = data;

	clk_disable_unprepare(priv->fpid_clk);
	clk_disable_unprepare(priv->gclk);
	clk_bulk_disable_unprepare(ARRAY_SIZE(priv->clocks), priv->clocks);
}

static int intel_sso_led_probe(struct platform_device *pdev)
@@ -785,36 +784,30 @@ static int intel_sso_led_probe(struct platform_device *pdev)
	priv->dev = dev;

	/* gate clock */
	priv->gclk = devm_clk_get(dev, "sso");
	if (IS_ERR(priv->gclk)) {
		dev_err(dev, "get sso gate clock failed!\n");
		return PTR_ERR(priv->gclk);
	}
	priv->clocks[0].id = "sso";

	/* fpid clock */
	priv->clocks[1].id = "fpid";

	ret = clk_prepare_enable(priv->gclk);
	ret = devm_clk_bulk_get(dev, ARRAY_SIZE(priv->clocks), priv->clocks);
	if (ret) {
		dev_err(dev, "Failed to prepare/enable sso gate clock!\n");
		dev_err(dev, "Getting clocks failed!\n");
		return ret;
	}

	priv->fpid_clk = devm_clk_get(dev, "fpid");
	if (IS_ERR(priv->fpid_clk)) {
		dev_err(dev, "Failed to get fpid clock!\n");
		return PTR_ERR(priv->fpid_clk);
	}

	ret = clk_prepare_enable(priv->fpid_clk);
	ret = clk_bulk_prepare_enable(ARRAY_SIZE(priv->clocks), priv->clocks);
	if (ret) {
		dev_err(dev, "Failed to prepare/enable fpid clock!\n");
		dev_err(dev, "Failed to prepare and enable clocks!\n");
		return ret;
	}
	priv->fpid_clkrate = clk_get_rate(priv->fpid_clk);

	ret = devm_add_action_or_reset(dev, sso_clk_disable, priv);
	if (ret) {
		dev_err(dev, "Failed to devm_add_action_or_reset, %d\n", ret);
	ret = devm_add_action_or_reset(dev, sso_clock_disable_unprepare, priv);
	if (ret)
		return ret;
	}

	priv->fpid_clkrate = clk_get_rate(priv->clocks[1].clk);

	priv->mmap = syscon_node_to_regmap(dev->of_node);

	priv->mmap = syscon_node_to_regmap(dev->of_node);
	if (IS_ERR(priv->mmap)) {
@@ -859,8 +852,6 @@ static int intel_sso_led_remove(struct platform_device *pdev)
		sso_led_shutdown(led);
	}

	clk_disable_unprepare(priv->fpid_clk);
	clk_disable_unprepare(priv->gclk);
	regmap_exit(priv->mmap);

	return 0;
@@ -878,7 +869,7 @@ static struct platform_driver intel_sso_led_driver = {
	.remove		= intel_sso_led_remove,
	.driver		= {
			.name = "lgm-ssoled",
			.of_match_table = of_match_ptr(of_sso_led_match),
			.of_match_table = of_sso_led_match,
	},
};

+1 −5
Original line number Diff line number Diff line
@@ -285,10 +285,6 @@ struct led_classdev *__must_check devm_of_led_get(struct device *dev,
	if (!dev)
		return ERR_PTR(-EINVAL);

	/* Not using device tree? */
	if (!IS_ENABLED(CONFIG_OF) || !dev->of_node)
		return ERR_PTR(-ENOTSUPP);

	led = of_led_get(dev->of_node, index);
	if (IS_ERR(led))
		return led;
@@ -513,7 +509,7 @@ static int devm_led_classdev_match(struct device *dev, void *res, void *data)

/**
 * devm_led_classdev_unregister() - resource managed led_classdev_unregister()
 * @parent: The device to unregister.
 * @dev: The device to unregister.
 * @led_cdev: the led_classdev structure for this device.
 */
void devm_led_classdev_unregister(struct device *dev,
+2 −1
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ static int as3645a_read(struct as3645a *flash, u8 addr)
 */

/**
 * as3645a_set_config - Set flash configuration registers
 * as3645a_set_current - Set flash configuration registers
 * @flash: The flash
 *
 * Configure the hardware with flash, assist and indicator currents, as well as
@@ -545,6 +545,7 @@ static int as3645a_parse_node(struct as3645a *flash,
	if (!flash->indicator_node) {
		dev_warn(&flash->client->dev,
			 "can't find indicator node\n");
		rval = -ENODEV;
		goto out_err;
	}

+1 −1
Original line number Diff line number Diff line
@@ -93,7 +93,7 @@ static unsigned long bcm6328_led_read(void __iomem *reg)
#endif
}

/**
/*
 * LEDMode 64 bits / 24 LEDs
 * bits [31:0] -> LEDs 8-23
 * bits [47:32] -> LEDs 0-7
Loading