diff options
| author | thorpej <thorpej@NetBSD.org> | 2019-12-22 23:23:29 +0000 |
|---|---|---|
| committer | thorpej <thorpej@NetBSD.org> | 2019-12-22 23:23:29 +0000 |
| commit | 610ff4e3ae6ad25a6a82cedd14aba2e21c166fcf (patch) | |
| tree | 399b6d9957236dd675dc7f146409d49e1c2e9094 /sys/arch/macppc/dev | |
| parent | 4ff8b605543e92471fa8d401ee15d4ffd5f49b05 (diff) | |
Cleanup i2c bus acquire / release, centralizing all of the logic into
iic_acquire_bus() / iic_release_bus(). "acquire" and "release" hooks
no longer need to be provided by back-end controller drivers (only if
they need special handling, e.g. powering on the i2c controller).
This results in the removal of a bunch of rendundant code from each
back-end controller driver.
Assert that we are not in hard interrupt context in iic_acquire_bus(),
iic_exec(), and iic_release_bus().
Diffstat (limited to 'sys/arch/macppc/dev')
| -rw-r--r-- | sys/arch/macppc/dev/cuda.c | 33 | ||||
| -rw-r--r-- | sys/arch/macppc/dev/ki2c.c | 30 | ||||
| -rw-r--r-- | sys/arch/macppc/dev/pmu.c | 34 | ||||
| -rw-r--r-- | sys/arch/macppc/dev/smu.c | 33 |
4 files changed, 9 insertions, 121 deletions
diff --git a/sys/arch/macppc/dev/cuda.c b/sys/arch/macppc/dev/cuda.c index 638667c74e2..3c19894be04 100644 --- a/sys/arch/macppc/dev/cuda.c +++ b/sys/arch/macppc/dev/cuda.c @@ -1,4 +1,4 @@ -/* $NetBSD: cuda.c,v 1.23 2018/09/03 16:29:25 riastradh Exp $ */ +/* $NetBSD: cuda.c,v 1.24 2019/12/22 23:23:30 thorpej Exp $ */ /*- * Copyright (c) 2006 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.23 2018/09/03 16:29:25 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cuda.c,v 1.24 2019/12/22 23:23:30 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -79,7 +79,6 @@ struct cuda_softc { struct todr_chip_handle sc_todr; struct adb_bus_accessops sc_adbops; struct i2c_controller sc_i2c; - kmutex_t sc_buslock; bus_space_tag_t sc_memt; bus_space_handle_t sc_memh; int sc_node; @@ -145,8 +144,6 @@ static int cuda_adb_send(void *, int, int, int, uint8_t *); static int cuda_adb_set_handler(void *, void (*)(void *, int, uint8_t *), void *); /* i2c stuff */ -static int cuda_i2c_acquire_bus(void *, int); -static void cuda_i2c_release_bus(void *, int); static int cuda_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t, void *, size_t, int); @@ -277,17 +274,10 @@ cuda_attach(device_t parent, device_t self, void *aux) prop_object_release(dev); } - mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE); memset(&iba, 0, sizeof(iba)); iba.iba_tag = &sc->sc_i2c; + iic_tag_init(&sc->sc_i2c); sc->sc_i2c.ic_cookie = sc; - sc->sc_i2c.ic_acquire_bus = cuda_i2c_acquire_bus; - sc->sc_i2c.ic_release_bus = cuda_i2c_release_bus; - sc->sc_i2c.ic_send_start = NULL; - sc->sc_i2c.ic_send_stop = NULL; - sc->sc_i2c.ic_initiate_xfer = NULL; - sc->sc_i2c.ic_read_byte = NULL; - sc->sc_i2c.ic_write_byte = NULL; sc->sc_i2c.ic_exec = cuda_i2c_exec; config_found_ia(self, "i2cbus", &iba, iicbus_print); @@ -939,23 +929,6 @@ cuda_adb_set_handler(void *cookie, void (*handler)(void *, int, uint8_t *), /* i2c message handling */ static int -cuda_i2c_acquire_bus(void *cookie, int flags) -{ - struct cuda_softc *sc = cookie; - - mutex_enter(&sc->sc_buslock); - return 0; -} - -static void -cuda_i2c_release_bus(void *cookie, int flags) -{ - struct cuda_softc *sc = cookie; - - mutex_exit(&sc->sc_buslock); -} - -static int cuda_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *_send, size_t send_len, void *_recv, size_t recv_len, int flags) { diff --git a/sys/arch/macppc/dev/ki2c.c b/sys/arch/macppc/dev/ki2c.c index aa8687c8a8c..c0c1bc42507 100644 --- a/sys/arch/macppc/dev/ki2c.c +++ b/sys/arch/macppc/dev/ki2c.c @@ -1,4 +1,4 @@ -/* $NetBSD: ki2c.c,v 1.26 2019/08/15 22:35:39 macallan Exp $ */ +/* $NetBSD: ki2c.c,v 1.27 2019/12/22 23:23:30 thorpej Exp $ */ /* Id: ki2c.c,v 1.7 2002/10/05 09:56:05 tsubai Exp */ /*- @@ -58,8 +58,6 @@ int ki2c_read(struct ki2c_softc *, int, int, void *, int); int ki2c_write(struct ki2c_softc *, int, int, void *, int); /* I2C glue */ -static int ki2c_i2c_acquire_bus(void *, int); -static void ki2c_i2c_release_bus(void *, int); static int ki2c_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t, void *, size_t, int); @@ -126,7 +124,6 @@ ki2c_attach(device_t parent, device_t self, void *aux) ki2c_setmode(sc, I2C_STDSUBMODE); ki2c_setspeed(sc, I2C_100kHz); /* XXX rate */ - mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE); ki2c_writereg(sc, IER,I2C_INT_DATA|I2C_INT_ADDR|I2C_INT_STOP); cfg = prop_array_create(); @@ -197,14 +194,8 @@ ki2c_attach(device_t parent, device_t self, void *aux) } /* fill in the i2c tag */ + iic_tag_init(&sc->sc_i2c); sc->sc_i2c.ic_cookie = sc; - sc->sc_i2c.ic_acquire_bus = ki2c_i2c_acquire_bus; - sc->sc_i2c.ic_release_bus = ki2c_i2c_release_bus; - sc->sc_i2c.ic_send_start = NULL; - sc->sc_i2c.ic_send_stop = NULL; - sc->sc_i2c.ic_initiate_xfer = NULL; - sc->sc_i2c.ic_read_byte = NULL; - sc->sc_i2c.ic_write_byte = NULL; sc->sc_i2c.ic_exec = ki2c_i2c_exec; memset(&iba, 0, sizeof(iba)); @@ -389,23 +380,6 @@ ki2c_write(struct ki2c_softc *sc, int addr, int subaddr, void *data, int len) return ki2c_start(sc, addr, subaddr, data, len); } -static int -ki2c_i2c_acquire_bus(void *cookie, int flags) -{ - struct ki2c_softc *sc = cookie; - - mutex_enter(&sc->sc_buslock); - return 0; -} - -static void -ki2c_i2c_release_bus(void *cookie, int flags) -{ - struct ki2c_softc *sc = cookie; - - mutex_exit(&sc->sc_buslock); -} - int ki2c_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *vcmd, size_t cmdlen, void *vbuf, size_t buflen, int flags) diff --git a/sys/arch/macppc/dev/pmu.c b/sys/arch/macppc/dev/pmu.c index 2f30415d135..7a50071ab43 100644 --- a/sys/arch/macppc/dev/pmu.c +++ b/sys/arch/macppc/dev/pmu.c @@ -1,4 +1,4 @@ -/* $NetBSD: pmu.c,v 1.32 2018/09/03 16:29:25 riastradh Exp $ */ +/* $NetBSD: pmu.c,v 1.33 2019/12/22 23:23:30 thorpej Exp $ */ /*- * Copyright (c) 2006 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: pmu.c,v 1.32 2018/09/03 16:29:25 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pmu.c,v 1.33 2019/12/22 23:23:30 thorpej Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -85,7 +85,6 @@ struct pmu_softc { struct todr_chip_handle sc_todr; struct adb_bus_accessops sc_adbops; struct i2c_controller sc_i2c; - kmutex_t sc_i2c_lock; struct pmu_ops sc_pmu_ops; struct sysmon_pswitch sc_lidswitch; struct sysmon_pswitch sc_powerbutton; @@ -147,8 +146,6 @@ static int pmu_adb_send(void *, int, int, int, uint8_t *); static int pmu_adb_set_handler(void *, void (*)(void *, int, uint8_t *), void *); /* i2c stuff */ -static int pmu_i2c_acquire_bus(void *, int); -static void pmu_i2c_release_bus(void *, int); static int pmu_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t, void *, size_t, int); @@ -381,15 +378,8 @@ pmu_attach(device_t parent, device_t self, void *aux) } memset(&iba, 0, sizeof(iba)); iba.iba_tag = &sc->sc_i2c; - mutex_init(&sc->sc_i2c_lock, MUTEX_DEFAULT, IPL_NONE); + iic_tag_init(&sc->sc_i2c); sc->sc_i2c.ic_cookie = sc; - sc->sc_i2c.ic_acquire_bus = pmu_i2c_acquire_bus; - sc->sc_i2c.ic_release_bus = pmu_i2c_release_bus; - sc->sc_i2c.ic_send_start = NULL; - sc->sc_i2c.ic_send_stop = NULL; - sc->sc_i2c.ic_initiate_xfer = NULL; - sc->sc_i2c.ic_read_byte = NULL; - sc->sc_i2c.ic_write_byte = NULL; sc->sc_i2c.ic_exec = pmu_i2c_exec; config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print); @@ -926,24 +916,6 @@ pmu_adb_set_handler(void *cookie, void (*handler)(void *, int, uint8_t *), } static int -pmu_i2c_acquire_bus(void *cookie, int flags) -{ - struct pmu_softc *sc = cookie; - - mutex_enter(&sc->sc_i2c_lock); - - return 0; -} - -static void -pmu_i2c_release_bus(void *cookie, int flags) -{ - struct pmu_softc *sc = cookie; - - mutex_exit(&sc->sc_i2c_lock); -} - -static int pmu_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *_send, size_t send_len, void *_recv, size_t recv_len, int flags) { diff --git a/sys/arch/macppc/dev/smu.c b/sys/arch/macppc/dev/smu.c index e6b1ef1a945..cbdf31d2ea6 100644 --- a/sys/arch/macppc/dev/smu.c +++ b/sys/arch/macppc/dev/smu.c @@ -113,7 +113,6 @@ struct smu_softc { int sc_num_fans; struct smu_fan sc_fans[SMU_MAX_FANS]; - kmutex_t sc_iicbus_lock; int sc_num_iicbus; struct smu_iicbus sc_iicbus[SMU_MAX_IICBUS]; @@ -166,8 +165,6 @@ static int smu_todr_settime_ymdhms(todr_chip_handle_t, struct clock_ymdhms *); static int smu_fan_update_rpm(struct smu_fan *); static int smu_fan_get_rpm(struct smu_fan *, int *); static int smu_fan_set_rpm(struct smu_fan *, int); -static int smu_iicbus_acquire_bus(void *, int); -static void smu_iicbus_release_bus(void *, int); static int smu_iicbus_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t, void *, size_t, int); static int smu_sysctl_fan_rpm(SYSCTLFN_ARGS); @@ -434,8 +431,6 @@ smu_setup_iicbus(struct smu_softc *sc) int node; char name[32]; - mutex_init(&sc->sc_iicbus_lock, MUTEX_DEFAULT, IPL_NONE); - node = of_getnode_byname(sc->sc_node, "smu-i2c-control"); for (node = OF_child(node); (node != 0) && (sc->sc_num_iicbus < SMU_MAX_IICBUS); @@ -454,14 +449,8 @@ smu_setup_iicbus(struct smu_softc *sc) DPRINTF("iicbus: reg %x\n", iicbus->reg); + iic_tag_init(i2c); i2c->ic_cookie = iicbus; - i2c->ic_acquire_bus = smu_iicbus_acquire_bus; - i2c->ic_release_bus = smu_iicbus_release_bus; - i2c->ic_send_start = NULL; - i2c->ic_send_stop = NULL; - i2c->ic_initiate_xfer = NULL; - i2c->ic_read_byte = NULL; - i2c->ic_write_byte = NULL; i2c->ic_exec = smu_iicbus_exec; ca.ca_name = name; @@ -773,26 +762,6 @@ smu_fan_set_rpm(struct smu_fan *fan, int rpm) } static int -smu_iicbus_acquire_bus(void *cookie, int flags) -{ - struct smu_iicbus *iicbus = cookie; - struct smu_softc *sc = iicbus->sc; - - mutex_enter(&sc->sc_iicbus_lock); - - return 0; -} - -static void -smu_iicbus_release_bus(void *cookie, int flags) -{ - struct smu_iicbus *iicbus = cookie; - struct smu_softc *sc = iicbus->sc; - - mutex_exit(&sc->sc_iicbus_lock); -} - -static int smu_iicbus_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *send, size_t send_len, void *recv, size_t recv_len, int flags) { |
