Hi,

We know that the only way to probe an OF driver is when a match is found
in the device table. And hence checking for of_match_device is redundant
and instead it is better to use of_device_get_match_data() to get the
matched data in the probe function.

For instance:
https://lkml.org/lkml/2018/4/30/66

 static int mmio_74xx_gpio_probe(struct platform_device *pdev)
 {
-       const struct of_device_id *of_id;
        struct mmio_74xx_gpio_priv *priv;
        struct resource *res;
        void __iomem *dat;
        int err;
 
-       of_id = of_match_device(mmio_74xx_gpio_ids, &pdev->dev);
-       if (!of_id)
-               return -ENODEV;
-
        priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;
 
+       priv->flags = (uintptr_t)of_device_get_match_data(&pdev->dev);
+
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        dat = devm_ioremap_resource(&pdev->dev, res);
        if (IS_ERR(dat))
                return PTR_ERR(dat);
 
-       priv->flags = (uintptr_t) of_id->data;
-

--------------------------------------------------------------------------

In the above example we know of_match_device() is useless since the
probe occurs *only* when a match is found and therefore checking again
is redundant.

But now my question is if this is the case, then when does
of_match_device() return NULL ? When is the error handling required ?

There are places where it is done as "safe-play" coding as suggested to me
by Jonathan previosuly https://lkml.org/lkml/2018/3/16/1245



-- 
Himanshu Jha
Undergraduate Student
Department of Electronics & Communication
Guru Tegh Bahadur Institute of Technology

_______________________________________________
Kernelnewbies mailing list
[email protected]
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to