Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1728581pxj; Wed, 19 May 2021 12:28:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwqDOx1fynUIFBazLh6yy3T2K6NCuVLXY8pyR/LYXun5VCUMXiGw/vJaSTdrI3KOOGULI53 X-Received: by 2002:a5d:9959:: with SMTP id v25mr1223867ios.85.1621452507152; Wed, 19 May 2021 12:28:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621452507; cv=none; d=google.com; s=arc-20160816; b=A0jpL/1tT4h6TXXINazAEvGwYEdzd1/B8CIGA16/H3SqUX4yScXECCPS2uBCyk9wMR Ce4baqvom+WSl/PqHCKUSYM88La9Qgdgi6zYwcioyKeCw2vm7LRK+hPRMIgNkBDyuKb/ VlezzXRTlfY6SBP3nJqrYNbeNq2iXnmeMfOl6VP7bCtu/MWBuBfU6YALZkZtFGPlwb7m Ydnlojgm7QUIJGjbz9ULqnrvvQJ5qte3ophQa3N/ivVwHq1PocIi4a8v+Acl1QdfkbHW w8TdR1jjk4BACrWQBqxJo23zAN/1X+ZdGx3Uc8HLK/Merk/ArIQfXhxvYbivdI6VdhBf CrrQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=hKXDozx1e3nFuQ+5k0UDpTScOLlOO4GiCs8NG3HQe98=; b=VI8g/xtl9Zz7auVFBVomD7Dmeyyz4UThUKTuWI55DnnjpjjoY8WhXc/HaHOWL/Ef4a b0o6tIwn4uYOUjkSa4EgzKc2anK372vkup99C3tIn0jDxRwBxWjjn0dKRrvvCYQxlas/ nS3nr2+JOILC1rNBq4GhVMxZdPMmKP0s+PjXhMjfWkfLhLoZvyIR+XmURY8GxQlZlo7h ws4UEQ3l6ncEMRY1lfoNzvGXo6It3N/wpAglGOdN9z+qE4g+pTyaq5/uaxSOOHcxSM28 aa9kF4e1Wr3LfZt7EjD8pbKiLmIIADFCW0xPGkydB1Qalmgo0XVXnR5GMHrLG8y/UXrN JVLQ== 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 v6si213972jas.16.2021.05.19.12.28.14; Wed, 19 May 2021 12:28:27 -0700 (PDT) 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 S1348262AbhESKnh (ORCPT + 99 others); Wed, 19 May 2021 06:43:37 -0400 Received: from foss.arm.com ([217.140.110.172]:58834 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232768AbhESKnc (ORCPT ); Wed, 19 May 2021 06:43:32 -0400 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 7AD601424; Wed, 19 May 2021 03:42:12 -0700 (PDT) Received: from localhost.localdomain (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 9E0323F719; Wed, 19 May 2021 03:42:10 -0700 (PDT) From: Andre Przywara To: Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec Cc: Rob Herring , Icenowy Zheng , Samuel Holland , Ondrej Jirman , linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH v6 02/17] mfd: axp20x: Allow AXP 806 chips without interrupt lines Date: Wed, 19 May 2021 11:41:37 +0100 Message-Id: <20210519104152.21119-3-andre.przywara@arm.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20210519104152.21119-1-andre.przywara@arm.com> References: <20210519104152.21119-1-andre.przywara@arm.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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, and at least one board does not connect the AXP's IRQ pin to anything else, so the interrupt functionality of the AXP chip is simply not available. Check whether the interrupt line number returned by the platform code is valid, before trying to register the irqchip. If not, we skip this registration, to avoid the driver to bail out completely. Also we need to skip the power key functionality, as this relies on a valid IRQ as well. Signed-off-by: Andre Przywara --- drivers/mfd/axp20x.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c index 3eae04e24ac8..4145a38b3890 100644 --- a/drivers/mfd/axp20x.c +++ b/drivers/mfd/axp20x.c @@ -884,8 +884,13 @@ int axp20x_match_device(struct axp20x_dev *axp20x) axp20x->regmap_irq_chip = &axp803_regmap_irq_chip; break; case AXP806_ID: + /* + * Don't register the power key part if in slave mode or + * if there is no interrupt line. + */ if (of_property_read_bool(axp20x->dev->of_node, - "x-powers,self-working-mode")) { + "x-powers,self-working-mode") && + axp20x->irq > 0) { axp20x->nr_cells = ARRAY_SIZE(axp806_self_working_cells); axp20x->cells = axp806_self_working_cells; } else { @@ -959,12 +964,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; + /* Only if there is an interrupt line connected towards the CPU. */ + if (axp20x->irq > 0) { + 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, -- 2.17.5