On Sun, Aug 20, 2023 at 07:44:00PM +0100, Biju Das wrote: > Convert enum->pointer for data in the match tables, so that > device_get_match_data() can do match against OF/ACPI/I2C tables, once i2c > bus type match support added to it and it returns NULL for non-match. > > Therefore it is better to convert enum->pointer for data match and extend > match support for both ID and OF tables by using i2c_get_match_data() by > adding struct rt1711h_chip_info with did variable and replacing did->info > in struct rt1711h_chip. Later patches will add more hw differences to > struct rt1711h_chip_info and avoid checking did for HW differences. ... > +struct rt1711h_chip_info { > + u16 did; > +}; > + > struct rt1711h_chip { > struct tcpci_data data; > struct tcpci *tcpci; > struct device *dev; > struct regulator *vbus; > bool src_en; > - u16 did; > + const struct rt1711h_chip_info *info; Have you run pahole? I believe now you wasting a few more bytes (besides the pointer requirement) due to (mis)placing a new member. > }; ... For all your work likes this as I noted in the reply to Guenter that the couple of the selling points here are: 1) avoidance of the pointer abuse in OF table (we need that to be a valid pointer); 2) preservation of the const qualifier (despite kernel_ulong_t being used in the middle). With that added I believe you can sell this much more easier. -- With Best Regards, Andy Shevchenko