Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp3695233ybv; Mon, 10 Feb 2020 04:52:28 -0800 (PST) X-Google-Smtp-Source: APXvYqzu/9g1lZ4+uPWPBlZ1KfpST7xL4LQCluNlQYdftLjuKEt8JsOu7KPopw7+5FT8CAdN1KmL X-Received: by 2002:a9d:6457:: with SMTP id m23mr963209otl.162.1581339148423; Mon, 10 Feb 2020 04:52:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581339148; cv=none; d=google.com; s=arc-20160816; b=y8/Fs1eg6G0xUz299Y9ORcGEeieGTTB7HtoQIFThb6efeRvD5g+3U9JdCHFnshp0bL aJunAZQRubZ1FPLjFBX39OszqIk3MA0qzroPrkxKuEwMbaIGVNXyiC+jmdSrjLKwjr0K DckgWuLexzukAbP5kZYkdnde1+Ca50nKDUtOYzvuGKkYo2BTCrUUMn9sdzDZgcwzH2fZ zS/hWoxRMlyUYHxhXcWGQgDx44roeom4ifVEiHBZUK+xYbQrta3lMOy5lOEZJw2Pej4V GX5TbQYPySjlqZT2sHg0wTZj3ztKDBRs4KwcJ+unqAJHnFwqTAl/kp1TWxTXZOrtFawL hVYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=Ao4nCHydrbPpMAhcdmlokGAHGMhlBxcyGQ9ccQrERWc=; b=tGsww/DfuhZMetpCz2Yv996ZsX2bhZezjODZK185HOkRgjtsRpzfB1QR67F/aZLoHb xtFon045XtXu0kDmddsU3dAjcLRgQVx6TIX85xPY6tGsQ9S19C3CtcMf29XrEN7PP0Kq Ao/FBZokkkrddrTl9uyrXWKx1/wFKSjO59Dpav+GwpaC49VNsDNhu5t4RfUrkJ2M0cM7 kw+4BKunlSXnjCp71VceFv18LaymV6GE2NX/SC0lTF01J6bhktbP3xZ8XdT4di/zZ/54 Ekbp82/O8jznGoZWfYVCNkZHsvYQHYmKLpCmGSkoPKBsFDQWS5qxGOlCVri2ljLB/4pN 0boA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="wk/scjW6"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y22si130418oti.269.2020.02.10.04.52.17; Mon, 10 Feb 2020 04:52:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="wk/scjW6"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730521AbgBJMn5 (ORCPT + 99 others); Mon, 10 Feb 2020 07:43:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:39876 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729670AbgBJMkP (ORCPT ); Mon, 10 Feb 2020 07:40:15 -0500 Received: from localhost (unknown [209.37.97.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 968A92051A; Mon, 10 Feb 2020 12:40:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1581338414; bh=MMy5b1V1IL5uHCq9NfdoFe3WHzgaxpAqJCJ80qPZUTM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wk/scjW6gbEt2lt6DqydYlGn1OspQ1UlWhhecWqQOfqEU9sP7nXpHjN2/esyyK4Ge JXxr1xOzMYCjHdWNOsJHCl9fIyYACt0XTvQQTEn0l20eAZ1TQo/JWrL5oDw/hNxvR5 3Nu79DfhXae98LBP/vVCXw7AsE419crgnsMLrbGE= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Samuel Holland , Chen-Yu Tsai , Sebastian Reichel Subject: [PATCH 5.5 128/367] power: supply: axp20x_ac_power: Fix reporting online status Date: Mon, 10 Feb 2020 04:30:41 -0800 Message-Id: <20200210122436.676761953@linuxfoundation.org> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200210122423.695146547@linuxfoundation.org> References: <20200210122423.695146547@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Samuel Holland commit 1c51aad8475d670ad58ae60adc9d32342381df8d upstream. AXP803/AXP813 have a flag that enables/disables the AC power supply input. This flag does not affect the status bits in PWR_INPUT_STATUS. Its effect can be verified by checking the battery charge/discharge state (bit 2 of PWR_INPUT_STATUS), or by examining the current draw on the AC input. Take this flag into account when getting the ONLINE property of the AC input, on PMICs where this flag is present. Fixes: 7693b5643fd2 ("power: supply: add AC power supply driver for AXP813") Cc: stable@vger.kernel.org Signed-off-by: Samuel Holland Reviewed-by: Chen-Yu Tsai Signed-off-by: Sebastian Reichel Signed-off-by: Greg Kroah-Hartman --- drivers/power/supply/axp20x_ac_power.c | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) --- a/drivers/power/supply/axp20x_ac_power.c +++ b/drivers/power/supply/axp20x_ac_power.c @@ -23,6 +23,8 @@ #define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7) #define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6) +#define AXP813_ACIN_PATH_SEL BIT(7) + #define AXP813_VHOLD_MASK GENMASK(5, 3) #define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3) #define AXP813_VHOLD_REG_TO_UV(x) \ @@ -40,6 +42,7 @@ struct axp20x_ac_power { struct power_supply *supply; struct iio_channel *acin_v; struct iio_channel *acin_i; + bool has_acin_path_sel; }; static irqreturn_t axp20x_ac_power_irq(int irq, void *devid) @@ -86,6 +89,17 @@ static int axp20x_ac_power_get_property( return ret; val->intval = !!(reg & AXP20X_PWR_STATUS_ACIN_AVAIL); + + /* ACIN_PATH_SEL disables ACIN even if ACIN_AVAIL is set. */ + if (val->intval && power->has_acin_path_sel) { + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, + ®); + if (ret) + return ret; + + val->intval = !!(reg & AXP813_ACIN_PATH_SEL); + } + return 0; case POWER_SUPPLY_PROP_VOLTAGE_NOW: @@ -224,21 +238,25 @@ static const struct power_supply_desc ax struct axp_data { const struct power_supply_desc *power_desc; bool acin_adc; + bool acin_path_sel; }; static const struct axp_data axp20x_data = { - .power_desc = &axp20x_ac_power_desc, - .acin_adc = true, + .power_desc = &axp20x_ac_power_desc, + .acin_adc = true, + .acin_path_sel = false, }; static const struct axp_data axp22x_data = { - .power_desc = &axp22x_ac_power_desc, - .acin_adc = false, + .power_desc = &axp22x_ac_power_desc, + .acin_adc = false, + .acin_path_sel = false, }; static const struct axp_data axp813_data = { - .power_desc = &axp813_ac_power_desc, - .acin_adc = false, + .power_desc = &axp813_ac_power_desc, + .acin_adc = false, + .acin_path_sel = true, }; static int axp20x_ac_power_probe(struct platform_device *pdev) @@ -282,6 +300,7 @@ static int axp20x_ac_power_probe(struct } power->regmap = dev_get_regmap(pdev->dev.parent, NULL); + power->has_acin_path_sel = axp_data->acin_path_sel; platform_set_drvdata(pdev, power);