summaryrefslogtreecommitdiff
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
authormattis fjallstrom <mattis@acm.org>2015-04-06 15:04:23 -0700
committermattis fjallstrom <mattis@acm.org>2015-04-06 15:04:23 -0700
commit6386bda2371f64826dfd17eedae2b824fc0b8d95 (patch)
treee6969ba0a95f5b6daf36b6db98e7c5c9f2c62557 /arch/arm/mach-omap2
parent4db0b1e0d83be3f941605be7cb45d6b592d4554a (diff)
downloadolio-linux-3.10-6386bda2371f64826dfd17eedae2b824fc0b8d95.tar.xz
olio-linux-3.10-6386bda2371f64826dfd17eedae2b824fc0b8d95.zip
Disabling the accelerometer kernel interrupt handler. Adding voltagedomains.
Change-Id: I5e0c7cfeb36bb14c36ed6ea6e41b28536ff00a4c
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/board-omap3h1.c129
1 files changed, 111 insertions, 18 deletions
diff --git a/arch/arm/mach-omap2/board-omap3h1.c b/arch/arm/mach-omap2/board-omap3h1.c
index ef85cf0722f..9d0ab442fea 100644
--- a/arch/arm/mach-omap2/board-omap3h1.c
+++ b/arch/arm/mach-omap2/board-omap3h1.c
@@ -178,9 +178,9 @@ static int __init omap3h1_spi_init(void) {
static struct mpu_platform_data mpu_data = {
.int_config = 0x00,
.level_shifter = 1,
- .orientation = { -1, 0, 0,
- 0, 1, 0,
- 0, 0, -1 },
+ .orientation = { 0, 1, 0,
+ 1, 0, 0,
+ 0, 0, 1 },
};
static struct lm3530_platform_data omap3h1_backlight_platform_data = {
@@ -310,7 +310,7 @@ static struct regulator_init_data tps65910_dummy = {
/* --------------------------------------------------------------------------- */
static struct regulator_consumer_supply tps65910_touch3_supply[] = {
- REGULATOR_SUPPLY("avdd", "1-004a"),
+ REGULATOR_SUPPLY("avdd", "2-004a"),
};
static struct regulator_init_data tps65910_touch3 = {
@@ -318,8 +318,9 @@ static struct regulator_init_data tps65910_touch3 = {
.constraints = {
.min_uV = 3300000,
.max_uV = 3300000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_STATUS
+ | REGULATOR_CHANGE_MODE,
.always_on = true,
.apply_uV = true,
},
@@ -384,8 +385,8 @@ static struct regulator_init_data tps65910_1v8 = {
.constraints = {
.min_uV = 1800000,
.max_uV = 1800000,
- .valid_modes_mask = REGULATOR_MODE_NORMAL,
- .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+ .valid_modes_mask = REGULATOR_MODE_NORMAL | REGULATOR_MODE_STANDBY,
+ .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | REGULATOR_CHANGE_MODE,
.always_on = false,
.apply_uV = true,
},
@@ -416,7 +417,7 @@ static struct regulator_init_data tps65910_vpll = {
/* --------------------------------------------------------------------------- */
static struct regulator_consumer_supply tps65910_touch_supply[] = {
- REGULATOR_SUPPLY("vdd", "1-004a" ),
+ REGULATOR_SUPPLY("vdd", "2-004a" ),
};
static struct regulator_init_data tps65910_touch = {
@@ -528,6 +529,84 @@ static struct tps65910_board omap3h1_tps65910_pdata = {
.pm_off = true,
};
+
+/* ====================================================================== */
+/* Voltage domain settings */
+
+
+#define OMAP3_SRI2C_SLAVE_ADDR 0x12
+#define OMAP3_VDD_MPU_SR_CONTROL_REG 0x00
+#define OMAP3_VDD_CORE_SR_CONTROL_REG 0x01
+#define OMAP3_VP_CONFIG_ERROROFFSET 0x00
+#define OMAP3_VP_VSTEPMIN_VSTEPMIN 0x1
+#define OMAP3_VP_VSTEPMAX_VSTEPMAX 0x04
+#define OMAP3_VP_VLIMITTO_TIMEOUT_US 200
+
+
+static unsigned long olio_vsel_to_uv(const u8 vsel)
+{
+ return (((vsel * 125) + 6000)) * 100;
+}
+
+static u8 olio_uv_to_vsel(unsigned long uv)
+{
+ return DIV_ROUND_UP(uv - 600000, 12500);
+}
+
+
+static struct omap_voltdm_pmic omap3_mpu_pmic = {
+ .slew_rate = 4000,
+ .step_size = 12500,
+ .vp_erroroffset = OMAP3_VP_CONFIG_ERROROFFSET,
+ .vp_vstepmin = OMAP3_VP_VSTEPMIN_VSTEPMIN,
+ .vp_vstepmax = OMAP3_VP_VSTEPMAX_VSTEPMAX,
+ .vddmin = 900000,
+ .vddmax = 1350000,
+ .vp_timeout_us = OMAP3_VP_VLIMITTO_TIMEOUT_US,
+ .i2c_slave_addr = OMAP3_SRI2C_SLAVE_ADDR,
+ .volt_reg_addr = OMAP3_VDD_MPU_SR_CONTROL_REG,
+ .i2c_high_speed = true,
+ .vsel_to_uv = olio_vsel_to_uv,
+ .uv_to_vsel = olio_uv_to_vsel,
+};
+
+static struct omap_voltdm_pmic omap3_core_pmic = {
+ .slew_rate = 4000,
+ .step_size = 12500,
+ .vp_erroroffset = OMAP3_VP_CONFIG_ERROROFFSET,
+ .vp_vstepmin = OMAP3_VP_VSTEPMIN_VSTEPMIN,
+ .vp_vstepmax = OMAP3_VP_VSTEPMAX_VSTEPMAX,
+ .vddmin = 900000,
+ .vddmax = 1200000,
+ .vp_timeout_us = OMAP3_VP_VLIMITTO_TIMEOUT_US,
+ .i2c_slave_addr = OMAP3_SRI2C_SLAVE_ADDR,
+ .volt_reg_addr = OMAP3_VDD_CORE_SR_CONTROL_REG,
+ .i2c_high_speed = true,
+ .vsel_to_uv = olio_vsel_to_uv,
+ .uv_to_vsel = olio_uv_to_vsel,
+};
+
+int __init omap3_voltdm_init(void)
+{
+ struct voltagedomain *voltdm;
+
+ if (!cpu_is_omap34xx())
+ return -ENODEV;
+
+ voltdm = voltdm_lookup("mpu_iva");
+ omap_voltage_register_pmic(voltdm, &omap3_mpu_pmic);
+
+ voltdm = voltdm_lookup("core");
+ omap_voltage_register_pmic(voltdm, &omap3_core_pmic);
+
+ return 0;
+}
+
+
+
+/* ====================================================================== */
+
+
static struct i2c_board_info __initdata omap3h1_i2c1_board_info[] = {
{
I2C_BOARD_INFO("tps65910", 0x2d),
@@ -662,10 +741,12 @@ static const struct file_operations h1_fops = {
* mode stuff).
*/
-#define OLIO_DOUBLE_TAP 800
+#define OLIO_DOUBLE_TAP 500
#define OLIO_ONE_SECOND 1000
+#define OLIO_DT_WAIT 3000
static unsigned long previous;
+static unsigned long previous_double;
static irqreturn_t acc_irq_handler_thr(int irq, void * omap3h1_d) {
/* struct platform_device** omap3h1_devs = (struct platform_device **) omap3h1_d; */
@@ -678,7 +759,16 @@ static irqreturn_t acc_irq_handler_thr(int irq, void * omap3h1_d) {
now = jiffies;
if (jiffies_to_msecs(now - previous) < OLIO_DOUBLE_TAP) {
- printk (KERN_DEBUG "Double tap detected!\n");
+
+ /* ignore double clicks that happens too soon from the previous one */
+ if (jiffies_to_msecs (now - previous_double) < OLIO_DT_WAIT)
+ {
+ previous = 0;
+ return IRQ_HANDLED;
+ }
+
+ printk (KERN_DEBUG "Double tap detected!\n");
+
/* We want to wake up. Take wake lock (and send signal to user space?)
* BT driver only takes wake lock, then lets higher levels handle
* everything ... but what if there's nothing there to take the lock?
@@ -686,7 +776,8 @@ static irqreturn_t acc_irq_handler_thr(int irq, void * omap3h1_d) {
send_wake_signal();
wake_lock_timeout (&acc_wake.lock, msecs_to_jiffies (2 * OLIO_ONE_SECOND));
-
+
+ previous_double = now;
previous = 0;
} else {
previous = now;
@@ -739,8 +830,6 @@ static int __init omap3_h1_i2c_init(void)
gpio_request_one(ATMEL_MXT_GPIO, GPIOF_IN, "atmel_mxt_ts CHG");
gpio_request_one(MPUIRQ_GPIO, GPIOF_IN, "mpu6515 IRQ pin");
- gpio_request_one(ON_OFF_BUTTON_GPIO, GPIOF_OUT_INIT_LOW, "on-off button");
-
acc_irq = gpio_to_irq(MPUIRQ_GPIO);
#ifdef CONFIG_MACH_OMAP3_H1_DVT2
@@ -879,15 +968,19 @@ static void __init omap3_h1_init(void)
usb_bind_phy("musb-hdrc.0.auto", 0, "nop_usb_xceiv"); /* "tusb-usb-h1" */
usb_musb_init(&musb_board_data);
+ /* Set up the voltage domains */
+
+ omap3_voltdm_init();
+
/* For handling interrupts from the accelerometer */
- previous = jiffies;
-
+ /* previous = jiffies; */
+
/* Init the code that handles wake ups */
- omap3_wake_init();
+ /* omap3_wake_init(); */
- omap3_acc_irq_init(omap3h1_i2c2_board_info[0].irq, (void *) &omap3h1_devices);
+ /* omap3_acc_irq_init(omap3h1_i2c2_board_info[0].irq, (void *) &omap3h1_devices); */
}
MACHINE_START(OMAP3_H1, "Olio OMAP3 H1 Board")