On pią, 2014-10-10 at 19:05 +0900, Chanwoo Choi wrote: > On 10/10/2014 06:03 PM, Krzysztof Kozlowski wrote: > > On pią, 2014-10-10 at 17:45 +0900, Chanwoo Choi wrote: > >> On 10/10/2014 05:22 PM, Krzysztof Kozlowski wrote: > >>> All interrupts coming from MUIC were ignored because interrupt source > >>> register was masked. > >>> > >>> The Maxim 77693 has a "interrupt source" - a separate register and interrupts > >>> which give information about PMIC block triggering the individual > >>> interrupt (charger, topsys, MUIC, flash LED). > >>> > >>> By default bootloader could initialize this register to "mask all" > >>> value. In such case (observed on Trats2 board) MUIC interrupts won't be > >>> generated regardless of their mask status. Regmap irq chip was unmasking > >>> individual MUIC interrupts but the source was masked > >>> > >>> Before introducing regmap irq chip this interrupt source was unmasked, > >>> read and acked. Reading and acking is not necessary but unmasking is. Do > >>> it in extcon driver. > >>> > >>> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> > >>> Cc: <stable@xxxxxxxxxxxxxxx> > >>> Fixes: 342d669c1ee4 ("mfd: max77693: Handle IRQs using regmap") > >>> --- > >>> drivers/extcon/extcon-max77693.c | 16 ++++++++++++++++ > >>> include/linux/mfd/max77693-private.h | 5 +++++ > >>> 2 files changed, 21 insertions(+) > >>> > >>> diff --git a/drivers/extcon/extcon-max77693.c b/drivers/extcon/extcon-max77693.c > >>> index 490e27475bac..d3adacf3187f 100644 > >>> --- a/drivers/extcon/extcon-max77693.c > >>> +++ b/drivers/extcon/extcon-max77693.c > >>> @@ -1176,6 +1176,22 @@ static int max77693_muic_probe(struct platform_device *pdev) > >>> } > >>> } > >>> > >>> + if (i) { > >>> + /* > >>> + * i>0, at least one MUIC interrupt requested so need to unmask > >>> + * MUIC interrupt in INTSRC register. Without that MUIC > >>> + * interrupts will not be reported. > >>> + */ > >>> + ret = regmap_update_bits(max77693->regmap, > >>> + MAX77693_PMIC_REG_INTSRC_MASK, SRC_IRQ_MUIC, > >>> + ~SRC_IRQ_MUIC); > >>> + if (ret < 0) { > >>> + dev_err(&pdev->dev, "Could not unmask MUIC interrupt in INTSRC: %d\n", > >>> + ret); > >>> + return ret; > >>> + } > >>> + } > >>> + > >> > >> No, > >> The extcon-max77693 driver cannot enable IRQ_CHARGER/TOP/FLASH > >> because MAX77693_PMIC_REG_INTSRC_MASK register is common register of MAX77693. > >> > >> The IRQ_CHARGER/TOP/FLASH of MAX77693_PMIC_REG_INTSRC_MASK register should be enabled > >> in drivers/mfd/max77693.c. > > > > The code above unmasks only SRC_IRQ_MUIC. Other bits are not touched. > > Why do you think that other IRQs will be enabled? > > I think that MAX77693_PMIC_REG_INTSRC_MASK common register better to be controlled > in drivers/mfd/max77693.c. I prefer that MAX77693 extcon driver would read/write only MUIC registers. > > Also, MAX77693 extcon driver have to be always unmasked. > If IRQ_MUIC is masked, MAX77693 extcon driver could not detect any external cables. > > For example, > The max77836 enable MUIC_IRQ by un-masking MUIC_IRQ. > You can check it on drivers/mfd/max14577.c (line 251~258) Sure, I get it. I'll do it the same as in max14577 driver. Thanks for feedback! Krzysztof -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html