summaryrefslogtreecommitdiff
path: root/drivers/i2c/i2c-core.c
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2013-11-08 13:15:24 +1100
committerStephen Rothwell <sfr@canb.auug.org.au>2013-11-08 13:15:24 +1100
commit513e72b3ae0e7d35b09b72c360e548781b345fe7 (patch)
treeee7bc53b89969b94246a77d17b8d372b93ef8306 /drivers/i2c/i2c-core.c
parent212ba037f1d86c528ef194b996cd080867bb3704 (diff)
parent5f0c23f999b778d86468be51a89083f55afa0436 (diff)
Merge remote-tracking branch 'pm/linux-next'
Conflicts: arch/arm/mach-imx/mach-imx6q.c arch/arm/mach-omap2/opp.c drivers/Kconfig drivers/i2c/i2c-core.c
Diffstat (limited to 'drivers/i2c/i2c-core.c')
-rw-r--r--drivers/i2c/i2c-core.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c
index 111b2c6089e6..5923cfa390c8 100644
--- a/drivers/i2c/i2c-core.c
+++ b/drivers/i2c/i2c-core.c
@@ -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)
+ if (status) {
i2c_set_clientdata(client, NULL);
-
+ acpi_dev_pm_detach(&client->dev, true);
+ }
return status;
}
@@ -280,7 +282,7 @@ static int i2c_device_remove(struct device *dev)
}
if (status == 0)
i2c_set_clientdata(client, NULL);
-
+ acpi_dev_pm_detach(&client->dev, true);
return status;
}
@@ -1109,8 +1111,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));