From nobody Tue Feb 10 01:20:50 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4A1999478; Fri, 23 May 2025 12:52:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; cv=none; b=gIPx/0KIxGMFDWZHxiOf3iH5cvMEhyL2xtUU2H7AqMc0EDXYRSzbbWBkACXI/IvjrvcS7HPtZt+N4r6ity98+JfQsWwh9bKRBeutHMU7Xa/c1dKMNW++U6bpbkJ4Dteuw00Ucb85KmNRupCJFSII6ukZGp8NY1hq0RUXHlNVWow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; c=relaxed/simple; bh=ZiOqMUDN7gDQRGBJ9S3lJOWMapimTDHrW/d3CnLHWlQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nDxxSuMgXOssV4plILYUD3Y6/l6Lhe/IFHicaCopPk+Z0r6ok34MlJGLb7ycuzQwGKTbvHtSZOVjmNW1tvBxdOBB094A+ufSyzEfODSwsKtdUEKITXF+hRc3dGMgu7QfZntQFGC9xuEOgbQ8SklMp3HJ3skFB8rCJDJJbtqguGs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lsSLSlFL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lsSLSlFL" Received: by smtp.kernel.org (Postfix) with ESMTPS id CD65CC4CEEF; Fri, 23 May 2025 12:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748004724; bh=ZiOqMUDN7gDQRGBJ9S3lJOWMapimTDHrW/d3CnLHWlQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=lsSLSlFLtz1bVXQrwgmsk9wT0AYbuFskA5/c641ikfUX8mH6jnA+qoiMqRCSBUAQw VpIFfRT5Smf43CMEnTeL7A2fTuKUBp6Po1gyzsDilJFM7qMNUuUHGK4H+bsfe1ESA5 VrrDtxWzH4wRyQyY5yrcfvs2QabdE2uiOR6cPXwc49RW1+OiE9cxGNTxskph/haAB6 vXVmHiwOIIvl1m0VMJEBgRbfT8yncoPkU72vJrA6h+y6/Bx2qELs3aw0qurmxe/tQ1 Vk2wTY+/6twfexoTujc2ffQBEJ93YjGfLZsWpBLx0KuzYgDKXvNxUYZKCp0LYihOuF xiMfQYkVQbnKA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id BA374C54ED0; Fri, 23 May 2025 12:52:04 +0000 (UTC) From: Thomas Antoine via B4 Relay Date: Fri, 23 May 2025 14:51:44 +0200 Subject: [PATCH v4 1/5] power: supply: max1720x correct capacity computation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250523-b4-gs101_max77759_fg-v4-1-b49904e35a34@uclouvain.be> References: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> In-Reply-To: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dimitri Fedrau , Catalin Marinas , Will Deacon , Peter Griffin , =?utf-8?q?Andr=C3=A9_Draszik?= , Tudor Ambarus , Alim Akhtar Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Thomas Antoine X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748004727; l=2215; i=t.antoine@uclouvain.be; s=20241202; h=from:subject:message-id; bh=eC7BjQT0ON0eLj1BHeNmcDKE6aFWeTYyXf1R0uFKWNU=; b=u72BzfqomX49C/S2gr/GbMspbY67y8FvftX3344pxMav8E91Kbxtx06+Ycy1Ar4vUSw7B6fAR 7cyUOcdgcxPBN8eRzTOtB2LREJJjjfJzpnAvYamLmywQoKw6Qc8LebC X-Developer-Key: i=t.antoine@uclouvain.be; a=ed25519; pk=sw7UYl31W1LTpgWRiX4xIF5x6ok7YWZ6XZnHqy/d3dY= X-Endpoint-Received: by B4 Relay for t.antoine@uclouvain.be/20241202 with auth_id=289 X-Original-From: Thomas Antoine Reply-To: t.antoine@uclouvain.be From: Thomas Antoine From the datasheet of the MAX17201/17205, the LSB should be "5.0=CE=BCVh/RSENSE". The current computation sets it at 0.5mAh=3D5.0=CE=BC= Vh/10mOhm which does not take into account the value of rsense which can be different from 10mOhm. Change the computation to fit the specs. Signed-off-by: Thomas Antoine --- drivers/power/supply/max1720x_battery.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/power/supply/max1720x_battery.c b/drivers/power/supply= /max1720x_battery.c index ea3912fd1de8bfd0d029c16f276316d06e1b105c..68b5314ecf3a234f906ec8fe400= e586855b69cd9 100644 --- a/drivers/power/supply/max1720x_battery.c +++ b/drivers/power/supply/max1720x_battery.c @@ -288,9 +288,10 @@ static int max172xx_voltage_to_ps(unsigned int reg) return reg * 1250; /* in uV */ } =20 -static int max172xx_capacity_to_ps(unsigned int reg) +static int max172xx_capacity_to_ps(unsigned int reg, + struct max1720x_device_info *info) { - return reg * 500; /* in uAh */ + return reg * (500000 / info->rsense); /* in uAh */ } =20 /* @@ -394,11 +395,11 @@ static int max1720x_battery_get_property(struct power= _supply *psy, break; case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ret =3D regmap_read(info->regmap, MAX172XX_DESIGN_CAP, ®_val); - val->intval =3D max172xx_capacity_to_ps(reg_val); + val->intval =3D max172xx_capacity_to_ps(reg_val, info); break; case POWER_SUPPLY_PROP_CHARGE_AVG: ret =3D regmap_read(info->regmap, MAX172XX_REPCAP, ®_val); - val->intval =3D max172xx_capacity_to_ps(reg_val); + val->intval =3D max172xx_capacity_to_ps(reg_val, info); break; case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG: ret =3D regmap_read(info->regmap, MAX172XX_TTE, ®_val); @@ -422,7 +423,7 @@ static int max1720x_battery_get_property(struct power_s= upply *psy, break; case POWER_SUPPLY_PROP_CHARGE_FULL: ret =3D regmap_read(info->regmap, MAX172XX_FULL_CAP, ®_val); - val->intval =3D max172xx_capacity_to_ps(reg_val); + val->intval =3D max172xx_capacity_to_ps(reg_val, info); break; case POWER_SUPPLY_PROP_MODEL_NAME: ret =3D regmap_read(info->regmap, MAX172XX_DEV_NAME, ®_val); --=20 2.49.0 From nobody Tue Feb 10 01:20:50 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3910978F43; Fri, 23 May 2025 12:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; cv=none; b=aHXxuqrC3ECeU34lwtVkIzBi8ru4Rdktw3ZpuDxiS/O3oTiLI/Zk0H21/Pbgvf88JTzVzVSyHlX0aG3drTwkj/KHNISa4eACxY8sZo4TP/HmGCVyf5jE+5ORaF4wz1bZnzoGeHOos5SrJYOyV0geNKdf+VHlzQcWuF6iXz/I9zA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; c=relaxed/simple; bh=+XmnqJafyQcwrFJLxADUPwTUQffXYM+rCbOQP3MIijo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Fgfv/+F6BN4SeZQwlXx1rwdRujO1a32EFF1vD9eN36RowGQD8zW5iUuQEd55OsRdFyTd60wJvt0QVkMCBzrwcINyE0Qm7EoU79PpV6dPVXKfvqx0cSC+J0j2a6qMSFSQrY9GA+oYVq/jTXEoQFSAENc5Ed0Yei+J4nRTGBA+teM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=oBVE8BCi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="oBVE8BCi" Received: by smtp.kernel.org (Postfix) with ESMTPS id D5B87C4CEF0; Fri, 23 May 2025 12:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748004724; bh=+XmnqJafyQcwrFJLxADUPwTUQffXYM+rCbOQP3MIijo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=oBVE8BCiedbQZmqp8ydR09me2y6vC0t5yriDFz1OA85eO//lIWAVwrUAmsKfbrcjL 4u6sSPGbuemZQqKdd11EQwLQvVoJmS/GIG1GJmHQnQBgvUuS0YoJFIcXdG7irvFO36 yUBCGnNB/iSUhMyVmqw2DLMtjjNbW+WsvefOgT6gpB+DLRoi4wKigds8f1kupn3Npx 66Owu0+eMabPalIGeBq1n2Jtt78A/rhYo9CXxD1IbtWbQ9j7mxZx5tqRVklsUHzW78 yneM2dxK5TQWE8UCgLQje8qkoO5noCkN/CNYaRYaKqVXyJStbynUqdTK52bIyjXrqh bhbcELqoZqvag== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8434C54F32; Fri, 23 May 2025 12:52:04 +0000 (UTC) From: Thomas Antoine via B4 Relay Date: Fri, 23 May 2025 14:51:45 +0200 Subject: [PATCH v4 2/5] power: supply: add support for max77759 fuel gauge Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250523-b4-gs101_max77759_fg-v4-2-b49904e35a34@uclouvain.be> References: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> In-Reply-To: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dimitri Fedrau , Catalin Marinas , Will Deacon , Peter Griffin , =?utf-8?q?Andr=C3=A9_Draszik?= , Tudor Ambarus , Alim Akhtar Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Thomas Antoine X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748004727; l=13610; i=t.antoine@uclouvain.be; s=20241202; h=from:subject:message-id; bh=ujei8+tGZ04eLfSz9q7hY0k7LCQPXJItSoaGVV8nRgo=; b=9vgiT8M/epyDvKxCRwTGKAOFRL8AmgjeJ5rsSoC3syzW4zqHss38aagiqZiFx6Tv07Te5L4UL ajaCthh6PqpCE/LIiNpIcjH885o7ua3yWfmjOKmE2zPsLBBVixjE/o+ X-Developer-Key: i=t.antoine@uclouvain.be; a=ed25519; pk=sw7UYl31W1LTpgWRiX4xIF5x6ok7YWZ6XZnHqy/d3dY= X-Endpoint-Received: by B4 Relay for t.antoine@uclouvain.be/20241202 with auth_id=289 X-Original-From: Thomas Antoine Reply-To: t.antoine@uclouvain.be From: Thomas Antoine The interface of the Maxim MAX77759 fuel gauge has a lot of common with the Maxim MAX1720x. A major difference is the lack of non-volatile memory slave address. No slave is available at address 0xb of the i2c bus, which is coherent with the following driver from google: line 5836 disables non-volatile memory for m5 gauge. Link: https://android.googlesource.com/kernel/google-modules/bms/+/1a68c36b= ef474573cc8629cc1d121eb6a81ab68c/max1720x_battery.c Other differences include the lack of V_BATT register to read the battery level. The voltage must instead be read from V_CELL, the lowest voltage of all cells. The mask to identify the chip is different. The computation of the charge must also be changed to take into account TASKPERIOD, which can add a factor 2 to the result. Add support for the MAX77759 by taking into account all of those differences based on chip type. Do not advertise temp probes using the non-volatile memory as those are not available. The regmap was proposed by Andr=C3=A9 Draszik in Link: https://lore.kernel.org/all/d1bade77b5281c1de6b2ddcb4dbbd033e455a116.= camel@linaro.org/ Signed-off-by: Thomas Antoine --- drivers/power/supply/max1720x_battery.c | 265 ++++++++++++++++++++++++++++= ---- 1 file changed, 238 insertions(+), 27 deletions(-) diff --git a/drivers/power/supply/max1720x_battery.c b/drivers/power/supply= /max1720x_battery.c index 68b5314ecf3a234f906ec8fe400e586855b69cd9..c9ad452ada9d0a2a51f37d04fd8= c3260be522405 100644 --- a/drivers/power/supply/max1720x_battery.c +++ b/drivers/power/supply/max1720x_battery.c @@ -37,6 +37,7 @@ #define MAX172XX_REPCAP 0x05 /* Average capacity */ #define MAX172XX_REPSOC 0x06 /* Percentage of charge */ #define MAX172XX_TEMP 0x08 /* Temperature */ +#define MAX172XX_VCELL 0x09 /* Lowest cell voltage */ #define MAX172XX_CURRENT 0x0A /* Actual current */ #define MAX172XX_AVG_CURRENT 0x0B /* Average current */ #define MAX172XX_FULL_CAP 0x10 /* Calculated full capacity */ @@ -54,15 +55,28 @@ #define MAX172XX_BATT 0xDA /* Battery voltage */ #define MAX172XX_ATAVCAP 0xDF =20 +#define MAX77759_DEV_NAME_TYPE_MASK GENMASK(15, 9) +#define MAX77759_DEV_NAME_TYPE_MAX77759 0x31 +#define MAX77759_TASKPERIOD 0x3C +#define MAX77759_TASKPERIOD_175MS 0x1680 +#define MAX77759_TASKPERIOD_351MS 0x2D00 + static const char *const max1720x_manufacturer =3D "Maxim Integrated"; static const char *const max17201_model =3D "MAX17201"; static const char *const max17205_model =3D "MAX17205"; +static const char *const max77759_model =3D "MAX77759"; + +enum chip_id { + MAX1720X_ID, + MAX77759_ID, +}; =20 struct max1720x_device_info { struct regmap *regmap; struct regmap *regmap_nv; struct i2c_client *ancillary; int rsense; + enum chip_id id; }; =20 /* @@ -271,6 +285,80 @@ static const enum power_supply_property max1720x_batte= ry_props[] =3D { POWER_SUPPLY_PROP_MANUFACTURER, }; =20 +/* + * Registers 0x80 up to 0xaf which contain the model for the fuel gauge + * algorithm (stored in nvmem for the max1720x) are locked. They can + * be unlocked by writing 0x59 to 0x62 and 0xc4 to 0x63. They should be + * enabled in the regmap if the driver is extended to manage the model. + */ +static const struct regmap_range max77759_registers[] =3D { + regmap_reg_range(0x00, 0x4f), + regmap_reg_range(0xb0, 0xbf), + regmap_reg_range(0xd0, 0xd0), + regmap_reg_range(0xdc, 0xdf), + regmap_reg_range(0xfb, 0xfb), + regmap_reg_range(0xff, 0xff), +}; + +static const struct regmap_range max77759_ro_registers[] =3D { + regmap_reg_range(0x3d, 0x3d), + regmap_reg_range(0xfb, 0xfb), + regmap_reg_range(0xff, 0xff), +}; + +static const struct regmap_access_table max77759_write_table =3D { + .no_ranges =3D max77759_ro_registers, + .n_no_ranges =3D ARRAY_SIZE(max77759_ro_registers), +}; + +static const struct regmap_access_table max77759_rd_table =3D { + .yes_ranges =3D max77759_registers, + .n_yes_ranges =3D ARRAY_SIZE(max77759_registers), +}; + +static const struct regmap_config max77759_regmap_cfg =3D { + .reg_bits =3D 8, + .val_bits =3D 16, + .max_register =3D 0xff, + .wr_table =3D &max77759_write_table, + .rd_table =3D &max77759_rd_table, + .val_format_endian =3D REGMAP_ENDIAN_LITTLE, + .cache_type =3D REGCACHE_NONE, +}; + +static const enum power_supply_property max77759_battery_props[] =3D { + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_CAPACITY, + POWER_SUPPLY_PROP_VOLTAGE_NOW, + POWER_SUPPLY_PROP_CHARGE_FULL, + POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, + POWER_SUPPLY_PROP_CHARGE_AVG, + POWER_SUPPLY_PROP_TEMP, + POWER_SUPPLY_PROP_CURRENT_NOW, + POWER_SUPPLY_PROP_CURRENT_AVG, + POWER_SUPPLY_PROP_MODEL_NAME, + POWER_SUPPLY_PROP_MANUFACTURER, +}; + + +struct chip_data { + bool has_nvmem; + const struct regmap_config *regmap_cfg; + enum chip_id id; +}; + +static const struct chip_data max1720x_data =3D { + .has_nvmem =3D true, + .regmap_cfg =3D &max1720x_regmap_cfg, + .id =3D MAX1720X_ID, +}; + +static const struct chip_data max77759_data =3D { + .has_nvmem =3D false, + .regmap_cfg =3D &max77759_regmap_cfg, + .id =3D MAX77759_ID, +}; + /* Convert regs value to power_supply units */ =20 static int max172xx_time_to_ps(unsigned int reg) @@ -288,12 +376,41 @@ static int max172xx_voltage_to_ps(unsigned int reg) return reg * 1250; /* in uV */ } =20 +static int max172xx_cell_voltage_to_ps(unsigned int reg) +{ + return reg * 625 / 8; /* in uV */ +} + static int max172xx_capacity_to_ps(unsigned int reg, struct max1720x_device_info *info) { return reg * (500000 / info->rsense); /* in uAh */ } =20 +static int max77759_capacity_lsb(struct max1720x_device_info *info, + unsigned int *lsb) +{ + unsigned int reg_task_period; + int ret; + + ret =3D regmap_read(info->regmap, MAX77759_TASKPERIOD, ®_task_period); + if (ret < 0) + return ret; + + switch (reg_task_period) { + case MAX77759_TASKPERIOD_175MS: + *lsb =3D 1; + break; + case MAX77759_TASKPERIOD_351MS: + *lsb =3D 2; + break; + default: + return -ENODEV; + } + + return 0; +} + /* * Current and temperature is signed values, so unsigned regs * value must be converted to signed type @@ -390,16 +507,36 @@ static int max1720x_battery_get_property(struct power= _supply *psy, val->intval =3D max172xx_percent_to_ps(reg_val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: - ret =3D regmap_read(info->regmap, MAX172XX_BATT, ®_val); - val->intval =3D max172xx_voltage_to_ps(reg_val); + if (info->id =3D=3D MAX1720X_ID) { + ret =3D regmap_read(info->regmap, MAX172XX_BATT, ®_val); + val->intval =3D max172xx_voltage_to_ps(reg_val); + } else if (info->id =3D=3D MAX77759_ID) { + ret =3D regmap_read(info->regmap, MAX172XX_VCELL, ®_val); + val->intval =3D max172xx_cell_voltage_to_ps(reg_val); + } else + return -ENODEV; break; case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: ret =3D regmap_read(info->regmap, MAX172XX_DESIGN_CAP, ®_val); + if (ret < 0) + return ret; + val->intval =3D max172xx_capacity_to_ps(reg_val, info); + if (info->id =3D=3D MAX77759_ID) { + ret =3D max77759_capacity_lsb(info, ®_val); + val->intval *=3D reg_val; + } break; case POWER_SUPPLY_PROP_CHARGE_AVG: ret =3D regmap_read(info->regmap, MAX172XX_REPCAP, ®_val); + if (ret < 0) + return ret; + val->intval =3D max172xx_capacity_to_ps(reg_val, info); + if (info->id =3D=3D MAX77759_ID) { + ret =3D max77759_capacity_lsb(info, ®_val); + val->intval *=3D reg_val; + } break; case POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG: ret =3D regmap_read(info->regmap, MAX172XX_TTE, ®_val); @@ -423,16 +560,35 @@ static int max1720x_battery_get_property(struct power= _supply *psy, break; case POWER_SUPPLY_PROP_CHARGE_FULL: ret =3D regmap_read(info->regmap, MAX172XX_FULL_CAP, ®_val); + if (ret < 0) + return ret; + val->intval =3D max172xx_capacity_to_ps(reg_val, info); + if (info->id =3D=3D MAX77759_ID) { + ret =3D max77759_capacity_lsb(info, ®_val); + val->intval *=3D reg_val; + } break; case POWER_SUPPLY_PROP_MODEL_NAME: ret =3D regmap_read(info->regmap, MAX172XX_DEV_NAME, ®_val); - reg_val =3D FIELD_GET(MAX172XX_DEV_NAME_TYPE_MASK, reg_val); - if (reg_val =3D=3D MAX172XX_DEV_NAME_TYPE_MAX17201) - val->strval =3D max17201_model; - else if (reg_val =3D=3D MAX172XX_DEV_NAME_TYPE_MAX17205) - val->strval =3D max17205_model; - else + if (ret < 0) + return ret; + + if (info->id =3D=3D MAX1720X_ID) { + reg_val =3D FIELD_GET(MAX172XX_DEV_NAME_TYPE_MASK, reg_val); + if (reg_val =3D=3D MAX172XX_DEV_NAME_TYPE_MAX17201) + val->strval =3D max17201_model; + else if (reg_val =3D=3D MAX172XX_DEV_NAME_TYPE_MAX17205) + val->strval =3D max17205_model; + else + return -ENODEV; + } else if (info->id =3D=3D MAX77759_ID) { + reg_val =3D FIELD_GET(MAX77759_DEV_NAME_TYPE_MASK, reg_val); + if (reg_val =3D=3D MAX77759_DEV_NAME_TYPE_MAX77759) + val->strval =3D max77759_model; + else + return -ENODEV; + } else return -ENODEV; break; case POWER_SUPPLY_PROP_MANUFACTURER: @@ -527,7 +683,6 @@ static int max1720x_probe_nvmem(struct i2c_client *clie= nt, .priv =3D info, }; struct nvmem_device *nvmem; - unsigned int val; int ret; =20 info->ancillary =3D i2c_new_ancillary_device(client, "nvmem", 0xb); @@ -549,18 +704,6 @@ static int max1720x_probe_nvmem(struct i2c_client *cli= ent, return PTR_ERR(info->regmap_nv); } =20 - ret =3D regmap_read(info->regmap_nv, MAX1720X_NRSENSE, &val); - if (ret < 0) { - dev_err(dev, "Failed to read sense resistor value\n"); - return ret; - } - - info->rsense =3D val; - if (!info->rsense) { - dev_warn(dev, "RSense not calibrated, set 10 mOhms!\n"); - info->rsense =3D 1000; /* in regs in 10^-5 */ - } - nvmem =3D devm_nvmem_register(dev, &nvmem_config); if (IS_ERR(nvmem)) { dev_err(dev, "Could not register nvmem!"); @@ -570,6 +713,38 @@ static int max1720x_probe_nvmem(struct i2c_client *cli= ent, return 0; } =20 +static int max1720x_get_rsense(struct device *dev, + struct max1720x_device_info *info, + const struct chip_data *data) +{ + unsigned int val; + int ret; + + if (data->has_nvmem) { + ret =3D regmap_read(info->regmap_nv, MAX1720X_NRSENSE, &val); + if (ret < 0) { + dev_err(dev, "Failed to read RSense from nvmem\n"); + return ret; + } + + info->rsense =3D val; + if (!info->rsense) { + dev_warn(dev, "RSense not calibrated, set 10 mOhms!\n"); + info->rsense =3D 1000; /* in regs in 10^-5 */ + } + } else { + ret =3D device_property_read_u32(dev, "shunt-resistor-micro-ohms", + &val); + if (ret) { + dev_err(dev, "Failed to read RSense from devicetree\n"); + return ret; + } + info->rsense =3D val / 10; + } + + return 0; +} + static const struct power_supply_desc max1720x_bat_desc =3D { .name =3D "max1720x", .no_thermal =3D true, @@ -579,32 +754,67 @@ static const struct power_supply_desc max1720x_bat_de= sc =3D { .get_property =3D max1720x_battery_get_property, }; =20 +static const struct power_supply_desc max77759_bat_desc =3D { + .name =3D "max77759-fg", + .no_thermal =3D true, + .type =3D POWER_SUPPLY_TYPE_BATTERY, + .properties =3D max77759_battery_props, + .num_properties =3D ARRAY_SIZE(max77759_battery_props), + .get_property =3D max1720x_battery_get_property, +}; + static int max1720x_probe(struct i2c_client *client) { struct power_supply_config psy_cfg =3D {}; struct device *dev =3D &client->dev; struct max1720x_device_info *info; struct power_supply *bat; + const struct chip_data *data; + const struct power_supply_desc *bat_desc; int ret; =20 info =3D devm_kzalloc(dev, sizeof(*info), GFP_KERNEL); if (!info) return -ENOMEM; =20 + data =3D device_get_match_data(dev); + if (!data) + return dev_err_probe(dev, -EINVAL, "Failed to get chip data\n"); + psy_cfg.drv_data =3D info; psy_cfg.fwnode =3D dev_fwnode(dev); - psy_cfg.attr_grp =3D max1720x_groups; + + switch (data->id) { + case MAX1720X_ID: + psy_cfg.attr_grp =3D max1720x_groups; + bat_desc =3D &max1720x_bat_desc; + break; + case MAX77759_ID: + bat_desc =3D &max77759_bat_desc; + break; + default: + return dev_err_probe(dev, -EINVAL, "Unsupported chip\n"); + } + i2c_set_clientdata(client, info); - info->regmap =3D devm_regmap_init_i2c(client, &max1720x_regmap_cfg); + + info->id =3D data->id; + info->regmap =3D devm_regmap_init_i2c(client, data->regmap_cfg); if (IS_ERR(info->regmap)) return dev_err_probe(dev, PTR_ERR(info->regmap), "regmap initialization failed\n"); =20 - ret =3D max1720x_probe_nvmem(client, info); + if (data->has_nvmem) { + ret =3D max1720x_probe_nvmem(client, info); + if (ret) + return dev_err_probe(dev, ret, "Failed to probe nvmem\n"); + } + + ret =3D max1720x_get_rsense(dev, info, data); if (ret) - return dev_err_probe(dev, ret, "Failed to probe nvmem\n"); + return ret; =20 - bat =3D devm_power_supply_register(dev, &max1720x_bat_desc, &psy_cfg); + bat =3D devm_power_supply_register(dev, bat_desc, &psy_cfg); if (IS_ERR(bat)) return dev_err_probe(dev, PTR_ERR(bat), "Failed to register power supply\n"); @@ -613,7 +823,8 @@ static int max1720x_probe(struct i2c_client *client) } =20 static const struct of_device_id max1720x_of_match[] =3D { - { .compatible =3D "maxim,max17201" }, + { .compatible =3D "maxim,max17201", .data =3D (void *) &max1720x_data }, + { .compatible =3D "maxim,max77759-fg", .data =3D (void *) &max77759_data = }, {} }; MODULE_DEVICE_TABLE(of, max1720x_of_match); --=20 2.49.0 From nobody Tue Feb 10 01:20:50 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D9383AC1C; Fri, 23 May 2025 12:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; cv=none; b=VFSjZnxWb4sMl4sNfLLQTfwTX23mrTCV7MqcdGtXuZJKnVyu2hWl7aM+fDoWxA8ZcBdgv2uDCY/hvvTbp15zZAJl2ShuAq65zrZTOLfxWPIiiaT0l/tx2R0DaEinQZGWeCG/cpE3q8SZHVNjNny9OmpfACu4SbUJGmkSRz5f9uQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; c=relaxed/simple; bh=NveI/c5xQaxOP/723CwcVzN8aFWHOag/eGc7TuodKC8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ijo2gxP6wxjj7DXR5y2dEzR7+8aTYlD4fr65cmJB1MHH9qsNos1O9YGH7UTj/cIegaW47UFoX4MIw/WHDos+HtLEGm+yNIvLp7J/4u32crcgsBTFJpk5ty8qUDbCWc/z/PvlrApN29z26HEb+4VSQKNkAmirrpnGaLo8Udw9aI8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TXnmkCKz; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TXnmkCKz" Received: by smtp.kernel.org (Postfix) with ESMTPS id E3201C4CEF4; Fri, 23 May 2025 12:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748004725; bh=NveI/c5xQaxOP/723CwcVzN8aFWHOag/eGc7TuodKC8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=TXnmkCKz9hGSfTZovLeW2UjOICio8LoJ6TTxFV7e/3mhMKar9XQLj+eP0ADCF7C7t BnFbyWRaRA5ffbqZ2lKd9HtyudivcnB/a2W/0E1qQLp6tlkYItl7R8kYDLHl5SHZ41 khU/8/gjRY7k3onKkhAoPCBG5t7pJNHdclvFmTIoaFKMMHPDuWwMC0rbcSkHaDeNnP eWMx3T6IfqvcO/DYS0rdJlojh80nwk+fB545yYKou7wPK/8zVgVeRGj7iNsKbmTREP zValZAlmoZfBf30yGsLC1PYwZ02qjOJMn67Fa5hB0wCVHdMXzQdepdw3Fg/WFXPP8q SCfqVOFC5c+xw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id D5447C54F30; Fri, 23 May 2025 12:52:04 +0000 (UTC) From: Thomas Antoine via B4 Relay Date: Fri, 23 May 2025 14:51:46 +0200 Subject: [PATCH v4 3/5] dt-bindings: power: supply: add max77759-fg flavor Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250523-b4-gs101_max77759_fg-v4-3-b49904e35a34@uclouvain.be> References: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> In-Reply-To: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dimitri Fedrau , Catalin Marinas , Will Deacon , Peter Griffin , =?utf-8?q?Andr=C3=A9_Draszik?= , Tudor Ambarus , Alim Akhtar Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Thomas Antoine X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748004727; l=2682; i=t.antoine@uclouvain.be; s=20241202; h=from:subject:message-id; bh=GU2WoKOxlaWJoWfEaZr2bJ8lw3s+AOWQv0h8uwcwC90=; b=1zMV5uiw+xStEJWY23TLxuRPfW60BpaXrb6tMzTSEz/FqhcXCpWyL8y858ymE4+QoyVLSt7Fu iIKgAx0Q2TYCrw1JC4VQmzIV0StD/KwzRrwQOyp3yvofsr+hC59GTRu X-Developer-Key: i=t.antoine@uclouvain.be; a=ed25519; pk=sw7UYl31W1LTpgWRiX4xIF5x6ok7YWZ6XZnHqy/d3dY= X-Endpoint-Received: by B4 Relay for t.antoine@uclouvain.be/20241202 with auth_id=289 X-Original-From: Thomas Antoine Reply-To: t.antoine@uclouvain.be From: Thomas Antoine The Maxim MAX77759 is an IC used to manage the power supply of the battery and the USB-C. Based on drivers from google, it contains at least a PMIC, a fuel gauge, a TCPCI and a charger. Use max77759-fg compatible to avoid conflict with drivers for other functions. The Maxim MAX77759 has no non-volatile memory so it doesn't require an address and instead requires a value for the current sensing resistor. Keep shunt-resistor-micro-ohms optional for the MAX17201/MAX17205 as it is not be used at the moment but could be in the future. (e.g. as a default value to be used in case of nvmem failure) Signed-off-by: Thomas Antoine --- .../bindings/power/supply/maxim,max17201.yaml | 42 ++++++++++++++++++= ++-- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/power/supply/maxim,max17201.= yaml b/Documentation/devicetree/bindings/power/supply/maxim,max17201.yaml index fe3dd9bd5585618e45220c51023391a5b21acfd2..2fb826b4b160eb9abe6604185ac= 2192447d90b8c 100644 --- a/Documentation/devicetree/bindings/power/supply/maxim,max17201.yaml +++ b/Documentation/devicetree/bindings/power/supply/maxim,max17201.yaml @@ -9,13 +9,11 @@ title: Maxim MAX17201 fuel gauge maintainers: - Dimitri Fedrau =20 -allOf: - - $ref: power-supply.yaml# - properties: compatible: oneOf: - const: maxim,max17201 + - const: maxim,max77759-fg - items: - enum: - maxim,max17205 @@ -25,11 +23,18 @@ properties: items: - description: ModelGauge m5 registers - description: Nonvolatile registers + minItems: 1 + maxItems: 2 =20 reg-names: items: - const: m5 - const: nvmem + minItems: 1 + maxItems: 2 + + shunt-resistor-micro-ohms: + description: The value of current sense resistor in microohms. =20 interrupts: maxItems: 1 @@ -39,6 +44,37 @@ required: - reg - reg-names =20 +allOf: + - $ref: power-supply.yaml# + + - if: + properties: + compatible: + contains: + enum: + - maxim,max17201 + then: + properties: + reg: + minItems: 2 + reg-names: + minItems: 2 + + - if: + properties: + compatible: + contains: + enum: + - maxim,max77759-fg + then: + properties: + reg: + maxItems: 1 + reg-names: + maxItems: 1 + required: + - shunt-resistor-micro-ohms + unevaluatedProperties: false =20 examples: --=20 2.49.0 From nobody Tue Feb 10 01:20:50 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4AF1E7DA95; Fri, 23 May 2025 12:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; cv=none; b=c090SGH/0Qm7mctsWHm1szlJ6MdG5jjr8SeGZrEBe+10iHWZXSmOVBKTDbM7xV/bnZpi+AEkR7c1C3VbnWhT0HNV0gUnucQutoX4Nd1WZ+lLyMaU3cWXSYJslHxiYBunYgxDtZWN2vglXFcNScwUjBLdEiawUbGu5HgECRnpA/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; c=relaxed/simple; bh=T+XZ9Epqso4lamigfMKzOTzFq0QKydck3UHjfbzbL0Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zv7nwvKBGWnMRY1syksayNggFgRtVUUqOv64SHiIljmB6kHwSepzZa9bjLv0ExJgRKWoVZHqj76aRo+/W7DxJce0eXR1WdWm/BRwyDrkbTHtodUhA0LDP0UcvQOc8P2s6bANL5UZ4vmdy0v282p0kSiqIIzPIV+YW6U7FwjYy4I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jJH1G3k6; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jJH1G3k6" Received: by smtp.kernel.org (Postfix) with ESMTPS id EFEA6C4CEF7; Fri, 23 May 2025 12:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748004725; bh=T+XZ9Epqso4lamigfMKzOTzFq0QKydck3UHjfbzbL0Y=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=jJH1G3k6M1gcIKBZOws6ZG5yVJrbrhYYjas6Q85v45SzQ5sfzx5Fl8ieln9YbfULK uEXncf+eo8Di3iSpOJfYdZGDeo+7zdU0X6FyKs2VndJDOuV4nXdh9vOi0mveJTrFhq n6EsCwhnSx9pgLdfRNPBj839047xLtsZ83eZfXS+lgZQTjuB861qEUctlCg+TNR0CT zTT1nd5178kGMq/F4b6x3EX0OZQFyvUTxnD34ElckHnRWtF22Hb/jUZnuhrdVJ4m0L 9+tolsXX9B6LvWRu7x2N+RGEA6uxXsKVmwdFJ2QmEUgrEgRS5mFmw+uUJQvOoawgvD j2KJHzUBGsnrQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3211C54F2E; Fri, 23 May 2025 12:52:04 +0000 (UTC) From: Thomas Antoine via B4 Relay Date: Fri, 23 May 2025 14:51:47 +0200 Subject: [PATCH v4 4/5] arm64: defconfig: enable Maxim max1720x driver Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250523-b4-gs101_max77759_fg-v4-4-b49904e35a34@uclouvain.be> References: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> In-Reply-To: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dimitri Fedrau , Catalin Marinas , Will Deacon , Peter Griffin , =?utf-8?q?Andr=C3=A9_Draszik?= , Tudor Ambarus , Alim Akhtar Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Thomas Antoine X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748004727; l=716; i=t.antoine@uclouvain.be; s=20241202; h=from:subject:message-id; bh=yx0SuiaIbKa84b0oToxMe11+jBYaoqB6+UxBMxg24/I=; b=+HwIBAXAC8BjutDhA/xCZ5g4yO5J7kIk9EGyWOsMV/nIFWSshktuIfocSezpS24C1WhKv6M4N 9TTFwiM+o1GBEtE/F+qBfAK56/7rMgHzMn80HZGV23/UnCEX0cHfY+t X-Developer-Key: i=t.antoine@uclouvain.be; a=ed25519; pk=sw7UYl31W1LTpgWRiX4xIF5x6ok7YWZ6XZnHqy/d3dY= X-Endpoint-Received: by B4 Relay for t.antoine@uclouvain.be/20241202 with auth_id=289 X-Original-From: Thomas Antoine Reply-To: t.antoine@uclouvain.be From: Thomas Antoine Enable the Maxim MAX1720x as it is used by the gs101-oriole (Google Pixel 6) board. Signed-off-by: Thomas Antoine Reviewed-by: Peter Griffin --- arch/arm64/configs/defconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 5bb8f09422a22116781169611482179b10798c14..4feaebca340b1bc613c4f4ea9f1= ff3b6686b092d 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -687,6 +687,7 @@ CONFIG_BATTERY_QCOM_BATTMGR=3Dm CONFIG_BATTERY_SBS=3Dm CONFIG_BATTERY_BQ27XXX=3Dy CONFIG_BATTERY_MAX17042=3Dm +CONFIG_BATTERY_MAX1720X=3Dm CONFIG_CHARGER_MT6360=3Dm CONFIG_CHARGER_BQ25890=3Dm CONFIG_CHARGER_BQ25980=3Dm --=20 2.49.0 From nobody Tue Feb 10 01:20:50 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F90713D539; Fri, 23 May 2025 12:52:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; cv=none; b=PKXl0XU2f1HbQUT8y5TuG2LorRzEbBKPjxbOAUH+wTKKAWfaU267Ky3OMv/PJKUaKgU9fCe92Ty3y0+79BbpZPaFijH9fj6elOnbjKYtzvnvEYcTwJDQTLIbLwI7HQyyhGkWhLMozcNRPUFeQS1fpYw49j2cneWfoxC1Gb7Rdlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1748004725; c=relaxed/simple; bh=5xEPkCKOVRabxXHHeF2mu6uzqMA218cBnnVPAnWjDKU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=BgX3AuNNYQ75JCrlQfX7DnXX5h8WEfLLoZ4hPyA39g2rc6SsDlRt8DZCLHRjMK/GaNEScueBYlGv0riZEb3VDbyQJMz6hP50NqYr2q95typMjOkjiKKczJNLCQrJ0qcywkCZDLuumhhx9mdWb/EAwhQyvjmez1MOFQ55YE+Wmjg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LllHz6nG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LllHz6nG" Received: by smtp.kernel.org (Postfix) with ESMTPS id 095DCC4CEFC; Fri, 23 May 2025 12:52:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1748004725; bh=5xEPkCKOVRabxXHHeF2mu6uzqMA218cBnnVPAnWjDKU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=LllHz6nG9P0P6lqF5UTY/3f+N9k5BG0zsxSI+UQHBPVr3KNRmJyXay69LCwZkSPzt /WRBdnhVIqfaTj6h2DQimco3j992MvQbKYoTpGb4eI1+wA4xbXNM3wSm7fPzKqGaxC 8jKLug/4bnD6afGxSAmj3lBZVmwREwo6iM8J/lmOw9xj6EhgFMbNht3HXcenQ9zPpn dq9AA2GOWkPa7Kgn5Oukh6gyxxekgxObSDszJ0S13qAq+VN1giK3JyzeyHGs3nTIcg 1OFED0bQ5cNEXTRotL0vPMEGDie3m/4kFH8HwtQRf4LooFg34exhKtCHdTDwWE9fY9 rHahyelbYV3XQ== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1FE8C54ED0; Fri, 23 May 2025 12:52:04 +0000 (UTC) From: Thomas Antoine via B4 Relay Date: Fri, 23 May 2025 14:51:48 +0200 Subject: [PATCH v4 5/5] arm64: dts: exynos: gs101-oriole: enable Maxim max77759 fuel gauge Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250523-b4-gs101_max77759_fg-v4-5-b49904e35a34@uclouvain.be> References: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> In-Reply-To: <20250523-b4-gs101_max77759_fg-v4-0-b49904e35a34@uclouvain.be> To: Sebastian Reichel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dimitri Fedrau , Catalin Marinas , Will Deacon , Peter Griffin , =?utf-8?q?Andr=C3=A9_Draszik?= , Tudor Ambarus , Alim Akhtar Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Thomas Antoine X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1748004728; l=1313; i=t.antoine@uclouvain.be; s=20241202; h=from:subject:message-id; bh=+E8KTkRWD/mhjwDdm0OrzwMI0i7bo8G/TbulwCt/cNU=; b=MYix6XzRqq6cT99BsYFIb7MAMuaH8dv8cWyZm+XbOlmT+uPnbhQ8flVvXyGL8f+B0C3wLpesh EXi+XggFsWTCoM+id863xpYa859aiKBzlF3SGv5TvKbKUBqcx8PPhB9 X-Developer-Key: i=t.antoine@uclouvain.be; a=ed25519; pk=sw7UYl31W1LTpgWRiX4xIF5x6ok7YWZ6XZnHqy/d3dY= X-Endpoint-Received: by B4 Relay for t.antoine@uclouvain.be/20241202 with auth_id=289 X-Original-From: Thomas Antoine Reply-To: t.antoine@uclouvain.be From: Thomas Antoine Add the node for the Maxim MAX77759 fuel gauge as a slave of the i2c. The TODO is still applicable given there are other slaves on the bus (e.g. PCA9468, other MAX77759 functions and the MAX20339 OVP). Signed-off-by: Thomas Antoine --- arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi b/ar= ch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi index b25230495c64dce60916b7cd5dcb9a7cce5d0e4e..84fc10c3562958ab1621f246447= 09e85a9433b9b 100644 --- a/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi +++ b/arch/arm64/boot/dts/exynos/google/gs101-pixel-common.dtsi @@ -10,6 +10,7 @@ =20 #include #include +#include #include #include "gs101-pinctrl.h" #include "gs101.dtsi" @@ -188,6 +189,15 @@ usbc0_role_sw: endpoint { }; }; }; + + fuel-gauge@36 { + compatible =3D "maxim,max77759-fg"; + reg =3D <0x36>; + reg-names =3D "m5"; + interrupt-parent =3D <&gpa9>; + interrupts =3D <3 IRQ_TYPE_LEVEL_LOW>; + shunt-resistor-micro-ohms =3D <5000>; + }; }; =20 &pinctrl_far_alive { --=20 2.49.0