summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek BehĂșn <marek.behun@nic.cz>2020-09-19 21:03:00 +0300
committerPavel Machek <pavel@ucw.cz>2020-09-26 22:56:43 +0300
commit5c0d20a968ae878ccdb2a42a0438610cf02cff13 (patch)
tree29dace6fce53f2f823efe65e18d0ec001e49175e
parent484456712de44c516b016b23027ad500acac4d29 (diff)
downloadlinux-5c0d20a968ae878ccdb2a42a0438610cf02cff13.tar.xz
leds: lm36274: use platform device as parent of LED
Instead of registering LED under the MFD device, this driver sets the parent of the LED it is registering to the parent of the MFD device (the I2C client device). Because of this we cannot use devres for LED registration, since it can result in use-after-free, see commit a0972fff0947 ("leds: lm36274: fix use-after-free on unbind"). The only other in-tree driver that also registers under the MFD device (drivers/regulator/lm363x-regulator.c) sets the parent to the MFD device. Set the parent of this LED to the MFD device, instead of the I2C client device. Signed-off-by: Marek BehĂșn <marek.behun@nic.cz> Tested-by: Dan Murphy <dmurphy@ti.com> Signed-off-by: Pavel Machek <pavel@ucw.cz>
-rw-r--r--drivers/leds/leds-lm36274.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/leds/leds-lm36274.c b/drivers/leds/leds-lm36274.c
index 85a58a5cbdf9..74c236d1a60c 100644
--- a/drivers/leds/leds-lm36274.c
+++ b/drivers/leds/leds-lm36274.c
@@ -69,7 +69,7 @@ static int lm36274_init(struct lm36274 *chip)
static int lm36274_parse_dt(struct lm36274 *chip,
struct led_init_data *init_data)
{
- struct device *dev = &chip->pdev->dev;
+ struct device *dev = chip->dev;
struct fwnode_handle *child;
int ret;
@@ -118,7 +118,7 @@ static int lm36274_probe(struct platform_device *pdev)
return -ENOMEM;
chip->pdev = pdev;
- chip->dev = lmu->dev;
+ chip->dev = &pdev->dev;
chip->regmap = lmu->regmap;
platform_set_drvdata(pdev, chip);