Skip to content

Commit

Permalink
mfd/mc13783: new function reading irq mask and status register
Browse files Browse the repository at this point in the history
The driver for the mc13783 rtc needs to know if the TODA irq is pending.

Instead of tracking in the rtc driver if the irq is enabled provide that
information, too.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Paul Gortmaker <p_gortmaker@yahoo.com>
Cc: Valentin Longchamp <valentin.longchamp@epfl.ch>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Samuel Ortiz <sameo@linux.intel.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Luotao Fu <l.fu@pengutronix.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Uwe Kleine-König authored and Linus Torvalds committed Mar 6, 2010
1 parent 4dd4dd6 commit 86c3400
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 0 deletions.
35 changes: 35 additions & 0 deletions drivers/mfd/mc13783-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,41 @@ int mc13783_irq_unmask(struct mc13783 *mc13783, int irq)
}
EXPORT_SYMBOL(mc13783_irq_unmask);

int mc13783_irq_status(struct mc13783 *mc13783, int irq,
int *enabled, int *pending)
{
int ret;
unsigned int offmask = irq < 24 ? MC13783_IRQMASK0 : MC13783_IRQMASK1;
unsigned int offstat = irq < 24 ? MC13783_IRQSTAT0 : MC13783_IRQSTAT1;
u32 irqbit = 1 << (irq < 24 ? irq : irq - 24);

if (irq < 0 || irq >= MC13783_NUM_IRQ)
return -EINVAL;

if (enabled) {
u32 mask;

ret = mc13783_reg_read(mc13783, offmask, &mask);
if (ret)
return ret;

*enabled = mask & irqbit;
}

if (pending) {
u32 stat;

ret = mc13783_reg_read(mc13783, offstat, &stat);
if (ret)
return ret;

*pending = stat & irqbit;
}

return 0;
}
EXPORT_SYMBOL(mc13783_irq_status);

int mc13783_irq_ack(struct mc13783 *mc13783, int irq)
{
unsigned int offstat = irq < 24 ? MC13783_IRQSTAT0 : MC13783_IRQSTAT1;
Expand Down
2 changes: 2 additions & 0 deletions include/linux/mfd/mc13783.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ int mc13783_irq_free(struct mc13783 *mc13783, int irq, void *dev);

int mc13783_irq_mask(struct mc13783 *mc13783, int irq);
int mc13783_irq_unmask(struct mc13783 *mc13783, int irq);
int mc13783_irq_status(struct mc13783 *mc13783, int irq,
int *enabled, int *pending);
int mc13783_irq_ack(struct mc13783 *mc13783, int irq);

static inline int mc13783_mask(struct mc13783 *mc13783, int irq) __deprecated;
Expand Down

0 comments on commit 86c3400

Please sign in to comment.