summaryrefslogtreecommitdiff
path: root/sys/arch/macppc/dev
diff options
context:
space:
mode:
authorthorpej <thorpej@NetBSD.org>2019-12-22 23:23:29 +0000
committerthorpej <thorpej@NetBSD.org>2019-12-22 23:23:29 +0000
commit610ff4e3ae6ad25a6a82cedd14aba2e21c166fcf (patch)
tree399b6d9957236dd675dc7f146409d49e1c2e9094 /sys/arch/macppc/dev
parent4ff8b605543e92471fa8d401ee15d4ffd5f49b05 (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.c33
-rw-r--r--sys/arch/macppc/dev/ki2c.c30
-rw-r--r--sys/arch/macppc/dev/pmu.c34
-rw-r--r--sys/arch/macppc/dev/smu.c33
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)
{