Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp619403pxb; Wed, 3 Mar 2021 10:56:54 -0800 (PST) X-Google-Smtp-Source: ABdhPJz0GHgzMOPVmGExp5xWrZ4NlyGI3sWVEhIkMpM7cpDLbnXR5zcDAfaq/duE7AEOTyhDrsLk X-Received: by 2002:a17:906:1754:: with SMTP id d20mr236503eje.221.1614797813958; Wed, 03 Mar 2021 10:56:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614797813; cv=none; d=google.com; s=arc-20160816; b=MurncxrLLgeXas0Jp1lEM8rOdlycNRCkq0+wxfgiBfC7xT0oAPuEJKtUxyMURah5na 4XuY0II4AuE5i2PlvQWOhwUz06oeBPnRNKDfYFK8mYD1AN9NX7dJmMkzrWybmgFdrYK5 zFRQjpQjMvWbIooBY9gQgE6N6a1S122wAgA9//r92U+dR5yNSsSaMt9qAP13hRWyZ6C6 AZMwhoxnbsx3OsW8u9+glSQelNQHfnME1H/Kohw71CMt2hZfHUxx+S1MUpFuxznFXj+Q hXB7Q9JXGji75sdpl0KYA5tlEuFhQIVn9ANm05gCDe0AGNJGM+uVuVuTmm3jebf/YZZ2 YbEg== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=GS5cKX5TBfgY+nGOChrGwkYsoyDZK6hKt7aThfgOdug=; b=y9jGfT9l0kdt1rsdybI16mbDi+CPkG7/fKcTtBEet82HO2IDCt9pJuhFi5iLd062z1 eaxzAEx6ZhBbRaYEboSuTBf47zvpzedQ6Qh3yLWcGPjvynihf3AUvIghNWAJUkDmbG1D NwNlD6ij1rhC/hThpM/5CT4acp2oKzZJgeyufdMuesqo4465hh2ZeL3FnSwlHXlriGhu dCdu0EkA9IZ4QOlXyg36nRu5ssAszypg3hu5jHPJI8Q+So3w6dXEXCxJy6CEX5p5xGG3 BbwkIU7NdbE2qv1VSaTae4EuYxMHxLu0vepHfvJYvIcnsee18dcMUEZDOdkyshuW52Sr +DLA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="w8/WPb/S"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id l1si3116524ejh.597.2021.03.03.10.56.10; Wed, 03 Mar 2021 10:56:53 -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; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b="w8/WPb/S"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1378592AbhCBBHE (ORCPT + 99 others); Mon, 1 Mar 2021 20:07:04 -0500 Received: from mail.kernel.org ([198.145.29.99]:34118 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240931AbhCATBZ (ORCPT ); Mon, 1 Mar 2021 14:01:25 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id D1DAA651D3; Mon, 1 Mar 2021 17:17:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1614619049; bh=2NVndUT7dS67kVUETNfHqFdwMr3cq1s8T/7KdfD5vl0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=w8/WPb/SraOtCuU0ZkgjVuhIodqnd5/hTO9wCKiH6PdWKzMlvWFM9383Id4AMUXXb od5XS65VQ9v9hzg4sAjLgGZnmvp+5u72sFBIkwqzG38dOhPaGiqCTQKhHbxItuMe5f 4F2YpK3VEXpAXDCe381QapciYKnl1ikI1wmOTej0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dmitry Osipenko , Sebastian Reichel , Sasha Levin Subject: [PATCH 5.10 313/663] power: supply: smb347-charger: Fix interrupt usage if interrupt is unavailable Date: Mon, 1 Mar 2021 17:09:21 +0100 Message-Id: <20210301161157.329350288@linuxfoundation.org> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210301161141.760350206@linuxfoundation.org> References: <20210301161141.760350206@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dmitry Osipenko [ Upstream commit 6996312642d2dad3070c3d276c7621f35e721f30 ] The IRQ=0 could be a valid interrupt number in kernel because interrupt numbers are virtual in a modern kernel. Hence fix the interrupt usage in a case if interrupt is unavailable by not overriding the interrupt number which is used by the driver. Note that currently Nexus 7 is the only know device which uses SMB347 kernel diver and it has a properly working interrupt, hence this patch doesn't fix any real problems, it's a minor cleanup/improvement. Fixes: 99298de5df92 ("power: supply: smb347-charger: Replace mutex with IRQ disable/enable") Signed-off-by: Dmitry Osipenko Signed-off-by: Sebastian Reichel Signed-off-by: Sasha Levin --- drivers/power/supply/smb347-charger.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/power/supply/smb347-charger.c b/drivers/power/supply/smb347-charger.c index d3bf35ed12cee..8cfbd8d6b4786 100644 --- a/drivers/power/supply/smb347-charger.c +++ b/drivers/power/supply/smb347-charger.c @@ -137,6 +137,7 @@ * @mains_online: is AC/DC input connected * @usb_online: is USB input connected * @charging_enabled: is charging enabled + * @irq_unsupported: is interrupt unsupported by SMB hardware * @max_charge_current: maximum current (in uA) the battery can be charged * @max_charge_voltage: maximum voltage (in uV) the battery can be charged * @pre_charge_current: current (in uA) to use in pre-charging phase @@ -193,6 +194,7 @@ struct smb347_charger { bool mains_online; bool usb_online; bool charging_enabled; + bool irq_unsupported; unsigned int max_charge_current; unsigned int max_charge_voltage; @@ -862,6 +864,9 @@ static int smb347_irq_set(struct smb347_charger *smb, bool enable) { int ret; + if (smb->irq_unsupported) + return 0; + ret = smb347_set_writable(smb, true); if (ret < 0) return ret; @@ -923,8 +928,6 @@ static int smb347_irq_init(struct smb347_charger *smb, ret = regmap_update_bits(smb->regmap, CFG_STAT, CFG_STAT_ACTIVE_HIGH | CFG_STAT_DISABLED, CFG_STAT_DISABLED); - if (ret < 0) - client->irq = 0; smb347_set_writable(smb, false); @@ -1345,6 +1348,7 @@ static int smb347_probe(struct i2c_client *client, if (ret < 0) { dev_warn(dev, "failed to initialize IRQ: %d\n", ret); dev_warn(dev, "disabling IRQ support\n"); + smb->irq_unsupported = true; } else { smb347_irq_enable(smb); } @@ -1357,8 +1361,8 @@ static int smb347_remove(struct i2c_client *client) { struct smb347_charger *smb = i2c_get_clientdata(client); - if (client->irq) - smb347_irq_disable(smb); + smb347_irq_disable(smb); + return 0; } -- 2.27.0