From patchwork Wed Dec 2 21:07:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timon Baetz X-Patchwork-Id: 336370 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 624E3C64E7B for ; Wed, 2 Dec 2020 21:08:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E6DC922203 for ; Wed, 2 Dec 2020 21:08:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726396AbgLBVIA (ORCPT ); Wed, 2 Dec 2020 16:08:00 -0500 Received: from mail-40134.protonmail.ch ([185.70.40.134]:22617 "EHLO mail-40134.protonmail.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725866AbgLBVH7 (ORCPT ); Wed, 2 Dec 2020 16:07:59 -0500 Date: Wed, 02 Dec 2020 21:07:12 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1606943237; bh=E9RxHMzcn7X1FNm4GZyMldmxad4LWG8WG/9s9fSNl74=; h=Date:To:From:Cc:Reply-To:Subject:From; b=qJAHJNR9P8O1TBzC2LGmdRdxfLrppvNALomAWOXBGr3lxp8CJzVpXUyPoFYklpnkh N+31tqe/59saqG70dRpDrPNnN0Lv3HCV14Fr5nRjq1SjpD3JM2S1w3F0BN+s00+fc/ w19fl7TJFnxOqcd1zWPlIxUEKcaqJ3QeOEuKw+V8= To: Sebastian Reichel From: Timon Baetz Cc: Chanwoo Choi , MyungJoo Ham , Krzysztof Kozlowski , Kukjin Kim , Rob Herring , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Timon Baetz Reply-To: Timon Baetz Subject: [PATCH 1/3] extcon: max8997: Add CHGINS and CHGRM interrupt handling Message-ID: <20201202203516.43053-1-timon.baetz@protonmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Allows the MAX8997 charger to set the current limit depending on the detected extcon charger type. Signed-off-by: Timon Baetz --- drivers/extcon/extcon-max8997.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/extcon/extcon-max8997.c b/drivers/extcon/extcon-max8997.c index 172e116ac1ce..70ffcef12e3e 100644 --- a/drivers/extcon/extcon-max8997.c +++ b/drivers/extcon/extcon-max8997.c @@ -44,6 +44,8 @@ static struct max8997_muic_irq muic_irqs[] = { { MAX8997_MUICIRQ_ChgDetRun, "muic-CHGDETRUN" }, { MAX8997_MUICIRQ_ChgTyp, "muic-CHGTYP" }, { MAX8997_MUICIRQ_OVP, "muic-OVP" }, + { MAX8997_PMICIRQ_CHGINS, "pmic-CHGINS" }, + { MAX8997_PMICIRQ_CHGRM, "pmic-CHGRM" }, }; /* Define supported cable type */ @@ -538,6 +540,9 @@ static void max8997_muic_irq_work(struct work_struct *work) case MAX8997_MUICIRQ_DCDTmr: case MAX8997_MUICIRQ_ChgDetRun: case MAX8997_MUICIRQ_ChgTyp: + case MAX8997_PMICIRQ_CHGINS: + case MAX8997_PMICIRQ_CHGRM: + /* Handle charger cable */ ret = max8997_muic_chg_handler(info); break; From patchwork Wed Dec 2 21:07:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timon Baetz X-Patchwork-Id: 336369 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E1E7C71155 for ; Wed, 2 Dec 2020 21:09:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4E9BB221F7 for ; Wed, 2 Dec 2020 21:09:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729064AbgLBVIx (ORCPT ); Wed, 2 Dec 2020 16:08:53 -0500 Received: from mail-02.mail-europe.com ([51.89.119.103]:59854 "EHLO mail-02.mail-europe.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726669AbgLBVIx (ORCPT ); Wed, 2 Dec 2020 16:08:53 -0500 Date: Wed, 02 Dec 2020 21:07:19 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1606943247; bh=I5SKn72zxNLuAPxHXL8MBix5xnhTqEl1NdpeqJ8Fo7U=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=w52idPCvgPLyvLjhVxtahNHBhCZDZvpUNdmQWXjjzZQD5W5EUcKk/fFeiqshv2t/B NortxYpGn9NudNr86gAWiknF21gsKZKr6Iobu6f8f0PQmbl89OkLJX0EtEQC2P/OgR a83ZMQgYE7f5/h5JO1goAtYk8CBsSPtit0+KVdho= To: Sebastian Reichel From: Timon Baetz Cc: Chanwoo Choi , MyungJoo Ham , Krzysztof Kozlowski , Kukjin Kim , Rob Herring , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Timon Baetz Reply-To: Timon Baetz Subject: [PATCH 2/3] power: supply: max8997_charger: Set CHARGER current limit Message-ID: <20201202203516.43053-2-timon.baetz@protonmail.com> In-Reply-To: <20201202203516.43053-1-timon.baetz@protonmail.com> References: <20201202203516.43053-1-timon.baetz@protonmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Register for extcon notification and set charging current depending on the detected cable type. Current values are taken from i9100 kernel fork. Enable and disable the CHARGER regulator based on extcon events and remove regulator-always-on from the device tree. Signed-off-by: Timon Baetz --- arch/arm/boot/dts/exynos4210-i9100.dts | 1 - drivers/power/supply/max8997_charger.c | 92 ++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/exynos4210-i9100.dts b/arch/arm/boot/dts/exynos4210-i9100.dts index 6d0c04d77a39..9f8d927e0d21 100644 --- a/arch/arm/boot/dts/exynos4210-i9100.dts +++ b/arch/arm/boot/dts/exynos4210-i9100.dts @@ -560,7 +560,6 @@ charger_reg: CHARGER { regulator-name = "CHARGER"; regulator-min-microamp = <60000>; regulator-max-microamp = <2580000>; - regulator-always-on; }; chargercv_reg: CHARGER_CV { diff --git a/drivers/power/supply/max8997_charger.c b/drivers/power/supply/max8997_charger.c index 1947af25879a..26cd271576ec 100644 --- a/drivers/power/supply/max8997_charger.c +++ b/drivers/power/supply/max8997_charger.c @@ -6,6 +6,7 @@ // MyungJoo Ham #include +#include #include #include #include @@ -31,6 +32,12 @@ struct charger_data { struct device *dev; struct max8997_dev *iodev; struct power_supply *battery; + struct regulator *reg; + struct { + struct extcon_dev *edev; + struct notifier_block nb; + struct work_struct work; + } extcon; }; static enum power_supply_property max8997_battery_props[] = { @@ -88,6 +95,63 @@ static int max8997_battery_get_property(struct power_supply *psy, return 0; } +static void max8997_battery_extcon_evt_stop_work(void *data) +{ + struct charger_data *charger = data; + + cancel_work_sync(&charger->extcon.work); +} + +static void max8997_battery_extcon_evt_worker(struct work_struct *work) +{ + struct charger_data *charger = + container_of(work, struct charger_data, extcon.work); + int ret, current_limit; + struct extcon_dev *edev = charger->extcon.edev; + + if (extcon_get_state(edev, EXTCON_CHG_USB_SDP) > 0) { + dev_dbg(charger->dev, "USB SDP charger is connected\n"); + current_limit = 450000; + } else if (extcon_get_state(edev, EXTCON_CHG_USB_DCP) > 0) { + dev_dbg(charger->dev, "USB DCP charger is connected\n"); + current_limit = 650000; + } else if (extcon_get_state(edev, EXTCON_CHG_USB_FAST) > 0) { + dev_dbg(charger->dev, "USB FAST charger is connected\n"); + current_limit = 650000; + } else if (extcon_get_state(edev, EXTCON_CHG_USB_SLOW) > 0) { + dev_dbg(charger->dev, "USB SLOW charger is connected\n"); + current_limit = 650000; + } else if (extcon_get_state(edev, EXTCON_CHG_USB_CDP) > 0) { + dev_dbg(charger->dev, "USB CDP charger is connected\n"); + current_limit = 650000; + } else { + dev_dbg(charger->dev, "USB charger is diconnected\n"); + current_limit = -1; + } + + if (current_limit > 0) { + ret = regulator_set_current_limit(charger->reg, current_limit, current_limit); + if (ret) + dev_err(charger->dev, "failed to set current limit: %d\n", ret); + ret = regulator_enable(charger->reg); + if (ret) + dev_err(charger->dev, "failed to enable regulator: %d\n", ret); + } else { + ret = regulator_disable(charger->reg); + if (ret) + dev_err(charger->dev, "failed to disable regulator: %d\n", ret); + } +} + +static int max8997_battery_extcon_evt(struct notifier_block *nb, + unsigned long event, void *param) +{ + struct charger_data *charger = + container_of(nb, struct charger_data, extcon.nb); + schedule_work(&charger->extcon.work); + return NOTIFY_OK; +} + static const struct power_supply_desc max8997_battery_desc = { .name = "max8997_pmic", .type = POWER_SUPPLY_TYPE_BATTERY, @@ -104,6 +168,7 @@ static int max8997_battery_probe(struct platform_device *pdev) struct i2c_client *i2c = iodev->i2c; struct max8997_platform_data *pdata = iodev->pdata; struct power_supply_config psy_cfg = {}; + struct extcon_dev *edev; if (!pdata) { dev_err(&pdev->dev, "No platform data supplied.\n"); @@ -151,6 +216,12 @@ static int max8997_battery_probe(struct platform_device *pdev) return ret; } + edev = extcon_get_extcon_dev("max8997-muic"); + if (edev == NULL) { + dev_info(&pdev->dev, "extcon is not ready, probe deferred\n"); + return -EPROBE_DEFER; + } + charger = devm_kzalloc(&pdev->dev, sizeof(*charger), GFP_KERNEL); if (!charger) return -ENOMEM; @@ -170,6 +241,27 @@ static int max8997_battery_probe(struct platform_device *pdev) return PTR_ERR(charger->battery); } + charger->reg = regulator_get(&pdev->dev, "CHARGER"); + if (IS_ERR(charger->reg)) { + dev_err(&pdev->dev, "couldn't get CHARGER regulator\n"); + return PTR_ERR(charger->reg); + } + + INIT_WORK(&charger->extcon.work, max8997_battery_extcon_evt_worker); + ret = devm_add_action(&pdev->dev, max8997_battery_extcon_evt_stop_work, charger); + if (ret) { + dev_err(&pdev->dev, "failed to add extcon evt stop action: %d\n", ret); + return ret; + } + charger->extcon.edev = edev; + charger->extcon.nb.notifier_call = max8997_battery_extcon_evt; + ret = devm_extcon_register_notifier_all(&pdev->dev, charger->extcon.edev, + &charger->extcon.nb); + if (ret) { + dev_err(&pdev->dev, "failed to register extcon notifier\n"); + return ret; + }; + return 0; } From patchwork Mon Dec 21 09:53:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timon Baetz X-Patchwork-Id: 346529 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55C92C433E0 for ; Mon, 21 Dec 2020 09:54:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 241C522CB8 for ; Mon, 21 Dec 2020 09:54:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725958AbgLUJyT (ORCPT ); Mon, 21 Dec 2020 04:54:19 -0500 Received: from mail-40131.protonmail.ch ([185.70.40.131]:57635 "EHLO mail-40131.protonmail.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725953AbgLUJyT (ORCPT ); Mon, 21 Dec 2020 04:54:19 -0500 Date: Mon, 21 Dec 2020 09:53:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1608544417; bh=j9J3/8H1qa8Wh29MrZMYkdOvgangYejK1lwToq6kgws=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=akGsdgo2jCkS5X2KQnXW+RtE0Wt1gqLvtOlDrXoIqMsNGz7AsEDH4okDjlWZOrEQd 3CEiPHJe44mTXEejfv3S+CfccmxRYbC4wbmfiC3bKXhpKMJxpI0x5QYmYavGBxtqnp QbDYi/FJVDqC9o8M9alh9A0ZxRJ5H6i+2CL3tqpk= To: Krzysztof Kozlowski From: Timon Baetz Cc: Liam Girdwood , Mark Brown , Rob Herring , MyungJoo Ham , Chanwoo Choi , Lee Jones , Sebastian Reichel , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Timon Baetz Reply-To: Timon Baetz Subject: [PATCH v2 4/6] ARM: dts: exynos: Added muic and charger nodes for i9100 Message-ID: <20201221095001.595366-4-timon.baetz@protonmail.com> In-Reply-To: <20201221095001.595366-1-timon.baetz@protonmail.com> References: <20201202203516.43053-1-timon.baetz@protonmail.com> <20201221095001.595366-1-timon.baetz@protonmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org muic node is only used for extcon consumers. charger node is used to specify muic and regulator. Signed-off-by: Timon Baetz --- arch/arm/boot/dts/exynos4210-i9100.dts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm/boot/dts/exynos4210-i9100.dts b/arch/arm/boot/dts/exynos4210-i9100.dts index 56ae534402bb..586d801af0b5 100644 --- a/arch/arm/boot/dts/exynos4210-i9100.dts +++ b/arch/arm/boot/dts/exynos4210-i9100.dts @@ -583,6 +583,16 @@ EN32KHZ_CP { regulator-always-on; }; }; + + muic: max8997-muic { + compatible = "maxim,max8997-muic"; + }; + + charger { + compatible = "maxim,max8997-battery"; + charger-supply = <&charger_reg>; + extcon = <&muic>; + }; }; }; From patchwork Mon Dec 21 09:53:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timon Baetz X-Patchwork-Id: 346528 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0DA0C43219 for ; Mon, 21 Dec 2020 09:54:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6477E22D6D for ; Mon, 21 Dec 2020 09:54:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725816AbgLUJyq (ORCPT ); Mon, 21 Dec 2020 04:54:46 -0500 Received: from mail-40133.protonmail.ch ([185.70.40.133]:59479 "EHLO mail-40133.protonmail.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725796AbgLUJyp (ORCPT ); Mon, 21 Dec 2020 04:54:45 -0500 Date: Mon, 21 Dec 2020 09:53:41 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1608544424; bh=zj7BLVma6bwTDbkNV2OP9sFWg/3xvXVUsybje3al6Cg=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=g5s2kuNKdU3m+FIp0yqWskyJWGYM7MhhhGc+ub8fUicahzzoC85tFUaJpQ/5LcfhK fc3IfWnJ/QQTUOxvQCkKQtsUXCxxyNhKeLXT1RNMzy17CXmbNcy5J3nbOBsQgFPrcs QhidcuY/4HsHzE1uVi7lHV2yYOCU5DE7OBDRH+PU= To: Krzysztof Kozlowski From: Timon Baetz Cc: Liam Girdwood , Mark Brown , Rob Herring , MyungJoo Ham , Chanwoo Choi , Lee Jones , Sebastian Reichel , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org, ~postmarketos/upstreaming@lists.sr.ht, Timon Baetz Reply-To: Timon Baetz Subject: [PATCH v2 6/6] regulator: dt-bindings: Document max8997-pmic nodes Message-ID: <20201221095001.595366-6-timon.baetz@protonmail.com> In-Reply-To: <20201221095001.595366-1-timon.baetz@protonmail.com> References: <20201202203516.43053-1-timon.baetz@protonmail.com> <20201221095001.595366-1-timon.baetz@protonmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Add maxim,max8997-battery and maxim,max8997-muic optional nodes. Signed-off-by: Timon Baetz --- .../bindings/regulator/max8997-regulator.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Documentation/devicetree/bindings/regulator/max8997-regulator.txt b/Documentation/devicetree/bindings/regulator/max8997-regulator.txt index 6fe825b8ac1b..f969fc09fe29 100644 --- a/Documentation/devicetree/bindings/regulator/max8997-regulator.txt +++ b/Documentation/devicetree/bindings/regulator/max8997-regulator.txt @@ -53,6 +53,17 @@ Additional properties required if either of the optional properties are used: - max8997,pmic-buck125-dvs-gpios: GPIO specifiers for three host gpio's used for dvs. The format of the gpio specifier depends in the gpio controller. +Optional nodes: +- charger: Node for configuring the charger driver. + Required properties: + - compatible: "maxim,max8997-battery" + - extcon: extcon specifier for charging events + - charger-supply: regulator node for charging current + +- muic: Node used only by extcon consumers. + Required properties: + - compatible: "maxim,max8997-muic" + Regulators: The regulators of max8997 that have to be instantiated should be included in a sub-node named 'regulators'. Regulator nodes included in this sub-node should be of the format as listed below.