.is_visible = max16065_secondary_is_visible,
 };
 
-static const struct i2c_device_id max16065_id[];
-
 static int max16065_probe(struct i2c_client *client)
 {
        struct i2c_adapter *adapter = client->adapter;
        bool have_secondary;            /* true if chip has secondary limits */
        bool secondary_is_max = false;  /* secondary limits reflect max */
        int groups = 0;
-       const struct i2c_device_id *id = i2c_match_id(max16065_id, client);
+       enum chips chip = (uintptr_t)i2c_get_match_data(client);
 
        if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA
                                     | I2C_FUNC_SMBUS_READ_WORD_DATA))
        data->client = client;
        mutex_init(&data->update_lock);
 
-       data->num_adc = max16065_num_adc[id->driver_data];
-       data->have_current = max16065_have_current[id->driver_data];
-       have_secondary = max16065_have_secondary[id->driver_data];
+       data->num_adc = max16065_num_adc[chip];
+       data->have_current = max16065_have_current[chip];
+       have_secondary = max16065_have_secondary[chip];
 
        if (have_secondary) {
                val = i2c_smbus_read_byte_data(client, MAX16065_SW_ENABLE);