aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c/i2c-boardinfo.c
diff options
context:
space:
mode:
authorRodolfo Giometti <giometti@linux.it>2009-06-19 16:58:20 +0200
committerJean Delvare <khali@linux-fr.org>2009-06-19 16:58:20 +0200
commitf18c41daea14baee11252da268cdf5dcd57c7c10 (patch)
treeec42ed7000fa64925db3cd596737bd54d9fa71ca /drivers/i2c/i2c-boardinfo.c
parenti2c: Add a sysfs interface to instantiate devices (diff)
downloadlinux-dev-f18c41daea14baee11252da268cdf5dcd57c7c10.tar.xz
linux-dev-f18c41daea14baee11252da268cdf5dcd57c7c10.zip
i2c: Use rwsem instead of mutex for board info
By using rwsem we can easily manage recursive calls of i2c_scan_static_board_info() function without breaking the locking. Signed-off-by: Rodolfo Giometti <giometti@linux.it> Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'drivers/i2c/i2c-boardinfo.c')
-rw-r--r--drivers/i2c/i2c-boardinfo.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/i2c/i2c-boardinfo.c b/drivers/i2c/i2c-boardinfo.c
index ffb35f09df03..a26a34a06641 100644
--- a/drivers/i2c/i2c-boardinfo.c
+++ b/drivers/i2c/i2c-boardinfo.c
@@ -18,6 +18,7 @@
#include <linux/kernel.h>
#include <linux/i2c.h>
+#include <linux/rwsem.h>
#include "i2c-core.h"
@@ -25,7 +26,7 @@
/* These symbols are exported ONLY FOR the i2c core.
* No other users will be supported.
*/
-DEFINE_MUTEX(__i2c_board_lock);
+DECLARE_RWSEM(__i2c_board_lock);
EXPORT_SYMBOL_GPL(__i2c_board_lock);
LIST_HEAD(__i2c_board_list);
@@ -63,7 +64,7 @@ i2c_register_board_info(int busnum,
{
int status;
- mutex_lock(&__i2c_board_lock);
+ down_write(&__i2c_board_lock);
/* dynamic bus numbers will be assigned after the last static one */
if (busnum >= __i2c_first_dynamic_bus_num)
@@ -84,7 +85,7 @@ i2c_register_board_info(int busnum,
list_add_tail(&devinfo->list, &__i2c_board_list);
}
- mutex_unlock(&__i2c_board_lock);
+ up_write(&__i2c_board_lock);
return status;
}