|
@@ -254,10 +254,12 @@ static int i2c_device_probe(struct device *dev)
|
|
|
client->flags & I2C_CLIENT_WAKE);
|
|
|
dev_dbg(dev, "probe\n");
|
|
|
|
|
|
+ acpi_dev_pm_attach(&client->dev, true);
|
|
|
status = driver->probe(client, i2c_match_id(driver->id_table, client));
|
|
|
if (status) {
|
|
|
client->driver = NULL;
|
|
|
i2c_set_clientdata(client, NULL);
|
|
|
+ acpi_dev_pm_detach(&client->dev, true);
|
|
|
}
|
|
|
return status;
|
|
|
}
|
|
@@ -283,6 +285,7 @@ static int i2c_device_remove(struct device *dev)
|
|
|
client->driver = NULL;
|
|
|
i2c_set_clientdata(client, NULL);
|
|
|
}
|
|
|
+ acpi_dev_pm_detach(&client->dev, true);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
@@ -1111,8 +1114,10 @@ static acpi_status acpi_i2c_add_device(acpi_handle handle, u32 level,
|
|
|
if (ret < 0 || !info.addr)
|
|
|
return AE_OK;
|
|
|
|
|
|
+ adev->power.flags.ignore_parent = true;
|
|
|
strlcpy(info.type, dev_name(&adev->dev), sizeof(info.type));
|
|
|
if (!i2c_new_device(adapter, &info)) {
|
|
|
+ adev->power.flags.ignore_parent = false;
|
|
|
dev_err(&adapter->dev,
|
|
|
"failed to add I2C device %s from ACPI\n",
|
|
|
dev_name(&adev->dev));
|