Merge branches 'for-4.8/alps', 'for-4.8/apple', 'for-4.8/i2c-hid', 'for-4.8/uhid...
[sfrench/cifs-2.6.git] / drivers / hid / i2c-hid / i2c-hid.c
index 2e021ba8ff052eacdf1dda7bf68af24d9d628543..b3ec4f2de875e3e0e9626fd1296778089cb2b226 100644 (file)
@@ -1020,6 +1020,7 @@ static int i2c_hid_probe(struct i2c_client *client,
        pm_runtime_get_noresume(&client->dev);
        pm_runtime_set_active(&client->dev);
        pm_runtime_enable(&client->dev);
+       device_enable_async_suspend(&client->dev);
 
        ret = i2c_hid_fetch_hid_descriptor(ihid);
        if (ret < 0)
@@ -1106,6 +1107,14 @@ static int i2c_hid_remove(struct i2c_client *client)
        return 0;
 }
 
+static void i2c_hid_shutdown(struct i2c_client *client)
+{
+       struct i2c_hid *ihid = i2c_get_clientdata(client);
+
+       i2c_hid_set_power(client, I2C_HID_PWR_SLEEP);
+       free_irq(client->irq, ihid);
+}
+
 #ifdef CONFIG_PM_SLEEP
 static int i2c_hid_suspend(struct device *dev)
 {
@@ -1230,7 +1239,7 @@ static struct i2c_driver i2c_hid_driver = {
 
        .probe          = i2c_hid_probe,
        .remove         = i2c_hid_remove,
-
+       .shutdown       = i2c_hid_shutdown,
        .id_table       = i2c_hid_id_table,
 };