Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 28, 2011 at 1:31 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: Right, but your modification was to the MFD core so it's going to affect other devices... But only when they start using the newly added functionality. At this point, it affects nobody except vx855. Grant, any chance I could have your comments on the latest patches? http://marc.info/?l=linux-kernelm=131720353308737w=2 http://marc.info/?l=linux-kernelm=131720341808574w=2 http://marc.info/?l=linux-kernelm=131720093305636w=2 Thanks, Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Mon, Oct 03, 2011 at 09:40:10AM +0100, Daniel Drake wrote: On Wed, Sep 28, 2011 at 1:31 PM, Mark Brown Right, but your modification was to the MFD core so it's going to affect other devices... But only when they start using the newly added functionality. At this point, it affects nobody except vx855. I'd really expect that if we're adding stuff to the framework then it should be suitable for random drivers to use. To be honest I don't really understand why you're changing the framework at all here, the child driver is entirely specific to the parent as far as I can see. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Mon, Oct 03, 2011 at 11:39:47AM +0100, Daniel Drake wrote: On Mon, Oct 3, 2011 at 11:28 AM, Mark Brown I'd really expect that if we're adding stuff to the framework then it should be suitable for random drivers to use. It is suitable. If other drivers would otherwise run into the data reuse problem you have described, they can use the kmemdup solution you have described. This seems the wrong way round - we're working To be honest I don't really understand why you're changing the framework at all here, the child driver is entirely specific to the parent as far as I can see. Because I'm trying to get devicetree-driven HDD LED support driven, and Grant stated that doing it this way is a hard rule: What is a hard rule is that the code creating the children needs to know what the binding is and populate the child's of_node appropriately. I also confirmed that extending the mfd_cell layer is exactly what Grant was suggesting: http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-September/008480.html That's in the context of adding a binding for the vx855 GPIO module that's distinct from the binding for the rest of the chip. It's not massively clear to me that this is a good idea. So I seem to be stuck between two people giving me conflicting requirements for merge of my work (which commenced in July, and has already seen several discussions and rounds of patches). Any help appreciated - I'm just trying to make a HDD LED blink. It seems to me like either the IP block is heavily dependant on the core and shouldn't be split out in the device tree at all (but should instead be part of the core node) or the IP block is very isolated from the core (in which case we should just be able to instantiate the device from the device tree without using explict code in the core driver). This all feels like there's some abstraction violation going on. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Mon, Oct 3, 2011 at 1:16 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: It seems to me like either the IP block is heavily dependant on the core and shouldn't be split out in the device tree at all (but should instead be part of the core node) or the IP block is very isolated from the core (in which case we should just be able to instantiate the device from the device tree without using explict code in the core driver). This all feels like there's some abstraction violation going on. I guess it is a matter of opinion. To me, the abstraction is sensible and representative of the hardware. The gpio controller (and several other components) are abstracted at the hardware level behind an ISA bridge. In the device tree, we have the ISA bridge represented as /pci/isa. Then we have various child nodes of that ISA bridge, such as the gpio controller at /pci/isa/gpios or the timer controller at /pci/isa/timer This also matches the way that the hardware is described by VIA in the specs, and it matches the way that Linux has its own device hierachy laid out (i.e. the ISA bridge driven by the mfd driver, which then spawns off a child device for the GPIO controller). It would not be possible to fold all of the isa bridge child components into the same device tree node without dealing with various namespace collisions. Grant, could we have your opinion on whether this is a good abstraction or not? and generally how we go forward. Thanks, Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Mon, Oct 03, 2011 at 01:30:15PM +0100, Daniel Drake wrote: On Mon, Oct 3, 2011 at 1:16 PM, Mark Brown It seems to me like either the IP block is heavily dependant on the core and shouldn't be split out in the device tree at all (but should instead be part of the core node) or the IP block is very isolated from the core (in which case we should just be able to instantiate the device from the device tree without using explict code in the core driver). This all feels like there's some abstraction violation going on. I guess it is a matter of opinion. To me, the abstraction is sensible and representative of the hardware. This also matches the way that the hardware is described by VIA in the specs, and it matches the way that Linux has its own device hierachy laid out (i.e. the ISA bridge driven by the mfd driver, which then spawns off a child device for the GPIO controller). It would not be possible to fold all of the isa bridge child components into the same device tree node without dealing with various namespace collisions. So, I made two suggestions above and it sounds like you want the second one but you've only responded to the first one without commenting on the second. My second suggestion was that if the block is sufficiently isoltated from the core we should be able instantiate it from the device tree without requiring explicit code in the core driver. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Mon, Oct 3, 2011 at 1:40 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: So, I made two suggestions above and it sounds like you want the second one but you've only responded to the first one without commenting on the second. My second suggestion was that if the block is sufficiently isoltated from the core we should be able instantiate it from the device tree without requiring explicit code in the core driver. Sorry, hadn't quite grasped what you meant there. I understand now. It is an interesting idea but leaves me with some questions/problems: The GPIO controller needs to find its register space by looking at the PCI device (the ISA bridge). So probing it independently could maybe be viewed by some as a hierarchy violation as it would have to then hunt around for its PCI dev. According to Grant's hard rule, the parent device needs to be the thing that passes the of_node to the child. So we would still need a driver for the parent ISA bridge instantiating the child GPIO controller. Wouldn't that bring us straight back to the same problem (that the core needs code to instantiate the child)? Also, not an argument against the direction, but an outstanding problem that would need to be resolved: the x86 device tree implementation doesn't seem to follow Grant's design for how things should work (or maybe I misunderstood something), so work would be needed there first. See the unfinished discussion at http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-July/006853.html Thanks, Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 7:38 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: You're modifying global data which should really be const and is shared between multiple devices in place. Probably you'll not notice any practical effects, especially if you don't happen to have multiple devices in the same system. I see. In this case, it would be impossible to have two VX855s in the same system, and if you did, you would have bigger problems. In this context what we're doing is safe. Thanks, Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
[PATCH 1/3] mfd: allow mfd_cell association with device tree node
This allows a mfd_cell to be linked with a device tree node, which then allows child drivers to have easy access to that handle. Signed-off-by: Daniel Drake d...@laptop.org --- drivers/mfd/mfd-core.c |1 + include/linux/mfd/core.h |4 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0902523..7d22dcd 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -87,6 +87,7 @@ static int mfd_add_device(struct device *parent, int id, goto fail_device; pdev-dev.parent = parent; + pdev-dev.of_node = cell-of_node; if (cell-pdata_size) { ret = platform_device_add_data(pdev, diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 4e76163..9b836f9 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -15,6 +15,7 @@ #define MFD_CORE_H #include linux/platform_device.h +#include linux/of.h /* * This struct describes the MFD part (cell). @@ -37,6 +38,9 @@ struct mfd_cell { void*platform_data; size_t pdata_size; + /* association with device tree node (optional) */ + struct device_node *of_node; + /* * These resources can be specified relative to the parent device. * For accessing hardware you should use resources from the platform dev -- 1.7.6.2 ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 28, 2011 at 10:07:43AM +0100, Daniel Drake wrote: On Tue, Sep 27, 2011 at 7:38 PM, Mark Brown You're modifying global data which should really be const and is shared between multiple devices in place. Probably you'll not notice any practical effects, especially if you don't happen to have multiple devices in the same system. I see. In this case, it would be impossible to have two VX855s in the same system, and if you did, you would have bigger problems. In this context what we're doing is safe. Right, but your modification was to the MFD core so it's going to affect other devices... ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 21, 2011 at 2:16 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: Not sure how the MFD cells could get at the OF node by using the parent device - if the parent device had a OF node, wouldn't this correspond to the parent instead of the child? Also, as far as I can Well, obviously. But then with a lot of MFDs (including this one, the GPIO driver is entirely specific to the parent) it's not clear that we should be splitting the device up in the device tree in the first place - our use of MFDs is a Linux implementation detail. If the child is specific to the parent it can cooperate with the parent device happily. My suspicion is that for device tree in cases where the MFD really is totally independent of the parent we shouldn't need explicit MFD code to instantiate the child at all any more in the same way that we should be avoiding this for the SoCs. The VX855 is somewhat a SoC if you ignore the fact that the processor is separate. The software-visible architecture is somewhat messy and may hide this however. The fact that it exposes some things as individual PCI devices and some as behind the ISA bridge (which the mfd driver latches onto) is probably just there for legacy reasons. Once you get behind that cover, you see that the VX855 register space is really quite disorganised with individual bits within the same byte of configuration space used for vastly different system components (e.g. gpio bits mixed with acpi and audio stuff in the same byte) and you get the feeling that this really is a lot of hardware combined. So the discussion of independence is particularly tricky in this case. Anyway, I think I have come up with an approach on these lines. The mfd driver latches onto the ISA bridge, and the documented architecture suggests that a whole bunch of stuff comes off this: 8042, interrupt controller, dma controller, rtc, serial, timer, gpio, spi, ... We already have this accurately laid out in the device tree hierarchy: /pci/isa/ has a child node for each of the above mentioned things (e.g. /pci/isa/timer , /pci/isa/rtc and so on) So, the /pci/isa node nicely matches the vx855-mfd driver, so we can assign its of_node to that. Then, the vx855-gpio driver can consult the parent and then look at its children in order to find the of_node for the gpio controller. I think this nicely crosses with Mark's request that the ability to have constant mfd definitions isn't broken any more than it is already, and with Grant's preference that the parent resource has some contribution in helping the child gpio controller driver find its of_node. How does the attached patch look? Grant, what do you think of this, and the rest of the discussion so far? Daniel (just trying to make our gpio-based HDD LED go blinky blink...) diff --git a/drivers/gpio/gpio-vx855.c b/drivers/gpio/gpio-vx855.c index ef5aabd..fd24213 100644 --- a/drivers/gpio/gpio-vx855.c +++ b/drivers/gpio/gpio-vx855.c @@ -31,6 +31,7 @@ #include linux/platform_device.h #include linux/pci.h #include linux/io.h +#include linux/of.h #define MODULE_NAME vx855_gpio @@ -201,7 +202,27 @@ static const char *vx855gpio_names[NR_VX855_GP] = { VX855_GPIO12, VX855_GPIO13, VX855_GPIO14 }; -static void vx855gpio_gpio_setup(struct vx855_gpio *vg) +static void vx855gpio_set_of_node(struct platform_device *pdev, + struct gpio_chip *c) +{ +#ifdef CONFIG_OF + struct device_node *parent_node = pdev-dev.parent-of_node; + struct device_node *child; + + if (!parent_node) + return; + + for_each_child_of_node(parent_node, child) { + if (of_device_is_compatible(child, via,vx855-gpio)) { + c-of_node = child; + break; + } + } +#endif +} + +static void vx855gpio_gpio_setup(struct vx855_gpio *vg, +struct platform_device *pdev) { struct gpio_chip *c = vg-gpio; @@ -216,6 +237,7 @@ static void vx855gpio_gpio_setup(struct vx855_gpio *vg) c-ngpio = NR_VX855_GP; c-can_sleep = 0; c-names = vx855gpio_names; + vx855gpio_set_of_node(pdev, c); } /* This platform device is ordinarily registered by the vx855 mfd driver */ @@ -264,7 +286,7 @@ static __devinit int vx855gpio_probe(struct platform_device *pdev) else vg-gpo_reserved = true; - vx855gpio_gpio_setup(vg); + vx855gpio_gpio_setup(vg, pdev); ret = gpiochip_add(vg-gpio); if (ret) { diff --git a/drivers/mfd/vx855.c b/drivers/mfd/vx855.c index d698703..aee9a5f 100644 --- a/drivers/mfd/vx855.c +++ b/drivers/mfd/vx855.c @@ -30,6 +30,7 @@ #include linux/platform_device.h #include linux/pci.h #include linux/mfd/core.h +#include linux/of.h /* offset into pci config space indicating the 16bit register containing * the power management IO space base */ @@ -90,6 +91,10 @@ static __devinit int
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 03:44:56PM +0100, Daniel Drake wrote: On Wed, Sep 21, 2011 at 2:16 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: Not sure how the MFD cells could get at the OF node by using the parent device - if the parent device had a OF node, wouldn't this correspond to the parent instead of the child? Also, as far as I can Well, obviously. But then with a lot of MFDs (including this one, the GPIO driver is entirely specific to the parent) it's not clear that we should be splitting the device up in the device tree in the first place - our use of MFDs is a Linux implementation detail. If the child is specific to the parent it can cooperate with the parent device happily. My suspicion is that for device tree in cases where the MFD really is totally independent of the parent we shouldn't need explicit MFD code to instantiate the child at all any more in the same way that we should be avoiding this for the SoCs. Right. MFD seems to be most useful when IP blocks are used in multiple places and can be instantiated by multiple parents. Sometimes a driver really should just register the interfaces that the device provides without the MFD framework. The VX855 is somewhat a SoC if you ignore the fact that the processor is separate. The software-visible architecture is somewhat messy and may hide this however. The fact that it exposes some things as individual PCI devices and some as behind the ISA bridge (which the mfd driver latches onto) is probably just there for legacy reasons. Once you get behind that cover, you see that the VX855 register space is really quite disorganised with individual bits within the same byte of configuration space used for vastly different system components (e.g. gpio bits mixed with acpi and audio stuff in the same byte) and you get the feeling that this really is a lot of hardware combined. So the discussion of independence is particularly tricky in this case. Anyway, I think I have come up with an approach on these lines. The mfd driver latches onto the ISA bridge, and the documented architecture suggests that a whole bunch of stuff comes off this: 8042, interrupt controller, dma controller, rtc, serial, timer, gpio, spi, ... We already have this accurately laid out in the device tree hierarchy: /pci/isa/ has a child node for each of the above mentioned things (e.g. /pci/isa/timer , /pci/isa/rtc and so on) So, the /pci/isa node nicely matches the vx855-mfd driver, so we can assign its of_node to that. Then, the vx855-gpio driver can consult the parent and then look at its children in order to find the of_node for the gpio controller. I think this nicely crosses with Mark's request that the ability to have constant mfd definitions isn't broken any more than it is already, and with Grant's preference that the parent resource has some contribution in helping the child gpio controller driver find its of_node. How does the attached patch look? Grant, what do you think of this, and the rest of the discussion so far? MFD bindings really need to be designed on a device-by-device basis. Sometimes it will make more sense to have a single node, sometimes it needs to be split up. There is no hard rule here. What is a hard rule is that the code creating the children needs to know what the binding is and populate the child's of_node appropriately. Similarly, the child driver needs to know something about the kinds of nodes it will be passed (can be tested by the compatible property). One warning however, the current platform_bus_type DT code won't deal well with multiple platform_devices pointing to the same of_node. It may result in the wrong driver getting bound since the probe code first looks at .compatible to decide which driver to probe. If 3 separate devices are intended to bind to 3 different drivers, you'll probably end up with all three matching against the first one unless the drivers have some additional explicit test. g. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 09:05:55AM -0600, Grant Likely wrote: On Tue, Sep 27, 2011 at 03:44:56PM +0100, Daniel Drake wrote: On Wed, Sep 21, 2011 at 2:16 PM, Mark Brown My suspicion is that for device tree in cases where the MFD really is totally independent of the parent we shouldn't need explicit MFD code to instantiate the child at all any more in the same way that we should be avoiding this for the SoCs. Right. MFD seems to be most useful when IP blocks are used in multiple places and can be instantiated by multiple parents. Sometimes a driver really should just register the interfaces that the device provides without the MFD framework. Well, if you need a bunch of platform devices it's a good way of creating them especially in the current world. There's also generally some core logic, for example routing interrupt lines, that can usefully be provided by the MFD part of the driver. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 4:05 PM, Grant Likely grant.lik...@secretlab.ca wrote: What is a hard rule is that the code creating the children needs to know what the binding is and populate the child's of_node appropriately. Similarly, the child driver needs to know something about the kinds of nodes it will be passed (can be tested by the compatible property). Thanks for your input. Here is an updated patch which takes account of this hard rule. It uses the dynamic mfd cell creation like before. Mark isn't keen on this, but its how the driver works already, so I don't think it should be a blocker. I don't know how else we can make the mfd framework meet Grant's hard rule. However, it does take Mark's suggestion into account that the mfd should have some clear representation in the device tree. For us it already did have (naturally), but this wasn't reflected in my earlier patch. It is now - the location of the vx855-gpio node is based on finding the mfd node and going from there. Comments? It obviously needs to be tested and split up into individual patches - I'll do that shortly if this doesn't get shot down. cheers Daniel diff --git a/drivers/gpio/gpio-vx855.c b/drivers/gpio/gpio-vx855.c index ef5aabd..2c300c9 100644 --- a/drivers/gpio/gpio-vx855.c +++ b/drivers/gpio/gpio-vx855.c @@ -201,7 +201,8 @@ static const char *vx855gpio_names[NR_VX855_GP] = { VX855_GPIO12, VX855_GPIO13, VX855_GPIO14 }; -static void vx855gpio_gpio_setup(struct vx855_gpio *vg) +static void vx855gpio_gpio_setup(struct vx855_gpio *vg, +struct platform_device *pdev) { struct gpio_chip *c = vg-gpio; @@ -216,6 +217,10 @@ static void vx855gpio_gpio_setup(struct vx855_gpio *vg) c-ngpio = NR_VX855_GP; c-can_sleep = 0; c-names = vx855gpio_names; + +#ifdef CONFIG_OF_GPIO + c-of_node = pdev-dev.of_node; +#endif } /* This platform device is ordinarily registered by the vx855 mfd driver */ @@ -264,7 +269,7 @@ static __devinit int vx855gpio_probe(struct platform_device *pdev) else vg-gpo_reserved = true; - vx855gpio_gpio_setup(vg); + vx855gpio_gpio_setup(vg, pdev); ret = gpiochip_add(vg-gpio); if (ret) { diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0902523..7d22dcd 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -87,6 +87,7 @@ static int mfd_add_device(struct device *parent, int id, goto fail_device; pdev-dev.parent = parent; + pdev-dev.of_node = cell-of_node; if (cell-pdata_size) { ret = platform_device_add_data(pdev, diff --git a/drivers/mfd/vx855.c b/drivers/mfd/vx855.c index d698703..d223840 100644 --- a/drivers/mfd/vx855.c +++ b/drivers/mfd/vx855.c @@ -30,6 +30,7 @@ #include linux/platform_device.h #include linux/pci.h #include linux/mfd/core.h +#include linux/of.h /* offset into pci config space indicating the 16bit register containing * the power management IO space base */ @@ -72,6 +73,27 @@ static struct mfd_cell vx855_cells[] = { }, }; +static __devinit void vx855_set_of_nodes(struct pci_dev *pdev) +{ +#ifdef CONFIG_OF + struct device_node *isa_node; + struct device_node *child; + + isa_node = of_find_compatible_node(NULL, NULL, via,vx855-isa); + pdev-dev.of_node = isa_node; + + if (!isa_node) + return; + + for_each_child_of_node(isa_node, child) { + if (of_device_is_compatible(child, via,vx855-gpio)) { + vx855_cells[0].of_node = child; + break; + } + } +#endif +} + static __devinit int vx855_probe(struct pci_dev *pdev, const struct pci_device_id *id) { @@ -90,6 +112,8 @@ static __devinit int vx855_probe(struct pci_dev *pdev, goto out; } + vx855_set_of_nodes(pdev); + /* mask out the lowest seven bits, as they are always zero, but * hardware returns them as 0x01 */ gpio_io_offset = 0xff80; diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 4e76163..9b836f9 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -15,6 +15,7 @@ #define MFD_CORE_H #include linux/platform_device.h +#include linux/of.h /* * This struct describes the MFD part (cell). @@ -37,6 +38,9 @@ struct mfd_cell { void*platform_data; size_t pdata_size; + /* association with device tree node (optional) */ + struct device_node *of_node; + /* * These resources can be specified relative to the parent device. * For accessing hardware you should use resources from the platform dev ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 05:44:04PM +0100, Daniel Drake wrote: However, it does take Mark's suggestion into account that the mfd should have some clear representation in the device tree. For us it already did have (naturally), but this wasn't reflected in my earlier patch. It is now - the location of the vx855-gpio node is based on finding the mfd node and going from there. Why not just kmemdup() the template you're using rather than modifying it in place? ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 7:14 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: On Tue, Sep 27, 2011 at 05:44:04PM +0100, Daniel Drake wrote: However, it does take Mark's suggestion into account that the mfd should have some clear representation in the device tree. For us it already did have (naturally), but this wasn't reflected in my earlier patch. It is now - the location of the vx855-gpio node is based on finding the mfd node and going from there. Why not just kmemdup() the template you're using rather than modifying it in place? Could do, but is there any point in this case? I'm not seeing it. The template is already being modified in this way in the current driver as well. Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 07:25:03PM +0100, Daniel Drake wrote: On Tue, Sep 27, 2011 at 7:14 PM, Mark Brown Why not just kmemdup() the template you're using rather than modifying it in place? Could do, but is there any point in this case? I'm not seeing it. The template is already being modified in this way in the current driver as well. That seems like a bug that just happened to get noticed while reviewing this change, though... ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 7:26 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: That seems like a bug that just happened to get noticed while reviewing this change, though... Sorry if I'm missing something obvious but I'm not seeing the issue. What exactly is this bug and what effects could it cause? Thanks, Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Tue, Sep 27, 2011 at 07:28:40PM +0100, Daniel Drake wrote: On Tue, Sep 27, 2011 at 7:26 PM, Mark Brown That seems like a bug that just happened to get noticed while reviewing this change, though... Sorry if I'm missing something obvious but I'm not seeing the issue. What exactly is this bug and what effects could it cause? You're modifying global data which should really be const and is shared between multiple devices in place. Probably you'll not notice any practical effects, especially if you don't happen to have multiple devices in the same system. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
[PATCH 1/3] mfd: allow mfd_cell association with device tree node
This allows a mfd_cell to be linked with a device tree node, which then allows child drivers to have easy access to that handle. Signed-off-by: Daniel Drake d...@laptop.org --- drivers/mfd/mfd-core.c |1 + include/linux/mfd/core.h |4 2 files changed, 5 insertions(+), 0 deletions(-) I think this is what is being suggested at http://lists.ozlabs.org/pipermail/devicetree-discuss/2011-September/008235.html diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index 0902523..7d22dcd 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -87,6 +87,7 @@ static int mfd_add_device(struct device *parent, int id, goto fail_device; pdev-dev.parent = parent; + pdev-dev.of_node = cell-of_node; if (cell-pdata_size) { ret = platform_device_add_data(pdev, diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index 4e76163..9b836f9 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -15,6 +15,7 @@ #define MFD_CORE_H #include linux/platform_device.h +#include linux/of.h /* * This struct describes the MFD part (cell). @@ -37,6 +38,9 @@ struct mfd_cell { void*platform_data; size_t pdata_size; + /* association with device tree node (optional) */ + struct device_node *of_node; + /* * These resources can be specified relative to the parent device. * For accessing hardware you should use resources from the platform dev -- 1.7.6.2 ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 21, 2011 at 01:01:48PM +0100, Daniel Drake wrote: @@ -37,6 +38,9 @@ struct mfd_cell { void*platform_data; size_t pdata_size; + /* association with device tree node (optional) */ + struct device_node *of_node; + This doesn't seem great as it means that the mfd_cells can't be static data, they have to be allocated per device. Why can't the MFD cells get at the OF node by using the parent device in the same way as they (mostly) get platform data at the minute? ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 21, 2011 at 1:49 PM, Mark Brown broo...@opensource.wolfsonmicro.com wrote: On Wed, Sep 21, 2011 at 01:01:48PM +0100, Daniel Drake wrote: @@ -37,6 +38,9 @@ struct mfd_cell { void *platform_data; size_t pdata_size; + /* association with device tree node (optional) */ + struct device_node *of_node; + This doesn't seem great as it means that the mfd_cells can't be static data, they have to be allocated per device. Why can't the MFD cells get at the OF node by using the parent device in the same way as they (mostly) get platform data at the minute? Thanks for reviewing. The data can still be static, not needing allocation, it just has to be modified at runtime. See patch 2. Not sure how the MFD cells could get at the OF node by using the parent device - if the parent device had a OF node, wouldn't this correspond to the parent instead of the child? Also, as far as I can see, platform data is passed to the child in exactly the same way - by including it in the mfd_cell definition - see mfd_add_device(): if (cell-pdata_size) { ret = platform_device_add_data(pdev, cell-platform_data, cell-pdata_size); if (ret) goto fail_res; } Daniel ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss
Re: [PATCH 1/3] mfd: allow mfd_cell association with device tree node
On Wed, Sep 21, 2011 at 02:02:43PM +0100, Daniel Drake wrote: Thanks for reviewing. The data can still be static, not needing allocation, it just has to be modified at runtime. See patch 2. Right, but that means that you need to take a copy before using it otherwise two devices of the same type might get into a fight with each other. Not sure how the MFD cells could get at the OF node by using the parent device - if the parent device had a OF node, wouldn't this correspond to the parent instead of the child? Also, as far as I can Well, obviously. But then with a lot of MFDs (including this one, the GPIO driver is entirely specific to the parent) it's not clear that we should be splitting the device up in the device tree in the first place - our use of MFDs is a Linux implementation detail. If the child is specific to the parent it can cooperate with the parent device happily. My suspicion is that for device tree in cases where the MFD really is totally independent of the parent we shouldn't need explicit MFD code to instantiate the child at all any more in the same way that we should be avoiding this for the SoCs. see, platform data is passed to the child in exactly the same way - by including it in the mfd_cell definition - see mfd_add_device(): Indeed, I have the same concerns there. ___ devicetree-discuss mailing list devicetree-discuss@lists.ozlabs.org https://lists.ozlabs.org/listinfo/devicetree-discuss