Message ID | 1412072546-3529-1-git-send-email-zajec5@gmail.com |
---|---|
State | Needs Review / ACK, archived |
Headers | show |
Context | Check | Description |
---|---|---|
robh/checkpatch | warning | total: 1 errors, 0 warnings, 0 lines checked |
robh/patch-applied | success |
On Tuesday 30 September 2014 12:22:26 Rafał Miłecki wrote: > > +The top-level axi bus may contain children representing attached cores > +(devices). This is needed since some hardware details can't be auto > +detected (e.g. IRQ numbers). Also some of the cores may be responsible > +for extra things, e.g. ChipCommon providing access to the GPIO chip. > + > Example: > > axi@18000000 { > @@ -17,4 +22,12 @@ Example: > ranges = <0x00000000 0x18000000 0x00100000>; > #address-cells = <1>; > #size-cells = <1>; > + > + chipcommon { > + compatible = "brcm,bus-chipcommon"; > + reg = <0x00000000 0x1000>; > + > + gpio-controller; > + #gpio-cells = <2>; > + }; > }; Looks good. > diff --git a/drivers/bcma/driver_gpio.c b/drivers/bcma/driver_gpio.c > index 8ea497c..28bdbe5 100644 > --- a/drivers/bcma/driver_gpio.c > +++ b/drivers/bcma/driver_gpio.c > @@ -218,6 +218,12 @@ int bcma_gpio_init(struct bcma_drv_cc *cc) > #if IS_BUILTIN(CONFIG_BCM47XX) > chip->to_irq = bcma_gpio_to_irq; > #endif > +#if IS_BUILTIN(CONFIG_OF) > + if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC) > + chip->of_node = of_find_compatible_node( > + bus->host_pdev->dev.of_node, NULL, > + "brcm,bus-chipcommon"); > +#endif > switch (cc->core->bus->chipinfo.id) { This doesn't: you are now searching through all nodes starting at the axi node rather than searching just through the children. I think it would be better with the first change in place to set chip->of_node to cc->core->dev.of_node, and set that pointer in bcma_bus_scan by matching the 'reg' number. I think that is what an earlier version of the bcma DT support did in order to find the IRQs. We no longer need it for that purpose, but it seems like a good idea anyway, as I expect other bcma_devices to have similar requirements to add additional properties. Arnd -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 30 September 2014 12:36, Arnd Bergmann <arnd@arndb.de> wrote: > On Tuesday 30 September 2014 12:22:26 Rafał Miłecki wrote: >> @@ -218,6 +218,12 @@ int bcma_gpio_init(struct bcma_drv_cc *cc) >> #if IS_BUILTIN(CONFIG_BCM47XX) >> chip->to_irq = bcma_gpio_to_irq; >> #endif >> +#if IS_BUILTIN(CONFIG_OF) >> + if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC) >> + chip->of_node = of_find_compatible_node( >> + bus->host_pdev->dev.of_node, NULL, >> + "brcm,bus-chipcommon"); >> +#endif >> switch (cc->core->bus->chipinfo.id) { > > This doesn't: you are now searching through all nodes starting at the > axi node rather than searching just through the children. > > I think it would be better with the first change in place to set > chip->of_node to cc->core->dev.of_node, and set that pointer in > bcma_bus_scan by matching the 'reg' number. I think that is what > an earlier version of the bcma DT support did in order to find the > IRQs. We no longer need it for that purpose, but it seems like a > good idea anyway, as I expect other bcma_devices to have similar > requirements to add additional properties. Ohh, of course, I didn't notice that [PATCH v6] bcma: register bcma as device tree driver already contains bcma_of_fill_device. This will simplify my search a lot!
diff --git a/Documentation/devicetree/bindings/bus/bcma.txt b/Documentation/devicetree/bindings/bus/bcma.txt index e9070c1..0538692 100644 --- a/Documentation/devicetree/bindings/bus/bcma.txt +++ b/Documentation/devicetree/bindings/bus/bcma.txt @@ -9,6 +9,11 @@ Required properties: The cores on the AXI bus are automatically detected by bcma with the memory ranges they are using and they get registered afterwards. +The top-level axi bus may contain children representing attached cores +(devices). This is needed since some hardware details can't be auto +detected (e.g. IRQ numbers). Also some of the cores may be responsible +for extra things, e.g. ChipCommon providing access to the GPIO chip. + Example: axi@18000000 { @@ -17,4 +22,12 @@ Example: ranges = <0x00000000 0x18000000 0x00100000>; #address-cells = <1>; #size-cells = <1>; + + chipcommon { + compatible = "brcm,bus-chipcommon"; + reg = <0x00000000 0x1000>; + + gpio-controller; + #gpio-cells = <2>; + }; }; diff --git a/drivers/bcma/driver_gpio.c b/drivers/bcma/driver_gpio.c index 8ea497c..28bdbe5 100644 --- a/drivers/bcma/driver_gpio.c +++ b/drivers/bcma/driver_gpio.c @@ -218,6 +218,12 @@ int bcma_gpio_init(struct bcma_drv_cc *cc) #if IS_BUILTIN(CONFIG_BCM47XX) chip->to_irq = bcma_gpio_to_irq; #endif +#if IS_BUILTIN(CONFIG_OF) + if (cc->core->bus->hosttype == BCMA_HOSTTYPE_SOC) + chip->of_node = of_find_compatible_node( + bus->host_pdev->dev.of_node, NULL, + "brcm,bus-chipcommon"); +#endif switch (cc->core->bus->chipinfo.id) { case BCMA_CHIP_ID_BCM5357: case BCMA_CHIP_ID_BCM53572:
This will allow us to define GPIO-attached devices (LEDs, buttons) in the the device tree. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> --- This is based on top of [PATCH v6] bcma: register bcma as device tree driver that I hope will reach wireless-next git tree. V2: Describe axi chilren and make gpio a child of chipcommon core. V3: Make chipcommon a GPIO controller (avoid extra sub-child) Speed up finding OF node in driver_gpio.c --- Documentation/devicetree/bindings/bus/bcma.txt | 13 +++++++++++++ drivers/bcma/driver_gpio.c | 6 ++++++ 2 files changed, 19 insertions(+)