|
@@ -593,6 +593,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|
|
struct at24_data *at24;
|
|
|
int err;
|
|
|
unsigned i, num_addresses;
|
|
|
+ u8 test_byte;
|
|
|
|
|
|
if (client->dev.platform_data) {
|
|
|
chip = *(struct at24_platform_data *)client->dev.platform_data;
|
|
@@ -743,6 +744,18 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ i2c_set_clientdata(client, at24);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Perform a one-byte test read to verify that the
|
|
|
+ * chip is functional.
|
|
|
+ */
|
|
|
+ err = at24_read(at24, 0, &test_byte, 1);
|
|
|
+ if (err) {
|
|
|
+ err = -ENODEV;
|
|
|
+ goto err_clients;
|
|
|
+ }
|
|
|
+
|
|
|
at24->nvmem_config.name = dev_name(&client->dev);
|
|
|
at24->nvmem_config.dev = &client->dev;
|
|
|
at24->nvmem_config.read_only = !writable;
|
|
@@ -764,8 +777,6 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
|
|
|
goto err_clients;
|
|
|
}
|
|
|
|
|
|
- i2c_set_clientdata(client, at24);
|
|
|
-
|
|
|
dev_info(&client->dev, "%u byte %s EEPROM, %s, %u bytes/write\n",
|
|
|
chip.byte_len, client->name,
|
|
|
writable ? "writable" : "read-only", at24->write_max);
|