Module Name: src
Committed By: thorpej
Date: Sun Dec 22 23:23:32 UTC 2019
Modified Files:
src/sys/arch/alpha/pci: tsciic.c tsvar.h
src/sys/arch/arm/at91: at91twi.c at91twivar.h
src/sys/arch/arm/iomd: iomdiic.c
src/sys/arch/arm/omap: omap3_i2c.c ti_iic.c
src/sys/arch/arm/rockchip: rk_i2c.c
src/sys/arch/arm/sunxi: sunxi_hdmi.c sunxi_rsb.c
src/sys/arch/arm/xscale: i80312_i2c.c i80321_i2c.c iopi2c.c iopi2cvar.h
src/sys/arch/evbarm/armadillo: armadillo9_iic.c
src/sys/arch/evbarm/gumstix: gxiic.c
src/sys/arch/evbarm/nslu2: nslu2_iic.c
src/sys/arch/hpcarm/dev: nbpiic.c
src/sys/arch/i386/pci: viapcib.c
src/sys/arch/macppc/dev: cuda.c ki2c.c pmu.c smu.c
src/sys/arch/macppc/macppc: memory.c
src/sys/arch/mips/alchemy/dev: ausmbus_psc.c
src/sys/arch/mips/ingenic: jziic.c
src/sys/arch/mips/ralink: ralink_i2c.c
src/sys/arch/mmeye/dev: rtciic.c
src/sys/arch/powerpc/ibm4xx/dev: gpiic_opb.c
src/sys/arch/sgimips/dev: crmfb.c
src/sys/arch/sparc64/dev: ffb.c jbus-i2c.c
src/sys/arch/x86/pci/imcsmb: imcsmb.c
src/sys/arch/zaurus/dev: ziic.c
src/sys/dev/acpi: smbus_acpi.c
src/sys/dev/gpio: gpioiic.c
src/sys/dev/i2c: gttwsi_core.c i2c.c i2c_exec.c i2cvar.h motoi2c.c
motoi2cvar.h
src/sys/dev/ic: dw_hdmi.c dw_hdmi.h dwiic.c pca9564.c pca9564var.h
pcf8584.c pcf8584var.h
src/sys/dev/pci: alipm.c amdpm_smbus.c amdpmvar.h coram.c cxdtv.c
ichsmb.c if_tl.c igma.c ismt.c nfsmb.c piixpm.c pm2fb.c pm3fb.c
radeonfb_i2c.c voodoofb.c voyager.c
src/sys/dev/usb: auvitek_i2c.c emdtv_i2c.c
Log Message:
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().
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/alpha/pci/tsciic.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/alpha/pci/tsvar.h
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/at91/at91twi.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/at91/at91twivar.h
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/iomd/iomdiic.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/omap/omap3_i2c.c
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/omap/ti_iic.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/rockchip/rk_i2c.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/sunxi/sunxi_hdmi.c \
src/sys/arch/arm/sunxi/sunxi_rsb.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/xscale/i80312_i2c.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/arm/xscale/i80321_i2c.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/arm/xscale/iopi2c.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/xscale/iopi2cvar.h
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/evbarm/armadillo/armadillo9_iic.c
cvs rdiff -u -r1.8 -r1.9 src/sys/arch/evbarm/gumstix/gxiic.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/evbarm/nslu2/nslu2_iic.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/hpcarm/dev/nbpiic.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/i386/pci/viapcib.c
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/macppc/dev/cuda.c
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/macppc/dev/ki2c.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/macppc/dev/pmu.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/macppc/dev/smu.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/macppc/macppc/memory.c
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/mips/alchemy/dev/ausmbus_psc.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/mips/ingenic/jziic.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/mips/ralink/ralink_i2c.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mmeye/dev/rtciic.c
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/sgimips/dev/crmfb.c
cvs rdiff -u -r1.63 -r1.64 src/sys/arch/sparc64/dev/ffb.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/sparc64/dev/jbus-i2c.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/x86/pci/imcsmb/imcsmb.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/zaurus/dev/ziic.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/acpi/smbus_acpi.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/gpio/gpioiic.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/i2c/gttwsi_core.c
cvs rdiff -u -r1.70 -r1.71 src/sys/dev/i2c/i2c.c
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/i2c/i2c_exec.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/i2c/i2cvar.h
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/i2c/motoi2c.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/i2c/motoi2cvar.h
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/ic/dw_hdmi.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/ic/dw_hdmi.h src/sys/dev/ic/dwiic.c \
src/sys/dev/ic/pcf8584var.h
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/pca9564.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ic/pca9564var.h
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/ic/pcf8584.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/pci/alipm.c
cvs rdiff -u -r1.22 -r1.23 src/sys/dev/pci/amdpm_smbus.c
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/pci/amdpmvar.h
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/pci/coram.c src/sys/dev/pci/cxdtv.c
cvs rdiff -u -r1.62 -r1.63 src/sys/dev/pci/ichsmb.c
cvs rdiff -u -r1.117 -r1.118 src/sys/dev/pci/if_tl.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/igma.c
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/pci/ismt.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/nfsmb.c
cvs rdiff -u -r1.54 -r1.55 src/sys/dev/pci/piixpm.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/pci/pm2fb.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/pci/pm3fb.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/pci/radeonfb_i2c.c
cvs rdiff -u -r1.52 -r1.53 src/sys/dev/pci/voodoofb.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/voyager.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/usb/auvitek_i2c.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/usb/emdtv_i2c.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/alpha/pci/tsciic.c
diff -u src/sys/arch/alpha/pci/tsciic.c:1.1 src/sys/arch/alpha/pci/tsciic.c:1.2
--- src/sys/arch/alpha/pci/tsciic.c:1.1 Fri Feb 21 12:23:30 2014
+++ src/sys/arch/alpha/pci/tsciic.c Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tsciic.c,v 1.1 2014/02/21 12:23:30 jdc Exp $ */
+/* $NetBSD: tsciic.c,v 1.2 2019/12/22 23:23:29 thorpej Exp $ */
/*
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tsciic.c,v 1.1 2014/02/21 12:23:30 jdc Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tsciic.c,v 1.2 2019/12/22 23:23:29 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -45,8 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: tsciic.c,v 1
#include <dev/i2c/ddcvar.h>
/* I2C glue */
-static int tsciic_acquire_bus(void *, int);
-static void tsciic_release_bus(void *, int);
static int tsciic_send_start(void *, int);
static int tsciic_send_stop(void *, int);
static int tsciic_initiate_xfer(void *, i2c_addr_t, int);
@@ -77,17 +75,13 @@ tsciic_init(device_t self) {
struct tsciic_softc *sc = device_private(self);
struct i2cbus_attach_args iba;
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = tsciic_acquire_bus;
- sc->sc_i2c.ic_release_bus = tsciic_release_bus;
sc->sc_i2c.ic_send_start = tsciic_send_start;
sc->sc_i2c.ic_send_stop = tsciic_send_stop;
sc->sc_i2c.ic_initiate_xfer = tsciic_initiate_xfer;
sc->sc_i2c.ic_read_byte = tsciic_read_byte;
sc->sc_i2c.ic_write_byte = tsciic_write_byte;
- sc->sc_i2c.ic_exec = NULL;
memset(&iba, 0, sizeof(iba));
iba.iba_tag = &sc->sc_i2c;
@@ -129,23 +123,6 @@ tsciicbb_read(void *cookie)
/* higher level I2C stuff */
static int
-tsciic_acquire_bus(void *cookie, int flags)
-{
- struct tsciic_softc *sc = cookie;
-
- mutex_enter(&sc->sc_buslock);
- return 0;
-}
-
-static void
-tsciic_release_bus(void *cookie, int flags)
-{
- struct tsciic_softc *sc = cookie;
-
- mutex_exit(&sc->sc_buslock);
-}
-
-static int
tsciic_send_start(void *cookie, int flags)
{
return (i2c_bitbang_send_start(cookie, flags, &tsciicbb_ops));
Index: src/sys/arch/alpha/pci/tsvar.h
diff -u src/sys/arch/alpha/pci/tsvar.h:1.12 src/sys/arch/alpha/pci/tsvar.h:1.13
--- src/sys/arch/alpha/pci/tsvar.h:1.12 Fri Feb 21 12:23:30 2014
+++ src/sys/arch/alpha/pci/tsvar.h Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: tsvar.h,v 1.12 2014/02/21 12:23:30 jdc Exp $ */
+/* $NetBSD: tsvar.h,v 1.13 2019/12/22 23:23:29 thorpej Exp $ */
/*-
* Copyright (c) 1999 by Ross Harvey. All rights reserved.
@@ -72,7 +72,6 @@ struct tsp_attach_args {
struct tsciic_softc {
device_t sc_dev;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
};
struct tsciic_attach_args {
Index: src/sys/arch/arm/at91/at91twi.c
diff -u src/sys/arch/arm/at91/at91twi.c:1.7 src/sys/arch/arm/at91/at91twi.c:1.8
--- src/sys/arch/arm/at91/at91twi.c:1.7 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/arm/at91/at91twi.c Sun Dec 22 23:23:29 2019
@@ -1,5 +1,5 @@
-/* $Id: at91twi.c,v 1.7 2016/02/14 19:54:20 chs Exp $ */
-/* $NetBSD: at91twi.c,v 1.7 2016/02/14 19:54:20 chs Exp $ */
+/* $Id: at91twi.c,v 1.8 2019/12/22 23:23:29 thorpej Exp $ */
+/* $NetBSD: at91twi.c,v 1.8 2019/12/22 23:23:29 thorpej Exp $ */
/*-
* Copyright (c) 2007 Embedtronics Oy. All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: at91twi.c,v 1.7 2016/02/14 19:54:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: at91twi.c,v 1.8 2019/12/22 23:23:29 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -58,8 +58,6 @@ int at91twi_read(struct at91twi_softc *,
int at91twi_write(struct at91twi_softc *, int, void *, int, int);
/* I2C glue */
-static int at91twi_i2c_acquire_bus(void *, int);
-static void at91twi_i2c_release_bus(void *, int);
static int at91twi_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t,
void *, size_t, int);
@@ -119,19 +117,12 @@ found_ckdiv:
//#endif
/* initialize rest */
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
sc->sc_ih = at91_intr_establish(sc->sc_pid, IPL_SERIAL, INTR_HIGH_LEVEL,
at91twi_intr, sc);
/* fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = at91twi_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = at91twi_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 = at91twi_i2c_exec;
memset(&iba, 0, sizeof(iba));
@@ -294,29 +285,6 @@ at91twi_write(struct at91twi_softc *sc,
return at91twi_start(sc, addr, data, len, flags);
}
-static int
-at91twi_i2c_acquire_bus(void *cookie, int flags)
-{
- struct at91twi_softc *sc = cookie;
-
- if (flags & I2C_F_POLL)
- return 0;
-
- mutex_enter(&sc->sc_buslock);
- return 0;
-}
-
-static void
-at91twi_i2c_release_bus(void *cookie, int flags)
-{
- struct at91twi_softc *sc = cookie;
-
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_buslock);
-}
-
int
at91twi_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)
Index: src/sys/arch/arm/at91/at91twivar.h
diff -u src/sys/arch/arm/at91/at91twivar.h:1.2 src/sys/arch/arm/at91/at91twivar.h:1.3
--- src/sys/arch/arm/at91/at91twivar.h:1.2 Thu Jul 3 01:15:39 2008
+++ src/sys/arch/arm/at91/at91twivar.h Sun Dec 22 23:23:29 2019
@@ -1,5 +1,5 @@
-/* $Id: at91twivar.h,v 1.2 2008/07/03 01:15:39 matt Exp $ */
-/* $NetBSD: at91twivar.h,v 1.2 2008/07/03 01:15:39 matt Exp $ */
+/* $Id: at91twivar.h,v 1.3 2019/12/22 23:23:29 thorpej Exp $ */
+/* $NetBSD: at91twivar.h,v 1.3 2019/12/22 23:23:29 thorpej Exp $ */
/*-
* Copyright (c) 2007 Embedtronics Oy. All rights reserved.
@@ -40,7 +40,6 @@ struct at91twi_softc {
int sc_pid; /* peripheral id */
struct i2c_controller sc_i2c; /* I2C device desc */
- kmutex_t sc_buslock; /* bus lock */
void *sc_ih; /* interrupt handle */
Index: src/sys/arch/arm/iomd/iomdiic.c
diff -u src/sys/arch/arm/iomd/iomdiic.c:1.8 src/sys/arch/arm/iomd/iomdiic.c:1.9
--- src/sys/arch/arm/iomd/iomdiic.c:1.8 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/arm/iomd/iomdiic.c Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: iomdiic.c,v 1.8 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: iomdiic.c,v 1.9 2019/12/22 23:23:29 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -57,7 +57,6 @@ struct iomdiic_softc {
bus_space_handle_t sc_sh;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
/*
* The SDA pin is open-drain, so we make it an input by
@@ -66,9 +65,6 @@ struct iomdiic_softc {
uint8_t sc_iomd_iocr;
};
-static int iomdiic_acquire_bus(void *, int);
-static void iomdiic_release_bus(void *, int);
-
static int iomdiic_send_start(void *, int);
static int iomdiic_send_stop(void *, int);
static int iomdiic_initiate_xfer(void *, i2c_addr_t, int);
@@ -136,11 +132,8 @@ iomdiic_attach(device_t parent, device_t
sc->sc_dev = self;
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = iomdiic_acquire_bus;
- sc->sc_i2c.ic_release_bus = iomdiic_release_bus;
sc->sc_i2c.ic_send_start = iomdiic_send_start;
sc->sc_i2c.ic_send_stop = iomdiic_send_stop;
sc->sc_i2c.ic_initiate_xfer = iomdiic_initiate_xfer;
@@ -165,9 +158,9 @@ iomdiic_bootstrap_cookie(void)
strcpy(dev.dv_xname, "iomdiicboot");
sc.sc_dev = &dev;
+
+ iic_tag_init(&sc.sc_i2c);
sc.sc_i2c.ic_cookie = ≻
- sc.sc_i2c.ic_acquire_bus = iomdiic_acquire_bus;
- sc.sc_i2c.ic_release_bus = iomdiic_release_bus;
sc.sc_i2c.ic_send_start = iomdiic_send_start;
sc.sc_i2c.ic_send_stop = iomdiic_send_stop;
sc.sc_i2c.ic_initiate_xfer = iomdiic_initiate_xfer;
@@ -178,31 +171,6 @@ iomdiic_bootstrap_cookie(void)
}
static int
-iomdiic_acquire_bus(void *cookie, int flags)
-{
- struct iomdiic_softc *sc = cookie;
-
- /* XXX What should we do for the polling case? */
- if (flags & I2C_F_POLL)
- return (0);
-
- mutex_enter(&sc->sc_buslock);
- return (0);
-}
-
-static void
-iomdiic_release_bus(void *cookie, int flags)
-{
- struct iomdiic_softc *sc = cookie;
-
- /* XXX See above. */
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_buslock);
-}
-
-static int
iomdiic_send_start(void *cookie, int flags)
{
Index: src/sys/arch/arm/omap/omap3_i2c.c
diff -u src/sys/arch/arm/omap/omap3_i2c.c:1.3 src/sys/arch/arm/omap/omap3_i2c.c:1.4
--- src/sys/arch/arm/omap/omap3_i2c.c:1.3 Wed Mar 13 03:08:17 2013
+++ src/sys/arch/arm/omap/omap3_i2c.c Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: omap3_i2c.c,v 1.3 2013/03/13 03:08:17 khorben Exp $ */
+/* $NetBSD: omap3_i2c.c,v 1.4 2019/12/22 23:23:29 thorpej Exp $ */
/*-
* Copyright (c) 2012 Jared D. McNeill <[email protected]>
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: omap3_i2c.c,v 1.3 2013/03/13 03:08:17 khorben Exp $");
+__KERNEL_RCSID(0, "$NetBSD: omap3_i2c.c,v 1.4 2019/12/22 23:23:29 thorpej Exp $");
#include "opt_omap.h"
@@ -53,7 +53,6 @@ __KERNEL_RCSID(0, "$NetBSD: omap3_i2c.c,
struct omap3_i2c_softc {
device_t sc_dev;
struct i2c_controller sc_ic;
- kmutex_t sc_lock;
device_t sc_i2cdev;
bus_space_tag_t sc_iot;
@@ -74,8 +73,6 @@ static void omap3_i2c_attach(device_t, d
static int omap3_i2c_rescan(device_t, const char *, const int *);
static void omap3_i2c_childdet(device_t, device_t);
-static int omap3_i2c_acquire_bus(void *, int);
-static void omap3_i2c_release_bus(void *, int);
static int omap3_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
@@ -120,10 +117,9 @@ omap3_i2c_attach(device_t parent, device
sc->sc_dev = self;
sc->sc_iot = obio->obio_iot;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
+
+ iic_tag_init(&sc->sc_ic);
sc->sc_ic.ic_cookie = sc;
- sc->sc_ic.ic_acquire_bus = omap3_i2c_acquire_bus;
- sc->sc_ic.ic_release_bus = omap3_i2c_release_bus;
sc->sc_ic.ic_exec = omap3_i2c_exec;
if (bus_space_map(obio->obio_iot, obio->obio_addr, obio->obio_size,
@@ -169,29 +165,6 @@ omap3_i2c_childdet(device_t self, device
}
static int
-omap3_i2c_acquire_bus(void *opaque, int flags)
-{
- struct omap3_i2c_softc *sc = opaque;
-
- if (flags & I2C_F_POLL) {
- if (!mutex_tryenter(&sc->sc_lock))
- return EBUSY;
- } else {
- mutex_enter(&sc->sc_lock);
- }
-
- return 0;
-}
-
-static void
-omap3_i2c_release_bus(void *opaque, int flags)
-{
- struct omap3_i2c_softc *sc = opaque;
-
- mutex_exit(&sc->sc_lock);
-}
-
-static int
omap3_i2c_exec(void *opaque, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/arch/arm/omap/ti_iic.c
diff -u src/sys/arch/arm/omap/ti_iic.c:1.10 src/sys/arch/arm/omap/ti_iic.c:1.11
--- src/sys/arch/arm/omap/ti_iic.c:1.10 Sun Oct 16 13:09:57 2016
+++ src/sys/arch/arm/omap/ti_iic.c Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ti_iic.c,v 1.10 2016/10/16 13:09:57 kiyohara Exp $ */
+/* $NetBSD: ti_iic.c,v 1.11 2019/12/22 23:23:29 thorpej Exp $ */
/*
* Copyright (c) 2013 Manuel Bouyer. All rights reserved.
@@ -50,7 +50,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ti_iic.c,v 1.10 2016/10/16 13:09:57 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ti_iic.c,v 1.11 2019/12/22 23:23:29 thorpej Exp $");
#include "opt_omap.h"
#include "locators.h"
@@ -102,7 +102,6 @@ typedef enum {
struct ti_iic_softc {
device_t sc_dev;
struct i2c_controller sc_ic;
- kmutex_t sc_lock;
device_t sc_i2cdev;
bus_space_tag_t sc_iot;
@@ -136,8 +135,6 @@ static void ti_iic_childdet(device_t, de
static int ti_iic_intr(void *);
-static int ti_iic_acquire_bus(void *, int);
-static void ti_iic_release_bus(void *, int);
static int ti_iic_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
@@ -214,9 +211,10 @@ ti_iic_attach(device_t parent, device_t
sc->sc_dev = self;
sc->sc_iot = obio->obio_iot;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
mutex_init(&sc->sc_mtx, MUTEX_DEFAULT, IPL_NET);
cv_init(&sc->sc_cv, "tiiic");
+
+ iic_tag_init(&sc->sc_ic);
sc->sc_ic.ic_cookie = sc;
sc->sc_ic.ic_acquire_bus = ti_iic_acquire_bus;
sc->sc_ic.ic_release_bus = ti_iic_release_bus;
@@ -337,29 +335,6 @@ ti_iic_intr(void *arg)
}
static int
-ti_iic_acquire_bus(void *opaque, int flags)
-{
- struct ti_iic_softc *sc = opaque;
-
- if (flags & I2C_F_POLL) {
- if (!mutex_tryenter(&sc->sc_lock))
- return EBUSY;
- } else {
- mutex_enter(&sc->sc_lock);
- }
-
- return 0;
-}
-
-static void
-ti_iic_release_bus(void *opaque, int flags)
-{
- struct ti_iic_softc *sc = opaque;
-
- mutex_exit(&sc->sc_lock);
-}
-
-static int
ti_iic_exec(void *opaque, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/arch/arm/rockchip/rk_i2c.c
diff -u src/sys/arch/arm/rockchip/rk_i2c.c:1.6 src/sys/arch/arm/rockchip/rk_i2c.c:1.7
--- src/sys/arch/arm/rockchip/rk_i2c.c:1.6 Fri Nov 8 00:35:16 2019
+++ src/sys/arch/arm/rockchip/rk_i2c.c Sun Dec 22 23:23:29 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rk_i2c.c,v 1.6 2019/11/08 00:35:16 jmcneill Exp $ */
+/* $NetBSD: rk_i2c.c,v 1.7 2019/12/22 23:23:29 thorpej Exp $ */
/*-
* Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.6 2019/11/08 00:35:16 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk_i2c.c,v 1.7 2019/12/22 23:23:29 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -115,8 +115,6 @@ struct rk_i2c_softc {
u_int sc_clkfreq;
struct i2c_controller sc_ic;
- kmutex_t sc_lock;
- kcondvar_t sc_cv;
};
#define RD4(sc, reg) \
@@ -162,24 +160,6 @@ rk_i2c_init(struct rk_i2c_softc *sc)
}
static int
-rk_i2c_acquire_bus(void *priv, int flags)
-{
- struct rk_i2c_softc * const sc = priv;
-
- mutex_enter(&sc->sc_lock);
-
- return 0;
-}
-
-static void
-rk_i2c_release_bus(void *priv, int flags)
-{
- struct rk_i2c_softc * const sc = priv;
-
- mutex_exit(&sc->sc_lock);
-}
-
-static int
rk_i2c_wait(struct rk_i2c_softc *sc, uint32_t mask)
{
u_int timeo = 100000;
@@ -345,8 +325,6 @@ rk_i2c_exec(void *priv, i2c_op_t op, i2c
bool send_start = true;
int error;
- KASSERT(mutex_owned(&sc->sc_lock));
-
if (I2C_OP_READ_P(op)) {
uint8_t *databuf = buf;
while (buflen > 0) {
@@ -430,9 +408,6 @@ rk_i2c_attach(device_t parent, device_t
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SCHED);
- cv_init(&sc->sc_cv, "rkiic");
-
aprint_naive("\n");
aprint_normal(": Rockchip I2C (%u Hz)\n", sc->sc_clkfreq);
@@ -440,9 +415,8 @@ rk_i2c_attach(device_t parent, device_t
rk_i2c_init(sc);
+ iic_tag_init(&sc->sc_ic);
sc->sc_ic.ic_cookie = sc;
- sc->sc_ic.ic_acquire_bus = rk_i2c_acquire_bus;
- sc->sc_ic.ic_release_bus = rk_i2c_release_bus;
sc->sc_ic.ic_exec = rk_i2c_exec;
fdtbus_register_i2c_controller(self, phandle, &rk_i2c_funcs);
Index: src/sys/arch/arm/sunxi/sunxi_hdmi.c
diff -u src/sys/arch/arm/sunxi/sunxi_hdmi.c:1.7 src/sys/arch/arm/sunxi/sunxi_hdmi.c:1.8
--- src/sys/arch/arm/sunxi/sunxi_hdmi.c:1.7 Fri Jul 19 10:54:26 2019
+++ src/sys/arch/arm/sunxi/sunxi_hdmi.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_hdmi.c,v 1.7 2019/07/19 10:54:26 bouyer Exp $ */
+/* $NetBSD: sunxi_hdmi.c,v 1.8 2019/12/22 23:23:30 thorpej Exp $ */
/*-
* Copyright (c) 2014 Jared D. McNeill <[email protected]>
@@ -29,7 +29,7 @@
#include "opt_ddb.h"
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_hdmi.c,v 1.7 2019/07/19 10:54:26 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_hdmi.c,v 1.8 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -73,7 +73,7 @@ struct sunxi_hdmi_softc {
lwp_t *sc_thread;
struct i2c_controller sc_ic;
- kmutex_t sc_ic_lock;
+ kmutex_t sc_exec_lock;
bool sc_display_connected;
char sc_display_vendor[16];
@@ -114,8 +114,6 @@ static const struct of_compat_data compa
static int sunxi_hdmi_match(device_t, cfdata_t, void *);
static void sunxi_hdmi_attach(device_t, device_t, void *);
static void sunxi_hdmi_i2c_init(struct sunxi_hdmi_softc *);
-static int sunxi_hdmi_i2c_acquire_bus(void *, int);
-static void sunxi_hdmi_i2c_release_bus(void *, int);
static int sunxi_hdmi_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
static int sunxi_hdmi_i2c_xfer(void *, i2c_addr_t, uint8_t, uint8_t,
@@ -263,38 +261,14 @@ sunxi_hdmi_i2c_init(struct sunxi_hdmi_so
{
struct i2c_controller *ic = &sc->sc_ic;
- mutex_init(&sc->sc_ic_lock, MUTEX_DEFAULT, IPL_NONE);
+ mutex_init(&sc->sc_exec_lock, MUTEX_DEFAULT, IPL_NONE);
+ iic_tag_init(ic);
ic->ic_cookie = sc;
- ic->ic_acquire_bus = sunxi_hdmi_i2c_acquire_bus;
- ic->ic_release_bus = sunxi_hdmi_i2c_release_bus;
ic->ic_exec = sunxi_hdmi_i2c_exec;
}
static int
-sunxi_hdmi_i2c_acquire_bus(void *priv, int flags)
-{
- struct sunxi_hdmi_softc *sc = priv;
-
- if (flags & I2C_F_POLL) {
- if (!mutex_tryenter(&sc->sc_ic_lock))
- return EBUSY;
- } else {
- mutex_enter(&sc->sc_ic_lock);
- }
-
- return 0;
-}
-
-static void
-sunxi_hdmi_i2c_release_bus(void *priv, int flags)
-{
- struct sunxi_hdmi_softc *sc = priv;
-
- mutex_exit(&sc->sc_ic_lock);
-}
-
-static int
sunxi_hdmi_i2c_exec(void *priv, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
@@ -305,7 +279,8 @@ sunxi_hdmi_i2c_exec(void *priv, i2c_op_t
off_t off;
int err;
- KASSERT(mutex_owned(&sc->sc_ic_lock));
+ mutex_enter(&sc->sc_exec_lock);
+
KASSERT(op == I2C_OP_READ_WITH_STOP);
KASSERT(addr == DDC_ADDR);
KASSERT(cmdlen > 0);
@@ -349,6 +324,7 @@ sunxi_hdmi_i2c_exec(void *priv, i2c_op_t
}
done:
+ mutex_exit(&sc->sc_exec_lock);
return err;
}
@@ -435,7 +411,7 @@ sunxi_hdmi_i2c_xfer_1_4(void *priv, i2c_
if (cold)
delay(1000);
else
- kpause("hdmiddc", false, mstohz(10), &sc->sc_ic_lock);
+ kpause("hdmiddc", false, mstohz(10), &sc->sc_exec_lock);
}
if (retry == 0)
return ETIMEDOUT;
Index: src/sys/arch/arm/sunxi/sunxi_rsb.c
diff -u src/sys/arch/arm/sunxi/sunxi_rsb.c:1.7 src/sys/arch/arm/sunxi/sunxi_rsb.c:1.8
--- src/sys/arch/arm/sunxi/sunxi_rsb.c:1.7 Sun May 26 14:49:18 2019
+++ src/sys/arch/arm/sunxi/sunxi_rsb.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_rsb.c,v 1.7 2019/05/26 14:49:18 jmcneill Exp $ */
+/* $NetBSD: sunxi_rsb.c,v 1.8 2019/12/22 23:23:30 thorpej Exp $ */
/*-
* Copyright (c) 2014-2017 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_rsb.c,v 1.7 2019/05/26 14:49:18 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_rsb.c,v 1.8 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -85,8 +85,8 @@ struct sunxi_rsb_softc {
bus_space_handle_t sc_bsh;
enum sunxi_rsb_type sc_type;
struct i2c_controller sc_ic;
- kmutex_t sc_lock;
- kcondvar_t sc_cv;
+ kmutex_t sc_intr_lock;
+ kcondvar_t sc_intr_wait;
device_t sc_i2cdev;
void *sc_ih;
uint32_t sc_stat;
@@ -100,8 +100,6 @@ struct sunxi_rsb_softc {
#define RSB_WRITE(sc, reg, val) \
bus_space_write_4((sc)->sc_bst, (sc)->sc_bsh, (reg), (val))
-static int sunxi_rsb_acquire_bus(void *, int);
-static void sunxi_rsb_release_bus(void *, int);
static int sunxi_rsb_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
@@ -177,8 +175,8 @@ sunxi_rsb_attach(device_t parent, device
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_SCHED);
- cv_init(&sc->sc_cv, "sunxirsb");
+ mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_SCHED);
+ cv_init(&sc->sc_intr_wait, "sunxirsb");
aprint_naive("\n");
aprint_normal(": %s\n", sc->sc_type == SUNXI_P2WI ? "P2WI" : "RSB");
@@ -192,9 +190,8 @@ sunxi_rsb_attach(device_t parent, device
}
aprint_normal_dev(self, "interrupting on %s\n", intrstr);
+ iic_tag_init(&sc->sc_ic);
sc->sc_ic.ic_cookie = sc;
- sc->sc_ic.ic_acquire_bus = sunxi_rsb_acquire_bus;
- sc->sc_ic.ic_release_bus = sunxi_rsb_release_bus;
sc->sc_ic.ic_exec = sunxi_rsb_exec;
fdtbus_register_i2c_controller(self, phandle, &sunxi_rsb_funcs);
@@ -214,10 +211,10 @@ sunxi_rsb_intr(void *priv)
RSB_WRITE(sc, RSB_STAT_REG, stat & RSB_STAT_MASK);
- mutex_enter(&sc->sc_lock);
+ mutex_enter(&sc->sc_intr_lock);
sc->sc_stat |= stat;
- cv_broadcast(&sc->sc_cv);
- mutex_exit(&sc->sc_lock);
+ cv_broadcast(&sc->sc_intr_wait);
+ mutex_exit(&sc->sc_intr_lock);
return 1;
}
@@ -250,7 +247,8 @@ sunxi_rsb_wait(struct sunxi_rsb_softc *s
if (flags & I2C_F_POLL) {
sc->sc_stat |= RSB_READ(sc, RSB_STAT_REG);
} else {
- error = cv_timedwait(&sc->sc_cv, &sc->sc_lock, hz);
+ error = cv_timedwait(&sc->sc_intr_wait,
+ &sc->sc_intr_lock, hz);
if (error && error != EWOULDBLOCK) {
break;
}
@@ -298,7 +296,7 @@ sunxi_rsb_rsb_config(struct sunxi_rsb_so
{
uint32_t dar, ctrl;
- KASSERT(mutex_owned(&sc->sc_lock));
+ KASSERT(mutex_owned(&sc->sc_intr_lock));
RSB_WRITE(sc, RSB_STAT_REG,
RSB_READ(sc, RSB_STAT_REG) & RSB_STAT_MASK);
@@ -323,31 +321,6 @@ sunxi_rsb_rsb_config(struct sunxi_rsb_so
}
static int
-sunxi_rsb_acquire_bus(void *priv, int flags)
-{
- struct sunxi_rsb_softc *sc = priv;
-
- for (;;) {
- mutex_enter(&sc->sc_lock);
- if (sc->sc_busy == false)
- break;
- mutex_exit(&sc->sc_lock);
- }
- sc->sc_busy = true;
-
- return 0;
-}
-
-static void
-sunxi_rsb_release_bus(void *priv, int flags)
-{
- struct sunxi_rsb_softc *sc = priv;
-
- sc->sc_busy = false;
- mutex_exit(&sc->sc_lock);
-}
-
-static int
sunxi_rsb_exec(void *priv, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
@@ -356,14 +329,14 @@ sunxi_rsb_exec(void *priv, i2c_op_t op,
uint8_t rta;
int error, i;
- KASSERT(mutex_owned(&sc->sc_lock));
- KASSERT(sc->sc_busy == true);
-
if (cmdlen != 1 || (len != 1 && len != 2 && len != 4))
return EINVAL;
+ mutex_enter(&sc->sc_intr_lock);
+
error = sunxi_rsb_soft_reset(sc);
if (error != 0) {
+ mutex_exit(&sc->sc_intr_lock);
device_printf(sc->sc_dev, "soft reset timed out\n");
return error;
}
@@ -386,6 +359,7 @@ sunxi_rsb_exec(void *priv, i2c_op_t op,
break;
}
if (rta == 0) {
+ mutex_exit(&sc->sc_intr_lock);
device_printf(sc->sc_dev,
"RTA not known for address %#x\n", addr);
return ENXIO;
@@ -492,6 +466,7 @@ sunxi_rsb_exec(void *priv, i2c_op_t op,
done:
RSB_WRITE(sc, RSB_CTRL_REG, 0);
+ mutex_exit(&sc->sc_intr_lock);
return error;
}
Index: src/sys/arch/arm/xscale/i80312_i2c.c
diff -u src/sys/arch/arm/xscale/i80312_i2c.c:1.6 src/sys/arch/arm/xscale/i80312_i2c.c:1.7
--- src/sys/arch/arm/xscale/i80312_i2c.c:1.6 Tue Jan 10 18:55:37 2012
+++ src/sys/arch/arm/xscale/i80312_i2c.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i80312_i2c.c,v 1.6 2012/01/10 18:55:37 jakllsch Exp $ */
+/* $NetBSD: i80312_i2c.c,v 1.7 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i80312_i2c.c,v 1.6 2012/01/10 18:55:37 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i80312_i2c.c,v 1.7 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/mutex.h>
@@ -91,8 +91,6 @@ iic312_attach(device_t parent, device_t
/* XXX Reset the I2C unit? */
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
/* XXX We don't currently use interrupts. Fix this some day. */
#if 0
sc->sc_ih = i80321_intr_establish(ICU_INT_I2C, IPL_BIO,
Index: src/sys/arch/arm/xscale/i80321_i2c.c
diff -u src/sys/arch/arm/xscale/i80321_i2c.c:1.5 src/sys/arch/arm/xscale/i80321_i2c.c:1.6
--- src/sys/arch/arm/xscale/i80321_i2c.c:1.5 Tue Jan 10 18:55:37 2012
+++ src/sys/arch/arm/xscale/i80321_i2c.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i80321_i2c.c,v 1.5 2012/01/10 18:55:37 jakllsch Exp $ */
+/* $NetBSD: i80321_i2c.c,v 1.6 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i80321_i2c.c,v 1.5 2012/01/10 18:55:37 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i80321_i2c.c,v 1.6 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/mutex.h>
@@ -98,8 +98,6 @@ iic321_attach(device_t parent, device_t
/* XXX Reset the I2C unit? */
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
/* XXX We don't currently use interrupts. Fix this some day. */
#if 0
sc->sc_ih = i80321_intr_establish((ia->ia_offset == VERDE_I2C_BASE0) ?
Index: src/sys/arch/arm/xscale/iopi2c.c
diff -u src/sys/arch/arm/xscale/iopi2c.c:1.8 src/sys/arch/arm/xscale/iopi2c.c:1.9
--- src/sys/arch/arm/xscale/iopi2c.c:1.8 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/arm/xscale/iopi2c.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: iopi2c.c,v 1.8 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: iopi2c.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: iopi2c.c,v 1.8 2016/02/14 19:54:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: iopi2c.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/mutex.h>
@@ -56,9 +56,6 @@ __KERNEL_RCSID(0, "$NetBSD: iopi2c.c,v 1
#include <arm/xscale/iopi2creg.h>
#include <arm/xscale/iopi2cvar.h>
-static int iopiic_acquire_bus(void *, int);
-static void iopiic_release_bus(void *, int);
-
static int iopiic_send_start(void *, int);
static int iopiic_send_stop(void *, int);
static int iopiic_initiate_xfer(void *, uint16_t, int);
@@ -70,9 +67,8 @@ iopiic_attach(struct iopiic_softc *sc)
{
struct i2cbus_attach_args iba;
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = iopiic_acquire_bus;
- sc->sc_i2c.ic_release_bus = iopiic_release_bus;
sc->sc_i2c.ic_send_start = iopiic_send_start;
sc->sc_i2c.ic_send_stop = iopiic_send_stop;
sc->sc_i2c.ic_initiate_xfer = iopiic_initiate_xfer;
@@ -84,31 +80,6 @@ iopiic_attach(struct iopiic_softc *sc)
(void) config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print);
}
-static int
-iopiic_acquire_bus(void *cookie, int flags)
-{
- struct iopiic_softc *sc = cookie;
-
- /* XXX What should we do for the polling case? */
- if (flags & I2C_F_POLL)
- return (0);
-
- mutex_enter(&sc->sc_buslock);
- return (0);
-}
-
-static void
-iopiic_release_bus(void *cookie, int flags)
-{
- struct iopiic_softc *sc = cookie;
-
- /* XXX See above. */
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_buslock);
-}
-
#define IOPIIC_TIMEOUT 100 /* protocol timeout, in uSecs */
static int
Index: src/sys/arch/arm/xscale/iopi2cvar.h
diff -u src/sys/arch/arm/xscale/iopi2cvar.h:1.4 src/sys/arch/arm/xscale/iopi2cvar.h:1.5
--- src/sys/arch/arm/xscale/iopi2cvar.h:1.4 Tue Jan 10 18:55:37 2012
+++ src/sys/arch/arm/xscale/iopi2cvar.h Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: iopi2cvar.h,v 1.4 2012/01/10 18:55:37 jakllsch Exp $ */
+/* $NetBSD: iopi2cvar.h,v 1.5 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -46,7 +46,6 @@ struct iopiic_softc {
void *sc_ih;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
uint32_t sc_icr;
};
Index: src/sys/arch/evbarm/armadillo/armadillo9_iic.c
diff -u src/sys/arch/evbarm/armadillo/armadillo9_iic.c:1.8 src/sys/arch/evbarm/armadillo/armadillo9_iic.c:1.9
--- src/sys/arch/evbarm/armadillo/armadillo9_iic.c:1.8 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/evbarm/armadillo/armadillo9_iic.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: armadillo9_iic.c,v 1.8 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: armadillo9_iic.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2005 HAMAJIMA Katsuomi. All rights reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: armadillo9_iic.c,v 1.8 2016/02/14 19:54:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: armadillo9_iic.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -48,7 +48,6 @@ __KERNEL_RCSID(0, "$NetBSD: armadillo9_i
struct armadillo9iic_softc {
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
int sc_port;
int sc_sda;
int sc_scl;
@@ -58,8 +57,6 @@ struct armadillo9iic_softc {
static int armadillo9iic_match(device_t, cfdata_t, void *);
static void armadillo9iic_attach(device_t, device_t, void *);
-static int armadillo9iic_acquire_bus(void *, int);
-static void armadillo9iic_release_bus(void *, int);
static int armadillo9iic_send_start(void *, int);
static int armadillo9iic_send_stop(void *, int);
static int armadillo9iic_initiate_xfer(void *, uint16_t, int);
@@ -94,7 +91,6 @@ armadillo9iic_attach(device_t parent, de
#if NSEEPROM > 0
struct epgpio_attach_args *ga = aux;
#endif
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
sc->sc_port = ga->ga_port;
sc->sc_sda = ga->ga_bit1;
@@ -106,9 +102,8 @@ armadillo9iic_attach(device_t parent, de
armadillo9iic_bbops.ibo_bits[I2C_BIT_OUTPUT] = sc->sc_sda;
armadillo9iic_bbops.ibo_bits[I2C_BIT_INPUT] = 0;
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = armadillo9iic_acquire_bus;
- sc->sc_i2c.ic_release_bus = armadillo9iic_release_bus;
sc->sc_i2c.ic_send_start = armadillo9iic_send_start;
sc->sc_i2c.ic_send_stop = armadillo9iic_send_stop;
sc->sc_i2c.ic_initiate_xfer = armadillo9iic_initiate_xfer;
@@ -138,31 +133,6 @@ armadillo9iic_attach(device_t parent, de
}
int
-armadillo9iic_acquire_bus(void *cookie, int flags)
-{
- struct armadillo9iic_softc *sc = cookie;
-
- /* XXX What should we do for the polling case? */
- if (flags & I2C_F_POLL)
- return 0;
-
- mutex_enter(&sc->sc_buslock);
- return 0;
-}
-
-void
-armadillo9iic_release_bus(void *cookie, int flags)
-{
- struct armadillo9iic_softc *sc = cookie;
-
- /* XXX See above. */
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_buslock);
-}
-
-int
armadillo9iic_send_start(void *cookie, int flags)
{
return i2c_bitbang_send_start(cookie, flags, &armadillo9iic_bbops);
Index: src/sys/arch/evbarm/gumstix/gxiic.c
diff -u src/sys/arch/evbarm/gumstix/gxiic.c:1.8 src/sys/arch/evbarm/gumstix/gxiic.c:1.9
--- src/sys/arch/evbarm/gumstix/gxiic.c:1.8 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/evbarm/gumstix/gxiic.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: gxiic.c,v 1.8 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: gxiic.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2007 KIYOHARA Takashi
* All rights reserved.
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gxiic.c,v 1.8 2016/02/14 19:54:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gxiic.c,v 1.9 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -44,7 +44,6 @@ struct gxiic_softc {
struct pxa2x0_i2c_softc sc_pxa_i2c;
struct i2c_controller sc_i2c;
- kmutex_t sc_lock;
};
@@ -96,17 +95,11 @@ gxiicattach(device_t parent, device_t se
return;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
-
/* Initialize i2c_controller */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
sc->sc_i2c.ic_acquire_bus = gxiic_acquire_bus;
sc->sc_i2c.ic_release_bus = gxiic_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 = gxiic_exec;
memset(&iba, 0, sizeof(iba));
@@ -121,7 +114,6 @@ gxiic_acquire_bus(void *cookie, int flag
{
struct gxiic_softc *sc = cookie;
- mutex_enter(&sc->sc_lock);
pxa2x0_i2c_open(&sc->sc_pxa_i2c);
return 0;
@@ -133,8 +125,6 @@ gxiic_release_bus(void *cookie, int flag
struct gxiic_softc *sc = cookie;
pxa2x0_i2c_close(&sc->sc_pxa_i2c);
- mutex_exit(&sc->sc_lock);
- return;
}
static int
Index: src/sys/arch/evbarm/nslu2/nslu2_iic.c
diff -u src/sys/arch/evbarm/nslu2/nslu2_iic.c:1.9 src/sys/arch/evbarm/nslu2/nslu2_iic.c:1.10
--- src/sys/arch/evbarm/nslu2/nslu2_iic.c:1.9 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/evbarm/nslu2/nslu2_iic.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nslu2_iic.c,v 1.9 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: nslu2_iic.c,v 1.10 2019/12/22 23:23:30 thorpej Exp $ */
/*-
* Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -47,34 +47,10 @@
struct slugiic_softc {
struct i2c_controller sc_ic;
struct i2c_bitbang_ops sc_ibo;
- kmutex_t sc_lock;
uint32_t sc_dirout;
};
static int
-slugiic_acquire_bus(void *arg, int flags)
-{
- struct slugiic_softc *sc = arg;
-
- if (flags & I2C_F_POLL)
- return (0);
-
- mutex_enter(&sc->sc_lock);
- return (0);
-}
-
-static void
-slugiic_release_bus(void *arg, int flags)
-{
- struct slugiic_softc *sc = arg;
-
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_lock);
-}
-
-static int
slugiic_send_start(void *arg, int flags)
{
struct slugiic_softc *sc = arg;
@@ -230,10 +206,8 @@ slugiic_attach(device_t parent, device_t
aprint_naive("\n");
aprint_normal(": I2C bus\n");
+ iic_tag_init(&sc->sc_ic);
sc->sc_ic.ic_cookie = sc;
- sc->sc_ic.ic_acquire_bus = slugiic_acquire_bus;
- sc->sc_ic.ic_release_bus = slugiic_release_bus;
- sc->sc_ic.ic_exec = NULL;
sc->sc_ic.ic_send_start = slugiic_send_start;
sc->sc_ic.ic_send_stop = slugiic_send_stop;
sc->sc_ic.ic_initiate_xfer = slugiic_initiate_xfer;
@@ -248,8 +222,6 @@ slugiic_attach(device_t parent, device_t
sc->sc_ibo.ibo_bits[I2C_BIT_OUTPUT] = 1;
sc->sc_ibo.ibo_bits[I2C_BIT_INPUT] = 0;
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
-
sc->sc_dirout = 0;
/*
Index: src/sys/arch/hpcarm/dev/nbpiic.c
diff -u src/sys/arch/hpcarm/dev/nbpiic.c:1.2 src/sys/arch/hpcarm/dev/nbpiic.c:1.3
--- src/sys/arch/hpcarm/dev/nbpiic.c:1.2 Sun Feb 14 19:54:20 2016
+++ src/sys/arch/hpcarm/dev/nbpiic.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nbpiic.c,v 1.2 2016/02/14 19:54:20 chs Exp $ */
+/* $NetBSD: nbpiic.c,v 1.3 2019/12/22 23:23:30 thorpej Exp $ */
/*
* Copyright (c) 2011 KIYOHARA Takashi
* All rights reserved.
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nbpiic.c,v 1.2 2016/02/14 19:54:20 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nbpiic.c,v 1.3 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -64,8 +64,6 @@ static int nbpiic_intr(void *);
int nbpiic_poll(void *, int, char *);
/* fuctions for i2c_controller */
-static int nbpiic_acquire_bus(void *, int);
-static void nbpiic_release_bus(void *, int);
static int nbpiic_exec(void *cookie, i2c_op_t, i2c_addr_t, const void *, size_t,
void *, size_t, int);
@@ -110,7 +108,11 @@ pxaiic_attach(device_t parent, device_t
return;
}
- /* Initialize mutex with IPL_HIGH. Keyboard was connected to us. */
+ /*
+ * Initialize mutex with IPL_HIGH. Keyboard was connected to us.
+ * This is orthogonal to the lock held at the i2c layer; this
+ * is just to interlock us with the keyboard interrupt.
+ */
mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_HIGH);
ih = pxa2x0_intr_establish(pxa->pxa_intr, IPL_HIGH, nbpiic_intr, sc);
@@ -120,14 +122,8 @@ pxaiic_attach(device_t parent, device_t
}
/* Initialize i2c_controller */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = nbpiic_acquire_bus;
- sc->sc_i2c.ic_release_bus = nbpiic_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 = nbpiic_exec;
memset(&iba, 0, sizeof(iba));
@@ -184,26 +180,6 @@ nbpiic_poll(void *cookie, int buflen, ch
}
static int
-nbpiic_acquire_bus(void *cookie, int flags)
-{
- struct nbpiic_softc *sc = cookie;
-
- mutex_enter(&sc->sc_lock);
-
- return 0;
-}
-
-static void
-nbpiic_release_bus(void *cookie, int flags)
-{
- struct nbpiic_softc *sc = cookie;
-
- mutex_exit(&sc->sc_lock);
-
- return;
-}
-
-static int
nbpiic_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *vcmd,
size_t cmdlen, void *vbuf, size_t buflen, int flags)
{
@@ -211,6 +187,8 @@ nbpiic_exec(void *cookie, i2c_op_t op, i
int rv = -1;
const u_char cmd = *(const u_char *)vcmd;
+ mutex_enter(&sc->sc_lock);
+
if (I2C_OP_READ_P(op) && (cmdlen == 0) && (buflen == 1))
rv = pxa2x0_i2c_read(&sc->sc_pxa_i2c, addr, (u_char *)vbuf);
@@ -257,5 +235,7 @@ printf("%s: write cmdlen=1, buflen=2: Oo
rv = pxa2x0_i2c_quick(&sc->sc_pxa_i2c, addr,
I2C_OP_READ_P(op) ? 1 : 0);
+ mutex_exit(&sc->sc_lock);
+
return rv;
}
Index: src/sys/arch/i386/pci/viapcib.c
diff -u src/sys/arch/i386/pci/viapcib.c:1.16 src/sys/arch/i386/pci/viapcib.c:1.17
--- src/sys/arch/i386/pci/viapcib.c:1.16 Mon Sep 3 16:29:25 2018
+++ src/sys/arch/i386/pci/viapcib.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: viapcib.c,v 1.16 2018/09/03 16:29:25 riastradh Exp $ */
+/* $NetBSD: viapcib.c,v 1.17 2019/12/22 23:23:30 thorpej Exp $ */
/* $FreeBSD: src/sys/pci/viapm.c,v 1.10 2005/05/29 04:42:29 nyan Exp $ */
/*-
@@ -55,7 +55,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: viapcib.c,v 1.16 2018/09/03 16:29:25 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: viapcib.c,v 1.17 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -90,8 +90,6 @@ struct viapcib_softc {
struct i2c_controller sc_i2c;
int sc_revision;
-
- kmutex_t sc_lock;
};
static int viapcib_match(device_t, cfdata_t, void *);
@@ -107,8 +105,6 @@ static int viapcib_busy(struct viapcib_s
#define VIAPCIB_SMBUS_TIMEOUT 10000
-static int viapcib_acquire_bus(void *, int);
-static void viapcib_release_bus(void *, int);
static int viapcib_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
@@ -171,8 +167,6 @@ viapcib_attach(device_t parent, device_t
goto core_pcib;
}
- mutex_init(&sc->sc_lock, MUTEX_DEFAULT, IPL_NONE);
-
val = pci_conf_read(pa->pa_pc, pa->pa_tag, SMB_HOST_CONFIG);
if ((val & 0x10000) == 0) {
printf(": SMBus is disabled\n");
@@ -214,15 +208,10 @@ core_pcib:
b = viapcib_smbus_read(sc, SMBSLVCNT);
viapcib_smbus_write(sc, SMBSLVCNT, b & ~1);
- memset(&sc->sc_i2c, 0, sizeof(sc->sc_i2c));
memset(&iba, 0, sizeof(iba));
-#ifdef I2C_TYPE_SMBUS
- iba.iba_type = I2C_TYPE_SMBUS;
-#endif
iba.iba_tag = &sc->sc_i2c;
+ iic_tag_init(&sc->sc_i2c);
iba.iba_tag->ic_cookie = (void *)sc;
- iba.iba_tag->ic_acquire_bus = viapcib_acquire_bus;
- iba.iba_tag->ic_release_bus = viapcib_release_bus;
iba.iba_tag->ic_exec = viapcib_exec;
config_found_ia(self, "i2cbus", &iba, iicbus_print);
@@ -279,26 +268,6 @@ viapcib_busy(struct viapcib_softc *sc)
}
static int
-viapcib_acquire_bus(void *opaque, int flags)
-{
- struct viapcib_softc *sc = (struct viapcib_softc *)opaque;
-
- DPRINTF(("viapcib_i2c_acquire_bus(%p, 0x%x)\n", opaque, flags));
- mutex_enter(&sc->sc_lock);
-
- return 0;
-}
-
-static void
-viapcib_release_bus(void *opaque, int flags)
-{
- struct viapcib_softc *sc = (struct viapcib_softc *)opaque;
-
- mutex_exit(&sc->sc_lock);
- DPRINTF(("viapcib_i2c_release_bus(%p, 0x%x)\n", opaque, flags));
-}
-
-static int
viapcib_exec(void *opaque, i2c_op_t op, i2c_addr_t addr, const void *vcmd,
size_t cmdlen, void *vbuf, size_t buflen, int flags)
{
Index: src/sys/arch/macppc/dev/cuda.c
diff -u src/sys/arch/macppc/dev/cuda.c:1.23 src/sys/arch/macppc/dev/cuda.c:1.24
--- src/sys/arch/macppc/dev/cuda.c:1.23 Mon Sep 3 16:29:25 2018
+++ src/sys/arch/macppc/dev/cuda.c Sun Dec 22 23:23:30 2019
@@ -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, i
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 se
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
/* 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)
{
Index: src/sys/arch/macppc/dev/ki2c.c
diff -u src/sys/arch/macppc/dev/ki2c.c:1.26 src/sys/arch/macppc/dev/ki2c.c:1.27
--- src/sys/arch/macppc/dev/ki2c.c:1.26 Thu Aug 15 22:35:39 2019
+++ src/sys/arch/macppc/dev/ki2c.c Sun Dec 22 23:23:30 2019
@@ -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 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 se
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 se
}
/* 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 ad
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)
Index: src/sys/arch/macppc/dev/pmu.c
diff -u src/sys/arch/macppc/dev/pmu.c:1.32 src/sys/arch/macppc/dev/pmu.c:1.33
--- src/sys/arch/macppc/dev/pmu.c:1.32 Mon Sep 3 16:29:25 2018
+++ src/sys/arch/macppc/dev/pmu.c Sun Dec 22 23:23:30 2019
@@ -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, in
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 sel
}
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 (
}
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)
{
Index: src/sys/arch/macppc/dev/smu.c
diff -u src/sys/arch/macppc/dev/smu.c:1.7 src/sys/arch/macppc/dev/smu.c:1.8
--- src/sys/arch/macppc/dev/smu.c:1.7 Sun Nov 10 21:16:29 2019
+++ src/sys/arch/macppc/dev/smu.c Sun Dec 22 23:23:30 2019
@@ -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_
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
}
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)
{
Index: src/sys/arch/macppc/macppc/memory.c
diff -u src/sys/arch/macppc/macppc/memory.c:1.6 src/sys/arch/macppc/macppc/memory.c:1.7
--- src/sys/arch/macppc/macppc/memory.c:1.6 Sun Nov 10 21:16:29 2019
+++ src/sys/arch/macppc/macppc/memory.c Sun Dec 22 23:23:30 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: memory.c,v 1.6 2019/11/10 21:16:29 chs Exp $ */
+/* $NetBSD: memory.c,v 1.7 2019/12/22 23:23:30 thorpej Exp $ */
/* $OpenBSD: mem.c,v 1.15 2007/10/14 17:29:04 kettenis Exp $ */
/*-
@@ -46,7 +46,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: memory.c,v 1.6 2019/11/10 21:16:29 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: memory.c,v 1.7 2019/12/22 23:23:30 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -75,8 +75,6 @@ void memory_attach(device_t, device_t, v
CFATTACH_DECL_NEW(memory, sizeof(struct memory_softc), memory_match, memory_attach,
NULL, NULL);
-int memory_i2c_acquire_bus(void *, int);
-void memory_i2c_release_bus(void *, int);
int memory_i2c_exec(void *, i2c_op_t, i2c_addr_t,
const void *, size_t, void *, size_t, int);
@@ -112,10 +110,8 @@ memory_attach(device_t parent, device_t
OF_getprop(ca->ca_node, "dimm-info", sc->sc_buf, sc->sc_len);
- memset(&ic, 0, sizeof ic);
+ iic_tag_init(&ic);
ic.ic_cookie = sc;
- ic.ic_acquire_bus = memory_i2c_acquire_bus;
- ic.ic_release_bus = memory_i2c_release_bus;
ic.ic_exec = memory_i2c_exec;
memset(&ia, 0, sizeof ia);
@@ -136,21 +132,11 @@ memory_attach(device_t parent, device_t
/* No need to keep the "dimm-info" contents around. */
free(sc->sc_buf, M_DEVBUF);
sc->sc_len = -1;
+ iic_tag_fini(&ic);
}
}
int
-memory_i2c_acquire_bus(void *cookie, int flags)
-{
- return (0);
-}
-
-void
-memory_i2c_release_bus(void *cookie, int flags)
-{
-}
-
-int
memory_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen,
void *buf, size_t len, int flags)
Index: src/sys/arch/mips/alchemy/dev/ausmbus_psc.c
diff -u src/sys/arch/mips/alchemy/dev/ausmbus_psc.c:1.12 src/sys/arch/mips/alchemy/dev/ausmbus_psc.c:1.13
--- src/sys/arch/mips/alchemy/dev/ausmbus_psc.c:1.12 Sun Feb 14 19:54:21 2016
+++ src/sys/arch/mips/alchemy/dev/ausmbus_psc.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ausmbus_psc.c,v 1.12 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: ausmbus_psc.c,v 1.13 2019/12/22 23:23:31 thorpej Exp $ */
/*-
* Copyright (c) 2006 Shigeyuki Fukushima.
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ausmbus_psc.c,v 1.12 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ausmbus_psc.c,v 1.13 2019/12/22 23:23:31 thorpej Exp $");
#include "locators.h"
@@ -126,14 +126,10 @@ ausmbus_attach(device_t parent, device_t
sc->sc_ctrl = aa->aupsc_ctrl;
/* Initialize i2c_controller for SMBus */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
sc->sc_i2c.ic_acquire_bus = ausmbus_acquire_bus;
sc->sc_i2c.ic_release_bus = ausmbus_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 = ausmbus_exec;
sc->sc_smbus_timeout = 10;
Index: src/sys/arch/mips/ingenic/jziic.c
diff -u src/sys/arch/mips/ingenic/jziic.c:1.5 src/sys/arch/mips/ingenic/jziic.c:1.6
--- src/sys/arch/mips/ingenic/jziic.c:1.5 Mon Sep 3 16:29:26 2018
+++ src/sys/arch/mips/ingenic/jziic.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: jziic.c,v 1.5 2018/09/03 16:29:26 riastradh Exp $ */
+/* $NetBSD: jziic.c,v 1.6 2019/12/22 23:23:31 thorpej Exp $ */
/*-
* Copyright (c) 2015 Michael Lorenz
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: jziic.c,v 1.5 2018/09/03 16:29:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: jziic.c,v 1.6 2019/12/22 23:23:31 thorpej Exp $");
/*
* a preliminary driver for JZ4780's on-chip SMBus controllers
@@ -69,7 +69,7 @@ struct jziic_softc {
bus_space_tag_t sc_memt;
bus_space_handle_t sc_memh;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock, sc_cvlock;
+ kmutex_t sc_cvlock;
uint32_t sc_pclk;
/* stuff used for interrupt-driven transfers */
const uint8_t *sc_cmd;
@@ -89,8 +89,6 @@ STATIC int jziic_enable(struct jziic_sof
STATIC void jziic_disable(struct jziic_softc *);
STATIC int jziic_wait(struct jziic_softc *);
STATIC void jziic_set_speed(struct jziic_softc *);
-STATIC int jziic_i2c_acquire_bus(void *, int);
-STATIC void jziic_i2c_release_bus(void *, int);
STATIC int jziic_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t,
void *, size_t, int);
STATIC int jziic_i2c_exec_poll(struct jziic_softc *, i2c_op_t, i2c_addr_t,
@@ -138,7 +136,6 @@ jziic_attach(device_t parent, device_t s
return;
}
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
mutex_init(&sc->sc_cvlock, MUTEX_DEFAULT, IPL_NONE);
cv_init(&sc->sc_ping, device_xname(self));
@@ -175,14 +172,8 @@ jziic_attach(device_t parent, device_t s
#endif
/* fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = jziic_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = jziic_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 = jziic_i2c_exec;
memset(&iba, 0, sizeof(iba));
@@ -233,23 +224,6 @@ jziic_disable(struct jziic_softc *sc)
}
STATIC int
-jziic_i2c_acquire_bus(void *cookie, int flags)
-{
- struct jziic_softc *sc = cookie;
-
- mutex_enter(&sc->sc_buslock);
- return 0;
-}
-
-STATIC void
-jziic_i2c_release_bus(void *cookie, int flags)
-{
- struct jziic_softc *sc = cookie;
-
- mutex_exit(&sc->sc_buslock);
-}
-
-STATIC int
jziic_wait(struct jziic_softc *sc)
{
uint32_t reg;
Index: src/sys/arch/mips/ralink/ralink_i2c.c
diff -u src/sys/arch/mips/ralink/ralink_i2c.c:1.3 src/sys/arch/mips/ralink/ralink_i2c.c:1.4
--- src/sys/arch/mips/ralink/ralink_i2c.c:1.3 Sat Oct 27 17:18:02 2012
+++ src/sys/arch/mips/ralink/ralink_i2c.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ralink_i2c.c,v 1.3 2012/10/27 17:18:02 chs Exp $ */
+/* $NetBSD: ralink_i2c.c,v 1.4 2019/12/22 23:23:31 thorpej Exp $ */
/*-
* Copyright (c) 2011 CradlePoint Technology, Inc.
* All rights reserved.
@@ -29,7 +29,7 @@
/* ra_i2c.c - Ralink i2c 3052 driver */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ralink_i2c.c,v 1.3 2012/10/27 17:18:02 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ralink_i2c.c,v 1.4 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -86,8 +86,6 @@ static void i2c_read_stop(ra_i2c_softc_t
#endif
/* i2c driver functions */
-int ra_i2c_acquire_bus(void *, int);
-void ra_i2c_release_bus(void *, int);
int ra_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *, size_t,
void *, size_t, int);
void ra_i2c_reset(ra_i2c_softc_t *);
@@ -155,13 +153,11 @@ ra_i2c_attach(device_t parent, device_t
bus_space_write_4(sc->sc_memt, sc->sc_sy_memh,
RA_SYSCTL_GPIOMODE, r);
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = ra_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = ra_i2c_release_bus;
sc->sc_i2c.ic_exec = ra_i2c_exec;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c;
config_found(self, &iba, iicbus_print);
}
@@ -172,23 +168,6 @@ ra_i2c_attach(device_t parent, device_t
* I2C API
*/
-/* Might not be needed. JCL. */
-int
-ra_i2c_acquire_bus(void *cookie, int flags)
-{
- /* nothing */
- return 0;
-}
-
-
-
-/* Might not be needed. JCL. */
-void
-ra_i2c_release_bus(void *cookie, int flags)
-{
- /* nothing */
-}
-
int
ra_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *cmdbuf,
size_t cmdlen, void *buf, size_t len, int flags)
Index: src/sys/arch/mmeye/dev/rtciic.c
diff -u src/sys/arch/mmeye/dev/rtciic.c:1.1 src/sys/arch/mmeye/dev/rtciic.c:1.2
--- src/sys/arch/mmeye/dev/rtciic.c:1.1 Sat Feb 19 10:46:28 2011
+++ src/sys/arch/mmeye/dev/rtciic.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: rtciic.c,v 1.1 2011/02/19 10:46:28 kiyohara Exp $ */
+/* $NetBSD: rtciic.c,v 1.2 2019/12/22 23:23:31 thorpej Exp $ */
/*
* Copyright (c) 2011 KIYOHARA Takashi
* All rights reserved.
@@ -26,7 +26,7 @@
*
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtciic.c,v 1.1 2011/02/19 10:46:28 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtciic.c,v 1.2 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -72,8 +72,6 @@ struct rtciic_softc {
static int rtciic_match(device_t, cfdata_t , void *);
static void rtciic_attach(device_t, device_t, void *);
-static int rtciic_acquire_bus(void *, int);
-static void rtciic_release_bus(void *, int);
static int rtciic_send_start(void *, int);
static int rtciic_send_stop(void *, int);
static int rtciic_initiate_xfer(void *, i2c_addr_t, int);
@@ -127,10 +125,8 @@ rtciic_attach(device_t parent, device_t
sc->sc_rw = RTCIIC_READ(sc) & RTCIIC_RW;
/* register with iic */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = rtciic_acquire_bus;
- sc->sc_i2c.ic_release_bus = rtciic_release_bus;
- sc->sc_i2c.ic_exec = NULL;
sc->sc_i2c.ic_send_start = rtciic_send_start;
sc->sc_i2c.ic_send_stop = rtciic_send_stop;
sc->sc_i2c.ic_initiate_xfer = rtciic_initiate_xfer;
@@ -150,20 +146,6 @@ rtciic_attach(device_t parent, device_t
(void) config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print);
}
-
-static int
-rtciic_acquire_bus(void *cookie, int flags)
-{
-
- return 0;
-}
-
-static void
-rtciic_release_bus(void *cookie, int flags)
-{
- /* nothing */
-}
-
static int
rtciic_send_start(void *arg, int flags)
{
Index: src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c
diff -u src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c:1.9 src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c:1.10
--- src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c:1.9 Sat Jun 18 06:41:42 2011
+++ src/sys/arch/powerpc/ibm4xx/dev/gpiic_opb.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: gpiic_opb.c,v 1.9 2011/06/18 06:41:42 matt Exp $ */
+/* $NetBSD: gpiic_opb.c,v 1.10 2019/12/22 23:23:31 thorpej Exp $ */
/*
* Copyright 2002, 2003 Wasabi Systems, Inc.
@@ -59,7 +59,6 @@ struct gpiic_softc {
uint8_t sc_tx;
struct i2c_controller sc_i2c;
struct i2c_bitbang_ops sc_bops;
- kmutex_t sc_buslock;
};
static int gpiic_match(device_t, cfdata_t, void *);
@@ -68,8 +67,6 @@ static void gpiic_attach(device_t, devic
CFATTACH_DECL_NEW(gpiic, sizeof(struct gpiic_softc),
gpiic_match, gpiic_attach, NULL, NULL);
-static int gpiic_acquire_bus(void *, int);
-static void gpiic_release_bus(void *, int);
static int gpiic_send_start(void *, int);
static int gpiic_send_stop(void *, int);
static int gpiic_initiate_xfer(void *, i2c_addr_t, int);
@@ -105,14 +102,10 @@ gpiic_attach(device_t parent, device_t s
bus_space_map(sc->sc_bust, oaa->opb_addr, IIC_NREG, 0, &sc->sc_bush);
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
sc->sc_txen = 0;
sc->sc_tx = IIC_DIRECTCNTL_SCC | IIC_DIRECTCNTL_SDAC;
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = gpiic_acquire_bus;
- sc->sc_i2c.ic_release_bus = gpiic_release_bus;
- sc->sc_i2c.ic_exec = NULL;
sc->sc_i2c.ic_send_start = gpiic_send_start;
sc->sc_i2c.ic_send_stop = gpiic_send_stop;
sc->sc_i2c.ic_initiate_xfer = gpiic_initiate_xfer;
@@ -143,29 +136,6 @@ gpiic_attach(device_t parent, device_t s
}
static int
-gpiic_acquire_bus(void *arg, int flags)
-{
- struct gpiic_softc * const sc = arg;
-
- if (flags & I2C_F_POLL)
- return (0);
-
- mutex_enter(&sc->sc_buslock);
- return (0);
-}
-
-static void
-gpiic_release_bus(void *arg, int flags)
-{
- struct gpiic_softc * const sc = arg;
-
- if (flags & I2C_F_POLL)
- return;
-
- mutex_exit(&sc->sc_buslock);
-}
-
-static int
gpiic_send_start(void *arg, int flags)
{
struct gpiic_softc * const sc = arg;
Index: src/sys/arch/sgimips/dev/crmfb.c
diff -u src/sys/arch/sgimips/dev/crmfb.c:1.45 src/sys/arch/sgimips/dev/crmfb.c:1.46
--- src/sys/arch/sgimips/dev/crmfb.c:1.45 Sat Mar 17 13:14:27 2018
+++ src/sys/arch/sgimips/dev/crmfb.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: crmfb.c,v 1.45 2018/03/17 13:14:27 jmcneill Exp $ */
+/* $NetBSD: crmfb.c,v 1.46 2019/12/22 23:23:31 thorpej Exp $ */
/*-
* Copyright (c) 2007 Jared D. McNeill <[email protected]>
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: crmfb.c,v 1.45 2018/03/17 13:14:27 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crmfb.c,v 1.46 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -204,8 +204,6 @@ static void crmfb_putchar(void *, int, i
static void crmfb_putchar_aa(void *, int, int, u_int, long);
/* I2C glue */
-static int crmfb_i2c_acquire_bus(void *, int);
-static void crmfb_i2c_release_bus(void *, int);
static int crmfb_i2c_send_start(void *, int);
static int crmfb_i2c_send_stop(void *, int);
static int crmfb_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -1617,15 +1615,13 @@ crmfb_setup_ddc(struct crmfb_softc *sc)
int i;
memset(sc->sc_edid_data, 0, 128);
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = crmfb_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = crmfb_i2c_release_bus;
sc->sc_i2c.ic_send_start = crmfb_i2c_send_start;
sc->sc_i2c.ic_send_stop = crmfb_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = crmfb_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = crmfb_i2c_read_byte;
sc->sc_i2c.ic_write_byte = crmfb_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
i = 0;
while (sc->sc_edid_data[1] == 0 && i++ < 10)
ddc_read_edid(&sc->sc_i2c, sc->sc_edid_data, 128);
@@ -1662,22 +1658,6 @@ crmfb_i2cbb_read(void *cookie)
return bus_space_read_4(sc->sc_iot, sc->sc_ioh, CRMFB_I2C_VGA) ^ 3;
}
-/* higher level I2C stuff */
-static int
-crmfb_i2c_acquire_bus(void *cookie, int flags)
-{
-
- /* private bus */
- return 0;
-}
-
-static void
-crmfb_i2c_release_bus(void *cookie, int flags)
-{
-
- /* private bus */
-}
-
static int
crmfb_i2c_send_start(void *cookie, int flags)
{
Index: src/sys/arch/sparc64/dev/ffb.c
diff -u src/sys/arch/sparc64/dev/ffb.c:1.63 src/sys/arch/sparc64/dev/ffb.c:1.64
--- src/sys/arch/sparc64/dev/ffb.c:1.63 Mon Sep 3 16:29:27 2018
+++ src/sys/arch/sparc64/dev/ffb.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ffb.c,v 1.63 2018/09/03 16:29:27 riastradh Exp $ */
+/* $NetBSD: ffb.c,v 1.64 2019/12/22 23:23:31 thorpej Exp $ */
/* $OpenBSD: creator.c,v 1.20 2002/07/30 19:48:15 jason Exp $ */
/*
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffb.c,v 1.63 2018/09/03 16:29:27 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffb.c,v 1.64 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/types.h>
#include <sys/param.h>
@@ -157,8 +157,6 @@ struct wsdisplay_accessops ffb_accessops
};
/* I2C glue */
-static int ffb_i2c_acquire_bus(void *, int);
-static void ffb_i2c_release_bus(void *, int);
static int ffb_i2c_send_start(void *, int);
static int ffb_i2c_send_stop(void *, int);
static int ffb_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -387,15 +385,13 @@ ffb_attach_i2c(struct ffb_softc *sc)
{
/* Fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = ffb_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = ffb_i2c_release_bus;
sc->sc_i2c.ic_send_start = ffb_i2c_send_start;
sc->sc_i2c.ic_send_stop = ffb_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = ffb_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = ffb_i2c_read_byte;
sc->sc_i2c.ic_write_byte = ffb_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
}
int
@@ -1314,19 +1310,6 @@ static uint32_t ffb_i2cbb_read(void *coo
/* higher level I2C stuff */
static int
-ffb_i2c_acquire_bus(void *cookie, int flags)
-{
- /* private bus */
- return (0);
-}
-
-static void
-ffb_i2c_release_bus(void *cookie, int flags)
-{
- /* private bus */
-}
-
-static int
ffb_i2c_send_start(void *cookie, int flags)
{
return (i2c_bitbang_send_start(cookie, flags, &ffb_i2cbb_ops));
Index: src/sys/arch/sparc64/dev/jbus-i2c.c
diff -u src/sys/arch/sparc64/dev/jbus-i2c.c:1.3 src/sys/arch/sparc64/dev/jbus-i2c.c:1.4
--- src/sys/arch/sparc64/dev/jbus-i2c.c:1.3 Sat Nov 3 14:56:36 2018
+++ src/sys/arch/sparc64/dev/jbus-i2c.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: jbus-i2c.c,v 1.3 2018/11/03 14:56:36 martin Exp $ */
+/* $NetBSD: jbus-i2c.c,v 1.4 2019/12/22 23:23:31 thorpej Exp $ */
/*
* Copyright (c) 2018 Michael Lorenz
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: jbus-i2c.c,v 1.3 2018/11/03 14:56:36 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: jbus-i2c.c,v 1.4 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -48,8 +48,6 @@ __KERNEL_RCSID(0, "$NetBSD: jbus-i2c.c,v
#endif
/* I2C glue */
-static int jbusi2c_i2c_acquire_bus(void *, int);
-static void jbusi2c_i2c_release_bus(void *, int);
static int jbusi2c_i2c_send_start(void *, int);
static int jbusi2c_i2c_send_stop(void *, int);
static int jbusi2c_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -79,7 +77,6 @@ static void jbusi2c_attach(device_t, dev
struct jbusi2c_softc {
device_t sc_dev;
struct i2c_controller sc_i2c;
- kmutex_t sc_i2c_lock;
bus_space_tag_t sc_bustag;
bus_space_handle_t sc_regh;
int sc_node;
@@ -144,15 +141,13 @@ jbusi2c_setup_i2c(struct jbusi2c_softc *
int devs, regs[2], addr;
char name[64], compat[256];
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = jbusi2c_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = jbusi2c_i2c_release_bus;
sc->sc_i2c.ic_send_start = jbusi2c_i2c_send_start;
sc->sc_i2c.ic_send_stop = jbusi2c_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = jbusi2c_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = jbusi2c_i2c_read_byte;
sc->sc_i2c.ic_write_byte = jbusi2c_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
/* round up i2c devices */
devs = OF_child(sc->sc_node);
@@ -185,7 +180,6 @@ jbusi2c_setup_i2c(struct jbusi2c_softc *
}
memset(&iba, 0, sizeof(iba));
iba.iba_tag = &sc->sc_i2c;
- mutex_init(&sc->sc_i2c_lock, MUTEX_DEFAULT, IPL_NONE);
config_found_ia(sc->sc_dev, "i2cbus", &iba,
iicbus_print);
}
@@ -229,23 +223,6 @@ jbusi2c_i2cbb_read(void *cookie)
/* higher level I2C stuff */
static int
-jbusi2c_i2c_acquire_bus(void *cookie, int flags)
-{
- struct jbusi2c_softc *sc = cookie;
-
- mutex_enter(&sc->sc_i2c_lock);
- return 0;
-}
-
-static void
-jbusi2c_i2c_release_bus(void *cookie, int flags)
-{
- struct jbusi2c_softc *sc = cookie;
-
- mutex_exit(&sc->sc_i2c_lock);
-}
-
-static int
jbusi2c_i2c_send_start(void *cookie, int flags)
{
Index: src/sys/arch/x86/pci/imcsmb/imcsmb.c
diff -u src/sys/arch/x86/pci/imcsmb/imcsmb.c:1.2 src/sys/arch/x86/pci/imcsmb/imcsmb.c:1.3
--- src/sys/arch/x86/pci/imcsmb/imcsmb.c:1.2 Sat Mar 3 05:27:02 2018
+++ src/sys/arch/x86/pci/imcsmb/imcsmb.c Sun Dec 22 23:23:31 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: imcsmb.c,v 1.2 2018/03/03 05:27:02 pgoyette Exp $ */
+/* $NetBSD: imcsmb.c,v 1.3 2019/12/22 23:23:31 thorpej Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imcsmb.c,v 1.2 2018/03/03 05:27:02 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imcsmb.c,v 1.3 2019/12/22 23:23:31 thorpej Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -130,7 +130,6 @@ imcsmb_attach(device_t parent, device_t
sc->sc_regs = imca->ia_regs;
sc->sc_pci_tag = imca->ia_pci_tag;
sc->sc_pci_chipset_tag = imca->ia_pci_chipset_tag;
- mutex_init(&sc->sc_i2c_mutex, MUTEX_DEFAULT, IPL_NONE);
if (!pmf_device_register(self, NULL, NULL))
aprint_error_dev(self, "couldn't establish power handler\n");
@@ -151,13 +150,13 @@ imcsmb_rescan(device_t self, const char
if (sc->sc_smbus != NULL)
return 0;
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
sc->sc_i2c_tag.ic_acquire_bus = imcsmb_acquire_bus;
sc->sc_i2c_tag.ic_release_bus = imcsmb_release_bus;
sc->sc_i2c_tag.ic_exec = imcsmb_exec;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c_tag;
sc->sc_smbus = config_found_ia(self, ifattr, &iba, iicbus_print);
@@ -196,7 +195,7 @@ imcsmb_detach(device_t self, int flags)
}
pmf_device_deregister(self);
- mutex_destroy(&sc->sc_i2c_mutex);
+ iic_tag_fini(&sc->sc_i2c_tag);
return 0;
}
@@ -224,8 +223,6 @@ imcsmb_acquire_bus(void *cookie, int fla
if (cold)
return 0;
- mutex_enter(&sc->sc_i2c_mutex);
-
imc_callback(sc, IMC_BIOS_DISABLE);
return 0;
@@ -240,8 +237,6 @@ imcsmb_release_bus(void *cookie, int fla
return;
imc_callback(sc, IMC_BIOS_ENABLE);
-
- mutex_exit(&sc->sc_i2c_mutex);
}
static int
Index: src/sys/arch/zaurus/dev/ziic.c
diff -u src/sys/arch/zaurus/dev/ziic.c:1.3 src/sys/arch/zaurus/dev/ziic.c:1.4
--- src/sys/arch/zaurus/dev/ziic.c:1.3 Sun Feb 14 19:54:21 2016
+++ src/sys/arch/zaurus/dev/ziic.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ziic.c,v 1.3 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: ziic.c,v 1.4 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ziic.c,v 1.3 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ziic.c,v 1.4 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -55,7 +55,6 @@ struct pxaiic_softc {
void * sc_ih;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
};
static int pxaiic_match(device_t, cfdata_t, void *);
@@ -106,9 +105,9 @@ pxaiic_attach(device_t parent, device_t
return;
}
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_TTY);
-
#if 0
+ mutex_init(&sc->sc_intr_lock, MUTEX_DEFAULT, IPL_TTY);
+
sc->sc_ih = pxa2x0_intr_establish(PXA2X0_INT_I2C, IPL_TTY,
pxa2x0_i2c_intr, &psc);
if (sc->sc_ih == NULL) {
@@ -118,6 +117,7 @@ pxaiic_attach(device_t parent, device_t
#endif
/* Initialize i2c_controller */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
sc->sc_i2c.ic_acquire_bus = pxaiic_acquire_bus;
sc->sc_i2c.ic_release_bus = pxaiic_release_bus;
@@ -126,7 +126,6 @@ pxaiic_attach(device_t parent, device_t
sc->sc_i2c.ic_initiate_xfer = pxaiic_initiate_xfer;
sc->sc_i2c.ic_read_byte = pxaiic_read_byte;
sc->sc_i2c.ic_write_byte = pxaiic_write_byte;
- sc->sc_i2c.ic_exec = NULL;
memset(&iba, 0, sizeof(iba));
iba.iba_tag = &sc->sc_i2c;
@@ -139,7 +138,6 @@ pxaiic_acquire_bus(void *cookie, int fla
struct pxaiic_softc *sc = cookie;
struct pxa2x0_i2c_softc *psc = &sc->sc_pxa_i2c;
- mutex_enter(&sc->sc_buslock);
pxa2x0_i2c_open(psc);
return 0;
@@ -152,7 +150,6 @@ pxaiic_release_bus(void *cookie, int fla
struct pxa2x0_i2c_softc *psc = &sc->sc_pxa_i2c;
pxa2x0_i2c_close(psc);
- mutex_exit(&sc->sc_buslock);
}
static int
Index: src/sys/dev/acpi/smbus_acpi.c
diff -u src/sys/dev/acpi/smbus_acpi.c:1.13 src/sys/dev/acpi/smbus_acpi.c:1.14
--- src/sys/dev/acpi/smbus_acpi.c:1.13 Thu Jul 29 11:03:09 2010
+++ src/sys/dev/acpi/smbus_acpi.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: smbus_acpi.c,v 1.13 2010/07/29 11:03:09 jruoho Exp $ */
+/* $NetBSD: smbus_acpi.c,v 1.14 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smbus_acpi.c,v 1.13 2010/07/29 11:03:09 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smbus_acpi.c,v 1.14 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -73,7 +73,6 @@ struct acpi_smbus_softc {
struct callout sc_callout;
struct i2c_controller sc_i2c_tag;
device_t sc_dv;
- kmutex_t sc_i2c_mutex;
int sc_poll_alert;
};
@@ -81,8 +80,6 @@ static int acpi_smbus_match(device_t, cf
static void acpi_smbus_attach(device_t, device_t, void *);
static int acpi_smbus_detach(device_t, int);
static int acpi_smbus_poll_alert(ACPI_HANDLE, int *);
-static int acpi_smbus_acquire_bus(void *, int);
-static void acpi_smbus_release_bus(void *, int);
static int acpi_smbus_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
static void acpi_smbus_alerts(struct acpi_smbus_softc *);
@@ -151,11 +148,8 @@ acpi_smbus_attach(device_t parent, devic
sc->sc_poll_alert = 2;
/* Attach I2C bus. */
- mutex_init(&sc->sc_i2c_mutex, MUTEX_DEFAULT, IPL_NONE);
-
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
- sc->sc_i2c_tag.ic_acquire_bus = acpi_smbus_acquire_bus;
- sc->sc_i2c_tag.ic_release_bus = acpi_smbus_release_bus;
sc->sc_i2c_tag.ic_exec = acpi_smbus_exec;
(void)acpi_smbus_poll_alert(aa->aa_node->ad_handle,&sc->sc_poll_alert);
@@ -194,7 +188,7 @@ acpi_smbus_detach(device_t self, int fla
callout_halt(&sc->sc_callout, NULL);
callout_destroy(&sc->sc_callout);
- mutex_destroy(&sc->sc_i2c_mutex);
+ iic_tag_fini(&sc->sc_i2c_tag);
return 0;
}
@@ -260,23 +254,6 @@ out:
}
static int
-acpi_smbus_acquire_bus(void *cookie, int flags)
-{
- struct acpi_smbus_softc *sc = cookie;
-
- mutex_enter(&sc->sc_i2c_mutex);
-
- return 0;
-}
-
-static void
-acpi_smbus_release_bus(void *cookie, int flags)
-{
- struct acpi_smbus_softc *sc = cookie;
-
- mutex_exit(&sc->sc_i2c_mutex);
-}
-static int
acpi_smbus_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/dev/gpio/gpioiic.c
diff -u src/sys/dev/gpio/gpioiic.c:1.8 src/sys/dev/gpio/gpioiic.c:1.9
--- src/sys/dev/gpio/gpioiic.c:1.8 Sat Oct 28 04:53:56 2017
+++ src/sys/dev/gpio/gpioiic.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: gpioiic.c,v 1.8 2017/10/28 04:53:56 riastradh Exp $ */
+/* $NetBSD: gpioiic.c,v 1.9 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: gpioiic.c,v 1.8 2008/11/24 12:12:12 mbalmer Exp $ */
/*
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gpioiic.c,v 1.8 2017/10/28 04:53:56 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gpioiic.c,v 1.9 2019/12/22 23:23:32 thorpej Exp $");
/*
* I2C bus bit-banging through GPIO pins.
@@ -54,7 +54,6 @@ struct gpioiic_softc {
struct i2c_controller sc_i2c_tag;
device_t sc_i2c_dev;
- krwlock_t sc_i2c_lock;
int sc_pin_sda;
int sc_pin_scl;
@@ -67,8 +66,6 @@ int gpioiic_match(device_t, cfdata_t, v
void gpioiic_attach(device_t, device_t, void *);
int gpioiic_detach(device_t, int);
-int gpioiic_i2c_acquire_bus(void *, int);
-void gpioiic_i2c_release_bus(void *, int);
int gpioiic_i2c_send_start(void *, int);
int gpioiic_i2c_send_stop(void *, int);
int gpioiic_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -185,19 +182,15 @@ gpioiic_attach(device_t parent, device_t
aprint_normal("\n");
/* Attach I2C bus */
- rw_init(&sc->sc_i2c_lock);
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
- sc->sc_i2c_tag.ic_acquire_bus = gpioiic_i2c_acquire_bus;
- sc->sc_i2c_tag.ic_release_bus = gpioiic_i2c_release_bus;
sc->sc_i2c_tag.ic_send_start = gpioiic_i2c_send_start;
sc->sc_i2c_tag.ic_send_stop = gpioiic_i2c_send_stop;
sc->sc_i2c_tag.ic_initiate_xfer = gpioiic_i2c_initiate_xfer;
sc->sc_i2c_tag.ic_read_byte = gpioiic_i2c_read_byte;
sc->sc_i2c_tag.ic_write_byte = gpioiic_i2c_write_byte;
- sc->sc_i2c_tag.ic_exec = NULL;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c_tag;
sc->sc_i2c_dev = config_found(self, &iba, iicbus_print);
@@ -220,6 +213,7 @@ gpioiic_detach(device_t self, int flags)
rv = config_detach(sc->sc_i2c_dev, flags);
if (!rv) {
+ iic_tag_fini(&sc->sc_i2c_tag);
gpio_pin_unmap(sc->sc_gpio, &sc->sc_map);
pmf_device_deregister(self);
}
@@ -227,29 +221,6 @@ gpioiic_detach(device_t self, int flags)
}
int
-gpioiic_i2c_acquire_bus(void *cookie, int flags)
-{
- struct gpioiic_softc *sc = cookie;
-
- if (flags & I2C_F_POLL)
- return 1;
-
- rw_enter(&sc->sc_i2c_lock, RW_WRITER);
- return 0;
-}
-
-void
-gpioiic_i2c_release_bus(void *cookie, int flags)
-{
- struct gpioiic_softc *sc = cookie;
-
- if (flags & I2C_F_POLL)
- return;
-
- rw_exit(&sc->sc_i2c_lock);
-}
-
-int
gpioiic_i2c_send_start(void *cookie, int flags)
{
return i2c_bitbang_send_start(cookie, flags, &gpioiic_bbops);
Index: src/sys/dev/i2c/gttwsi_core.c
diff -u src/sys/dev/i2c/gttwsi_core.c:1.8 src/sys/dev/i2c/gttwsi_core.c:1.9
--- src/sys/dev/i2c/gttwsi_core.c:1.8 Mon Oct 1 09:39:20 2018
+++ src/sys/dev/i2c/gttwsi_core.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: gttwsi_core.c,v 1.8 2018/10/01 09:39:20 bouyer Exp $ */
+/* $NetBSD: gttwsi_core.c,v 1.9 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2008 Eiji Kawauchi.
* All rights reserved.
@@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: gttwsi_core.c,v 1.8 2018/10/01 09:39:20 bouyer Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gttwsi_core.c,v 1.9 2019/12/22 23:23:32 thorpej Exp $");
#include "locators.h"
#include <sys/param.h>
@@ -83,8 +83,6 @@ __KERNEL_RCSID(0, "$NetBSD: gttwsi_core.
#include <dev/i2c/gttwsireg.h>
#include <dev/i2c/gttwsivar.h>
-static int gttwsi_acquire_bus(void *, int);
-static void gttwsi_release_bus(void *, int);
static int gttwsi_send_start(void *v, int flags);
static int gttwsi_send_stop(void *v, int flags);
static int gttwsi_initiate_xfer(void *v, i2c_addr_t addr, int flags);
@@ -149,17 +147,14 @@ gttwsi_attach_subr(device_t self, bus_sp
if (sc->sc_reg_write == NULL)
sc->sc_reg_write = gttwsi_default_write_4;
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_VM);
mutex_init(&sc->sc_mtx, MUTEX_DEFAULT, IPL_BIO);
cv_init(&sc->sc_cv, device_xname(self));
prop_dictionary_get_bool(cfg, "iflg-rwc", &sc->sc_iflg_rwc);
sc->sc_started = false;
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = gttwsi_acquire_bus;
- sc->sc_i2c.ic_release_bus = gttwsi_release_bus;
- sc->sc_i2c.ic_exec = NULL;
sc->sc_i2c.ic_send_start = gttwsi_send_start;
sc->sc_i2c.ic_send_stop = gttwsi_send_stop;
sc->sc_i2c.ic_initiate_xfer = gttwsi_initiate_xfer;
@@ -204,33 +199,6 @@ gttwsi_intr(void *arg)
return 0;
}
-/* ARGSUSED */
-static int
-gttwsi_acquire_bus(void *arg, int flags)
-{
- struct gttwsi_softc *sc = arg;
-
- mutex_enter(&sc->sc_buslock);
- while (sc->sc_inuse)
- cv_wait(&sc->sc_cv, &sc->sc_buslock);
- sc->sc_inuse = true;
- mutex_exit(&sc->sc_buslock);
-
- return 0;
-}
-
-/* ARGSUSED */
-static void
-gttwsi_release_bus(void *arg, int flags)
-{
- struct gttwsi_softc *sc = arg;
-
- mutex_enter(&sc->sc_buslock);
- sc->sc_inuse = false;
- cv_broadcast(&sc->sc_cv);
- mutex_exit(&sc->sc_buslock);
-}
-
static int
gttwsi_send_start(void *v, int flags)
{
Index: src/sys/dev/i2c/i2c.c
diff -u src/sys/dev/i2c/i2c.c:1.70 src/sys/dev/i2c/i2c.c:1.71
--- src/sys/dev/i2c/i2c.c:1.70 Thu Dec 5 06:28:09 2019
+++ src/sys/dev/i2c/i2c.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i2c.c,v 1.70 2019/12/05 06:28:09 mlelstv Exp $ */
+/* $NetBSD: i2c.c,v 1.71 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
#endif
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.70 2019/12/05 06:28:09 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.71 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -69,7 +69,6 @@ __KERNEL_RCSID(0, "$NetBSD: i2c.c,v 1.70
struct iic_softc {
device_t sc_dev;
i2c_tag_t sc_tag;
- int sc_type;
device_t sc_devices[I2C_MAX_ADDR + 1];
};
@@ -285,7 +284,6 @@ iic_search(device_t parent, cfdata_t cf,
}
ia.ia_tag = sc->sc_tag;
- ia.ia_type = sc->sc_type;
ia.ia_name = NULL;
ia.ia_ncompat = 0;
@@ -409,7 +407,6 @@ iic_attach(device_t parent, device_t sel
sc->sc_dev = self;
sc->sc_tag = iba->iba_tag;
- sc->sc_type = iba->iba_type;
ic = sc->sc_tag;
ic->ic_devname = device_xname(self);
@@ -464,7 +461,6 @@ iic_attach(device_t parent, device_t sel
memset(&ia, 0, sizeof ia);
ia.ia_addr = addr;
- ia.ia_type = sc->sc_type;
ia.ia_tag = ic;
ia.ia_name = name;
ia.ia_cookie = cookie;
Index: src/sys/dev/i2c/i2c_exec.c
diff -u src/sys/dev/i2c/i2c_exec.c:1.12 src/sys/dev/i2c/i2c_exec.c:1.13
--- src/sys/dev/i2c/i2c_exec.c:1.12 Thu Jul 25 04:20:13 2019
+++ src/sys/dev/i2c/i2c_exec.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i2c_exec.c,v 1.12 2019/07/25 04:20:13 thorpej Exp $ */
+/* $NetBSD: i2c_exec.c,v 1.13 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -36,10 +36,11 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: i2c_exec.c,v 1.12 2019/07/25 04:20:13 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: i2c_exec.c,v 1.13 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/cpu.h>
#include <sys/device.h>
#include <sys/module.h>
#include <sys/event.h>
@@ -62,6 +63,33 @@ iic_op_flags(int flags)
}
/*
+ * iic_tag_init:
+ *
+ * Perform some basic initialization of the i2c controller tag.
+ */
+void
+iic_tag_init(i2c_tag_t tag)
+{
+
+ memset(tag, 0, sizeof(*tag));
+ mutex_init(&tag->ic_bus_lock, MUTEX_DEFAULT, IPL_NONE);
+ LIST_INIT(&tag->ic_list);
+ LIST_INIT(&tag->ic_proc_list);
+}
+
+/*
+ * iic_tag_fini:
+ *
+ * Teardown of the i2c controller tag.
+ */
+void
+iic_tag_fini(i2c_tag_t tag)
+{
+
+ mutex_destroy(&tag->ic_bus_lock);
+}
+
+/*
* iic_acquire_bus:
*
* Acquire the I2C bus for use by a client.
@@ -70,9 +98,48 @@ int
iic_acquire_bus(i2c_tag_t tag, int flags)
{
+ KASSERT(!cpu_intr_p());
+
flags = iic_op_flags(flags);
- return (*tag->ic_acquire_bus)(tag->ic_cookie, flags);
+ if (flags & I2C_F_POLL) {
+ /*
+ * Polling should only be used in rare and/or
+ * extreme circumstances; most i2c clients
+ * should be allowed to sleep.
+ *
+ * Really, the ONLY user of I2C_F_POLL should be
+ * "when cold", i.e. during early autoconfiguration
+ * when there is only proc0, and we might have to
+ * read SEEPROMs, etc. There should be no other
+ * users interfering with our access of the i2c bus
+ * in that case.
+ */
+ if (mutex_tryenter(&tag->ic_bus_lock) == 0) {
+ return EBUSY;
+ }
+ } else {
+ /*
+ * N.B. We implement this as a mutex that we hold across
+ * across a series of requests beause we'd like to get the
+ * priority boost if a higher-priority process wants the
+ * i2c bus while we're asleep waiting for the controller
+ * to perform the I/O.
+ *
+ * XXXJRT Disable preemption here? We'd like to keep
+ * the CPU while holding this resource, unless we release
+ * it voluntarily (which should only happen while waiting
+ * for a controller to complete I/O).
+ */
+ mutex_enter(&tag->ic_bus_lock);
+ }
+
+ int error = 0;
+ if (tag->ic_acquire_bus) {
+ error = (*tag->ic_acquire_bus)(tag->ic_cookie, flags);
+ }
+
+ return error;
}
/*
@@ -84,9 +151,15 @@ void
iic_release_bus(i2c_tag_t tag, int flags)
{
+ KASSERT(!cpu_intr_p());
+
flags = iic_op_flags(flags);
- (*tag->ic_release_bus)(tag->ic_cookie, flags);
+ if (tag->ic_release_bus) {
+ (*tag->ic_release_bus)(tag->ic_cookie, flags);
+ }
+
+ mutex_exit(&tag->ic_bus_lock);
}
/*
@@ -108,6 +181,8 @@ iic_exec(i2c_tag_t tag, i2c_op_t op, i2c
int error;
size_t len;
+ KASSERT(!cpu_intr_p());
+
flags = iic_op_flags(flags);
if ((flags & I2C_F_PEC) && cmdlen > 0 && tag->ic_exec != NULL) {
Index: src/sys/dev/i2c/i2cvar.h
diff -u src/sys/dev/i2c/i2cvar.h:1.18 src/sys/dev/i2c/i2cvar.h:1.19
--- src/sys/dev/i2c/i2cvar.h:1.18 Mon Dec 10 00:31:45 2018
+++ src/sys/dev/i2c/i2cvar.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: i2cvar.h,v 1.18 2018/12/10 00:31:45 thorpej Exp $ */
+/* $NetBSD: i2cvar.h,v 1.19 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -39,6 +39,7 @@
#define _DEV_I2C_I2CVAR_H_
#include <sys/device.h>
+#include <sys/mutex.h>
#include <dev/i2c/i2c_io.h>
#include <prop/proplib.h>
@@ -90,10 +91,12 @@ typedef struct i2c_controller {
* the driver is finished, it should release the
* bus.
*
- * This is provided by the back-end since a single
- * controller may present e.g. i2c and smbus views
- * of the same set of i2c wires.
+ * The main synchronization logic is handled by the
+ * generic i2c layer, but optional hooks to back-end
+ * drivers are provided in case additional processing
+ * is needed (e.g. enabling the i2c controller).
*/
+ kmutex_t ic_bus_lock;
int (*ic_acquire_bus)(void *, int);
void (*ic_release_bus)(void *, int);
@@ -119,13 +122,9 @@ typedef struct i2c_controller {
const char *ic_devname;
} *i2c_tag_t;
-/* I2C bus types */
-#define I2C_TYPE_SMBUS 1
-
/* Used to attach the i2c framework to the controller. */
struct i2cbus_attach_args {
i2c_tag_t iba_tag; /* the controller */
- int iba_type; /* bus type */
prop_array_t iba_child_devices; /* child devices (direct config) */
};
@@ -159,6 +158,8 @@ struct i2c_attach_args {
* API presented to i2c controllers.
*/
int iicbus_print(void *, const char *);
+void iic_tag_init(i2c_tag_t);
+void iic_tag_fini(i2c_tag_t);
/*
* API presented to i2c devices.
Index: src/sys/dev/i2c/motoi2c.c
diff -u src/sys/dev/i2c/motoi2c.c:1.6 src/sys/dev/i2c/motoi2c.c:1.7
--- src/sys/dev/i2c/motoi2c.c:1.6 Fri Nov 29 12:42:53 2019
+++ src/sys/dev/i2c/motoi2c.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: motoi2c.c,v 1.6 2019/11/29 12:42:53 hkenken Exp $ */
+/* $NetBSD: motoi2c.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2007, 2010 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: motoi2c.c,v 1.6 2019/11/29 12:42:53 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: motoi2c.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $");
#if defined(__arm__) || defined(__aarch64__)
#include "opt_fdt.h"
@@ -78,12 +78,6 @@ static int motoi2c_exec(void *, i2c_op_
void *, size_t, int);
static int motoi2c_busy_wait(struct motoi2c_softc *, uint8_t);
-static const struct i2c_controller motoi2c = {
- .ic_acquire_bus = motoi2c_acquire_bus,
- .ic_release_bus = motoi2c_release_bus,
- .ic_exec = motoi2c_exec,
-};
-
static const struct motoi2c_settings motoi2c_default_settings = {
.i2c_adr = MOTOI2C_ADR_DEFAULT,
.i2c_fdr = MOTOI2C_FDR_DEFAULT,
@@ -113,13 +107,14 @@ motoi2c_attach_common(device_t self, str
{
struct i2cbus_attach_args iba;
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
if (i2c == NULL)
i2c = &motoi2c_default_settings;
- sc->sc_i2c = motoi2c;
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
+ sc->sc_i2c.ic_acquire_bus = motoi2c_acquire_bus;
+ sc->sc_i2c.ic_release_bus = motoi2c_release_bus;
+ sc->sc_i2c.ic_exec = motoi2c_exec;
if (sc->sc_iord == NULL)
sc->sc_iord = motoi2c_iord1;
if (sc->sc_iowr == NULL)
@@ -148,7 +143,6 @@ motoi2c_acquire_bus(void *v, int flags)
{
struct motoi2c_softc * const sc = v;
- mutex_enter(&sc->sc_buslock);
I2C_WRITE(I2CCR, CR_MEN); /* enable the I2C module */
return 0;
@@ -160,7 +154,6 @@ motoi2c_release_bus(void *v, int flags)
struct motoi2c_softc * const sc = v;
I2C_WRITE(I2CCR, 0); /* reset before changing anything */
- mutex_exit(&sc->sc_buslock);
}
static int
Index: src/sys/dev/i2c/motoi2cvar.h
diff -u src/sys/dev/i2c/motoi2cvar.h:1.5 src/sys/dev/i2c/motoi2cvar.h:1.6
--- src/sys/dev/i2c/motoi2cvar.h:1.5 Mon Aug 5 12:21:00 2019
+++ src/sys/dev/i2c/motoi2cvar.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: motoi2cvar.h,v 1.5 2019/08/05 12:21:00 hkenken Exp $ */
+/* $NetBSD: motoi2cvar.h,v 1.6 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2007, 2010 The NetBSD Foundation, Inc.
@@ -48,7 +48,6 @@ struct motoi2c_softc {
bus_space_tag_t sc_iot;
bus_space_handle_t sc_ioh;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
motoi2c_iord_t sc_iord;
motoi2c_iowr_t sc_iowr;
int sc_phandle;
Index: src/sys/dev/ic/dw_hdmi.c
diff -u src/sys/dev/ic/dw_hdmi.c:1.6 src/sys/dev/ic/dw_hdmi.c:1.7
--- src/sys/dev/ic/dw_hdmi.c:1.6 Sat Nov 23 20:27:39 2019
+++ src/sys/dev/ic/dw_hdmi.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dw_hdmi.c,v 1.6 2019/11/23 20:27:39 jmcneill Exp $ */
+/* $NetBSD: dw_hdmi.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2019 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.6 2019/11/23 20:27:39 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dw_hdmi.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -253,24 +253,6 @@ enum dwhdmi_dai_mixer_ctrl {
};
static int
-dwhdmi_ddc_acquire_bus(void *priv, int flags)
-{
- struct dwhdmi_softc * const sc = priv;
-
- mutex_enter(&sc->sc_ic_lock);
-
- return 0;
-}
-
-static void
-dwhdmi_ddc_release_bus(void *priv, int flags)
-{
- struct dwhdmi_softc * const sc = priv;
-
- mutex_exit(&sc->sc_ic_lock);
-}
-
-static int
dwhdmi_ddc_exec(void *priv, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
@@ -279,8 +261,6 @@ dwhdmi_ddc_exec(void *priv, i2c_op_t op,
uint8_t *pbuf = buf;
int off, n, retry;
- KASSERT(mutex_owned(&sc->sc_ic_lock));
-
if (addr != DDC_ADDR || op != I2C_OP_READ_WITH_STOP || cmdlen == 0 || buf == NULL) {
printf("dwhdmi_ddc_exec: bad args addr=%#x op=%#x cmdlen=%d buf=%p\n",
addr, op, (int)cmdlen, buf);
@@ -883,8 +863,6 @@ dwhdmi_attach(struct dwhdmi_softc *sc)
return EINVAL;
}
- mutex_init(&sc->sc_ic_lock, MUTEX_DEFAULT, IPL_NONE);
-
sc->sc_version = dwhdmi_read(sc, HDMI_DESIGN_ID);
sc->sc_version <<= 8;
sc->sc_version |= dwhdmi_read(sc, HDMI_REVISION_ID);
@@ -903,9 +881,8 @@ dwhdmi_attach(struct dwhdmi_softc *sc)
*/
if (sc->sc_ic == NULL) {
struct i2c_controller *ic = &sc->sc_ic_builtin;
+ iic_tag_init(ic);
ic->ic_cookie = sc;
- ic->ic_acquire_bus = dwhdmi_ddc_acquire_bus;
- ic->ic_release_bus = dwhdmi_ddc_release_bus;
ic->ic_exec = dwhdmi_ddc_exec;
sc->sc_ic = ic;
}
Index: src/sys/dev/ic/dw_hdmi.h
diff -u src/sys/dev/ic/dw_hdmi.h:1.5 src/sys/dev/ic/dw_hdmi.h:1.6
--- src/sys/dev/ic/dw_hdmi.h:1.5 Sat Nov 23 12:28:44 2019
+++ src/sys/dev/ic/dw_hdmi.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dw_hdmi.h,v 1.5 2019/11/23 12:28:44 jmcneill Exp $ */
+/* $NetBSD: dw_hdmi.h,v 1.6 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2019 Jared D. McNeill <[email protected]>
@@ -74,7 +74,6 @@ struct dwhdmi_softc {
u_int sc_version;
i2c_tag_t sc_ic;
- kmutex_t sc_ic_lock;
struct i2c_controller sc_ic_builtin;
struct audio_dai_device sc_dai;
Index: src/sys/dev/ic/dwiic.c
diff -u src/sys/dev/ic/dwiic.c:1.5 src/sys/dev/ic/dwiic.c:1.6
--- src/sys/dev/ic/dwiic.c:1.5 Wed Sep 26 19:06:33 2018
+++ src/sys/dev/ic/dwiic.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: dwiic.c,v 1.5 2018/09/26 19:06:33 jakllsch Exp $ */
+/* $NetBSD: dwiic.c,v 1.6 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: dwiic.c,v 1.4 2018/05/23 22:08:00 kettenis Exp $ */
@@ -49,7 +49,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dwiic.c,v 1.5 2018/09/26 19:06:33 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dwiic.c,v 1.6 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -145,8 +145,6 @@ __KERNEL_RCSID(0, "$NetBSD: dwiic.c,v 1.
static int dwiic_init(struct dwiic_softc *);
static void dwiic_enable(struct dwiic_softc *, bool);
-static int dwiic_i2c_acquire_bus(void *, int);
-static void dwiic_i2c_release_bus(void *, int);
static uint32_t dwiic_read(struct dwiic_softc *, int);
static void dwiic_write(struct dwiic_softc *, int, uint32_t);
static int dwiic_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
@@ -184,16 +182,14 @@ dwiic_attach(struct dwiic_softc *sc)
dwiic_enable(sc, 0);
dwiic_read(sc, DW_IC_CLR_INTR);
- mutex_init(&sc->sc_i2c_lock, MUTEX_DEFAULT, IPL_NONE);
mutex_init(&sc->sc_int_lock, MUTEX_DEFAULT, IPL_VM);
cv_init(&sc->sc_int_readwait, "dwiicr");
cv_init(&sc->sc_int_writewait, "dwiicw");
cv_init(&sc->sc_int_stopwait, "dwiics");
/* setup and attach iic bus */
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
- sc->sc_i2c_tag.ic_acquire_bus = dwiic_i2c_acquire_bus;
- sc->sc_i2c_tag.ic_release_bus = dwiic_i2c_release_bus;
sc->sc_i2c_tag.ic_exec = dwiic_i2c_exec;
sc->sc_iba.iba_tag = &sc->sc_i2c_tag;
@@ -270,29 +266,6 @@ dwiic_write(struct dwiic_softc *sc, int
}
static int
-dwiic_i2c_acquire_bus(void *cookie, int flags)
-{
- struct dwiic_softc *sc = cookie;
-
- if (cold || sc->sc_poll || (flags & I2C_F_POLL))
- return (0);
-
- mutex_enter(&sc->sc_i2c_lock);
- return 0;
-}
-
-void
-dwiic_i2c_release_bus(void *cookie, int flags)
-{
- struct dwiic_softc *sc = cookie;
-
- if (cold || sc->sc_poll || (flags & I2C_F_POLL))
- return;
-
- mutex_exit(&sc->sc_i2c_lock);
-}
-
-static int
dwiic_init(struct dwiic_softc *sc)
{
uint32_t reg;
Index: src/sys/dev/ic/pcf8584var.h
diff -u src/sys/dev/ic/pcf8584var.h:1.5 src/sys/dev/ic/pcf8584var.h:1.6
--- src/sys/dev/ic/pcf8584var.h:1.5 Sun Jan 3 17:32:17 2016
+++ src/sys/dev/ic/pcf8584var.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pcf8584var.h,v 1.5 2016/01/03 17:32:17 jdc Exp $ */
+/* $NetBSD: pcf8584var.h,v 1.6 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: pcf8584var.h,v 1.5 2007/10/20 18:46:21 kettenis Exp $ */
/*
@@ -31,7 +31,6 @@ struct pcfiic_softc {
int sc_poll;
struct i2c_controller sc_i2c;
- krwlock_t sc_lock;
};
void pcfiic_attach(struct pcfiic_softc *, i2c_addr_t, u_int8_t, int);
Index: src/sys/dev/ic/pca9564.c
diff -u src/sys/dev/ic/pca9564.c:1.2 src/sys/dev/ic/pca9564.c:1.3
--- src/sys/dev/ic/pca9564.c:1.2 Sun Feb 14 19:54:21 2016
+++ src/sys/dev/ic/pca9564.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pca9564.c,v 1.2 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: pca9564.c,v 1.3 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2010 NONAKA Kimihiro <[email protected]>
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pca9564.c,v 1.2 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pca9564.c,v 1.3 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -67,8 +67,7 @@ pca9564_attach(struct pca9564_softc *sc)
aprint_naive("\n");
aprint_normal(": PCA9564 I2C Controller\n");
- mutex_init(&sc->sc_buslock, MUTEX_DEFAULT, IPL_NONE);
-
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
sc->sc_i2c.ic_acquire_bus = pca9564_acquire_bus;
sc->sc_i2c.ic_release_bus = pca9564_release_bus;
@@ -77,7 +76,6 @@ pca9564_attach(struct pca9564_softc *sc)
sc->sc_i2c.ic_initiate_xfer = pca9564_initiate_xfer;
sc->sc_i2c.ic_read_byte = pca9564_read_byte;
sc->sc_i2c.ic_write_byte = pca9564_write_byte;
- sc->sc_i2c.ic_exec = NULL;
/* set serial clock rate */
switch (sc->sc_i2c_clock) {
@@ -124,8 +122,6 @@ pca9564_acquire_bus(void *cookie, int fl
struct pca9564_softc *sc = cookie;
uint8_t control;
- mutex_enter(&sc->sc_buslock);
-
/* Enable SIO and set clock */
control = CSR_READ(sc, PCA9564_I2CCON);
control |= I2CCON_ENSIO;
@@ -148,8 +144,6 @@ pca9564_release_bus(void *cookie, int fl
control = CSR_READ(sc, PCA9564_I2CCON);
control &= ~I2CCON_ENSIO;
CSR_WRITE(sc, PCA9564_I2CCON, control);
-
- mutex_exit(&sc->sc_buslock);
}
#define PCA9564_TIMEOUT 100 /* protocol timeout, in uSecs */
Index: src/sys/dev/ic/pca9564var.h
diff -u src/sys/dev/ic/pca9564var.h:1.1 src/sys/dev/ic/pca9564var.h:1.2
--- src/sys/dev/ic/pca9564var.h:1.1 Fri Apr 9 10:09:50 2010
+++ src/sys/dev/ic/pca9564var.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pca9564var.h,v 1.1 2010/04/09 10:09:50 nonaka Exp $ */
+/* $NetBSD: pca9564var.h,v 1.2 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2010 NONAKA Kimihiro <[email protected]>
@@ -41,7 +41,6 @@ struct pca9564_softc {
int sc_i2c_clock;
struct i2c_controller sc_i2c;
- kmutex_t sc_buslock;
};
void pca9564_attach(struct pca9564_softc *);
Index: src/sys/dev/ic/pcf8584.c
diff -u src/sys/dev/ic/pcf8584.c:1.15 src/sys/dev/ic/pcf8584.c:1.16
--- src/sys/dev/ic/pcf8584.c:1.15 Mon Jan 11 18:24:56 2016
+++ src/sys/dev/ic/pcf8584.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pcf8584.c,v 1.15 2016/01/11 18:24:56 jdc Exp $ */
+/* $NetBSD: pcf8584.c,v 1.16 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: pcf8584.c,v 1.9 2007/10/20 18:46:21 kettenis Exp $ */
/*
@@ -22,7 +22,6 @@
#include <sys/device.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
-#include <sys/rwlock.h>
#include <sys/proc.h>
#include <sys/bus.h>
@@ -94,10 +93,8 @@ pcfiic_attach(struct pcfiic_softc *sc, i
if (sc->sc_master)
pcfiic_choose_bus(sc, 0);
- rw_init(&sc->sc_lock);
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = pcfiic_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = pcfiic_i2c_release_bus;
sc->sc_i2c.ic_exec = pcfiic_i2c_exec;
bzero(&iba, sizeof(iba));
@@ -112,23 +109,6 @@ pcfiic_intr(void *arg)
}
int
-pcfiic_i2c_acquire_bus(void *arg, int flags)
-{
- struct pcfiic_softc *sc = arg;
-
- rw_enter(&sc->sc_lock, RW_WRITER);
- return 0;
-}
-
-void
-pcfiic_i2c_release_bus(void *arg, int flags)
-{
- struct pcfiic_softc *sc = arg;
-
- rw_exit(&sc->sc_lock);
-}
-
-int
pcfiic_i2c_exec(void *arg, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/dev/pci/alipm.c
diff -u src/sys/dev/pci/alipm.c:1.10 src/sys/dev/pci/alipm.c:1.11
--- src/sys/dev/pci/alipm.c:1.10 Sun Mar 18 12:47:01 2012
+++ src/sys/dev/pci/alipm.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: alipm.c,v 1.10 2012/03/18 12:47:01 martin Exp $ */
+/* $NetBSD: alipm.c,v 1.11 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: alipm.c,v 1.13 2007/05/03 12:19:01 dlg Exp $ */
/*
@@ -18,7 +18,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: alipm.c,v 1.10 2012/03/18 12:47:01 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: alipm.c,v 1.11 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -104,7 +104,6 @@ struct alipm_softc {
bus_space_handle_t sc_ioh;
struct i2c_controller sc_smb_tag;
- kmutex_t sc_smb_mutex;
};
static int alipm_match(device_t, cfdata_t, void *);
@@ -205,10 +204,8 @@ alipm_attach(device_t parent, device_t s
aprint_naive("\n");
/* Attach I2C bus */
- mutex_init(&sc->sc_smb_mutex, MUTEX_DEFAULT, IPL_NONE);
+ iic_tag_init(&sc->sc_smb_tag);
sc->sc_smb_tag.ic_cookie = sc;
- sc->sc_smb_tag.ic_acquire_bus = alipm_smb_acquire_bus;
- sc->sc_smb_tag.ic_release_bus = alipm_smb_release_bus;
sc->sc_smb_tag.ic_exec = alipm_smb_exec;
memset(&iba, 0, sizeof iba);
@@ -222,23 +219,6 @@ fail:
}
int
-alipm_smb_acquire_bus(void *cookie, int flags)
-{
- struct alipm_softc *sc = cookie;
-
- mutex_enter(&sc->sc_smb_mutex);
- return 0;
-}
-
-void
-alipm_smb_release_bus(void *cookie, int flags)
-{
- struct alipm_softc *sc = cookie;
-
- mutex_exit(&sc->sc_smb_mutex);
-}
-
-int
alipm_smb_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/dev/pci/amdpm_smbus.c
diff -u src/sys/dev/pci/amdpm_smbus.c:1.22 src/sys/dev/pci/amdpm_smbus.c:1.23
--- src/sys/dev/pci/amdpm_smbus.c:1.22 Sun Feb 14 19:54:21 2016
+++ src/sys/dev/pci/amdpm_smbus.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: amdpm_smbus.c,v 1.22 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: amdpm_smbus.c,v 1.23 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2005 Anil Gopinath ([email protected])
@@ -32,13 +32,12 @@
* AMD-8111 HyperTransport I/O Hub
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: amdpm_smbus.c,v 1.22 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: amdpm_smbus.c,v 1.23 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/device.h>
-#include <sys/mutex.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
@@ -52,8 +51,6 @@ __KERNEL_RCSID(0, "$NetBSD: amdpm_smbus.
#include <dev/pci/amdpm_smbusreg.h>
-static int amdpm_smbus_acquire_bus(void *, int);
-static void amdpm_smbus_release_bus(void *, int);
static int amdpm_smbus_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
static int amdpm_smbus_check_done(struct amdpm_softc *, i2c_op_t);
@@ -72,14 +69,8 @@ amdpm_smbus_attach(struct amdpm_softc *s
struct i2cbus_attach_args iba;
/* register with iic */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = amdpm_smbus_acquire_bus;
- sc->sc_i2c.ic_release_bus = amdpm_smbus_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 = amdpm_smbus_exec;
memset(&iba, 0, sizeof(iba));
@@ -88,23 +79,6 @@ amdpm_smbus_attach(struct amdpm_softc *s
}
static int
-amdpm_smbus_acquire_bus(void *cookie, int flags)
-{
- struct amdpm_softc *sc = cookie;
-
- mutex_enter(&sc->sc_mutex);
- return 0;
-}
-
-static void
-amdpm_smbus_release_bus(void *cookie, int flags)
-{
- struct amdpm_softc *sc = cookie;
-
- mutex_exit(&sc->sc_mutex);
-}
-
-static int
amdpm_smbus_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *cmd,
size_t cmdlen, void *vbuf, size_t buflen, int flags)
{
Index: src/sys/dev/pci/amdpmvar.h
diff -u src/sys/dev/pci/amdpmvar.h:1.11 src/sys/dev/pci/amdpmvar.h:1.12
--- src/sys/dev/pci/amdpmvar.h:1.11 Mon Apr 13 16:33:25 2015
+++ src/sys/dev/pci/amdpmvar.h Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: amdpmvar.h,v 1.11 2015/04/13 16:33:25 riastradh Exp $ */
+/* $NetBSD: amdpmvar.h,v 1.12 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -32,7 +32,6 @@
#ifndef _DEV_PCI_AMDPMVAR_H_
#define _DEV_PCI_AMDPMVAR_H_
-#include <sys/mutex.h>
#include <sys/rndsource.h>
struct amdpm_softc {
Index: src/sys/dev/pci/coram.c
diff -u src/sys/dev/pci/coram.c:1.16 src/sys/dev/pci/coram.c:1.17
--- src/sys/dev/pci/coram.c:1.16 Sun Dec 9 11:14:01 2018
+++ src/sys/dev/pci/coram.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: coram.c,v 1.16 2018/12/09 11:14:01 jdolecek Exp $ */
+/* $NetBSD: coram.c,v 1.17 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2008, 2011 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: coram.c,v 1.16 2018/12/09 11:14:01 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: coram.c,v 1.17 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -69,8 +69,6 @@ static const struct coram_board * coram_
static int coram_iic_exec(void *, i2c_op_t, i2c_addr_t,
const void *, size_t, void *, size_t, int);
-static int coram_iic_acquire_bus(void *, int);
-static void coram_iic_release_bus(void *, int);
static int coram_iic_read(struct coram_iic_softc *, i2c_op_t, i2c_addr_t,
const void *, size_t, void *, size_t, int);
static int coram_iic_write(struct coram_iic_softc *, i2c_op_t, i2c_addr_t,
@@ -219,17 +217,14 @@ coram_attach(device_t parent, device_t s
I2C_BASE + (I2C_SIZE * i), I2C_SIZE, &cic->cic_regh))
panic("failed to subregion i2c");
- mutex_init(&cic->cic_busmutex, MUTEX_DRIVER, IPL_NONE);
+ iic_tag_init(&cic->cic_i2c);
cic->cic_i2c.ic_cookie = cic;
- cic->cic_i2c.ic_acquire_bus = coram_iic_acquire_bus;
- cic->cic_i2c.ic_release_bus = coram_iic_release_bus;
cic->cic_i2c.ic_exec = coram_iic_exec;
#ifdef CORAM_ATTACH_I2C
/* attach iic(4) */
memset(&iba, 0, sizeof(iba));
iba.iba_tag = &cic->cic_i2c;
- iba.iba_type = I2C_TYPE_SMBUS;
cic->cic_i2cdev = config_found_ia(self, "i2cbus", &iba,
iicbus_print);
#endif
@@ -307,7 +302,7 @@ coram_detach(device_t self, int flags)
cic = &sc->sc_iic[i];
if (cic->cic_i2cdev)
config_detach(cic->cic_i2cdev, flags);
- mutex_destroy(&cic->cic_busmutex);
+ iic_tag_fini(&cic->cic_i2c);
}
pmf_device_deregister(self);
@@ -455,36 +450,6 @@ coram_resume(device_t dv, const pmf_qual
return true;
}
-static int
-coram_iic_acquire_bus(void *cookie, int flags)
-{
- struct coram_iic_softc *cic;
-
- cic = cookie;
-
- if (flags & I2C_F_POLL) {
- while (mutex_tryenter(&cic->cic_busmutex) == 0)
- delay(50);
- return 0;
- }
-
- mutex_enter(&cic->cic_busmutex);
-
- return 0;
-}
-
-static void
-coram_iic_release_bus(void *cookie, int flags)
-{
- struct coram_iic_softc *cic;
-
- cic = cookie;
-
- mutex_exit(&cic->cic_busmutex);
-
- return;
-}
-
/* I2C Bus */
#define I2C_ADDR 0x0000
Index: src/sys/dev/pci/cxdtv.c
diff -u src/sys/dev/pci/cxdtv.c:1.16 src/sys/dev/pci/cxdtv.c:1.17
--- src/sys/dev/pci/cxdtv.c:1.16 Sun Dec 9 11:14:01 2018
+++ src/sys/dev/pci/cxdtv.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: cxdtv.c,v 1.16 2018/12/09 11:14:01 jdolecek Exp $ */
+/* $NetBSD: cxdtv.c,v 1.17 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2008, 2011 Jonathan A. Kollasch
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cxdtv.c,v 1.16 2018/12/09 11:14:01 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cxdtv.c,v 1.17 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -70,8 +70,6 @@ static int cxdtv_intr(void *);
static bool cxdtv_resume(device_t, const pmf_qual_t *);
-static int cxdtv_iic_acquire_bus(void *, int);
-static void cxdtv_iic_release_bus(void *, int);
static int cxdtv_iic_send_start(void *, int);
static int cxdtv_iic_send_stop(void *, int);
static int cxdtv_iic_initiate_xfer(void *, i2c_addr_t, int);
@@ -233,11 +231,8 @@ cxdtv_attach(device_t parent, device_t s
reg |= PCI_COMMAND_MASTER_ENABLE;
pci_conf_write(pa->pa_pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, reg);
- mutex_init(&sc->sc_i2c_buslock, MUTEX_DRIVER, IPL_NONE);
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_exec = NULL;
- sc->sc_i2c.ic_acquire_bus = cxdtv_iic_acquire_bus;
- sc->sc_i2c.ic_release_bus = cxdtv_iic_release_bus;
sc->sc_i2c.ic_send_start = cxdtv_iic_send_start;
sc->sc_i2c.ic_send_stop = cxdtv_iic_send_stop;
sc->sc_i2c.ic_initiate_xfer = cxdtv_iic_initiate_xfer;
@@ -282,7 +277,7 @@ cxdtv_detach(device_t self, int flags)
if (sc->sc_mems)
bus_space_unmap(sc->sc_memt, sc->sc_memh, sc->sc_mems);
- mutex_destroy(&sc->sc_i2c_buslock);
+ iic_tag_fini(&sc->sc_i2c);
return 0;
}
@@ -380,26 +375,6 @@ cxdtv_i2cbb_read_bits(void *cookie)
}
static int
-cxdtv_iic_acquire_bus(void *cookie, int flags)
-{
- struct cxdtv_softc *sc = cookie;
-
- mutex_enter(&sc->sc_i2c_buslock);
-
- return 0;
-}
-
-static void
-cxdtv_iic_release_bus(void *cookie, int flags)
-{
- struct cxdtv_softc *sc = cookie;
-
- mutex_exit(&sc->sc_i2c_buslock);
-
- return;
-}
-
-static int
cxdtv_iic_send_start(void *cookie, int flags)
{
return i2c_bitbang_send_start(cookie, flags, &cxdtv_i2cbb_ops);
Index: src/sys/dev/pci/ichsmb.c
diff -u src/sys/dev/pci/ichsmb.c:1.62 src/sys/dev/pci/ichsmb.c:1.63
--- src/sys/dev/pci/ichsmb.c:1.62 Mon Dec 9 21:00:48 2019
+++ src/sys/dev/pci/ichsmb.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: ichsmb.c,v 1.62 2019/12/09 21:00:48 ad Exp $ */
+/* $NetBSD: ichsmb.c,v 1.63 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: ichiic.c,v 1.18 2007/05/03 09:36:26 dlg Exp $ */
/*
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ichsmb.c,v 1.62 2019/12/09 21:00:48 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ichsmb.c,v 1.63 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -63,7 +63,6 @@ struct ichsmb_softc {
pci_intr_handle_t *sc_pihp;
struct i2c_controller sc_i2c_tag;
- kmutex_t sc_i2c_mutex;
struct {
i2c_op_t op;
void * buf;
@@ -80,8 +79,6 @@ static int ichsmb_detach(device_t, int);
static int ichsmb_rescan(device_t, const char *, const int *);
static void ichsmb_chdet(device_t, device_t);
-static int ichsmb_i2c_acquire_bus(void *, int);
-static void ichsmb_i2c_release_bus(void *, int);
static int ichsmb_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
@@ -163,7 +160,6 @@ ichsmb_attach(device_t parent, device_t
sc->sc_pc = pa->pa_pc;
pci_aprint_devinfo(pa, NULL);
- mutex_init(&sc->sc_i2c_mutex, MUTEX_DEFAULT, IPL_NONE);
/* Read configuration */
conf = pci_conf_read(pa->pa_pc, pa->pa_tag, LPCIB_SMB_HOSTC);
@@ -228,13 +224,11 @@ ichsmb_rescan(device_t self, const char
return 0;
/* Attach I2C bus */
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
- sc->sc_i2c_tag.ic_acquire_bus = ichsmb_i2c_acquire_bus;
- sc->sc_i2c_tag.ic_release_bus = ichsmb_i2c_release_bus;
sc->sc_i2c_tag.ic_exec = ichsmb_i2c_exec;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c_tag;
sc->sc_i2c_device = config_found_ia(self, ifattr, &iba, iicbus_print);
@@ -253,7 +247,7 @@ ichsmb_detach(device_t self, int flags)
return error;
}
- mutex_destroy(&sc->sc_i2c_mutex);
+ iic_tag_fini(&sc->sc_i2c_tag);
if (sc->sc_ih) {
pci_intr_disestablish(sc->sc_pc, sc->sc_ih);
@@ -281,29 +275,6 @@ ichsmb_chdet(device_t self, device_t chi
}
static int
-ichsmb_i2c_acquire_bus(void *cookie, int flags)
-{
- struct ichsmb_softc *sc = cookie;
-
- if (cold)
- return 0;
-
- mutex_enter(&sc->sc_i2c_mutex);
- return 0;
-}
-
-static void
-ichsmb_i2c_release_bus(void *cookie, int flags)
-{
- struct ichsmb_softc *sc = cookie;
-
- if (cold)
- return;
-
- mutex_exit(&sc->sc_i2c_mutex);
-}
-
-static int
ichsmb_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
const void *cmdbuf, size_t cmdlen, void *buf, size_t len, int flags)
{
Index: src/sys/dev/pci/if_tl.c
diff -u src/sys/dev/pci/if_tl.c:1.117 src/sys/dev/pci/if_tl.c:1.118
--- src/sys/dev/pci/if_tl.c:1.117 Wed Oct 30 07:26:28 2019
+++ src/sys/dev/pci/if_tl.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_tl.c,v 1.117 2019/10/30 07:26:28 msaitoh Exp $ */
+/* $NetBSD: if_tl.c,v 1.118 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 1997 Manuel Bouyer. All rights reserved.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.117 2019/10/30 07:26:28 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.118 2019/12/22 23:23:32 thorpej Exp $");
#undef TLDEBUG
#define TL_PRIV_STATS
@@ -141,8 +141,6 @@ int tl_mii_write(device_t, int, int, uin
void tl_statchg(struct ifnet *);
/* I2C glue */
-static int tl_i2c_acquire_bus(void *, int);
-static void tl_i2c_release_bus(void *, int);
static int tl_i2c_send_start(void *, int);
static int tl_i2c_send_stop(void *, int);
static int tl_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -361,9 +359,8 @@ tl_pci_attach(device_t parent, device_t
tl_reset(sc);
/* fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = tl_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = tl_i2c_release_bus;
sc->sc_i2c.ic_send_start = tl_i2c_send_start;
sc->sc_i2c.ic_send_stop = tl_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = tl_i2c_initiate_xfer;
@@ -918,21 +915,6 @@ tl_statchg(struct ifnet *ifp)
/********** I2C glue **********/
static int
-tl_i2c_acquire_bus(void *cookie, int flags)
-{
-
- /* private bus */
- return 0;
-}
-
-static void
-tl_i2c_release_bus(void *cookie, int flags)
-{
-
- /* private bus */
-}
-
-static int
tl_i2c_send_start(void *cookie, int flags)
{
Index: src/sys/dev/pci/igma.c
diff -u src/sys/dev/pci/igma.c:1.3 src/sys/dev/pci/igma.c:1.4
--- src/sys/dev/pci/igma.c:1.3 Sun Feb 14 19:54:21 2016
+++ src/sys/dev/pci/igma.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: igma.c,v 1.3 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: igma.c,v 1.4 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2014 Michael van Elst
@@ -21,7 +21,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: igma.c,v 1.3 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: igma.c,v 1.4 2019/12/22 23:23:32 thorpej Exp $");
#include "vga.h"
@@ -58,7 +58,6 @@ __KERNEL_RCSID(0, "$NetBSD: igma.c,v 1.3
struct igma_softc;
struct igma_i2c {
- kmutex_t ii_lock;
struct igma_softc *ii_sc;
bus_addr_t ii_reg;
struct i2c_controller ii_i2c;
@@ -457,21 +456,16 @@ igma_i2c_attach(struct igma_softc *sc)
panic("don't know GMBUS %d\n",i);
}
- mutex_init(&ii->ii_lock, MUTEX_DEFAULT, IPL_NONE);
-
+ iic_tag_init(&ii->ii_i2c);
ii->ii_i2c.ic_cookie = ii;
- ii->ii_i2c.ic_acquire_bus = igma_i2c_acquire_bus;
- ii->ii_i2c.ic_release_bus = igma_i2c_release_bus;
ii->ii_i2c.ic_send_start = igma_i2c_send_start;
ii->ii_i2c.ic_send_stop = igma_i2c_send_stop;
ii->ii_i2c.ic_initiate_xfer = igma_i2c_initiate_xfer;
ii->ii_i2c.ic_read_byte = igma_i2c_read_byte;
ii->ii_i2c.ic_write_byte = igma_i2c_write_byte;
- ii->ii_i2c.ic_exec = NULL;
#if 0
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &ii->ii_i2c;
config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print);
#endif
@@ -483,21 +477,6 @@ igma_i2c_attach(struct igma_softc *sc)
*/
static int
-igma_i2c_acquire_bus(void *cookie, int flags)
-{
- struct igma_i2c *ii = cookie;
- mutex_enter(&ii->ii_lock);
- return 0;
-}
-
-static void
-igma_i2c_release_bus(void *cookie, int flags)
-{
- struct igma_i2c *ii = cookie;
- mutex_exit(&ii->ii_lock);
-}
-
-static int
igma_i2c_send_start(void *cookie, int flags)
{
return i2c_bitbang_send_start(cookie, flags, &igma_i2cbb_ops);
Index: src/sys/dev/pci/ismt.c
diff -u src/sys/dev/pci/ismt.c:1.6 src/sys/dev/pci/ismt.c:1.7
--- src/sys/dev/pci/ismt.c:1.6 Thu Aug 17 01:24:09 2017
+++ src/sys/dev/pci/ismt.c Sun Dec 22 23:23:32 2019
@@ -60,7 +60,7 @@
#if 0
__FBSDID("$FreeBSD: head/sys/dev/ismt/ismt.c 266474 2014-05-20 19:55:06Z jimharris $");
#endif
-__KERNEL_RCSID(0, "$NetBSD: ismt.c,v 1.6 2017/08/17 01:24:09 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ismt.c,v 1.7 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -68,7 +68,6 @@ __KERNEL_RCSID(0, "$NetBSD: ismt.c,v 1.6
#include <sys/errno.h>
#include <sys/kernel.h>
#include <sys/module.h>
-#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/bus.h>
@@ -186,7 +185,6 @@ struct ismt_softc {
device_t smbdev;
struct i2c_controller sc_i2c_tag;
- kmutex_t sc_i2c_mutex;
pci_chipset_tag_t sc_pc;
pcitag_t sc_pcitag;
@@ -215,8 +213,6 @@ struct ismt_softc {
};
static int ismt_intr(void *);
-static int ismt_i2c_acquire_bus(void *, int);
-static void ismt_i2c_release_bus(void *, int);
static int ismt_i2c_exec(void *, i2c_op_t, i2c_addr_t, const void *,
size_t, void *, size_t, int);
static struct ismt_desc *ismt_alloc_desc(struct ismt_softc *);
@@ -269,23 +265,6 @@ ismt_intr(void *arg)
}
static int
-ismt_i2c_acquire_bus(void *cookie, int flags)
-{
- struct ismt_softc *sc = cookie;
-
- mutex_enter(&sc->sc_i2c_mutex);
- return 0;
-}
-
-static void
-ismt_i2c_release_bus(void *cookie, int flags)
-{
- struct ismt_softc *sc = cookie;
-
- mutex_exit(&sc->sc_i2c_mutex);
-}
-
-static int
ismt_i2c_exec(void *cookie, i2c_op_t op, i2c_addr_t addr,
const void *cmd, size_t cmdlen, void *buf, size_t buflen, int flags)
{
@@ -342,8 +321,6 @@ ismt_alloc_desc(struct ismt_softc *sc)
{
struct ismt_desc *desc;
- KASSERT(mutex_owned(&sc->sc_i2c_mutex));
-
desc = &sc->desc[sc->head++];
if (sc->head == ISMT_DESC_ENTRIES)
sc->head = 0;
@@ -675,7 +652,7 @@ ismt_detach(device_t self, int flags)
if (sc->mmio_size)
bus_space_unmap(sc->mmio_tag, sc->mmio_handle, sc->mmio_size);
- mutex_destroy(&sc->sc_i2c_mutex);
+ iic_tag_fini(&sc->sc_i2c_tag);
return rv;
}
@@ -776,7 +753,6 @@ ismt_attach(device_t parent, device_t se
aprint_normal_dev(sc->pcidev, "interrupting at %s\n", intrstr);
sc->smbdev = NULL;
- mutex_init(&sc->sc_i2c_mutex, MUTEX_DEFAULT, IPL_NONE);
if (!pmf_device_register(self, NULL, NULL))
aprint_error_dev(self, "couldn't establish power handler\n");
@@ -823,13 +799,11 @@ ismt_rescan(device_t self, const char *i
return 0;
/* Attach I2C bus */
+ iic_tag_init(&sc->sc_i2c_tag);
sc->sc_i2c_tag.ic_cookie = sc;
- sc->sc_i2c_tag.ic_acquire_bus = ismt_i2c_acquire_bus;
- sc->sc_i2c_tag.ic_release_bus = ismt_i2c_release_bus;
sc->sc_i2c_tag.ic_exec = ismt_i2c_exec;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c_tag;
sc->smbdev = config_found_ia(self, ifattr, &iba, iicbus_print);
Index: src/sys/dev/pci/nfsmb.c
diff -u src/sys/dev/pci/nfsmb.c:1.24 src/sys/dev/pci/nfsmb.c:1.25
--- src/sys/dev/pci/nfsmb.c:1.24 Sun Feb 14 19:54:21 2016
+++ src/sys/dev/pci/nfsmb.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: nfsmb.c,v 1.24 2016/02/14 19:54:21 chs Exp $ */
+/* $NetBSD: nfsmb.c,v 1.25 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2007 KIYOHARA Takashi
* All rights reserved.
@@ -26,7 +26,7 @@
*
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: nfsmb.c,v 1.24 2016/02/14 19:54:21 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: nfsmb.c,v 1.25 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -73,7 +73,6 @@ struct nfsmb_softc {
bus_space_handle_t sc_ioh;
struct i2c_controller sc_i2c; /* i2c controller info */
- kmutex_t sc_mutex;
};
@@ -83,8 +82,6 @@ static int nfsmbc_print(void *, const ch
static int nfsmb_match(device_t, cfdata_t, void *);
static void nfsmb_attach(device_t, device_t, void *);
-static int nfsmb_acquire_bus(void *, int);
-static void nfsmb_release_bus(void *, int);
static int nfsmb_exec(
void *, i2c_op_t, i2c_addr_t, const void *, size_t, void *, size_t, int);
static int nfsmb_check_done(struct nfsmb_softc *);
@@ -227,18 +224,10 @@ nfsmb_attach(device_t parent, device_t s
sc->sc_iot = nfsmbcap->nfsmb_iot;
/* register with iic */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = nfsmb_acquire_bus;
- sc->sc_i2c.ic_release_bus = nfsmb_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 = nfsmb_exec;
- mutex_init(&sc->sc_mutex, MUTEX_DEFAULT, IPL_NONE);
-
if (bus_space_map(sc->sc_iot, nfsmbcap->nfsmb_addr, NFORCE_SMBSIZE, 0,
&sc->sc_ioh) != 0) {
aprint_error_dev(self, "failed to map SMBus space\n");
@@ -246,7 +235,6 @@ nfsmb_attach(device_t parent, device_t s
}
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c;
(void) config_found_ia(sc->sc_dev, "i2cbus", &iba, iicbus_print);
@@ -258,23 +246,6 @@ nfsmb_attach(device_t parent, device_t s
}
static int
-nfsmb_acquire_bus(void *cookie, int flags)
-{
- struct nfsmb_softc *sc = cookie;
-
- mutex_enter(&sc->sc_mutex);
- return 0;
-}
-
-static void
-nfsmb_release_bus(void *cookie, int flags)
-{
- struct nfsmb_softc *sc = cookie;
-
- mutex_exit(&sc->sc_mutex);
-}
-
-static int
nfsmb_exec(void *cookie, i2c_op_t op, i2c_addr_t addr, const void *cmd,
size_t cmdlen, void *vbuf, size_t buflen, int flags)
{
Index: src/sys/dev/pci/piixpm.c
diff -u src/sys/dev/pci/piixpm.c:1.54 src/sys/dev/pci/piixpm.c:1.55
--- src/sys/dev/pci/piixpm.c:1.54 Sat Jul 13 09:24:17 2019
+++ src/sys/dev/pci/piixpm.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: piixpm.c,v 1.54 2019/07/13 09:24:17 msaitoh Exp $ */
+/* $NetBSD: piixpm.c,v 1.55 2019/12/22 23:23:32 thorpej Exp $ */
/* $OpenBSD: piixpm.c,v 1.39 2013/10/01 20:06:02 sf Exp $ */
/*
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: piixpm.c,v 1.54 2019/07/13 09:24:17 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: piixpm.c,v 1.55 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -97,7 +97,6 @@ struct piixpm_softc {
struct piixpm_smbus sc_busses[4];
struct i2c_controller sc_i2c_tags[4];
- kmutex_t sc_i2c_mutex;
struct {
i2c_op_t op;
void * buf;
@@ -297,7 +296,6 @@ setintr:
sc->sc_i2c_device[i] = NULL;
flags = 0;
- mutex_init(&sc->sc_i2c_mutex, MUTEX_DEFAULT, IPL_NONE);
piixpm_rescan(self, "i2cbus", &flags);
}
@@ -332,12 +330,12 @@ piixpm_rescan(device_t self, const char
continue;
sc->sc_busses[i].sda = i;
sc->sc_busses[i].softc = sc;
+ iic_tag_init(&sc->sc_i2c_tags[i]);
sc->sc_i2c_tags[i].ic_cookie = &sc->sc_busses[i];
sc->sc_i2c_tags[i].ic_acquire_bus = piixpm_i2c_acquire_bus;
sc->sc_i2c_tags[i].ic_release_bus = piixpm_i2c_release_bus;
sc->sc_i2c_tags[i].ic_exec = piixpm_i2c_exec;
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c_tags[i];
sc->sc_i2c_device[i] = config_found_ia(self, ifattr, &iba,
piixpm_iicbus_print);
@@ -477,9 +475,6 @@ piixpm_i2c_acquire_bus(void *cookie, int
struct piixpm_smbus *smbus = cookie;
struct piixpm_softc *sc = smbus->softc;
- if (!cold)
- mutex_enter(&sc->sc_i2c_mutex);
-
if (PIIXPM_IS_KERNCZ(sc)) {
bus_space_write_1(sc->sc_iot, sc->sc_sb800_ioh,
SB800_INDIRECTIO_INDEX, AMDFCH41_PM_PORT_INDEX);
@@ -516,9 +511,6 @@ piixpm_i2c_release_bus(void *cookie, int
bus_space_write_1(sc->sc_iot, sc->sc_sb800_ioh,
SB800_INDIRECTIO_DATA, 0);
}
-
- if (!cold)
- mutex_exit(&sc->sc_i2c_mutex);
}
static int
Index: src/sys/dev/pci/pm2fb.c
diff -u src/sys/dev/pci/pm2fb.c:1.30 src/sys/dev/pci/pm2fb.c:1.31
--- src/sys/dev/pci/pm2fb.c:1.30 Mon Sep 3 16:29:32 2018
+++ src/sys/dev/pci/pm2fb.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: pm2fb.c,v 1.30 2018/09/03 16:29:32 riastradh Exp $ */
+/* $NetBSD: pm2fb.c,v 1.31 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2009, 2012 Michael Lorenz
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pm2fb.c,v 1.30 2018/09/03 16:29:32 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pm2fb.c,v 1.31 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -167,8 +167,6 @@ struct wsdisplay_accessops pm2fb_accesso
};
/* I2C glue */
-static int pm2fb_i2c_acquire_bus(void *, int);
-static void pm2fb_i2c_release_bus(void *, int);
static int pm2fb_i2c_send_start(void *, int);
static int pm2fb_i2c_send_stop(void *, int);
static int pm2fb_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -1341,15 +1339,13 @@ pm2_setup_i2c(struct pm2fb_softc *sc)
#endif
/* Fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = pm2fb_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = pm2fb_i2c_release_bus;
sc->sc_i2c.ic_send_start = pm2fb_i2c_send_start;
sc->sc_i2c.ic_send_stop = pm2fb_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = pm2fb_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = pm2fb_i2c_read_byte;
sc->sc_i2c.ic_write_byte = pm2fb_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
DPRINTF("data: %08x\n", bus_space_read_4(sc->sc_memt, sc->sc_regh,
PM2_DISPLAY_DATA));
@@ -1448,19 +1444,6 @@ static uint32_t pm2fb_i2cbb_read(void *c
/* higher level I2C stuff */
static int
-pm2fb_i2c_acquire_bus(void *cookie, int flags)
-{
- /* private bus */
- return (0);
-}
-
-static void
-pm2fb_i2c_release_bus(void *cookie, int flags)
-{
- /* private bus */
-}
-
-static int
pm2fb_i2c_send_start(void *cookie, int flags)
{
return (i2c_bitbang_send_start(cookie, flags, &pm2fb_i2cbb_ops));
Index: src/sys/dev/pci/pm3fb.c
diff -u src/sys/dev/pci/pm3fb.c:1.4 src/sys/dev/pci/pm3fb.c:1.5
--- src/sys/dev/pci/pm3fb.c:1.4 Mon Mar 6 16:49:26 2017
+++ src/sys/dev/pci/pm3fb.c Sun Dec 22 23:23:32 2019
@@ -133,8 +133,6 @@ struct wsdisplay_accessops pm3fb_accesso
};
/* I2C glue */
-static int pm3fb_i2c_acquire_bus(void *, int);
-static void pm3fb_i2c_release_bus(void *, int);
static int pm3fb_i2c_send_start(void *, int);
static int pm3fb_i2c_send_stop(void *, int);
static int pm3fb_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -1004,9 +1002,8 @@ pm3_setup_i2c(struct pm3fb_softc *sc)
int i;
/* Fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = pm3fb_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = pm3fb_i2c_release_bus;
sc->sc_i2c.ic_send_start = pm3fb_i2c_send_start;
sc->sc_i2c.ic_send_stop = pm3fb_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = pm3fb_i2c_initiate_xfer;
@@ -1095,19 +1092,6 @@ static uint32_t pm3fb_i2cbb_read(void *c
/* higher level I2C stuff */
static int
-pm3fb_i2c_acquire_bus(void *cookie, int flags)
-{
- /* private bus */
- return (0);
-}
-
-static void
-pm3fb_i2c_release_bus(void *cookie, int flags)
-{
- /* private bus */
-}
-
-static int
pm3fb_i2c_send_start(void *cookie, int flags)
{
Index: src/sys/dev/pci/radeonfb_i2c.c
diff -u src/sys/dev/pci/radeonfb_i2c.c:1.2 src/sys/dev/pci/radeonfb_i2c.c:1.3
--- src/sys/dev/pci/radeonfb_i2c.c:1.2 Fri Oct 19 12:00:55 2007
+++ src/sys/dev/pci/radeonfb_i2c.c Sun Dec 22 23:23:32 2019
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeonfb_i2c.c,v 1.2 2007/10/19 12:00:55 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeonfb_i2c.c,v 1.3 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -205,6 +205,7 @@ radeonfb_i2c_init(struct radeonfb_softc
struct i2c_controller *icc = &sc->sc_i2c[i].ric_controller;
sc->sc_i2c[i].ric_softc = sc;
+ iic_tag_init(icc);
icc->ic_cookie = &sc->sc_i2c[i];
icc->ic_acquire_bus = radeonfb_i2c_acquire_bus;
icc->ic_release_bus = radeonfb_i2c_release_bus;
Index: src/sys/dev/pci/voodoofb.c
diff -u src/sys/dev/pci/voodoofb.c:1.52 src/sys/dev/pci/voodoofb.c:1.53
--- src/sys/dev/pci/voodoofb.c:1.52 Sun Dec 9 11:14:02 2018
+++ src/sys/dev/pci/voodoofb.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: voodoofb.c,v 1.52 2018/12/09 11:14:02 jdolecek Exp $ */
+/* $NetBSD: voodoofb.c,v 1.53 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2005, 2006, 2012 Michael Lorenz
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: voodoofb.c,v 1.52 2018/12/09 11:14:02 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: voodoofb.c,v 1.53 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -224,8 +224,6 @@ struct wsdisplay_accessops voodoofb_acce
};
/* I2C glue */
-static int voodoofb_i2c_acquire_bus(void *, int);
-static void voodoofb_i2c_release_bus(void *, int);
static int voodoofb_i2c_send_start(void *, int);
static int voodoofb_i2c_send_stop(void *, int);
static int voodoofb_i2c_initiate_xfer(void *, i2c_addr_t, int);
@@ -1720,15 +1718,13 @@ voodoofb_setup_i2c(struct voodoofb_softc
int i;
/* Fill in the i2c tag */
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = voodoofb_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = voodoofb_i2c_release_bus;
sc->sc_i2c.ic_send_start = voodoofb_i2c_send_start;
sc->sc_i2c.ic_send_stop = voodoofb_i2c_send_stop;
sc->sc_i2c.ic_initiate_xfer = voodoofb_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = voodoofb_i2c_read_byte;
sc->sc_i2c.ic_write_byte = voodoofb_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
sc->sc_i2creg = voodoo3_read32(sc, VIDSERPARPORT);
#ifdef VOODOOFB_DEBUG
@@ -1820,19 +1816,6 @@ static uint32_t voodoofb_i2cbb_read(void
/* higher level I2C stuff */
static int
-voodoofb_i2c_acquire_bus(void *cookie, int flags)
-{
- /* private bus */
- return (0);
-}
-
-static void
-voodoofb_i2c_release_bus(void *cookie, int flags)
-{
- /* private bus */
-}
-
-static int
voodoofb_i2c_send_start(void *cookie, int flags)
{
return (i2c_bitbang_send_start(cookie, flags, &voodoofb_i2cbb_ops));
Index: src/sys/dev/pci/voyager.c
diff -u src/sys/dev/pci/voyager.c:1.14 src/sys/dev/pci/voyager.c:1.15
--- src/sys/dev/pci/voyager.c:1.14 Sun Apr 21 11:45:08 2019
+++ src/sys/dev/pci/voyager.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: voyager.c,v 1.14 2019/04/21 11:45:08 maya Exp $ */
+/* $NetBSD: voyager.c,v 1.15 2019/12/22 23:23:32 thorpej Exp $ */
/*
* Copyright (c) 2009, 2011 Michael Lorenz
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: voyager.c,v 1.14 2019/04/21 11:45:08 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: voyager.c,v 1.15 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -250,8 +250,8 @@ voyager_attach(device_t parent, device_t
voyager_gpio_dir(sc, 0xffffffff, GPIO_I2C_BITS);
/* Fill in the i2c tag */
- memset(&sc->sc_i2c, 0, sizeof(sc->sc_i2c));
memset(&iba, 0, sizeof(iba));
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
sc->sc_i2c.ic_acquire_bus = voyager_i2c_acquire_bus;
sc->sc_i2c.ic_release_bus = voyager_i2c_release_bus;
@@ -260,7 +260,6 @@ voyager_attach(device_t parent, device_t
sc->sc_i2c.ic_initiate_xfer = voyager_i2c_initiate_xfer;
sc->sc_i2c.ic_read_byte = voyager_i2c_read_byte;
sc->sc_i2c.ic_write_byte = voyager_i2c_write_byte;
- sc->sc_i2c.ic_exec = NULL;
iba.iba_tag = &sc->sc_i2c;
config_found_ia(self, "i2cbus", &iba, iicbus_print);
}
@@ -322,6 +321,7 @@ voyager_i2c_acquire_bus(void *cookie, in
{
struct voyager_softc *sc = cookie;
+ /* We also have to serialize against voyager_twiddle_bits() */
mutex_enter(&sc->sc_i2c_lock);
return 0;
}
Index: src/sys/dev/usb/auvitek_i2c.c
diff -u src/sys/dev/usb/auvitek_i2c.c:1.4 src/sys/dev/usb/auvitek_i2c.c:1.5
--- src/sys/dev/usb/auvitek_i2c.c:1.4 Fri Nov 25 12:56:29 2016
+++ src/sys/dev/usb/auvitek_i2c.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: auvitek_i2c.c,v 1.4 2016/11/25 12:56:29 skrll Exp $ */
+/* $NetBSD: auvitek_i2c.c,v 1.5 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2010 Jared D. McNeill <[email protected]>
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: auvitek_i2c.c,v 1.4 2016/11/25 12:56:29 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: auvitek_i2c.c,v 1.5 2019/12/22 23:23:32 thorpej Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -56,8 +56,6 @@ __KERNEL_RCSID(0, "$NetBSD: auvitek_i2c.
/* #define AUVITEK_I2C_DEBUG */
-static int auvitek_i2c_acquire_bus(void *, int);
-static void auvitek_i2c_release_bus(void *, int);
static int auvitek_i2c_exec(void *, i2c_op_t, i2c_addr_t,
const void *, size_t, void *, size_t, int);
@@ -73,10 +71,8 @@ static bool auvitek_i2c_wait_wrdone(stru
int
auvitek_i2c_attach(struct auvitek_softc *sc)
{
- 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 = auvitek_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = auvitek_i2c_release_bus;
sc->sc_i2c.ic_exec = auvitek_i2c_exec;
auvitek_i2c_rescan(sc, NULL, NULL);
@@ -87,7 +83,7 @@ auvitek_i2c_attach(struct auvitek_softc
int
auvitek_i2c_detach(struct auvitek_softc *sc, int flags)
{
- mutex_destroy(&sc->sc_i2c_lock);
+ iic_tag_fini(&sc->sc_i2c);
if (sc->sc_i2cdev)
config_detach(sc->sc_i2cdev, flags);
@@ -104,7 +100,6 @@ auvitek_i2c_rescan(struct auvitek_softc
if (ifattr_match(ifattr, "i2cbus") && sc->sc_i2cdev == NULL) {
memset(&iba, 0, sizeof(iba));
- iba.iba_type = I2C_TYPE_SMBUS;
iba.iba_tag = &sc->sc_i2c;
sc->sc_i2cdev = config_found_ia(sc->sc_dev, "i2cbus",
&iba, iicbus_print);
@@ -120,29 +115,6 @@ auvitek_i2c_childdet(struct auvitek_soft
}
static int
-auvitek_i2c_acquire_bus(void *opaque, int flags)
-{
- struct auvitek_softc *sc = opaque;
-
- if (flags & I2C_F_POLL) {
- if (!mutex_tryenter(&sc->sc_i2c_lock))
- return EBUSY;
- } else {
- mutex_enter(&sc->sc_i2c_lock);
- }
-
- return 0;
-}
-
-static void
-auvitek_i2c_release_bus(void *opaque, int flags)
-{
- struct auvitek_softc *sc = opaque;
-
- mutex_exit(&sc->sc_i2c_lock);
-}
-
-static int
auvitek_i2c_exec(void *opaque, i2c_op_t op, i2c_addr_t addr,
const void *cmd, size_t cmdlen, void *vbuf, size_t buflen, int flags)
{
@@ -161,8 +133,6 @@ auvitek_i2c_read(struct auvitek_softc *s
uint8_t v;
unsigned int i;
- //KASSERT(mutex_owned(&sc->sc_i2c_lock));
-
auvitek_write_1(sc, AU0828_REG_I2C_MBMODE, 1);
auvitek_write_1(sc, AU0828_REG_I2C_CLKDIV, sc->sc_i2c_clkdiv);
auvitek_write_1(sc, AU0828_REG_I2C_DSTADDR, addr << 1);
@@ -200,8 +170,6 @@ auvitek_i2c_write(struct auvitek_softc *
uint8_t v;
unsigned int i, fifolen;
- //KASSERT(mutex_owned(&sc->sc_i2c_lock));
-
auvitek_write_1(sc, AU0828_REG_I2C_MBMODE, 1);
auvitek_write_1(sc, AU0828_REG_I2C_CLKDIV, sc->sc_i2c_clkdiv);
auvitek_write_1(sc, AU0828_REG_I2C_DSTADDR, addr << 1);
Index: src/sys/dev/usb/emdtv_i2c.c
diff -u src/sys/dev/usb/emdtv_i2c.c:1.1 src/sys/dev/usb/emdtv_i2c.c:1.2
--- src/sys/dev/usb/emdtv_i2c.c:1.1 Mon Jul 11 18:02:04 2011
+++ src/sys/dev/usb/emdtv_i2c.c Sun Dec 22 23:23:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: emdtv_i2c.c,v 1.1 2011/07/11 18:02:04 jmcneill Exp $ */
+/* $NetBSD: emdtv_i2c.c,v 1.2 2019/12/22 23:23:32 thorpej Exp $ */
/*-
* Copyright (c) 2008, 2010 Jared D. McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: emdtv_i2c.c,v 1.1 2011/07/11 18:02:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: emdtv_i2c.c,v 1.2 2019/12/22 23:23:32 thorpej Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -44,8 +44,6 @@ __KERNEL_RCSID(0, "$NetBSD: emdtv_i2c.c,
#include <dev/usb/emdtvvar.h>
#include <dev/usb/emdtvreg.h>
-static int emdtv_i2c_acquire_bus(void *, int);
-static void emdtv_i2c_release_bus(void *, int);
static int emdtv_i2c_exec(void *, i2c_op_t, i2c_addr_t,
const void *, size_t, void *, size_t, int);
@@ -58,10 +56,8 @@ static int emdtv_i2c_send(struct emdtv_s
int
emdtv_i2c_attach(struct emdtv_softc *sc)
{
- mutex_init(&sc->sc_i2c_lock, MUTEX_DEFAULT, IPL_VM);
+ iic_tag_init(&sc->sc_i2c);
sc->sc_i2c.ic_cookie = sc;
- sc->sc_i2c.ic_acquire_bus = emdtv_i2c_acquire_bus;
- sc->sc_i2c.ic_release_bus = emdtv_i2c_release_bus;
sc->sc_i2c.ic_exec = emdtv_i2c_exec;
return 0;
@@ -70,17 +66,7 @@ emdtv_i2c_attach(struct emdtv_softc *sc)
int
emdtv_i2c_detach(struct emdtv_softc *sc, int flags)
{
- mutex_destroy(&sc->sc_i2c_lock);
-
- return 0;
-}
-
-static int
-emdtv_i2c_acquire_bus(void *opaque, int flags)
-{
- struct emdtv_softc *sc = opaque;
-
- mutex_enter(&sc->sc_i2c_lock);
+ iic_tag_fini(&sc->sc_i2c);
return 0;
}
@@ -106,14 +92,6 @@ emdtv_i2c_exec(void *opaque, i2c_op_t op
return error;
}
-static void
-emdtv_i2c_release_bus(void *opaque, int flags)
-{
- struct emdtv_softc *sc = opaque;
-
- mutex_exit(&sc->sc_i2c_lock);
-}
-
static int
emdtv_i2c_check(struct emdtv_softc *sc, i2c_addr_t addr)
{