|
@@ -233,6 +233,7 @@ static int __devexit pismo_remove(struct i2c_client *client)
|
|
|
/* FIXME: set_vpp needs saner arguments */
|
|
|
pismo_setvpp_remove_fix(pismo);
|
|
|
|
|
|
+ i2c_set_clientdata(client, NULL);
|
|
|
kfree(pismo);
|
|
|
|
|
|
return 0;
|
|
@@ -271,7 +272,7 @@ static int __devinit pismo_probe(struct i2c_client *client,
|
|
|
ret = pismo_eeprom_read(client, &eeprom, 0, sizeof(eeprom));
|
|
|
if (ret < 0) {
|
|
|
dev_err(&client->dev, "error reading EEPROM: %d\n", ret);
|
|
|
- return ret;
|
|
|
+ goto exit_free;
|
|
|
}
|
|
|
|
|
|
dev_info(&client->dev, "%.15s board found\n", eeprom.board);
|
|
@@ -282,6 +283,11 @@ static int __devinit pismo_probe(struct i2c_client *client,
|
|
|
pdata->cs_addrs[i]);
|
|
|
|
|
|
return 0;
|
|
|
+
|
|
|
+ exit_free:
|
|
|
+ i2c_set_clientdata(client, NULL);
|
|
|
+ kfree(pismo);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static const struct i2c_device_id pismo_id[] = {
|