[U-Boot] [PATCH] dm: gpio: pca953x: introduce driver model support for pca953x

Michal Simek
2016-04-11T12:09:22Z

On 11.4.2016 07:47, Peng Fan wrote:
> On Sat, Apr 09, 2016 at 12:33:34PM -0600, Simon Glass wrote:
>> On 18 March 2016 at 03:54, Peng Fan <van.freenix@gmail.com> wrote:
>>> Introduce a new driver that supports driver model for pca953x.
>>> The pca953x chips are used as I2C I/O expanders.
>>> This driver is designed to support the following chips:
>>> "
>>> 4 bits: pca9536, pca9537
>>> 8 bits: max7310, max7315, pca6107, pca9534, pca9538, pca9554,
>>> pca9556, pca9557, pca9574, tca6408, xra1202
>>> 16 bits: max7312, max7313, pca9535, pca9539, pca9555, pca9575,
>>> tca6416
>>> 24 bits: tca6424
>>> 40 bits: pca9505, pca9698
>>> "
>>> But for now this driver only supports max 24 bits and pca953x compatible
>>> chips. pca957x compatible chips are not supported now.
>>> These can be addressed when we need to add such support for the different
>>> chips.
>>> This driver has been tested on i.MX6 SoloX Sabreauto board with max7310
>>> i2c expander using gpio command as following:
>>>
>>> =>gpio status -a
>>> Bank gpio at 48:
>>> gpio at 480: input: 1 [ ]
>>> => gpio clear gpio at 480
>>> gpio: pin gpio at 480 (gpio 224) value is 0
>>> => gpio status -a
>>> Bank gpio at 48:
>>> gpio at 480: output: 0 [ ]
>>
>> Don't you think 480 is confusing? Perhaps you should have gpio at 48_ as
>> the bank name? Also I think you should support a gpio-bank-name
>> property in the node, to allow a sensible name to be provided.
>
> 480 is added by gpio uclass driver I think.
> The dts is copied from Linux side. I'd not change the dts, will try to
> see how to introudce a sensible name here.

What's the binding you are using?

The part of this patch should be DT binding.

This is my node.
tca6416_u61: gpio at 21 {
compatible = "ti,tca6416";
reg = <0x21>;
gpio-controller;
#gpio-cells = <2>;
};

Thanks,
Michal

ZynqMP> i2c bus
Bus 0: i2c at ff020000
20: gpio at 20, offset len 1, flags 0
21: gpio at 21, offset len 1, flags 0
75: i2cswitch at 75, offset len 1, flags 0
Bus 750: i2c at 0
Bus 751: i2c at 1
Bus 752: i2c at 2
Bus 1: i2c at ff030000
74: i2cswitch at 74, offset len 1, flags 0
75: i2cswitch at 75, offset len 1, flags 0
Bus 750: i2c at 0
Bus 751: i2c at 1
Bus 752: i2c at 2
Bus 1743: i2c at 3
Bus 1744: i2c at 4
Bus 750: i2c at 0
Bus 751: i2c at 1
Bus 752: i2c at 2
Bus 1743: i2c at 3
Bus 1744: i2c at 4
Bus 1755: i2c at 5
Bus 1756: i2c at 6
Bus 1757: i2c at 7
ZynqMP> gpio status -a
__of_translate_address: Bad cell count for gpio at 20
Command 'gpio' failed: Error -19
ZynqMP> dm tree
Class Probed Name
----------------------------------------
root [ + ] root_driver
simple_bus [ ] |-- amba_apu
simple_bus [ + ] `-- amba
eth [ + ] |-- ethernet at ff0e0000
i2c [ + ] |-- i2c at ff020000
gpio [ ] | |-- gpio at 20
gpio [ ] | |-- gpio at 21
i2c_mux [ ] | `-- i2cswitch at 75
i2c [ ] | |-- i2c at 0
i2c [ ] | |-- i2c at 1
i2c [ ] | `-- i2c at 2
i2c [ ] |-- i2c at ff030000
i2c_mux [ ] | |-- i2cswitch at 74
i2c [ ] | | |-- i2c at 0
i2c [ ] | | |-- i2c at 1
i2c [ ] | | |-- i2c at 2
i2c [ ] | | |-- i2c at 3
i2c [ ] | | `-- i2c at 4
i2c_mux [ ] | `-- i2cswitch at 75
i2c [ ] | |-- i2c at 0
i2c [ ] | |-- i2c at 1
i2c [ ] | |-- i2c at 2
i2c [ ] | |-- i2c at 3
i2c [ ] | |-- i2c at 4
i2c [ ] | |-- i2c at 5
i2c [ ] | |-- i2c at 6
i2c [ ] | `-- i2c at 7
mmc [ + ] |-- sdhci at ff170000
serial [ + ] |-- serial at ff000000
serial [ ] `-- serial at ff010000