Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1530732
| From | Nicolae Rosia <Nicolae_Rosia@mentor.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH 5/5] mfd: twl: use mfd_add_devices for TWL6032 regulator |
| Date | 2016-11-26 19:20 +0100 |
| Message-ID | <sHPJU-1GL-31@gated-at.bofh.it> (permalink) |
| References | <sHPJT-1GL-1@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
TWL6032 regulator driver uses the drvdata twl_priv pointer.
In order to avoid accessing an invalid drvdata
when the driver gets unbinded, make sure we remove the
child devices before deleting the drvdata.
Signed-off-by: Nicolae Rosia <Nicolae_Rosia@mentor.com>
---
drivers/mfd/twl-core.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
index 409b836..1e94364 100644
--- a/drivers/mfd/twl-core.c
+++ b/drivers/mfd/twl-core.c
@@ -43,6 +43,7 @@
#include <linux/of_platform.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
+#include <linux/mfd/core.h>
#include <linux/regulator/machine.h>
@@ -155,8 +156,16 @@ int twl4030_init_irq(struct device *dev, int irq_num);
int twl4030_exit_irq(void);
int twl4030_init_chip_irq(const char *chip);
+
static struct twlcore *twl_priv;
+static struct mfd_cell twl6032_devs[] = {
+ {
+ .name = "twl6032-regulator",
+ .of_compatible = "ti,twl6032-regulator",
+ },
+};
+
static struct twl_mapping twl4030_map[] = {
/*
* NOTE: don't change this table without updating the
@@ -665,6 +674,8 @@ static int twl_remove(struct i2c_client *client)
unsigned i, num_slaves;
int status;
+ mfd_remove_devices(&client->dev);
+
if (twl_class_is_4030())
status = twl4030_exit_irq();
else
@@ -834,6 +845,17 @@ twl_probe(struct i2c_client *client, const struct i2c_device_id *id)
TWL4030_DCDC_GLOBAL_CFG);
}
+ if (id->driver_data & TWL6032_SUBCLASS) {
+ status = mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE,
+ twl6032_devs, ARRAY_SIZE(twl6032_devs),
+ NULL, 0, NULL);
+ if (status != 0) {
+ dev_err(&client->dev, "failed to add mfd devices: %d\n",
+ status);
+ goto fail;
+ }
+ }
+
fail:
if (status < 0)
twl_remove(client);
--
2.9.3
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 0/5] mfd: twl: improvements and new regulator driver Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
[PATCH 1/5] mfd: twl-core: make driver DT only Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
[PATCH 5/5] mfd: twl: use mfd_add_devices for TWL6032 regulator Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
[PATCH 2/5] mfd: twl: remove useless header Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
[PATCH 4/5] regulator: Add support for TI TWL6032 Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
Re: [PATCH 4/5] regulator: Add support for TI TWL6032 Rob Herring <robh@kernel.org> - 2016-12-01 17:20 +0100
[PATCH 3/5] mfd: twl: move structure definitions to a public header Nicolae Rosia <Nicolae_Rosia@mentor.com> - 2016-11-26 19:20 +0100
csiph-web