Hi Bjorn, On 18/06/15 07:47, Bjorn Andersson wrote: > Implement irq_chip->irq_get_irqchip_state to make it possible for PMIC > block drivers to access the IRQ real time status bits. The status bits > are used for various kinds of input signals, e.g. GPIO. > > Signed-off-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxxxxxx> > --- > > This patch can be picked up independently of the rest of the series. > > drivers/mfd/pm8921-core.c | 43 +++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 43 insertions(+) > > diff --git a/drivers/mfd/pm8921-core.c b/drivers/mfd/pm8921-core.c > index 5a92646a2ccb..5f81ba0c50f5 100644 > --- a/drivers/mfd/pm8921-core.c > +++ b/drivers/mfd/pm8921-core.c > @@ -236,11 +236,54 @@ static int pm8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type) > return pm8xxx_config_irq(chip, block, config); > } > > +static int pm8xxx_irq_get_irqchip_state(struct irq_data *d, > + enum irqchip_irq_state which, > + bool *state) > +{ > + struct pm_irq_chip *chip = irq_data_get_irq_chip_data(d); > + unsigned int pmirq = irqd_to_hwirq(d); > + unsigned int bits; > + int irq_bit; > + u8 block; > + int rc; > + > + if (!chip) { > + pr_err("Failed to resolve pm_irq_chip\n"); > + return -EINVAL; > + } Why do you need to check this? Is there any code path that could actually trigger this? > + > + if (which != IRQCHIP_STATE_LINE_LEVEL) > + return -EINVAL; > + > + block = pmirq / 8; > + irq_bit = pmirq % 8; > + > + spin_lock(&chip->pm_irq_lock); > + rc = regmap_write(chip->regmap, SSBI_REG_ADDR_IRQ_BLK_SEL, block); > + if (rc) { > + pr_err("Failed Selecting Block %d rc=%d\n", block, rc); > + goto bail; > + } > + > + rc = regmap_read(chip->regmap, SSBI_REG_ADDR_IRQ_RT_STATUS, &bits); > + if (rc) { > + pr_err("Failed Reading Status rc=%d\n", rc); > + goto bail; > + } > + > + *state = !!(bits & BIT(irq_bit)); > +bail: > + spin_unlock(&chip->pm_irq_lock); > + > + return rc ? rc : 0; I think you can just have "return rc;" here. > +} > + > static struct irq_chip pm8xxx_irq_chip = { > .name = "pm8xxx", > .irq_mask_ack = pm8xxx_irq_mask_ack, > .irq_unmask = pm8xxx_irq_unmask, > .irq_set_type = pm8xxx_irq_set_type, > + .irq_get_irqchip_state = pm8xxx_irq_get_irqchip_state, > .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE, > }; > > Thanks, M. -- Jazz is not dead. It just smells funny... -- To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html