Commit 68e488d965a9055c63c0eac4ad1e6568b07e8ee1

Authored by Haojian Zhuang
Committed by Samuel Ortiz
1 parent e47a3bbe4f

mfd: Delay to mask tsc irq in max8925

There're two IRQ pins output from MAX8925. One is PMIC interrupt, the other
is TSC interrupt. But they're sharing one irq chip.

After initializing MAX8925 interrupts, unexpected TSC interrupt may occur and
it can't be cleared if touch driver isn't loaded.

Now move the operation of masking TSC interrupt behind requesting PMIC
interrupt. If touch driver isn't loaded, this interrupt is always masked.

Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

Showing 1 changed file with 5 additions and 2 deletions Side-by-side Diff

drivers/mfd/max8925-core.c
... ... @@ -508,7 +508,7 @@
508 508 max8925_reg_read(chip->i2c, MAX8925_ON_OFF_IRQ2);
509 509 max8925_reg_read(chip->rtc, MAX8925_RTC_IRQ);
510 510 max8925_reg_read(chip->adc, MAX8925_TSC_IRQ);
511   - /* mask all interrupts */
  511 + /* mask all interrupts except for TSC */
512 512 max8925_reg_write(chip->rtc, MAX8925_ALARM0_CNTL, 0);
513 513 max8925_reg_write(chip->rtc, MAX8925_ALARM1_CNTL, 0);
514 514 max8925_reg_write(chip->i2c, MAX8925_CHG_IRQ1_MASK, 0xff);
... ... @@ -516,7 +516,6 @@
516 516 max8925_reg_write(chip->i2c, MAX8925_ON_OFF_IRQ1_MASK, 0xff);
517 517 max8925_reg_write(chip->i2c, MAX8925_ON_OFF_IRQ2_MASK, 0xff);
518 518 max8925_reg_write(chip->rtc, MAX8925_RTC_IRQ_MASK, 0xff);
519   - max8925_reg_write(chip->adc, MAX8925_TSC_IRQ_MASK, 0xff);
520 519  
521 520 mutex_init(&chip->irq_lock);
522 521 chip->core_irq = irq;
523 522  
... ... @@ -547,7 +546,11 @@
547 546 dev_err(chip->dev, "Failed to request core IRQ: %d\n", ret);
548 547 chip->core_irq = 0;
549 548 }
  549 +
550 550 tsc_irq:
  551 + /* mask TSC interrupt */
  552 + max8925_reg_write(chip->adc, MAX8925_TSC_IRQ_MASK, 0x0f);
  553 +
551 554 if (!pdata->tsc_irq) {
552 555 dev_warn(chip->dev, "No interrupt support on TSC IRQ\n");
553 556 return 0;