lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 28 Jul 2023 10:36:51 +0200
From:   henning.schild@...mens.com
To:     Hans de Goede <hdegoede@...hat.com>,
        Mark Gross <markgross@...nel.org>,
        platform-driver-x86@...r.kernel.org, linux-kernel@...r.kernel.org
Cc:     Tobias Schaffner <tobias.schaffner@...mens.com>,
        "xingtong.wu" <xingtong.wu@...mens.com>,
        Henning Schild <henning.schild@...mens.com>
Subject: [PATCH] platform/x86: simatic-ipc-batt: fix reading in BX_21A

From: "xingtong.wu" <xingtong.wu@...mens.com>

There was a case missing in a switch statement which lead to that model
not actually reading the GPIOs. That switch statement got simplified
now. Additionally on that model we need to initialize one pin
differently. As a drive-by finding also add a missing newline.

Fixes: 917f54340794 ("platform/x86: simatic-ipc: add CMOS battery monitoring")
Reported-by: Henning Schild <henning.schild@...mens.com>
Signed-off-by: xingtong.wu <xingtong.wu@...mens.com>
Signed-off-by: Henning Schild <henning.schild@...mens.com>
---
 .../platform/x86/siemens/simatic-ipc-batt.c   | 21 +++++++++----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/platform/x86/siemens/simatic-ipc-batt.c b/drivers/platform/x86/siemens/simatic-ipc-batt.c
index d2791ff84f23..e34417ca9e13 100644
--- a/drivers/platform/x86/siemens/simatic-ipc-batt.c
+++ b/drivers/platform/x86/siemens/simatic-ipc-batt.c
@@ -92,19 +92,14 @@ static long simatic_ipc_batt_read_value(struct device *dev)
 
 	next_update = priv.last_updated_jiffies + msecs_to_jiffies(BATT_DELAY_MS);
 	if (time_after(jiffies, next_update) || !priv.last_updated_jiffies) {
-		switch (priv.devmode) {
-		case SIMATIC_IPC_DEVICE_127E:
-		case SIMATIC_IPC_DEVICE_227G:
-		case SIMATIC_IPC_DEVICE_BX_39A:
-			priv.current_state = simatic_ipc_batt_read_gpio();
-			break;
-		case SIMATIC_IPC_DEVICE_227E:
+		if (priv.devmode == SIMATIC_IPC_DEVICE_227E)
 			priv.current_state = simatic_ipc_batt_read_io(dev);
-			break;
-		}
+		else
+			priv.current_state = simatic_ipc_batt_read_gpio();
+
 		priv.last_updated_jiffies = jiffies;
 		if (priv.current_state < SIMATIC_IPC_BATT_LEVEL_FULL)
-			dev_warn(dev, "CMOS battery needs to be replaced.");
+			dev_warn(dev, "CMOS battery needs to be replaced.\n");
 	}
 
 	return priv.current_state;
@@ -163,6 +158,7 @@ int simatic_ipc_batt_probe(struct platform_device *pdev, struct gpiod_lookup_tab
 	struct simatic_ipc_platform *plat;
 	struct device *dev = &pdev->dev;
 	struct device *hwmon_dev;
+	unsigned long flags;
 	int err;
 
 	plat = pdev->dev.platform_data;
@@ -196,7 +192,10 @@ int simatic_ipc_batt_probe(struct platform_device *pdev, struct gpiod_lookup_tab
 	}
 
 	if (table->table[2].key) {
-		priv.gpios[2] = devm_gpiod_get_index(dev, "CMOSBattery meter", 2, GPIOD_OUT_HIGH);
+		flags = GPIOD_OUT_HIGH;
+		if (priv.devmode == SIMATIC_IPC_DEVICE_BX_21A)
+			flags = GPIOD_OUT_LOW;
+		priv.gpios[2] = devm_gpiod_get_index(dev, "CMOSBattery meter", 2, flags);
 		if (IS_ERR(priv.gpios[2])) {
 			err = PTR_ERR(priv.gpios[1]);
 			priv.gpios[2] = NULL;
-- 
2.41.0

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ