summaryrefslogtreecommitdiff
path: root/drivers/input/misc
diff options
context:
space:
mode:
authorJajambo Liao <jajambol@nvidia.com>2014-04-11 14:07:36 +0800
committerSeema Khowala <seemaj@nvidia.com>2014-04-23 14:05:05 -0700
commit2a2f17a4f8a7fc89be039364be1f259ec7a6ef39 (patch)
tree69f057c25797496bb20e5d0cc4a86cd13cd464aa /drivers/input/misc
parent1e8fba4807107ccc5a23580e632e3ff95f588fdb (diff)
input: misc: mpu: release resource in nvi_remove
bug 1495086 We shouldn't release resource in nvi_shutdown, move it into nvi_remove. Change-Id: I260b90bb7fb60d04c06d08375a8e1624374a1340 Signed-off-by: Jajambo Liao <jajambol@nvidia.com> Reviewed-on: http://git-master/r/395038 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Robert Collins <rcollins@nvidia.com> Reviewed-by: Erik Lilliebjerg <elilliebjerg@nvidia.com> Reviewed-by: Jordan Nien <jnien@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/input/misc')
-rw-r--r--drivers/input/misc/mpu/inv_gyro.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/input/misc/mpu/inv_gyro.c b/drivers/input/misc/mpu/inv_gyro.c
index af17c15844cc..e86d1e4cfd7d 100644
--- a/drivers/input/misc/mpu/inv_gyro.c
+++ b/drivers/input/misc/mpu/inv_gyro.c
@@ -4561,14 +4561,8 @@ static void nvi_shutdown(struct i2c_client *client)
}
}
inf->shutdown = true;
- if (inf->inv_dev)
- remove_sysfs_interfaces(inf);
free_irq(client->irq, inf);
mutex_unlock(&inf->mutex);
- if (inf->idev)
- input_unregister_device(inf->idev);
- if ((INV_ITG3500 != inf->chip_type) && (inf->idev_dmp))
- input_unregister_device(inf->idev_dmp);
}
static int nvi_remove(struct i2c_client *client)
@@ -4578,6 +4572,14 @@ static int nvi_remove(struct i2c_client *client)
nvi_shutdown(client);
inf = i2c_get_clientdata(client);
if (inf != NULL) {
+ mutex_lock(&inf->mutex);
+ if (inf->inv_dev)
+ remove_sysfs_interfaces(inf);
+ mutex_unlock(&inf->mutex);
+ if (inf->idev)
+ input_unregister_device(inf->idev);
+ if ((INV_ITG3500 != inf->chip_type) && (inf->idev_dmp))
+ input_unregister_device(inf->idev_dmp);
nvi_pm_exit(inf);
kfifo_free(&inf->trigger.timestamps);
kfree(inf);