aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd')
-rw-r--r--drivers/mfd/omap-usb-host.c3
-rw-r--r--drivers/mfd/twl6030-irq.c14
-rw-r--r--drivers/mfd/twl6030-madc.c7
-rw-r--r--drivers/mfd/twl6040-codec.c2
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)) {