From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753868AbbGWOre (ORCPT ); Thu, 23 Jul 2015 10:47:34 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:33129 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753553AbbGWOrZ (ORCPT ); Thu, 23 Jul 2015 10:47:25 -0400 Date: Thu, 23 Jul 2015 15:47:21 +0100 From: Lee Jones 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 Subject: Re: [PATCH v2 7/8] mfd: pm8921: Implement irq_get_irqchip_state 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-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1436942435-25611-2-git-send-email-bjorn.andersson@sonymobile.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: 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 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 > --- > > Changes since v1: > - Drop extra check for !chip > - Simplify return value > > 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); > } > > +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 (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; > +} > + > 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, > }; > -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog