so, 2. úno 2019 7:09 odesílatel Simon Glass <s...@chromium.org> napsal:
> Hi Michal, > > On Thu, 31 Jan 2019 at 04:03, Michal Simek <michal.si...@xilinx.com> > wrote: > > > > On 31. 01. 19 11:04, Simon Glass wrote: > > > Hi Michal, > > > > > > On Fri, 18 Jan 2019 at 08:13, Michal Simek <michal.si...@xilinx.com> > wrote: > > >> > > >> There is a need to find out the first free i2c ID which can be used > for > > >> i2s buses (including i2c buses connected to i2c mux). Do it early in > > >> init and share this variable with other i2c classes for uniq bus > > >> identification. > > >> > > >> Signed-off-by: Michal Simek <michal.si...@xilinx.com> > > >> --- > > >> > > >> drivers/i2c/i2c-uclass.c | 19 +++++++++++++++++++ > > >> include/i2c.h | 3 +++ > > >> 2 files changed, 22 insertions(+) > > >> > > >> diff --git a/drivers/i2c/i2c-uclass.c b/drivers/i2c/i2c-uclass.c > > >> index 975318e5f254..aaece115f02f 100644 > > >> --- a/drivers/i2c/i2c-uclass.c > > >> +++ b/drivers/i2c/i2c-uclass.c > > >> @@ -23,6 +23,8 @@ enum { > > >> PIN_COUNT, > > >> }; > > >> > > >> +int i2c_highest_id = -1; > > >> + > > >> /* Useful debugging function */ > > >> void i2c_dump_msgs(struct i2c_msg *msg, int nmsgs) > > >> { > > >> @@ -619,10 +621,27 @@ static int i2c_child_post_bind(struct udevice > *dev) > > >> #endif > > >> } > > >> > > >> +int i2c_uclass_init(struct uclass *class) > > >> +{ > > >> +#ifdef CONFIG_OF_LIVE > > >> + int ret; > > >> + > > >> + ret = of_alias_get_highest_id("i2c"); > > >> + if (ret >= 0) > > >> + i2c_highest_id = ret; > > >> +#else > > >> + i2c_highest_id = fdtdec_get_alias_highest_id(gd->fdt_blob, > "i2c"); > > >> +#endif > > > > > > This should call dev_read_alias_highest_id() or similar, which does > > > the logic you have here. > > > > not a problem with this. > > > > > > > >> + debug("%s: i2c highest_id %d\n", __func__, i2c_highest_id); > > >> + > > >> + return 0; > > >> +} > > >> + > > >> UCLASS_DRIVER(i2c) = { > > >> .id = UCLASS_I2C, > > >> .name = "i2c", > > >> .flags = DM_UC_FLAG_SEQ_ALIAS, > > >> + .init = i2c_uclass_init, > > >> #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) > > >> .post_bind = dm_scan_fdt_dev, > > >> #endif > > >> diff --git a/include/i2c.h b/include/i2c.h > > >> index ccffc1955275..c69e26deaeed 100644 > > >> --- a/include/i2c.h > > >> +++ b/include/i2c.h > > >> @@ -16,6 +16,9 @@ > > >> #ifndef _I2C_H_ > > >> #define _I2C_H_ > > >> > > >> +/* Stores maximum highest i2c alias number */ > > >> +extern int i2c_highest_id; > > > > > > This should be in uclass-private data, not a global. > > > > In this case there are two uclasses. UCLASS_I2C and UCLASS_I2C_MUX which > > has to share the same numbers. I would expect that private data will be > > private just for one not for both. > > Reading > > Hmm I hadn't realised that. Perhaps you can wrap it in a function which > looks up the I2C uclass and the private data. We should try to avoid using > BSS so that I2C can be used before relocation, etc. > I was wrong on this one. Také a look at v2. M > > > > > > > > But also I feel that the behaviour needs to be consistent for all > > > U-Boot buses, not just I2C. So can we modify the existing core DM code > > > instead? I think a change to uclass_resolve_seq() might be enough. > > > > I need to check calling sequence to see if this is properly timed or not. > > OK. > > Regards, > Simon > _______________________________________________ > U-Boot mailing list > U-Boot@lists.denx.de > https://lists.denx.de/listinfo/u-boot > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot