On Sun, Jan 17, 2021 at 11:23 PM Hans de Goede <hdegoede@xxxxxxxxxx> wrote: > > Replace the custom arizona_of_get_type() function with the generic > device_get_match_data() helper. Besides being a nice cleanup this > also makes it easier to add support for binding to ACPI enumerated > devices. > > While at it also fix a possible NULL pointer deref of the id > argument to the probe functions (this could happen on e.g. manual > driver binding through sysfs). Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Suggested-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> > --- > Changes in v2: > - New patch in v2 of this patchset > --- > drivers/mfd/arizona-core.c | 11 ----------- > drivers/mfd/arizona-i2c.c | 10 ++++++---- > drivers/mfd/arizona-spi.c | 10 ++++++---- > drivers/mfd/arizona.h | 9 --------- > 4 files changed, 12 insertions(+), 28 deletions(-) > > diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c > index 000cb82023e3..75f1bc671d59 100644 > --- a/drivers/mfd/arizona-core.c > +++ b/drivers/mfd/arizona-core.c > @@ -797,17 +797,6 @@ const struct dev_pm_ops arizona_pm_ops = { > EXPORT_SYMBOL_GPL(arizona_pm_ops); > > #ifdef CONFIG_OF > -unsigned long arizona_of_get_type(struct device *dev) > -{ > - const struct of_device_id *id = of_match_device(arizona_of_match, dev); > - > - if (id) > - return (unsigned long)id->data; > - else > - return 0; > -} > -EXPORT_SYMBOL_GPL(arizona_of_get_type); > - > static int arizona_of_get_core_pdata(struct arizona *arizona) > { > struct arizona_pdata *pdata = &arizona->pdata; > diff --git a/drivers/mfd/arizona-i2c.c b/drivers/mfd/arizona-i2c.c > index 2a4a3a164d0a..5e83b730c4ce 100644 > --- a/drivers/mfd/arizona-i2c.c > +++ b/drivers/mfd/arizona-i2c.c > @@ -23,14 +23,16 @@ > static int arizona_i2c_probe(struct i2c_client *i2c, > const struct i2c_device_id *id) > { > + const void *match_data; > struct arizona *arizona; > const struct regmap_config *regmap_config = NULL; > - unsigned long type; > + unsigned long type = 0; > int ret; > > - if (i2c->dev.of_node) > - type = arizona_of_get_type(&i2c->dev); > - else > + match_data = device_get_match_data(&i2c->dev); > + if (match_data) > + type = (unsigned long)match_data; > + else if (id) > type = id->driver_data; > > switch (type) { > diff --git a/drivers/mfd/arizona-spi.c b/drivers/mfd/arizona-spi.c > index 704f214d2614..798b88295c77 100644 > --- a/drivers/mfd/arizona-spi.c > +++ b/drivers/mfd/arizona-spi.c > @@ -23,14 +23,16 @@ > static int arizona_spi_probe(struct spi_device *spi) > { > const struct spi_device_id *id = spi_get_device_id(spi); > + const void *match_data; > struct arizona *arizona; > const struct regmap_config *regmap_config = NULL; > - unsigned long type; > + unsigned long type = 0; > int ret; > > - if (spi->dev.of_node) > - type = arizona_of_get_type(&spi->dev); > - else > + match_data = device_get_match_data(&spi->dev); > + if (match_data) > + type = (unsigned long)match_data; > + else if (id) > type = id->driver_data; > > switch (type) { > diff --git a/drivers/mfd/arizona.h b/drivers/mfd/arizona.h > index 995efc6d7f32..801cbbcd71cb 100644 > --- a/drivers/mfd/arizona.h > +++ b/drivers/mfd/arizona.h > @@ -50,13 +50,4 @@ int arizona_dev_exit(struct arizona *arizona); > int arizona_irq_init(struct arizona *arizona); > int arizona_irq_exit(struct arizona *arizona); > > -#ifdef CONFIG_OF > -unsigned long arizona_of_get_type(struct device *dev); > -#else > -static inline unsigned long arizona_of_get_type(struct device *dev) > -{ > - return 0; > -} > -#endif > - > #endif > -- > 2.28.0 > -- With Best Regards, Andy Shevchenko