From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lee Jones Subject: Re: [PATCH v2 7/8] mfd: pm8921: Implement irq_get_irqchip_state Date: Thu, 23 Jul 2015 15:47:21 +0100 Message-ID: <20150723144721.GG3436@x1> References: <1436942435-25611-1-git-send-email-bjorn.andersson@sonymobile.com> <1436942435-25611-2-git-send-email-bjorn.andersson@sonymobile.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: Received: from mail-wi0-f174.google.com ([209.85.212.174]:35285 "EHLO mail-wi0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753145AbbGWOrZ (ORCPT ); Thu, 23 Jul 2015 10:47:25 -0400 Received: by wibxm9 with SMTP id xm9so211926324wib.0 for ; Thu, 23 Jul 2015 07:47:24 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1436942435-25611-2-git-send-email-bjorn.andersson@sonymobile.com> Sender: linux-arm-msm-owner@vger.kernel.org List-Id: linux-arm-msm@vger.kernel.org To: Bjorn Andersson Cc: Kumar Gala , Andy Gross , Samuel Ortiz , Linus Walleij , marc.zyngier@arm.com, linux-arm-msm@vger.kernel.org, linux-soc@vger.kernel.org, linux-kernel@vger.kernel.org On Tue, 14 Jul 2015, Bjorn Andersson wrote: > Implement irq_chip->irq_get_irqchip_state to make it possible for PMI= C > block drivers to access the IRQ real time status bits. The status bit= s > are used for various kinds of input signals, e.g. GPIO. >=20 > Signed-off-by: Bjorn Andersson > --- >=20 > Changes since v1: > - Drop extra check for !chip > - Simplify return value >=20 > drivers/mfd/pm8921-core.c | 38 +++++++++++++++++++++++++++++++++++++= + > 1 file changed, 38 insertions(+) Applied, thanks. > diff --git a/drivers/mfd/pm8921-core.c b/drivers/mfd/pm8921-core.c > index 5a92646a2ccb..00856a67d34b 100644 > --- a/drivers/mfd/pm8921-core.c > +++ b/drivers/mfd/pm8921-core.c > @@ -236,11 +236,49 @@ static int pm8xxx_irq_set_type(struct irq_data = *d, unsigned int flow_type) > return pm8xxx_config_irq(chip, block, config); > } > =20 > +static int pm8xxx_irq_get_irqchip_state(struct irq_data *d, > + enum irqchip_irq_state which, > + bool *state) > +{ > + struct pm_irq_chip *chip =3D irq_data_get_irq_chip_data(d); > + unsigned int pmirq =3D irqd_to_hwirq(d); > + unsigned int bits; > + int irq_bit; > + u8 block; > + int rc; > + > + if (which !=3D IRQCHIP_STATE_LINE_LEVEL) > + return -EINVAL; > + > + block =3D pmirq / 8; > + irq_bit =3D pmirq % 8; > + > + spin_lock(&chip->pm_irq_lock); > + rc =3D regmap_write(chip->regmap, SSBI_REG_ADDR_IRQ_BLK_SEL, block)= ; > + if (rc) { > + pr_err("Failed Selecting Block %d rc=3D%d\n", block, rc); > + goto bail; > + } > + > + rc =3D regmap_read(chip->regmap, SSBI_REG_ADDR_IRQ_RT_STATUS, &bits= ); > + if (rc) { > + pr_err("Failed Reading Status rc=3D%d\n", rc); > + goto bail; > + } > + > + *state =3D !!(bits & BIT(irq_bit)); > +bail: > + spin_unlock(&chip->pm_irq_lock); > + > + return rc; > +} > + > static struct irq_chip pm8xxx_irq_chip =3D { > .name =3D "pm8xxx", > .irq_mask_ack =3D pm8xxx_irq_mask_ack, > .irq_unmask =3D pm8xxx_irq_unmask, > .irq_set_type =3D pm8xxx_irq_set_type, > + .irq_get_irqchip_state =3D pm8xxx_irq_get_irqchip_state, > .flags =3D IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_SKIP_SET_WAKE, > }; > =20 --=20 Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org =E2=94=82 Open source software for ARM SoCs =46ollow Linaro: Facebook | Twitter | Blog