[PATCH v2] ARM: bcm2835: add device tree for Raspberry Pi model B+

Stephen Warren swarren at wwwdotorg.org
Thu Nov 6 11:01:23 PST 2014

On 11/06/2014 11:15 AM, Matthias Klein wrote:
> Am 06.11.2014 um 06:29 schrieb Stephen Warren:
>> I guess we should have separate device trees for those, since there are
>> some differences in the GPIO and I2C channel usage. That'd leave us with:
>> bcm2835-rpi-b.dts (Pin3=GPIO0, Pin5=GPIO1, Pin13=GPIO21, I2C-0)
>> bcm2835-rpi-b-rev2.dts (Pin3=GPIO1, Pin5=GPIO2, Pin13=GPIO27, 12C-1)
> I think for these differences separate device trees are not needed.
> These pins are all at the moment configured as ALT0.Both I2C buses are
> configured for I2C,
> therefore I doesn't matter which one is wired to the gpio header.

At the moment perhaps there's not a lot of difference between the board. 
However, e.g. the board ID pins on the early boards are connected to 
pull-up/down resistors, and hence could be represented in DT as specific 
named GPIOs or not, depending on whether the board has board ID pins. 
Similarly, we should only enable the I2C controllers on a particular 
board if there's any possibility of a user connecting something, which 
is only true if that particular I2C controller is routed to an IO 
connector (or on-board device).

> But for clarity it would be better to have a separate device tree for
> each model.

So yes, I think we should move to separate DTs for each incompatible 
model, so that if/when we actually want to make the DT content different 
between them, we already have separate DTs in place to do that. That 
will allow use to update any bootloaders to choose the right DT now, 
rather than right when we really need it done already:-)

> When a gpio signal (which is configured in device tree as ALT0) is used
> as e.g. plain gpio output, does the kernel the reconfiguration from ALT0
> to gpio output?

IIRC, the kernel GPIO driver sets the pinmux to GPIOin/GPIOout based on 
gpio_request() calls.

> Or must the gpio signal be configured as output in the device tree?

It doens't have to be. That said, if we *know* that a particular GPIO is 
used as a GPIO rather than a special function, there's probably no harm 
just putting that setting right into the DT.

> Is is possible to set at the brcm,function/brcm,pins gpio definition
> also the voltage level of an gpio output for e.g. the LAN_RUN signal?

No. The value on a GPIO pin can only be selected by code. For pins such 
as LAN_RUN that don't have code controlling them, you can get away with 
setting the pin as input/tri-state with a pull-up/pull-down to get the 
desired state.

> How do we want to continue?
> Is my patch OK, or should I try to write a device tree for every model
> where every gpio signal is defined?

I think the patch is fine for now; my thoughts were more about the need 
to send additional patches to add more DTs later.

More information about the linux-rpi-kernel mailing list