git: 26a0a4035e51 - main - superio: Add superio_ldn_read and superio_ldn_write
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 01 Jul 2023 17:20:42 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=26a0a4035e517d633b96cbcfe6b75bddec553ec3 commit 26a0a4035e517d633b96cbcfe6b75bddec553ec3 Author: Stéphane Rochoy <stephane.rochoy@stormshield.eu> AuthorDate: 2023-07-01 17:19:44 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2023-07-01 17:19:49 +0000 superio: Add superio_ldn_read and superio_ldn_write Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/719 --- sys/dev/superio/superio.c | 38 ++++++++++++++++++++++++++------------ sys/dev/superio/superio.h | 2 ++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/sys/dev/superio/superio.c b/sys/dev/superio/superio.c index 6f2e44450681..1e4782277c0e 100644 --- a/sys/dev/superio/superio.c +++ b/sys/dev/superio/superio.c @@ -564,7 +564,7 @@ superio_detect(device_t dev, bool claim, struct siosc *sc) sc->vendor == SUPERIO_VENDOR_FINTEK, ("Only ITE, Nuvoton and Fintek SuperIO-s are supported")); sc->ldn_reg = 0x07; - sc->enable_reg = 0x30; + sc->enable_reg = 0x30; /* FIXME enable_reg not used by nctgpio(4). */ sc->current_ldn = 0xff; /* no device should have this */ if (superio_table[i].descr != NULL) { @@ -877,30 +877,44 @@ superio_revid(device_t dev) return (sc->revid); } +uint8_t +superio_ldn_read(device_t dev, uint8_t ldn, uint8_t reg) +{ + device_t sio_dev = device_get_parent(dev); + struct siosc *sc = device_get_softc(sio_dev); + uint8_t v; + + sio_conf_enter(sc); + v = sio_ldn_read(sc, ldn, reg); + sio_conf_exit(sc); + return (v); +} + uint8_t superio_read(device_t dev, uint8_t reg) { - device_t sio_dev = device_get_parent(dev); - struct siosc *sc = device_get_softc(sio_dev); struct superio_devinfo *dinfo = device_get_ivars(dev); - uint8_t v; + + return (superio_ldn_read(dev, dinfo->ldn, reg)); +} + +void +superio_ldn_write(device_t dev, uint8_t ldn, uint8_t reg, uint8_t val) +{ + device_t sio_dev = device_get_parent(dev); + struct siosc *sc = device_get_softc(sio_dev); sio_conf_enter(sc); - v = sio_ldn_read(sc, dinfo->ldn, reg); + sio_ldn_write(sc, ldn, reg, val); sio_conf_exit(sc); - return (v); } void superio_write(device_t dev, uint8_t reg, uint8_t val) { - device_t sio_dev = device_get_parent(dev); - struct siosc *sc = device_get_softc(sio_dev); struct superio_devinfo *dinfo = device_get_ivars(dev); - sio_conf_enter(sc); - sio_ldn_write(sc, dinfo->ldn, reg, val); - sio_conf_exit(sc); + return (superio_ldn_write(dev, dinfo->ldn, reg, val)); } bool @@ -915,7 +929,7 @@ superio_dev_enabled(device_t dev, uint8_t mask) if (sc->vendor == SUPERIO_VENDOR_ITE && dinfo->ldn == 7) return (true); - v = superio_read(dev, sc->enable_reg); + v = superio_read(dev, sc->enable_reg); /* FIXME enable_reg not used by nctgpio(4). */ return ((v & mask) != 0); } diff --git a/sys/dev/superio/superio.h b/sys/dev/superio/superio.h index 993f95fc9fbb..997bcb2c6efd 100644 --- a/sys/dev/superio/superio.h +++ b/sys/dev/superio/superio.h @@ -50,7 +50,9 @@ superio_vendor_t superio_vendor(device_t dev); uint16_t superio_devid(device_t dev); uint8_t superio_revid(device_t dev); uint8_t superio_read(device_t dev, uint8_t reg); +uint8_t superio_ldn_read(device_t dev, uint8_t ldn, uint8_t reg); void superio_write(device_t dev, uint8_t reg, uint8_t val); +void superio_ldn_write(device_t dev, uint8_t ldn, uint8_t reg, uint8_t val); bool superio_dev_enabled(device_t dev, uint8_t mask); void superio_dev_enable(device_t dev, uint8_t mask); void superio_dev_disable(device_t dev, uint8_t mask);