summaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.24/1275-lis302dl-allow-unloading-module.patch.patch
blob: fb7d233976e784e8b534657f4ae758466a52f5a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
From 399efd68e115b6548fe943a7a9fbf04753970e61 Mon Sep 17 00:00:00 2001
From: Simon Kagstrom <simon.kagstrom@gmail.com>
Date: Wed, 13 Aug 2008 11:27:11 +0100
Subject: [PATCH] lis302dl-allow-unloading-module.patch

This patch fixes module unloading for the accelerometer (actually module
loading failed before). The two problems were that the interrupt was not
unregistered, and that the device was left in a "strange" state.

Signed-off-by: Simon Kagstrom <simon.kagstrom@gmail.com>
---
 drivers/input/misc/lis302dl.c |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/drivers/input/misc/lis302dl.c b/drivers/input/misc/lis302dl.c
index de8478d..b97cae7 100644
--- a/drivers/input/misc/lis302dl.c
+++ b/drivers/input/misc/lis302dl.c
@@ -462,11 +462,15 @@ static int __devexit lis302dl_remove(struct spi_device *spi)
 	struct lis302dl_info *lis = dev_get_drvdata(&spi->dev);
 	unsigned long flags;
 
-	/* power down the device */
+	/* Reset and power down the device */
 	local_save_flags(flags);
+	reg_write(lis, LIS302DL_REG_CTRL3, 0x00);
+	reg_write(lis, LIS302DL_REG_CTRL2, 0x00);
 	reg_write(lis, LIS302DL_REG_CTRL1, 0x00);
 	local_irq_restore(flags);
 
+	/* Cleanup resources */
+	free_irq(lis->spi_dev->irq, lis);
 	sysfs_remove_group(&spi->dev.kobj, &lis302dl_attr_group);
 	input_unregister_device(lis->input_dev);
 	if (lis->input_dev)
-- 
1.5.6.5