Hi Geert, Thanks for the feedback. > Subject: Re: [PATCH v5 01/11] i2c: Enhance i2c_new_ancillary_device API > > Hi Biju, > > On Tue, Jun 13, 2023 at 6:11 PM Biju Das <biju.das.jz@xxxxxxxxxxxxxx> > wrote: > > > Subject: Re: [PATCH v5 01/11] i2c: Enhance i2c_new_ancillary_device > > > API On Tue, Jun 13, 2023 at 12:45 PM Biju Das > > > <biju.das.jz@xxxxxxxxxxxxxx> > > > wrote: > > > > > Subject: Re: [PATCH v5 01/11] i2c: Enhance > > > > > i2c_new_ancillary_device API On Mon, Jun 12, 2023 at 10:43 PM > > > > > Wolfram Sang <wsa@xxxxxxxxxx> > > > wrote: > > > > > > > Perhaps we should first think through what an ancillary > > > > > > > device really is. My understanding is that it is used to > > > > > > > talk to secondary addresses of a multi-address I2C slave > device. > > > > > > > > > > > > As I mentioned somewhere before, this is not the case. > > > > > > Ancillary devices are when one *driver* handles more than one > address. > > > > > > Everything else has been handled differently in the past (for > > > > > > all the > > > > > uses I am aware of). > > > > > > > > > > > > Yet, I have another idea which is so simple that I wonder if > > > > > > it maybe has already been discussed so far? > > > > > > > > > > > > * have two regs in the bindings > > > > > > * use the second reg with i2c_new_client_device to instantiate > the > > > > > > RTC sibling. 'struct i2c_board_info', which is one > > > > > > parameter, > > > should > > > > > > have enough options to pass data, e.g it has a software_node. > > > > > > > > > > > > Should work or did I miss something here? > > > > > > > > > > That should work, mostly (i2c_new_dummy_device() also calls > > > > > i2c_new_client_device()). And as i2c_board_info has an of_node > > > > > member (something I had missed before!), the new I2C device can > > > > > access the clocks in the DT node using the standard way. > > > > > > > > Looks like, I cannot assign of_node member like below as it > > > > results in pinctrl failure[1] during device bind. > > > > > > > > info.of_node = client->dev.of_node; > > > > > > > > [1] > > > > pinctrl-rzg2l 11030000.pinctrl: pin P43_0 already requested by > > > > 3-0012; cannot claim for 3-006f pinctrl-rzg2l 11030000.pinctrl: > > > > pin-344 > > > > (3-006f) status -22 pinctrl-rzg2l 11030000.pinctrl: could not > > > > request pin 344 (P43_0) from group pmic on device pinctrl-rzg2l > > > > raa215300 3-006f: Error applying setting, reverse things back > > > > > > Where do you have a reference to pin P43_0 in your DT? > > > > The reference to pin P43_0 is added in the PMIC node. > > > > I have done modification on my board to test PMIC INT# on RZ/G2L SMARC > > EVK by wiring R83 on SoM module and PMOD0 PIN7. > > > > > The last versions you posted did not have any pinctrl properties? > > > > By default, PMIC_INT# is not populated RZ/G2L SMARC EVK, so I haven't > > added Support for PMIC_INT# for the patches posted till date. > > > > Yesterday I checked with HW people, is there a way to enable PMIC_INT# > > and they told me to do the above HW modification. > > > > Today I found this issue, with this modified HW and PMIC INT# enabled > > on the DT, while assigning of_node of PMIC with info.of_node. It is just > a coincidence. > > IC. > > So you now have two Linux devices pointing to the same DT node, causing > pinctrl issues... > > I know this won't solve the core issue, but what is the exact pintrl > configuration you are using? Is this using a GPIO with interrupt > capabilities, or a dedicated interrupt pin? In case of the former, you > don't need a pinctrl property in DT, as the GPIO controller itself should > take care of that by asking the pin controller to configure the pin > properly through pinctrl_gpio_request(). I was testing with both. This issue is triggered while configuring IRQ4 as PMIC_INT#. pmic_pins: pmic { pinmux = <RZG2L_PORT_PINMUX(43, 0, 4)>; /* IRQ4 */ }; &i2c3 { raa215300: pmic@12 { pinctrl-0 = <&pmic_pins>; pinctrl-names = "default"; compatible = "renesas,raa215300"; reg = <0x12>, <0x6f>; reg-names = "main", "rtc"; clocks = <&x2>; clock-names = "xin"; //interrupt-parent = <&pinctrl>; //interrupts = <RZG2L_GPIO(43, 0) IRQ_TYPE_EDGE_FALLING>; interrupt-parent = <&irqc>; interrupts = <RZG2L_IRQ4 IRQ_TYPE_EDGE_FALLING>; }; }; Cheers, Biju