On Fri, Aug 07, 2020 at 06:28:01PM +0200, Stephen Kitt wrote: > pmbus_do_probe doesn't use the id information provided in its second > argument, so this can be removed, which then allows using the > single-parameter i2c probe function ("probe_new") for probes. > > This avoids scanning the identifier tables during probes. > > Drivers which didn't use the id are converted as-is; drivers which did > are modified as follows: > > * if the information in i2c_client is sufficient, that's used instead > (client->name); > * configured v. probed comparisons are performed by comparing the > configured name to the detected name, instead of the ids; this > involves strcmp but is still cheaper than comparing all the device > names when scanning the tables; > * anything else is handled by calling i2c_match_id() with the same > level of error-handling (if any) as before. > > Signed-off-by: Stephen Kitt <steve@xxxxxxx> > --- > Changes since v1: > - i2c_device_id declarations are left unchanged; > - all drivers are converted, using client info or i2c_match_id(). > Changes since v2: > - updated the documentation; > - fixed unbalanced braces around the modified else in ibm-cffps.c. > [ ... ] > > -static int ltc2978_probe(struct i2c_client *client, > - const struct i2c_device_id *id) > +static int ltc2978_probe(struct i2c_client *client) > { > int i, chip_id; > struct ltc2978_data *data; > @@ -670,10 +669,10 @@ static int ltc2978_probe(struct i2c_client *client, > return chip_id; > > data->id = chip_id; > - if (data->id != id->driver_data) > + if (strcmp(client->name, ltc2978_id[data->id].name) != 0) I was about to apply this patch, but this is problematic: It assumes that __stringify(id) == ltc2978_id[id].name and that ltc2978_id[id].driver_data == id. While that is curently the case (as far as I can see), it is still unsafe. I think it would be much safer to use i2c_match_id() here. Thanks, Guenter