summaryrefslogtreecommitdiffstats
path: root/drivers/hwmon
diff options
context:
space:
mode:
authorFrank Crawford <frank@crawford.emu.id.au>2024-04-28 08:06:34 +0200
committerGuenter Roeck <linux@roeck-us.net>2024-04-30 19:32:14 +0200
commite2e6a23f4bda2de9c7096aa9c310bc3400187e90 (patch)
tree9d789adaad77b7c01e828a9e4c2925b9b39c4ca4 /drivers/hwmon
parenthwmon: (it87) Rename FEAT_CONF_NOEXIT to FEAT_NOCONF as more descriptive of r... (diff)
downloadlinux-e2e6a23f4bda2de9c7096aa9c310bc3400187e90.tar.xz
linux-e2e6a23f4bda2de9c7096aa9c310bc3400187e90.zip
hwmon: (it87) Do not enter configuration mode for some chiptypes
Update the configuration mode entry code to allow conditional entry, and apply to all calls. Signed-off-by: Frank Crawford <frank@crawford.emu.id.au> Link: https://lore.kernel.org/r/20240428060653.2425296-3-frank@crawford.emu.id.au Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r--drivers/hwmon/it87.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c
index 23b68808d07d..702a3752a211 100644
--- a/drivers/hwmon/it87.c
+++ b/drivers/hwmon/it87.c
@@ -117,7 +117,7 @@ static inline void superio_select(int ioreg, int ldn)
outb(ldn, ioreg + 1);
}
-static inline int superio_enter(int ioreg)
+static inline int superio_enter(int ioreg, bool noentry)
{
/*
* Try to reserve ioreg and ioreg + 1 for exclusive access.
@@ -125,7 +125,8 @@ static inline int superio_enter(int ioreg)
if (!request_muxed_region(ioreg, 2, DRVNAME))
return -EBUSY;
- __superio_enter(ioreg);
+ if (!noentry)
+ __superio_enter(ioreg);
return 0;
}
@@ -742,7 +743,7 @@ static int smbus_disable(struct it87_data *data)
int err;
if (data->smbus_bitmap) {
- err = superio_enter(data->sioaddr);
+ err = superio_enter(data->sioaddr, has_noconf(data));
if (err)
return err;
superio_select(data->sioaddr, PME);
@@ -758,7 +759,7 @@ static int smbus_enable(struct it87_data *data)
int err;
if (data->smbus_bitmap) {
- err = superio_enter(data->sioaddr);
+ err = superio_enter(data->sioaddr, has_noconf(data));
if (err)
return err;
@@ -2674,7 +2675,7 @@ static int __init it87_find(int sioaddr, unsigned short *address,
u16 chip_type;
const struct it87_devices *config = NULL;
- err = superio_enter(sioaddr);
+ err = superio_enter(sioaddr, false);
if (err)
return err;
@@ -3520,7 +3521,7 @@ static void it87_resume_sio(struct platform_device *pdev)
if (!data->need_in7_reroute)
return;
- err = superio_enter(data->sioaddr);
+ err = superio_enter(data->sioaddr, has_noconf(data));
if (err) {
dev_warn(&pdev->dev,
"Unable to enter Super I/O to reroute in7 (%d)",