summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShubhrajyoti D <shubhrajyoti@ti.com>2012-05-15 16:28:16 -0500
committerDan Murphy <dmurphy@ti.com>2012-05-16 15:08:43 -0500
commit7e4f5fe3b79384de6c4071e715346e4e78ab64c8 (patch)
treeb1d94869e800c8223bbbb36a687065da609d394f
parentf1cd53a793240394734fc27387aa7215950b4d71 (diff)
OMAP5: sEVM board file: Add I2C hwspinlock supportconn_k34_rc7
Adding support for hwspinlock in I2C driver in OMAP5 board file Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com> Signed-off-by: Huzefa Kankroliwala <huzefank@ti.com>
-rw-r--r--arch/arm/mach-omap2/board-omap5evm.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/board-omap5evm.c b/arch/arm/mach-omap2/board-omap5evm.c
index b1cb70cfcb7..d9b6bfc8b2f 100644
--- a/arch/arm/mach-omap2/board-omap5evm.c
+++ b/arch/arm/mach-omap2/board-omap5evm.c
@@ -17,6 +17,7 @@
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/input.h>
+#include <linux/hwspinlock.h>
#include <linux/input/matrix_keypad.h>
#include <linux/platform_data/omap4-keypad.h>
@@ -161,8 +162,43 @@ static struct omap2_hsmmc_info mmc[] = {
{} /* Terminator */
};
+static struct omap_i2c_bus_board_data __initdata omap5_i2c_1_bus_pdata;
+static struct omap_i2c_bus_board_data __initdata omap5_i2c_2_bus_pdata;
+static struct omap_i2c_bus_board_data __initdata omap5_i2c_3_bus_pdata;
+static struct omap_i2c_bus_board_data __initdata omap5_i2c_4_bus_pdata;
+static struct omap_i2c_bus_board_data __initdata omap5_i2c_5_bus_pdata;
+
+static void __init omap_i2c_hwspinlock_init(int bus_id, int spinlock_id,
+ struct omap_i2c_bus_board_data *pdata)
+{
+ /* spinlock_id should be -1 for a generic lock request */
+ if (spinlock_id < 0)
+ pdata->handle = hwspin_lock_request();
+ else
+ pdata->handle = hwspin_lock_request_specific(spinlock_id);
+
+ if (pdata->handle != NULL) {
+ pdata->hwspin_lock_timeout = hwspin_lock_timeout;
+ pdata->hwspin_unlock = hwspin_unlock;
+ } else
+ pr_err("I2C hwspinlock request failed for bus %d\n", bus_id);
+}
+
static int __init omap_5430evm_i2c_init(void)
{
+
+ omap_i2c_hwspinlock_init(1, 0, &omap5_i2c_1_bus_pdata);
+ omap_i2c_hwspinlock_init(2, 1, &omap5_i2c_2_bus_pdata);
+ omap_i2c_hwspinlock_init(3, 2, &omap5_i2c_3_bus_pdata);
+ omap_i2c_hwspinlock_init(4, 3, &omap5_i2c_4_bus_pdata);
+ omap_i2c_hwspinlock_init(5, 4, &omap5_i2c_5_bus_pdata);
+
+ omap_register_i2c_bus_board_data(1, &omap5_i2c_1_bus_pdata);
+ omap_register_i2c_bus_board_data(2, &omap5_i2c_2_bus_pdata);
+ omap_register_i2c_bus_board_data(3, &omap5_i2c_3_bus_pdata);
+ omap_register_i2c_bus_board_data(4, &omap5_i2c_4_bus_pdata);
+ omap_register_i2c_bus_board_data(5, &omap5_i2c_5_bus_pdata);
+
omap_register_i2c_bus(1, 400, NULL, 0);
omap_register_i2c_bus(2, 400, NULL, 0);
omap_register_i2c_bus(3, 400, NULL, 0);