[PATCH v5 01/11] i2c: Enhance i2c_new_ancillary_device API

Laurent Pinchart laurent.pinchart at ideasonboard.com
Thu Jun 15 09:23:12 UTC 2023


On Thu, Jun 15, 2023 at 10:07:39AM +0200, Geert Uytterhoeven wrote:
> On Wed, Jun 14, 2023 at 9:53 AM Geert Uytterhoeven <geert at linux-m68k.org> wrote:
> > On Tue, Jun 13, 2023 at 6:11 PM Biju Das <biju.das.jz at bp.renesas.com> 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 at bp.renesas.com> 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 at kernel.org> 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...
> 
> So don't set info.of_node? ;-)
> 
> Without of_node, devm_clk_get() and friends falls back to registered
> clkdevs. So you could call clk_register_clkdev() from within the
> PMIC driver, and can keep on using devm_clk_get_optional() in the
> ISL1208 driver.

Seriously, how many hacks are we piling ? :-)

> If that fails, there's also software_node.properties, or even the good
> old platform_data...

-- 
Regards,

Laurent Pinchart


More information about the dri-devel mailing list