Hi, On Wed, May 20, 2020 at 10:45:19AM -0700, Dmitry Torokhov wrote: > Hi Sebastian, > > On Wed, May 20, 2020 at 05:39:34PM +0200, Sebastian Reichel wrote: > > > > data->client = client; > > + data->info = device_get_match_data(&client->dev); The above is for DT (and ACPI, but driver has no ACPI table). > > + if (!data->info) { > > + enum eeti_dev_id eeti_dev_id = > > + i2c_match_id(exc3000_id, client)->driver_data; > > I believe i2c devices can be instantiated via sysfs, so I think we > better handle case where we can't find matching id. Also driver_data is > enough to store a pointer, maybe we can have individual structures > instead of using an array and indexing here? The above code is only for exactly this usecase (loading via sysfs). There is zero chance, that we cannot find matching id. The sysfs based probing works by providing the device address and the name listed in driver's id_table. I took the above code style from drivers/i2c/muxes/i2c-mux-ltc4306.c. We can store the pointer directly in i2c_device_id's driver_data field, but that requires two type casts (field is ulong instead of pointer). The array variant feels a bit cleaner to me. -- Sebastian
Attachment:
signature.asc
Description: PGP signature