Thread (63 messages) 63 messages, 10 authors, 2020-06-08

Re: [PATCH v3 03/16] mfd: mfd-core: match device tree node against reg property

From: Lee Jones <hidden>
Date: 2020-06-08 18:45:14
Also in: linux-arm-kernel, linux-gpio, linux-hwmon, linux-pwm, linux-watchdog, lkml

On Mon, 08 Jun 2020, Michael Walle wrote:
Am 2020-06-08 16:24, schrieb Lee Jones:
quoted
On Mon, 25 May 2020, Michael Walle wrote:
quoted
Am 2020-05-15 12:28, schrieb Lee Jones:
quoted
On Thu, 30 Apr 2020, Michael Walle wrote:
quoted
Hi Lee,

Am 2020-04-23 19:45, schrieb Michael Walle:
quoted
There might be multiple children with the device tree compatible, for
example if a MFD has multiple instances of the same function. In this
case only the first is matched and the other children get a wrong
of_node reference.
Add a new option to match also against the unit address of the child
node. Additonally, a new helper OF_MFD_CELL_REG is added.
[...]
quoted
quoted
quoted
quoted
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
index d01d1299e49d..c2c0ad6b14f3 100644
--- a/include/linux/mfd/core.h
+++ b/include/linux/mfd/core.h
@@ -13,8 +13,11 @@
 #include <linux/plataorm_device.h>

 #define MFD_RES_SIZE(arr) (sizeof(arr) / sizeof(struct resource))
+#define MFD_OF_REG_VALID	BIT(31)
What about 64bit platforms?
The idea was to have this as a logical number. I.e. for now you may
only
have one subdevice per unique compatible string. In fact, if you
have a
look at the ab8500.c, there are multiple "stericsson,ab8500-pwm"
subdevices. But there is only one DT node for all three of it. I guess
this works as long as you don't use phandles to reference the pwm node
in the device tree. Or you don't want to use device tree properties
per subdevice (for example the "timeout-sec" of a watchdog device).
This is not a good example, as the "stericsson,ab8500-pwm" is
legitimate.  Here we are registering 3 potential devices, but only
instantiating 1 of them.
Mh?

static const struct mfd_cell ab8500_devs[] = {
..
       OF_MFD_CELL("ab8500-pwm",
                    NULL, NULL, 0, 1, "stericsson,ab8500-pwm"),
        OF_MFD_CELL("ab8500-pwm",
                    NULL, NULL, 0, 2, "stericsson,ab8500-pwm"),
        OF_MFD_CELL("ab8500-pwm",
                    NULL, NULL, 0, 3, "stericsson,ab8500-pwm"),
..
}

And in pwm-ab8500.c there are three offsets based on the pdev->id.

Am I missing something here?
Scrap what I said above.

For some reason I had of_platform_populate() in my head.

This will register and enumerate 3 devices.

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help