*****************************************************************************
  */
 
-static int m41t80_probe(struct i2c_client *client,
-                       const struct i2c_device_id *id)
+static int m41t80_probe(struct i2c_client *client)
 {
        struct i2c_adapter *adapter = client->adapter;
        int rc = 0;
                return -ENOMEM;
 
        m41t80_data->client = client;
-       if (client->dev.of_node)
+       if (client->dev.of_node) {
                m41t80_data->features = (unsigned long)
                        of_device_get_match_data(&client->dev);
-       else
+       } else {
+               const struct i2c_device_id *id = i2c_match_id(m41t80_id, client);
                m41t80_data->features = id->driver_data;
+       }
        i2c_set_clientdata(client, m41t80_data);
 
        m41t80_data->rtc =  devm_rtc_allocate_device(&client->dev);
                .of_match_table = of_match_ptr(m41t80_of_match),
                .pm = &m41t80_pm,
        },
-       .probe = m41t80_probe,
+       .probe_new = m41t80_probe,
        .remove = m41t80_remove,
        .id_table = m41t80_id,
 };