diff options
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/omap-usb-host.c | 3 | ||||
-rw-r--r-- | drivers/mfd/twl6030-irq.c | 14 | ||||
-rw-r--r-- | drivers/mfd/twl6030-madc.c | 7 | ||||
-rw-r--r-- | drivers/mfd/twl6040-codec.c | 2 |
4 files changed, 23 insertions, 3 deletions
diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index 212a338..130d950 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -762,7 +762,8 @@ static void omap_usbhs_init(struct device *dev) reg |= (OMAP_UHH_HOSTCONFIG_INCR4_BURST_EN | OMAP_UHH_HOSTCONFIG_INCR8_BURST_EN | OMAP_UHH_HOSTCONFIG_INCR16_BURST_EN); - reg |= OMAP4_UHH_HOSTCONFIG_APP_START_CLK; + + /* Keep ENA_INCR_ALIGN = 0: Known to cause OCP delays */ reg &= ~OMAP_UHH_HOSTCONFIG_INCRX_ALIGN_EN; if (is_omap_usbhs_rev1(omap)) { diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c index fa18b02..4466fad 100644 --- a/drivers/mfd/twl6030-irq.c +++ b/drivers/mfd/twl6030-irq.c @@ -92,6 +92,8 @@ static struct task_struct *task; static struct completion irq_event; static atomic_t twl6030_wakeirqs = ATOMIC_INIT(0); +static u8 vbatmin_hi_threshold; + static int twl6030_irq_pm_notifier(struct notifier_block *notifier, unsigned long pm_event, void *unused) { @@ -232,8 +234,15 @@ static irqreturn_t handle_twl6030_pih(int irq, void *devid) */ static irqreturn_t handle_twl6030_vlow(int irq, void *unused) { - pr_info("handle_twl6030_vlow: kernel_power_off()\n"); + pr_err("twl6030: BAT_VLOW interrupt; threshold=%dmV\n", + 2300 + (vbatmin_hi_threshold - 0b110) * 50); + +#if 1 /* temporary */ + WARN_ON_ONCE(1); +#else + pr_emerg("handle_twl6030_vlow: kernel_power_off()\n"); kernel_power_off(); +#endif return IRQ_HANDLED; } @@ -416,6 +425,9 @@ int twl6030_vlow_init(int vlow_irq) return status; } + twl_i2c_read_u8(TWL_MODULE_PM_MASTER, &vbatmin_hi_threshold, + TWL6030_VBATMIN_HI_THRESHOLD); + /* install an irq handler for vlow */ status = request_threaded_irq(vlow_irq, NULL, handle_twl6030_vlow, IRQF_ONESHOT, diff --git a/drivers/mfd/twl6030-madc.c b/drivers/mfd/twl6030-madc.c index f537ba5..ebff3d7 100644 --- a/drivers/mfd/twl6030-madc.c +++ b/drivers/mfd/twl6030-madc.c @@ -264,6 +264,13 @@ static int __devinit twl6030_madc_probe(struct platform_device *pdev) madc, DEBUG_FOPS); wake_lock_init(&madc->wakelock, WAKE_LOCK_SUSPEND, "twl6030 adc"); twl6030_madc = madc; + + if (twl_i2c_write_u8(TWL_MODULE_MADC, TWL6030_MADC_TEMP1_EN | + TWL6030_MADC_SCALER_EN_CH2, + TWL6030_MADC_CTRL)) + dev_err(twl6030_madc->dev, "unable to write to register 0x%X\n", + TWL6030_MADC_CTRL); + return 0; } diff --git a/drivers/mfd/twl6040-codec.c b/drivers/mfd/twl6040-codec.c index 4633d70..68dec57 100644 --- a/drivers/mfd/twl6040-codec.c +++ b/drivers/mfd/twl6040-codec.c @@ -329,7 +329,7 @@ static int twl6040_power_up_completion(struct twl6040 *twl6040, do { gpio_set_value(twl6040->audpwron, 1); time_left = wait_for_completion_timeout(&twl6040->ready, - msecs_to_jiffies(144)); + msecs_to_jiffies(700)); if (!time_left) { intid = twl6040_reg_read(twl6040, TWL6040_REG_INTID); if (!(intid & TWL6040_READYINT)) { |