Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp323495pxb; Thu, 21 Jan 2021 08:00:06 -0800 (PST) X-Google-Smtp-Source: ABdhPJwW+dzwzZj+8hu3oZXsdZjItiouboHPZPEuDSg5Malfqd9DgWgcwY5E2GhwPMR0tClSOVmA X-Received: by 2002:a17:906:4690:: with SMTP id a16mr101305ejr.442.1611244805986; Thu, 21 Jan 2021 08:00:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611244805; cv=none; d=google.com; s=arc-20160816; b=yb2rGjcjqh1E+gfkxlaMb5rHtJMOgKZXcRrtGDctn3cPli+1U2Nqro1z02d2Ww2FTy bA2lvqakGM5mNmHt2yXH4kJRfnbxq+WNXsSe1vDQRL7YfCchvGNBGe5pMrypHmep3Z/W idQNpheRHwnzL/ZnQrDstDkBnF0Zh0AKvgSzayvazJp0/iPlBFGUAFAGlY+Q9DhSiZgq kYSRqn4y9DhyXCntaANpON2G5ismSGxOkvWa2ncBbfiM3lIcWkUdg/m9zeEb5VpUBT0w Du0QMVvwZxRsF7/uL42h+UWlpd73UetdxlNO7h0bfVtF+fBokTWMs9Qwcc3p1D3FuU7K Xcrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=hNXGc/Xa3VZgpHbdFQP+xufc2VCDlWsexukfONAUfCI=; b=PbnsKfJ8IESXKWSnBgGsczlNTdQwNngdlVccpN5eabqoS27N1OPTlTishnSVQ2k7ps EBZMVku0HTHmKe02PaEpIu9WqD4LCX6gtH/p++u6BGuiMqc3vjfXqeJKWDbKlDjrLmMS ND/w9jtx3xXJInd8N8qNPusHEF3+RtxFBT0i9UAfa3ApjhnjY5CuJwg+ox1Me5ZVgUnO rbngYsQi/E/W7t9J3SMEtfVHGJuxfgIfL5fbuDdKUiAcrJFkWQ+qratZdQrZAsQ20DwE 0SXwm0ury1L4obB4jcvzUalkSyA2abHb44ApJvNRayIQRFXN197eqLtdBRANa90w+wWx ukkA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j20si1975327ejb.278.2021.01.21.07.59.41; Thu, 21 Jan 2021 08:00:05 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731645AbhAUP5s (ORCPT + 99 others); Thu, 21 Jan 2021 10:57:48 -0500 Received: from foss.arm.com ([217.140.110.172]:40052 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729326AbhAUP4C (ORCPT ); Thu, 21 Jan 2021 10:56:02 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id E5ED411D4; Thu, 21 Jan 2021 07:55:16 -0800 (PST) Received: from slackpad.fritz.box (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id F305D3F68F; Thu, 21 Jan 2021 07:55:14 -0800 (PST) Date: Thu, 21 Jan 2021 15:54:39 +0000 From: Andre Przywara To: Samuel Holland Cc: Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , Icenowy Zheng , Linus Walleij , Rob Herring , =?UTF-8?B?Q2zDqW1lbnQgUMOpcm9u?= , Shuosheng Huang , Yangtao Li , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com, Lee Jones Subject: Re: [PATCH v3 09/21] mfd: axp20x: Allow AXP chips without interrupt lines Message-ID: <20210121155439.79f4051c@slackpad.fritz.box> In-Reply-To: References: <20210118020848.11721-1-andre.przywara@arm.com> <20210118020848.11721-10-andre.przywara@arm.com> Organization: Arm Ltd. X-Mailer: Claws Mail 3.17.1 (GTK+ 2.24.31; x86_64-slackware-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, 17 Jan 2021 21:37:22 -0600 Samuel Holland wrote: Hi Samuel, thanks for your input! > On 1/17/21 8:08 PM, Andre Przywara wrote: > > Currently the AXP chip requires to have its IRQ line connected to some > > interrupt controller, and will fail probing when this is not the case. > > > > On a new Allwinner SoC (H616) there is no NMI pin anymore, so the > > interrupt functionality of the AXP chip is simply not available. > > > > Check whether the DT describes the AXP chip as an interrupt controller > > before trying to register the irqchip, to avoid probe failures on > > setups without an interrupt. > > The AXP305 has an IRQ pin. It is still an interrupt controller, even if > its output is not connected anywhere. And even though the NMI pin on the > H616 is gone, the PMIC IRQ line could be connected to a GPIO. So it is > not appropriate to remove "interrupt-controller". That's a fair point. > Per the binding, both "interrupts" and "interrupt-controller" are > required properties. It would make more sense to make "interrupts" > optional. Either way, you need to update the binding. I agree. So I will replace the explicit check for the interrupt-controller property with a check for axp20x->irq being not 0 (which is apparently the right check for this, according to my research). And also adjust the binding to make "interrupts" optional. > Though I'm concerned about how this may affect drivers for regmap cells > which use interrupts (such as axp20x-pek). If the irqchip is not > registered, requesting those interrupts will fail. While I don't > currently know of any boards that have the AXP305 power key wired up, it > prevents us from modelling the hardware correctly and supporting that > configuration. Good point! Indeed axp20x_pek_probe() crashes with a NULL pointer dereference. I think this device is unconditionally tied to the AXP drivers, and this is probably fine, as it looks trivial to check the regmap_irqc pointer before passing it on to regmap_irq_get_virq(), bailing out if this is NULL. Will send the patch shortly, then update this patch here as well. And I guess the outcome (power button input device not available) is reasonable as well. The hardware power button feature (off after 6s) would work nevertheless. If board vendors expect more functionality from the button, they should connect the AXP IRQ pin to a GPIO. Cheers, Andre > > Cheers, > Samuel > > > Signed-off-by: Andre Przywara > > --- > > drivers/mfd/axp20x.c | 17 +++++++++++------ > > 1 file changed, 11 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c > > index aa59496e4376..a52595c49d40 100644 > > --- a/drivers/mfd/axp20x.c > > +++ b/drivers/mfd/axp20x.c > > @@ -959,12 +959,17 @@ int axp20x_device_probe(struct axp20x_dev *axp20x) > > AXP806_REG_ADDR_EXT_ADDR_SLAVE_MODE); > > } > > > > - ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq, > > - IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags, > > - -1, axp20x->regmap_irq_chip, &axp20x->regmap_irqc); > > - if (ret) { > > - dev_err(axp20x->dev, "failed to add irq chip: %d\n", ret); > > - return ret; > > + if (!axp20x->dev->of_node || > > + of_property_read_bool(axp20x->dev->of_node, "interrupt-controller")) { > > + ret = regmap_add_irq_chip(axp20x->regmap, axp20x->irq, > > + IRQF_ONESHOT | IRQF_SHARED | axp20x->irq_flags, > > + -1, axp20x->regmap_irq_chip, > > + &axp20x->regmap_irqc); > > + if (ret) { > > + dev_err(axp20x->dev, "failed to add irq chip: %d\n", > > + ret); > > + return ret; > > + } > > } > > > > ret = mfd_add_devices(axp20x->dev, -1, axp20x->cells, > > >