On Thu, Oct 10, 2024 at 11:32 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > On Thu, Oct 10, 2024 at 06:29:44PM +0300, Andy Shevchenko wrote: > > On Tue, Oct 08, 2024 at 03:34:26PM +0800, Chen-Yu Tsai wrote: > > ... > > > > +static const struct chromeos_i2c_probe_data chromeos_i2c_probe_dumb_touchscreen = { > > > + .cfg = &(const struct i2c_of_probe_cfg) { > > > > Perhaps you can introduce something like > > > > #define DEFINE_I2C_OF_PROBE_CFG(_type_, _ops_) \ > > (struct ...) { \ > > .ops = _ops_, \ > > .type = #_type_, \ > > } > > > > and use it here as > > > > .cfg = DEFINE_I2C_OF_PROBE_CFG(touchscreen, NULL), > > > > > + .type = "touchscreen" > > > > Ditto. > > This was for leaving trailing comma. Ack. > > > + } > > > > Ditto. > > > > > +}; > > > + > > > +static const struct i2c_of_probe_cfg chromeos_i2c_probe_simple_trackpad_cfg = { > > > + .ops = &i2c_of_probe_simple_ops, > > > + .type = "trackpad" > > > > Leave a comma. Ack > > > +}; > > ... > > > > + .cfg = &chromeos_i2c_probe_simple_trackpad_cfg, > > > > .cfg = DEFINE_I2C_OF_PROBE_CFG(trackpad, i2c_of_probe_simple_ops), > > > > Or even > > > > #define DEFINE_I2C_OF_PROBE_CFG_SIMPLE(_type_) \ > > DEFINE_I2C_OF_PROBE_CFG(type, &i2c_of_probe_simple_ops) I'm not inclined on using compound literals here. "simple X cfg" will likely get shared between multiple |chromeos_i2c_probe_data| entries, and AFAIK the toolchain can't merge them. So we would end up with one compound literal per entry, even if their contents are the same. > With that also looking at the above > > #define DEFINE_I2C_OF_PROBE_CFG_NONE(_type_) \ > DEFINE_I2C_OF_PROBE_CFG(type, NULL) For the "dumb" case it makes sense though, since it would be one instance per type. But we could go further and just wrap the whole |chromeos_i2c_probe_data| declaration. ChenYu