diff options
author | Shubhrajyoti D <shubhrajyoti@ti.com> | 2012-05-15 16:28:16 -0500 |
---|---|---|
committer | Dan Murphy <dmurphy@ti.com> | 2012-05-16 15:08:43 -0500 |
commit | 7e4f5fe3b79384de6c4071e715346e4e78ab64c8 (patch) | |
tree | b1d94869e800c8223bbbb36a687065da609d394f | |
parent | f1cd53a793240394734fc27387aa7215950b4d71 (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.c | 36 |
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); |