[PATCH 1/1] mfd: delay to mask tsc irq in max8925
Haojian Zhuang
haojian.zhuang at gmail.com
Wed May 5 22:20:47 EDT 2010
On Wed, Apr 28, 2010 at 8:55 AM, Haojian Zhuang
<haojian.zhuang at gmail.com> wrote:
> From 07243e51659a11946a149a5f4a74322cfd840c35 Mon Sep 17 00:00:00 2001
> From: Haojian Zhuang <haojian.zhuang at marvell.com>
> Date: Tue, 27 Apr 2010 14:55:28 -0400
> Subject: [PATCH] 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 at marvell.com>
> ---
> drivers/mfd/max8925-core.c | 7 +++++--
> 1 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/mfd/max8925-core.c b/drivers/mfd/max8925-core.c
> index 85d63c0..f621bce 100644
> --- a/drivers/mfd/max8925-core.c
> +++ b/drivers/mfd/max8925-core.c
> @@ -508,7 +508,7 @@ static int max8925_irq_init(struct max8925_chip
> *chip, int irq,
> max8925_reg_read(chip->i2c, MAX8925_ON_OFF_IRQ2);
> max8925_reg_read(chip->rtc, MAX8925_RTC_IRQ);
> max8925_reg_read(chip->adc, MAX8925_TSC_IRQ);
> - /* mask all interrupts */
> + /* mask all interrupts except for TSC */
> max8925_reg_write(chip->rtc, MAX8925_ALARM0_CNTL, 0);
> max8925_reg_write(chip->rtc, MAX8925_ALARM1_CNTL, 0);
> max8925_reg_write(chip->i2c, MAX8925_CHG_IRQ1_MASK, 0xff);
> @@ -516,7 +516,6 @@ static int max8925_irq_init(struct max8925_chip
> *chip, int irq,
> max8925_reg_write(chip->i2c, MAX8925_ON_OFF_IRQ1_MASK, 0xff);
> max8925_reg_write(chip->i2c, MAX8925_ON_OFF_IRQ2_MASK, 0xff);
> max8925_reg_write(chip->rtc, MAX8925_RTC_IRQ_MASK, 0xff);
> - max8925_reg_write(chip->adc, MAX8925_TSC_IRQ_MASK, 0xff);
>
> mutex_init(&chip->irq_lock);
> chip->core_irq = irq;
> @@ -547,7 +546,11 @@ static int max8925_irq_init(struct max8925_chip
> *chip, int irq,
> dev_err(chip->dev, "Failed to request core IRQ: %d\n", ret);
> chip->core_irq = 0;
> }
> +
> tsc_irq:
> + /* mask TSC interrupt */
> + max8925_reg_write(chip->adc, MAX8925_TSC_IRQ_MASK, 0x0f);
> +
> if (!pdata->tsc_irq) {
> dev_warn(chip->dev, "No interrupt support on TSC IRQ\n");
> return 0;
> --
> 1.5.6.5
>
Hi Samuel,
Do you have any comments on this patch?
Thanks
Haojian
More information about the linux-arm-kernel
mailing list