Module Name: src
Committed By: thorpej
Date: Sun Sep 12 23:13:02 UTC 2021
Modified Files:
src/sys/arch/sparc64/dev [thorpej-i2c-spi-conf2]: pcfiic_ebus.c
src/sys/dev/ic [thorpej-i2c-spi-conf2]: pcf8584.c
Log Message:
- Improve some comments.
- Update pcfiic_i2c_exec() for the channel split (might fix an issue
spotted by tnn@ in testing).
To generate a diff of this commit:
cvs rdiff -u -r1.7.16.1 -r1.7.16.2 src/sys/arch/sparc64/dev/pcfiic_ebus.c
cvs rdiff -u -r1.19.2.1 -r1.19.2.2 src/sys/dev/ic/pcf8584.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/sparc64/dev/pcfiic_ebus.c
diff -u src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.7.16.1 src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.7.16.2
--- src/sys/arch/sparc64/dev/pcfiic_ebus.c:1.7.16.1 Mon Aug 9 00:30:08 2021
+++ src/sys/arch/sparc64/dev/pcfiic_ebus.c Sun Sep 12 23:13:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: pcfiic_ebus.c,v 1.7.16.1 2021/08/09 00:30:08 thorpej Exp $ */
+/* $NetBSD: pcfiic_ebus.c,v 1.7.16.2 2021/09/12 23:13:02 thorpej Exp $ */
/* $OpenBSD: pcfiic_ebus.c,v 1.13 2008/06/08 03:07:40 deraadt Exp $ */
/*
@@ -47,7 +47,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pcfiic_ebus.c,v 1.7.16.1 2021/08/09 00:30:08 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcfiic_ebus.c,v 1.7.16.2 2021/09/12 23:13:02 thorpej Exp $");
/*
* Device specific driver for the EBus i2c devices found on some sun4u
@@ -167,7 +167,13 @@ bbc_initialize_channels(struct pcfiic_eb
nchannels = popcount(busmap);
if (nchannels == 0) {
- /* No child devices. */
+ /*
+ * No child devices in the device tree. This is fine;
+ * the generic code will just assume a single channel
+ * and attach a bus instance, but our MUX will still
+ * get programmed correctly because we've initialized
+ * the acquire/release bus funcitons.
+ */
return;
}
Index: src/sys/dev/ic/pcf8584.c
diff -u src/sys/dev/ic/pcf8584.c:1.19.2.1 src/sys/dev/ic/pcf8584.c:1.19.2.2
--- src/sys/dev/ic/pcf8584.c:1.19.2.1 Mon Aug 9 01:29:52 2021
+++ src/sys/dev/ic/pcf8584.c Sun Sep 12 23:13:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: pcf8584.c,v 1.19.2.1 2021/08/09 01:29:52 thorpej Exp $ */
+/* $NetBSD: pcf8584.c,v 1.19.2.2 2021/09/12 23:13:02 thorpej Exp $ */
/* $OpenBSD: pcf8584.c,v 1.9 2007/10/20 18:46:21 kettenis Exp $ */
/*
@@ -120,9 +120,17 @@ pcfiic_attach(struct pcfiic_softc *sc, i
printf("\n");
+ /*
+ * Sun has a clone of this chip that also has an
+ * associated MUX, which means we treat this as
+ * a multi-channel controller. If the front-end
+ * did not already allocate channels for us, then
+ * assume we're just a simple single-channel device.
+ */
+
if (sc->sc_channels == NULL) {
KASSERT(sc->sc_nchannels == 0);
- ch = kmem_alloc(sizeof(*sc->sc_channels), KM_SLEEP);
+ ch = kmem_alloc(sizeof(*ch), KM_SLEEP);
ch->ch_channel = 0;
ch->ch_devhandle = device_handle(sc->sc_dev);
@@ -139,6 +147,7 @@ pcfiic_attach(struct pcfiic_softc *sc, i
ch->ch_sc = sc;
iic_tag_init(&ch->ch_i2c);
ch->ch_i2c.ic_cookie = ch;
+ ch->ch_i2c.ic_channel = ch->ch_channel;
ch->ch_i2c.ic_exec = pcfiic_i2c_exec;
ch->ch_i2c.ic_acquire_bus = sc->sc_acquire_bus;
ch->ch_i2c.ic_release_bus = sc->sc_release_bus;
@@ -165,7 +174,8 @@ 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)
{
- struct pcfiic_softc *sc = arg;
+ struct pcfiic_channel *ch = arg;
+ struct pcfiic_softc *sc = ch->ch_sc;
int ret = 0;
#if 0