On 2020-03-30 9:24 a.m., Guenter Roeck wrote:
On 3/30/20 4:33 AM, Michal Simek wrote:
Hi Robert and Guenter,
Xilinx boards are using IRPS5401 chips and I have tried to use your driver.
I have checked that u-boot can detect that devices and read it.
ZynqMP> i2c probe
Valid chip addresses: 0C 13 14 20 43 44 74
ZynqMP> i2c md 13 0 10
0000: 00 08 00 08 00 08 00 08 00 08 00 08 00 08 00 08 ................
ZynqMP> i2c md 14 0 10
0000: 00 08 00 08 00 08 00 08 00 08 00 08 00 08 00 08 ................
ZynqMP> i2c md 43 0 10
0000: 00 98 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
ZynqMP> i2c md 44 0 10
0000: 00 8a ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
ZynqMP>
Here is DT fragment which I use (it is under i2c mux)
185 irps5401_43: irps5401@43 {
186 compatible = "infineon,irps5401";
187 reg = <0x43>; /* pmbus / i2c 0x13 */
Does that mean the mux is at 0x13 ?
These chips have two I2C addresses with two separate interfaces: the
standard PMBus-compatible interface at an address between 0x40-0x4f,
which the irps5401 driver supports, and another proprietary interface at
an address between 0x10-0x1f. The specific addresses in those ranges is
configured by the value of a resistor on one of the pins.
188 };
189 irps5401_4d: irps5401@44 {
190 compatible = "infineon,irps5401";
191 reg = <0x44>; /* pmbus / i2c 0x14 */
Why _4d ?
192 };
I see that driver is used but with error.
[ 37.553740] irps5401 3-0043: PMBus status register not found
[ 37.559815] irps5401 3-0044: PMBus status register not found
That's why I want to check with you what could be the problem.
PMBus status registers are at 0x78 (byte) and 0x79 (word). The above
error is reported if reading both returns an error or 0xff / 0xffff,
which indicates that the chip is not accessible.
I can say for sure that whatever is at 0x43/0x44, it is very likely
not an irps5401. If it was, at least registers 0x2 and 0x6 should report
different values, and 0x01 doesn't look much better (the lower 2 bits
should never be set).
Also I would like to know if there is a way to disable it via any API.
Not sure what you want to disable. The message ? The PMBus core needs
to have access to the chip to initialize. If there is no status register,
there is nothing it can do but to refuse to instantiate.
It might make sense to use i2cdetect / i2cget in Linux to determine
if the chips are accessible. I'd try reading the status registers (0x78
to 0x7e), value registers (0x88 to 0x8d, 0x96, 0x97), manufacturer
id (0x99) and model (0x9a), and i2c device ID (0xad) and revision (0xae).
This would be my first suggestion as well.
One of this regulator is connected to another device which doesn't have
access to it. It means before powering up this device there is a need to
enable this power regulator. The best via any dedicated API.
I don't think the PMBus interface on these chips exposes any interface
to command the regulator. However, one could do this over the Infineon
programming/control interface on the 0x10-0x1f addresses. This protocol
is documented publicly now (see the programming guide and register map
document on the Infineon web site).
We can add regulator support to the PMBus core or to the irps5401 driver
if necessary (patches welcome), assuming the regulator in question is
handled by Linux.
Hope this helps,
Guenter
--
Robert Hancock
Senior Hardware Designer
SED Systems, a division of Calian Ltd.
Email: hancock@xxxxxxxxxxxxx