pinctrl: pinctrl-single vs custom driver
Sherman Yin
syin at broadcom.com
Mon Feb 24 21:24:00 EST 2014
Hi Linus,
After upstreaming the bcm281xx (capri) pinctrl driver, I'm working on
the driver for another SoC. I'd like your input before I get too far
with the driver.
Recall we had a discussion about whether to use pinctrl-single for the
bcm281xx driver, and you mentioned a custom driver is better:
>> Now I have written a driver that's pretty much ready-to-go, but on the
>> other hand, pinctrl-single also does what my chip needs, so my driver
>> is sort of duplicated other than the fact that it defines pins and
>> functions. I'm just trying to determine which driver is the more
>> preferred way to go for upstreaming.
>
> Your driver defining pins and functions is better.
Like the bcm281xx, in this SoC, each pin is also controlled by 1
register, so pinctrl-single should work. The difference between this
SoC and bcm281xx is that the pin registers in this SoC are only
accessible via a messaging mechanism (send a command then wait for a
reply), not a simple register read-write. We have defined one message
for reading the register and one for writing to it.
In a driver like pinctrl-bcm281xx, pinmux and pin configs are separately
applied and on a per-pin basis. A simple update of 1 pin will thus
result in numerous messages:
1. Send cmd to read register, block for reply
2. Rcv reply with value
3. Modify pinmux portion
4. Send cmd to write register
5. Send cmd to read register, block for reply
6. Rcv reply with value
7. Modify pin configs portion
8. Send cmd to write register
With pinctrl-single, updating pins will be much simpler with just 1
message to directly write the whole register.
Is this efficiency enough to warrant using pinctrl-single over a
"normal" pinctrl driver in this case?
Appreciate your time.
Regards,
Sherman
More information about the linux-arm-kernel
mailing list