Hi Michal, On Tue, Jan 3, 2017 at 1:22 AM, Michal Simek <michal.si...@xilinx.com> wrote: > On 2.1.2017 20:20, Moritz Fischer wrote: >> Hi Michal, >> >> On Mon, Jan 2, 2017 at 6:24 AM, Michal Simek <michal.si...@xilinx.com> wrote: >>> On 29.12.2016 23:50, Moritz Fischer wrote: >>>> For mux check if the parent is already a device of UCLASS_I2C and if yes >>>> just use that. Otherwise see if someone specified an i2c-parent phandle. >>>> This mimics the behavior found in the Kernel, as it removes the >>>> requirement to explicitly specify a i2c-parent phandle. >>>> >>>> Signed-off-by: Moritz Fischer <moritz.fisc...@ettus.com> >>>> Cc: Heiko Schocher <h...@denx.de> >>>> Cc: Bin Meng <bmeng...@gmail.com> >>>> Cc: Simon Glass <s...@chromium.org> >>>> Cc: Michal Simek <michal.si...@xilinx.com> >>>> Cc: u-boot@lists.denx.de >>>> --- >>>> drivers/i2c/muxes/i2c-mux-uclass.c | 9 +++++++++ >>>> 1 file changed, 9 insertions(+) >>>> >>>> diff --git a/drivers/i2c/muxes/i2c-mux-uclass.c >>>> b/drivers/i2c/muxes/i2c-mux-uclass.c >>>> index 7a698b6..e01b773 100644 >>>> --- a/drivers/i2c/muxes/i2c-mux-uclass.c >>>> +++ b/drivers/i2c/muxes/i2c-mux-uclass.c >>>> @@ -86,6 +86,15 @@ static int i2c_mux_post_probe(struct udevice *mux) >>>> debug("%s: %s\n", __func__, mux->name); >>>> priv->selected = -1; >>>> >>>> + /* if parent is of i2c uclass already, we'll take that, otherwise >>>> + * look if we find an i2c-parent phandle */ >>> >>> Incorrect comment style. >> >> Yeah, wasn't flagged by checkpatch .... will fix. >>> >>>> + if (UCLASS_I2C == device_get_uclass_id(mux->parent)) { >>>> + priv->i2c_bus = dev_get_parent(mux); >>>> + debug("%s: bus=%p/%s\n", __func__, priv->i2c_bus, >>>> + priv->i2c_bus->name); >>>> + return 0; >>>> + } >>>> + >>>> ret = uclass_get_device_by_phandle(UCLASS_I2C, mux, "i2c-parent", >>>> &priv->i2c_bus); >>>> if (ret) >>>> >>> >>> The part of this will be good to also handle >>> req_seq for mux busses. But at least this should solved part of the >>> problems. >> >> I'm not sure I understand this comment. > > AFAIK using i2c muxes requires two changes in DTS file. > First change is this to setup i2c-parent in DTS file which is something > what Linux doesn't need.
Yeah this part is addressed in this patch. > The next change is that you have to extend i2c aliases to point to i2c > mux sub busses which is the second thing what Linux doesn't need. > I expect that this change you have in your dts file. Yeah, thanks for clarifying. In my dts I have aliases for each of the mux channels, which, I don't have a good idea on how to solve differently. In Linux I think I don't need that. > I think that if you detect mux with 8 ports you can simply use unique > busid to be able to address them. In Linux? I'll have to take another look at that. Currently I get busses like 700,701,702 etc (which are aliases I defined). Each of them points to a mux channel. <snip> aliases { ... i2c0 = &i2c0; i2c0700 = &i2c0_70_0; i2c0701 = &i2c0_70_1; i2c0702 = &i2c0_70_2; i2c0703 = &i2c0_70_3; }; ... i2cswitch@70 { compatible = "ti,pca9548", "nxp,pca9548"; #address-cells = <1>; #size-cells = <0>; reg = <0x70>; status = "okay"; i2c0_70_0: i2c@0 { reg = <0x0>; #address-cells = <1>; #size-cells = <0>; status = "okay"; }; ... }; </snip> I Will resubmit a v2 for the other changes above If you or Simon have ideas on how to correctly solve the alias issue, I can take another stab at that. Thanks, Moritz _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot