diff mbox series

mfd: Use device_get_match_data()

Message ID 20231009211356.3242037-3-robh@kernel.org (mailing list archive)
State New, archived
Headers show
Series mfd: Use device_get_match_data() | expand

Commit Message

Rob Herring (Arm) Oct. 9, 2023, 9:13 p.m. UTC
Use preferred device_get_match_data() instead of of_match_device() to
get the driver match data. With this, adjust the includes to explicitly
include the correct headers.

Signed-off-by: Rob Herring <robh@kernel.org>
---
 drivers/mfd/axp20x.c           | 22 +++-------------------
 drivers/mfd/hi6421-pmic-core.c |  9 +++------
 drivers/mfd/mxs-lradc.c        |  9 ++-------
 drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
 drivers/mfd/qcom_rpm.c         |  8 ++++----
 drivers/mfd/tps65910.c         | 11 ++---------
 drivers/mfd/twl4030-power.c    |  9 +++------
 drivers/mfd/twl6030-irq.c      | 10 +++++-----
 8 files changed, 26 insertions(+), 58 deletions(-)

Comments

Chen-Yu Tsai Oct. 10, 2023, 8:27 a.m. UTC | #1
On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
>
> Use preferred device_get_match_data() instead of of_match_device() to
> get the driver match data. With this, adjust the includes to explicitly
> include the correct headers.
>
> Signed-off-by: Rob Herring <robh@kernel.org>
> ---
>  drivers/mfd/axp20x.c           | 22 +++-------------------

I'd keep the error message, but otherwise for axp20x,

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

>  drivers/mfd/hi6421-pmic-core.c |  9 +++------
>  drivers/mfd/mxs-lradc.c        |  9 ++-------
>  drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
>  drivers/mfd/qcom_rpm.c         |  8 ++++----
>  drivers/mfd/tps65910.c         | 11 ++---------
>  drivers/mfd/twl4030-power.c    |  9 +++------
>  drivers/mfd/twl6030-irq.c      | 10 +++++-----
>  8 files changed, 26 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
> index d93189b0230d..deaa969bab4e 100644
> --- a/drivers/mfd/axp20x.c
> +++ b/drivers/mfd/axp20x.c
> @@ -22,7 +22,8 @@
>  #include <linux/mfd/axp20x.h>
>  #include <linux/mfd/core.h>
>  #include <linux/module.h>
> -#include <linux/of_device.h>
> +#include <linux/of.h>
> +#include <linux/property.h>
>  #include <linux/reboot.h>
>  #include <linux/regmap.h>
>  #include <linux/regulator/consumer.h>
> @@ -1131,27 +1132,10 @@ static int axp20x_power_off(struct sys_off_data *data)
>  int axp20x_match_device(struct axp20x_dev *axp20x)
>  {
>         struct device *dev = axp20x->dev;
> -       const struct acpi_device_id *acpi_id;
> -       const struct of_device_id *of_id;
>         const struct mfd_cell *cells_no_irq = NULL;
>         int nr_cells_no_irq = 0;
>
> -       if (dev->of_node) {
> -               of_id = of_match_device(dev->driver->of_match_table, dev);
> -               if (!of_id) {
> -                       dev_err(dev, "Unable to match OF ID\n");
> -                       return -ENODEV;
> -               }
> -               axp20x->variant = (long)of_id->data;
> -       } else {
> -               acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev);
> -               if (!acpi_id || !acpi_id->driver_data) {
> -                       dev_err(dev, "Unable to match ACPI ID and data\n");
> -                       return -ENODEV;
> -               }
> -               axp20x->variant = (long)acpi_id->driver_data;
> -       }
> -
> +       axp20x->variant = (long)device_get_match_data(dev);
>         switch (axp20x->variant) {
>         case AXP152_ID:
>                 axp20x->nr_cells = ARRAY_SIZE(axp152_cells);
> diff --git a/drivers/mfd/hi6421-pmic-core.c b/drivers/mfd/hi6421-pmic-core.c
> index a6a890537a1e..5af24a438329 100644
> --- a/drivers/mfd/hi6421-pmic-core.c
> +++ b/drivers/mfd/hi6421-pmic-core.c
> @@ -15,8 +15,9 @@
>  #include <linux/mfd/core.h>
>  #include <linux/mfd/hi6421-pmic.h>
>  #include <linux/module.h>
> -#include <linux/of_device.h>
> +#include <linux/of.h>
>  #include <linux/platform_device.h>
> +#include <linux/property.h>
>  #include <linux/regmap.h>
>
>  static const struct mfd_cell hi6421_devs[] = {
> @@ -50,16 +51,12 @@ MODULE_DEVICE_TABLE(of, of_hi6421_pmic_match);
>  static int hi6421_pmic_probe(struct platform_device *pdev)
>  {
>         struct hi6421_pmic *pmic;
> -       const struct of_device_id *id;
>         const struct mfd_cell *subdevs;
>         enum hi6421_type type;
>         void __iomem *base;
>         int n_subdevs, ret;
>
> -       id = of_match_device(of_hi6421_pmic_match, &pdev->dev);
> -       if (!id)
> -               return -EINVAL;
> -       type = (uintptr_t)id->data;
> +       type = (uintptr_t)device_get_match_data(&pdev->dev);
>
>         pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL);
>         if (!pmic)
> diff --git a/drivers/mfd/mxs-lradc.c b/drivers/mfd/mxs-lradc.c
> index 21f3033d6eb5..ec1b356562b9 100644
> --- a/drivers/mfd/mxs-lradc.c
> +++ b/drivers/mfd/mxs-lradc.c
> @@ -16,8 +16,8 @@
>  #include <linux/mfd/mxs-lradc.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
> -#include <linux/of_device.h>
>  #include <linux/platform_device.h>
> +#include <linux/property.h>
>  #include <linux/slab.h>
>
>  #define ADC_CELL               0
> @@ -125,7 +125,6 @@ MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids);
>
>  static int mxs_lradc_probe(struct platform_device *pdev)
>  {
> -       const struct of_device_id *of_id;
>         struct device *dev = &pdev->dev;
>         struct device_node *node = dev->of_node;
>         struct mxs_lradc *lradc;
> @@ -138,11 +137,7 @@ static int mxs_lradc_probe(struct platform_device *pdev)
>         if (!lradc)
>                 return -ENOMEM;
>
> -       of_id = of_match_device(mxs_lradc_dt_ids, &pdev->dev);
> -       if (!of_id)
> -               return -EINVAL;
> -
> -       lradc->soc = (uintptr_t)of_id->data;
> +       lradc->soc = (enum mxs_lradc_id)device_get_match_data(&pdev->dev);
>
>         lradc->clk = devm_clk_get(&pdev->dev, NULL);
>         if (IS_ERR(lradc->clk)) {
> diff --git a/drivers/mfd/qcom-spmi-pmic.c b/drivers/mfd/qcom-spmi-pmic.c
> index 7e2cd79d17eb..4899af64bf10 100644
> --- a/drivers/mfd/qcom-spmi-pmic.c
> +++ b/drivers/mfd/qcom-spmi-pmic.c
> @@ -8,10 +8,12 @@
>  #include <linux/gfp.h>
>  #include <linux/kernel.h>
>  #include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_device.h>
> +#include <linux/of_platform.h>
>  #include <linux/spmi.h>
>  #include <linux/types.h>
>  #include <linux/regmap.h>
> -#include <linux/of_platform.h>
>  #include <soc/qcom/qcom-spmi-pmic.h>
>
>  #define PMIC_REV2              0x101
> @@ -236,7 +238,7 @@ static int pmic_spmi_probe(struct spmi_device *sdev)
>         if (!ctx)
>                 return -ENOMEM;
>
> -       ctx->num_usids = (uintptr_t)of_device_get_match_data(&sdev->dev);
> +       ctx->num_usids = (uintptr_t)device_get_match_data(&sdev->dev);
>
>         /* Only the first slave id for a PMIC contains this information */
>         if (sdev->usid % ctx->num_usids == 0) {
> diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
> index 086611322874..27446f43e3f3 100644
> --- a/drivers/mfd/qcom_rpm.c
> +++ b/drivers/mfd/qcom_rpm.c
> @@ -7,6 +7,8 @@
>
>  #include <linux/module.h>
>  #include <linux/platform_device.h>
> +#include <linux/property.h>
> +#include <linux/of.h>
>  #include <linux/of_platform.h>
>  #include <linux/io.h>
>  #include <linux/interrupt.h>
> @@ -528,7 +530,6 @@ static irqreturn_t qcom_rpm_wakeup_interrupt(int irq, void *dev)
>
>  static int qcom_rpm_probe(struct platform_device *pdev)
>  {
> -       const struct of_device_id *match;
>         struct device_node *syscon_np;
>         struct qcom_rpm *rpm;
>         u32 fw_version[3];
> @@ -570,10 +571,9 @@ static int qcom_rpm_probe(struct platform_device *pdev)
>         if (irq_wakeup < 0)
>                 return irq_wakeup;
>
> -       match = of_match_device(qcom_rpm_of_match, &pdev->dev);
> -       if (!match)
> +       rpm->data = device_get_match_data(&pdev->dev);
> +       if (!rpm->data)
>                 return -ENODEV;
> -       rpm->data = match->data;
>
>         rpm->status_regs = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
>         if (IS_ERR(rpm->status_regs))
> diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
> index 41408df1712f..dce6ad668dbf 100644
> --- a/drivers/mfd/tps65910.c
> +++ b/drivers/mfd/tps65910.c
> @@ -19,7 +19,7 @@
>  #include <linux/regmap.h>
>  #include <linux/mfd/tps65910.h>
>  #include <linux/of.h>
> -#include <linux/of_device.h>
> +#include <linux/property.h>
>
>  static const struct resource rtc_resources[] = {
>         {
> @@ -374,16 +374,9 @@ static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
>         struct device_node *np = client->dev.of_node;
>         struct tps65910_board *board_info;
>         unsigned int prop;
> -       const struct of_device_id *match;
>         int ret;
>
> -       match = of_match_device(tps65910_of_match, &client->dev);
> -       if (!match) {
> -               dev_err(&client->dev, "Failed to find matching dt id\n");
> -               return NULL;
> -       }
> -
> -       *chip_id  = (unsigned long)match->data;
> +       *chip_id  = (unsigned long)device_get_match_data(&client->dev);
>
>         board_info = devm_kzalloc(&client->dev, sizeof(*board_info),
>                         GFP_KERNEL);
> diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
> index e35b0f788c50..1595e9c76132 100644
> --- a/drivers/mfd/twl4030-power.c
> +++ b/drivers/mfd/twl4030-power.c
> @@ -27,8 +27,8 @@
>  #include <linux/pm.h>
>  #include <linux/mfd/twl.h>
>  #include <linux/platform_device.h>
> +#include <linux/property.h>
>  #include <linux/of.h>
> -#include <linux/of_device.h>
>
>  #include <asm/mach-types.h>
>
> @@ -883,7 +883,6 @@ static int twl4030_power_probe(struct platform_device *pdev)
>  {
>         const struct twl4030_power_data *pdata = dev_get_platdata(&pdev->dev);
>         struct device_node *node = pdev->dev.of_node;
> -       const struct of_device_id *match;
>         int err = 0;
>         int err2 = 0;
>         u8 val;
> @@ -904,10 +903,8 @@ static int twl4030_power_probe(struct platform_device *pdev)
>                 return err;
>         }
>
> -       match = of_match_device(of_match_ptr(twl4030_power_of_match),
> -                               &pdev->dev);
> -       if (match && match->data)
> -               pdata = match->data;
> +       if (node)
> +               pdata = device_get_match_data(&pdev->dev);
>
>         if (pdata) {
>                 err = twl4030_power_configure_scripts(pdata);
> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> index 3c03681c124c..f9fce8408c2c 100644
> --- a/drivers/mfd/twl6030-irq.c
> +++ b/drivers/mfd/twl6030-irq.c
> @@ -24,10 +24,10 @@
>  #include <linux/kthread.h>
>  #include <linux/mfd/twl.h>
>  #include <linux/platform_device.h>
> +#include <linux/property.h>
>  #include <linux/suspend.h>
>  #include <linux/of.h>
>  #include <linux/irqdomain.h>
> -#include <linux/of_device.h>
>
>  #include "twl-core.h"
>
> @@ -368,10 +368,10 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>         int                     nr_irqs;
>         int                     status;
>         u8                      mask[3];
> -       const struct of_device_id *of_id;
> +       const int               *irq_tbl;
>
> -       of_id = of_match_device(twl6030_of_match, dev);
> -       if (!of_id || !of_id->data) {
> +       irq_tbl = device_get_match_data(dev);
> +       if (!irq_tbl) {
>                 dev_err(dev, "Unknown TWL device model\n");
>                 return -EINVAL;
>         }
> @@ -409,7 +409,7 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>
>         twl6030_irq->pm_nb.notifier_call = twl6030_irq_pm_notifier;
>         atomic_set(&twl6030_irq->wakeirqs, 0);
> -       twl6030_irq->irq_mapping_tbl = of_id->data;
> +       twl6030_irq->irq_mapping_tbl = irq_tbl;
>
>         twl6030_irq->irq_domain =
>                 irq_domain_add_linear(node, nr_irqs,
> --
> 2.42.0
>
Rob Herring (Arm) Oct. 10, 2023, 11:44 a.m. UTC | #2
On Tue, Oct 10, 2023 at 3:27 AM Chen-Yu Tsai <wens@csie.org> wrote:
>
> On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
> >
> > Use preferred device_get_match_data() instead of of_match_device() to
> > get the driver match data. With this, adjust the includes to explicitly
> > include the correct headers.
> >
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> >  drivers/mfd/axp20x.c           | 22 +++-------------------
>
> I'd keep the error message, but otherwise for axp20x,

Why? It can't happen. We already matched successfully in order to
probe, so matching again in probe is redundant and won't fail.

> Reviewed-by: Chen-Yu Tsai <wens@csie.org>

Thanks.

Rob
Lee Jones Oct. 12, 2023, 9:26 a.m. UTC | #3
On Tue, 10 Oct 2023, Chen-Yu Tsai wrote:

> On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
> >
> > Use preferred device_get_match_data() instead of of_match_device() to
> > get the driver match data. With this, adjust the includes to explicitly
> > include the correct headers.
> >
> > Signed-off-by: Rob Herring <robh@kernel.org>
> > ---
> >  drivers/mfd/axp20x.c           | 22 +++-------------------
> 
> I'd keep the error message, but otherwise for axp20x,
> 
> Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> 
> >  drivers/mfd/hi6421-pmic-core.c |  9 +++------
> >  drivers/mfd/mxs-lradc.c        |  9 ++-------
> >  drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
> >  drivers/mfd/qcom_rpm.c         |  8 ++++----
> >  drivers/mfd/tps65910.c         | 11 ++---------
> >  drivers/mfd/twl4030-power.c    |  9 +++------
> >  drivers/mfd/twl6030-irq.c      | 10 +++++-----
> >  8 files changed, 26 insertions(+), 58 deletions(-)

FYI, this patch is not in my inbox.
Rob Herring (Arm) Oct. 12, 2023, 3:04 p.m. UTC | #4
On Thu, Oct 12, 2023 at 4:26 AM Lee Jones <lee@kernel.org> wrote:
>
> On Tue, 10 Oct 2023, Chen-Yu Tsai wrote:
>
> > On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
> > >
> > > Use preferred device_get_match_data() instead of of_match_device() to
> > > get the driver match data. With this, adjust the includes to explicitly
> > > include the correct headers.
> > >
> > > Signed-off-by: Rob Herring <robh@kernel.org>
> > > ---
> > >  drivers/mfd/axp20x.c           | 22 +++-------------------
> >
> > I'd keep the error message, but otherwise for axp20x,
> >
> > Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> >
> > >  drivers/mfd/hi6421-pmic-core.c |  9 +++------
> > >  drivers/mfd/mxs-lradc.c        |  9 ++-------
> > >  drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
> > >  drivers/mfd/qcom_rpm.c         |  8 ++++----
> > >  drivers/mfd/tps65910.c         | 11 ++---------
> > >  drivers/mfd/twl4030-power.c    |  9 +++------
> > >  drivers/mfd/twl6030-irq.c      | 10 +++++-----
> > >  8 files changed, 26 insertions(+), 58 deletions(-)
>
> FYI, this patch is not in my inbox.

There seems to be some issue with kernel.org delivering my mails. You
are not the only one. I thought it was just ones with large numbers of
recipients, but seems to be something else. Konstantin has been
looking into it. Do you see any pattern of mails you do receive from
me? Sent via google vs. kernel.org?

Rob
Lee Jones Oct. 13, 2023, 10:17 a.m. UTC | #5
On Thu, 12 Oct 2023, Rob Herring wrote:

> On Thu, Oct 12, 2023 at 4:26 AM Lee Jones <lee@kernel.org> wrote:
> >
> > On Tue, 10 Oct 2023, Chen-Yu Tsai wrote:
> >
> > > On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
> > > >
> > > > Use preferred device_get_match_data() instead of of_match_device() to
> > > > get the driver match data. With this, adjust the includes to explicitly
> > > > include the correct headers.
> > > >
> > > > Signed-off-by: Rob Herring <robh@kernel.org>
> > > > ---
> > > >  drivers/mfd/axp20x.c           | 22 +++-------------------
> > >
> > > I'd keep the error message, but otherwise for axp20x,
> > >
> > > Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> > >
> > > >  drivers/mfd/hi6421-pmic-core.c |  9 +++------
> > > >  drivers/mfd/mxs-lradc.c        |  9 ++-------
> > > >  drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
> > > >  drivers/mfd/qcom_rpm.c         |  8 ++++----
> > > >  drivers/mfd/tps65910.c         | 11 ++---------
> > > >  drivers/mfd/twl4030-power.c    |  9 +++------
> > > >  drivers/mfd/twl6030-irq.c      | 10 +++++-----
> > > >  8 files changed, 26 insertions(+), 58 deletions(-)
> >
> > FYI, this patch is not in my inbox.
> 
> There seems to be some issue with kernel.org delivering my mails. You
> are not the only one. I thought it was just ones with large numbers of
> recipients, but seems to be something else. Konstantin has been
> looking into it. Do you see any pattern of mails you do receive from
> me? Sent via google vs. kernel.org?

How would I know which emails I haven't received from you? :)

This is the only one that I'm aware of.
Rob Herring (Arm) Oct. 13, 2023, 1:24 p.m. UTC | #6
On Fri, Oct 13, 2023 at 5:17 AM Lee Jones <lee@kernel.org> wrote:
>
> On Thu, 12 Oct 2023, Rob Herring wrote:
>
> > On Thu, Oct 12, 2023 at 4:26 AM Lee Jones <lee@kernel.org> wrote:
> > >
> > > On Tue, 10 Oct 2023, Chen-Yu Tsai wrote:
> > >
> > > > On Tue, Oct 10, 2023 at 5:14 AM Rob Herring <robh@kernel.org> wrote:
> > > > >
> > > > > Use preferred device_get_match_data() instead of of_match_device() to
> > > > > get the driver match data. With this, adjust the includes to explicitly
> > > > > include the correct headers.
> > > > >
> > > > > Signed-off-by: Rob Herring <robh@kernel.org>
> > > > > ---
> > > > >  drivers/mfd/axp20x.c           | 22 +++-------------------
> > > >
> > > > I'd keep the error message, but otherwise for axp20x,
> > > >
> > > > Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> > > >
> > > > >  drivers/mfd/hi6421-pmic-core.c |  9 +++------
> > > > >  drivers/mfd/mxs-lradc.c        |  9 ++-------
> > > > >  drivers/mfd/qcom-spmi-pmic.c   |  6 ++++--
> > > > >  drivers/mfd/qcom_rpm.c         |  8 ++++----
> > > > >  drivers/mfd/tps65910.c         | 11 ++---------
> > > > >  drivers/mfd/twl4030-power.c    |  9 +++------
> > > > >  drivers/mfd/twl6030-irq.c      | 10 +++++-----
> > > > >  8 files changed, 26 insertions(+), 58 deletions(-)
> > >
> > > FYI, this patch is not in my inbox.
> >
> > There seems to be some issue with kernel.org delivering my mails. You
> > are not the only one. I thought it was just ones with large numbers of
> > recipients, but seems to be something else. Konstantin has been
> > looking into it. Do you see any pattern of mails you do receive from
> > me? Sent via google vs. kernel.org?
>
> How would I know which emails I haven't received from you? :)

Compare what you have to this:

https://lore.kernel.org/all/?q=f%3Arobh+tc%3Alee%40kernel.org

Rob
diff mbox series

Patch

diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index d93189b0230d..deaa969bab4e 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -22,7 +22,8 @@ 
 #include <linux/mfd/axp20x.h>
 #include <linux/mfd/core.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
+#include <linux/property.h>
 #include <linux/reboot.h>
 #include <linux/regmap.h>
 #include <linux/regulator/consumer.h>
@@ -1131,27 +1132,10 @@  static int axp20x_power_off(struct sys_off_data *data)
 int axp20x_match_device(struct axp20x_dev *axp20x)
 {
 	struct device *dev = axp20x->dev;
-	const struct acpi_device_id *acpi_id;
-	const struct of_device_id *of_id;
 	const struct mfd_cell *cells_no_irq = NULL;
 	int nr_cells_no_irq = 0;
 
-	if (dev->of_node) {
-		of_id = of_match_device(dev->driver->of_match_table, dev);
-		if (!of_id) {
-			dev_err(dev, "Unable to match OF ID\n");
-			return -ENODEV;
-		}
-		axp20x->variant = (long)of_id->data;
-	} else {
-		acpi_id = acpi_match_device(dev->driver->acpi_match_table, dev);
-		if (!acpi_id || !acpi_id->driver_data) {
-			dev_err(dev, "Unable to match ACPI ID and data\n");
-			return -ENODEV;
-		}
-		axp20x->variant = (long)acpi_id->driver_data;
-	}
-
+	axp20x->variant = (long)device_get_match_data(dev);
 	switch (axp20x->variant) {
 	case AXP152_ID:
 		axp20x->nr_cells = ARRAY_SIZE(axp152_cells);
diff --git a/drivers/mfd/hi6421-pmic-core.c b/drivers/mfd/hi6421-pmic-core.c
index a6a890537a1e..5af24a438329 100644
--- a/drivers/mfd/hi6421-pmic-core.c
+++ b/drivers/mfd/hi6421-pmic-core.c
@@ -15,8 +15,9 @@ 
 #include <linux/mfd/core.h>
 #include <linux/mfd/hi6421-pmic.h>
 #include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/regmap.h>
 
 static const struct mfd_cell hi6421_devs[] = {
@@ -50,16 +51,12 @@  MODULE_DEVICE_TABLE(of, of_hi6421_pmic_match);
 static int hi6421_pmic_probe(struct platform_device *pdev)
 {
 	struct hi6421_pmic *pmic;
-	const struct of_device_id *id;
 	const struct mfd_cell *subdevs;
 	enum hi6421_type type;
 	void __iomem *base;
 	int n_subdevs, ret;
 
-	id = of_match_device(of_hi6421_pmic_match, &pdev->dev);
-	if (!id)
-		return -EINVAL;
-	type = (uintptr_t)id->data;
+	type = (uintptr_t)device_get_match_data(&pdev->dev);
 
 	pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL);
 	if (!pmic)
diff --git a/drivers/mfd/mxs-lradc.c b/drivers/mfd/mxs-lradc.c
index 21f3033d6eb5..ec1b356562b9 100644
--- a/drivers/mfd/mxs-lradc.c
+++ b/drivers/mfd/mxs-lradc.c
@@ -16,8 +16,8 @@ 
 #include <linux/mfd/mxs-lradc.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_device.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/slab.h>
 
 #define ADC_CELL		0
@@ -125,7 +125,6 @@  MODULE_DEVICE_TABLE(of, mxs_lradc_dt_ids);
 
 static int mxs_lradc_probe(struct platform_device *pdev)
 {
-	const struct of_device_id *of_id;
 	struct device *dev = &pdev->dev;
 	struct device_node *node = dev->of_node;
 	struct mxs_lradc *lradc;
@@ -138,11 +137,7 @@  static int mxs_lradc_probe(struct platform_device *pdev)
 	if (!lradc)
 		return -ENOMEM;
 
-	of_id = of_match_device(mxs_lradc_dt_ids, &pdev->dev);
-	if (!of_id)
-		return -EINVAL;
-
-	lradc->soc = (uintptr_t)of_id->data;
+	lradc->soc = (enum mxs_lradc_id)device_get_match_data(&pdev->dev);
 
 	lradc->clk = devm_clk_get(&pdev->dev, NULL);
 	if (IS_ERR(lradc->clk)) {
diff --git a/drivers/mfd/qcom-spmi-pmic.c b/drivers/mfd/qcom-spmi-pmic.c
index 7e2cd79d17eb..4899af64bf10 100644
--- a/drivers/mfd/qcom-spmi-pmic.c
+++ b/drivers/mfd/qcom-spmi-pmic.c
@@ -8,10 +8,12 @@ 
 #include <linux/gfp.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/of_platform.h>
 #include <linux/spmi.h>
 #include <linux/types.h>
 #include <linux/regmap.h>
-#include <linux/of_platform.h>
 #include <soc/qcom/qcom-spmi-pmic.h>
 
 #define PMIC_REV2		0x101
@@ -236,7 +238,7 @@  static int pmic_spmi_probe(struct spmi_device *sdev)
 	if (!ctx)
 		return -ENOMEM;
 
-	ctx->num_usids = (uintptr_t)of_device_get_match_data(&sdev->dev);
+	ctx->num_usids = (uintptr_t)device_get_match_data(&sdev->dev);
 
 	/* Only the first slave id for a PMIC contains this information */
 	if (sdev->usid % ctx->num_usids == 0) {
diff --git a/drivers/mfd/qcom_rpm.c b/drivers/mfd/qcom_rpm.c
index 086611322874..27446f43e3f3 100644
--- a/drivers/mfd/qcom_rpm.c
+++ b/drivers/mfd/qcom_rpm.c
@@ -7,6 +7,8 @@ 
 
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/of.h>
 #include <linux/of_platform.h>
 #include <linux/io.h>
 #include <linux/interrupt.h>
@@ -528,7 +530,6 @@  static irqreturn_t qcom_rpm_wakeup_interrupt(int irq, void *dev)
 
 static int qcom_rpm_probe(struct platform_device *pdev)
 {
-	const struct of_device_id *match;
 	struct device_node *syscon_np;
 	struct qcom_rpm *rpm;
 	u32 fw_version[3];
@@ -570,10 +571,9 @@  static int qcom_rpm_probe(struct platform_device *pdev)
 	if (irq_wakeup < 0)
 		return irq_wakeup;
 
-	match = of_match_device(qcom_rpm_of_match, &pdev->dev);
-	if (!match)
+	rpm->data = device_get_match_data(&pdev->dev);
+	if (!rpm->data)
 		return -ENODEV;
-	rpm->data = match->data;
 
 	rpm->status_regs = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
 	if (IS_ERR(rpm->status_regs))
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index 41408df1712f..dce6ad668dbf 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -19,7 +19,7 @@ 
 #include <linux/regmap.h>
 #include <linux/mfd/tps65910.h>
 #include <linux/of.h>
-#include <linux/of_device.h>
+#include <linux/property.h>
 
 static const struct resource rtc_resources[] = {
 	{
@@ -374,16 +374,9 @@  static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
 	struct device_node *np = client->dev.of_node;
 	struct tps65910_board *board_info;
 	unsigned int prop;
-	const struct of_device_id *match;
 	int ret;
 
-	match = of_match_device(tps65910_of_match, &client->dev);
-	if (!match) {
-		dev_err(&client->dev, "Failed to find matching dt id\n");
-		return NULL;
-	}
-
-	*chip_id  = (unsigned long)match->data;
+	*chip_id  = (unsigned long)device_get_match_data(&client->dev);
 
 	board_info = devm_kzalloc(&client->dev, sizeof(*board_info),
 			GFP_KERNEL);
diff --git a/drivers/mfd/twl4030-power.c b/drivers/mfd/twl4030-power.c
index e35b0f788c50..1595e9c76132 100644
--- a/drivers/mfd/twl4030-power.c
+++ b/drivers/mfd/twl4030-power.c
@@ -27,8 +27,8 @@ 
 #include <linux/pm.h>
 #include <linux/mfd/twl.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/of.h>
-#include <linux/of_device.h>
 
 #include <asm/mach-types.h>
 
@@ -883,7 +883,6 @@  static int twl4030_power_probe(struct platform_device *pdev)
 {
 	const struct twl4030_power_data *pdata = dev_get_platdata(&pdev->dev);
 	struct device_node *node = pdev->dev.of_node;
-	const struct of_device_id *match;
 	int err = 0;
 	int err2 = 0;
 	u8 val;
@@ -904,10 +903,8 @@  static int twl4030_power_probe(struct platform_device *pdev)
 		return err;
 	}
 
-	match = of_match_device(of_match_ptr(twl4030_power_of_match),
-				&pdev->dev);
-	if (match && match->data)
-		pdata = match->data;
+	if (node)
+		pdata = device_get_match_data(&pdev->dev);
 
 	if (pdata) {
 		err = twl4030_power_configure_scripts(pdata);
diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
index 3c03681c124c..f9fce8408c2c 100644
--- a/drivers/mfd/twl6030-irq.c
+++ b/drivers/mfd/twl6030-irq.c
@@ -24,10 +24,10 @@ 
 #include <linux/kthread.h>
 #include <linux/mfd/twl.h>
 #include <linux/platform_device.h>
+#include <linux/property.h>
 #include <linux/suspend.h>
 #include <linux/of.h>
 #include <linux/irqdomain.h>
-#include <linux/of_device.h>
 
 #include "twl-core.h"
 
@@ -368,10 +368,10 @@  int twl6030_init_irq(struct device *dev, int irq_num)
 	int			nr_irqs;
 	int			status;
 	u8			mask[3];
-	const struct of_device_id *of_id;
+	const int		*irq_tbl;
 
-	of_id = of_match_device(twl6030_of_match, dev);
-	if (!of_id || !of_id->data) {
+	irq_tbl = device_get_match_data(dev);
+	if (!irq_tbl) {
 		dev_err(dev, "Unknown TWL device model\n");
 		return -EINVAL;
 	}
@@ -409,7 +409,7 @@  int twl6030_init_irq(struct device *dev, int irq_num)
 
 	twl6030_irq->pm_nb.notifier_call = twl6030_irq_pm_notifier;
 	atomic_set(&twl6030_irq->wakeirqs, 0);
-	twl6030_irq->irq_mapping_tbl = of_id->data;
+	twl6030_irq->irq_mapping_tbl = irq_tbl;
 
 	twl6030_irq->irq_domain =
 		irq_domain_add_linear(node, nr_irqs,