Hello Heiko, On Fri, Oct 13, 2023 at 01:28:47PM +0200, Heiko Schocher wrote: > [...] > > > > bootcount { > > compatible = "u-boot,bootcount-i2c"; > > i2c-bus = <&i2c1>; > > address = <0x52>; > > Hmm.. do we really need this here with DTS. Why not using a phandle > to a real i2c device? Something like this for example: > > i2cbcdev = &i2c_rtc; > > with > > &i2c1 { > i2c_rtc: rtc@68 { > [...] > > and so there is no need for knowing the bus and address ... >
Yeah I agree that would be much better, but ... > [...] > > when you use a phandle, you can replace the part from reading "offset" > with this: > > uclass_get_device_by_phandle(UCLASS_I2C, dev, "i2cbcdev", &priv->bcdev); > > of course plus error checking... This does not work, UCLASS_I2C is used for the *bus above* the device we actually want. Next thing I thougt about: Why not use the UCLASS_I2C_GENERIC. But this expects a "i2c-chip" compatible string, which our rtc or whatever device obviously does not have. I think using UCLASS_I2C_GENERIC might indeed be the best approach. Maybe using something like 'device_bind_driver()'. But again, this expects the parent device to be there already as far as I can tell. Any suggestions? Best regards, Philip > > > + > > + return 0; > > +} > > + > > +static const struct bootcount_ops bootcount_i2c_ops = { > > + .get = bootcount_i2c_get, > > + .set = bootcount_i2c_set, > > +}; > > + > > +static const struct udevice_id bootcount_i2c_ids[] = { > > + { .compatible = "u-boot,bootcount-i2c" }, > > + { } > > +}; > > + > > +U_BOOT_DRIVER(bootcount_i2c) = { > > + .name = "bootcount-i2c", > > + .id = UCLASS_BOOTCOUNT, > > + .priv_auto = sizeof(struct bootcount_i2c_priv), > > + .probe = bootcount_i2c_probe, > > + .of_match = bootcount_i2c_ids, > > + .ops = &bootcount_i2c_ops, > > +}; > > > > bye, > Heiko > -- > DENX Software Engineering GmbH, Managing Director: Erika Unter > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: +49-8142-66989-52 Fax: +49-8142-66989-80 Email: h...@denx.de