svn commit: r332194 - head/sys/dev/spibus
Ian Lepore
ian at FreeBSD.org
Sat Apr 7 18:09:32 UTC 2018
Author: ian
Date: Sat Apr 7 18:09:31 2018
New Revision: 332194
URL: https://svnweb.freebsd.org/changeset/base/332194
Log:
Add support for writing/changing spi device ivars. The SPI mode (polarity
and phase) and the maximum bus speed can be changed. The chip select
number cannot be changed, because the device instances which are children
of spibus are inherently associated with the chip select number they were
instantiated for.
Modified:
head/sys/dev/spibus/spibus.c
Modified: head/sys/dev/spibus/spibus.c
==============================================================================
--- head/sys/dev/spibus/spibus.c Sat Apr 7 18:08:42 2018 (r332193)
+++ head/sys/dev/spibus/spibus.c Sat Apr 7 18:09:31 2018 (r332194)
@@ -160,6 +160,37 @@ spibus_read_ivar(device_t bus, device_t child, int whi
return (0);
}
+static int
+spibus_write_ivar(device_t bus, device_t child, int which, uintptr_t value)
+{
+ struct spibus_ivar *devi = SPIBUS_IVAR(child);
+
+ if (devi == NULL || device_get_parent(child) != bus)
+ return (EDOOFUS);
+
+ switch (which) {
+ case SPIBUS_IVAR_CLOCK:
+ /* Any non-zero value is allowed for max clock frequency. */
+ if (value == 0)
+ return (EINVAL);
+ devi->clock = (uint32_t)value;
+ break;
+ case SPIBUS_IVAR_CS:
+ /* Chip select cannot be changed. */
+ return (EINVAL);
+ case SPIBUS_IVAR_MODE:
+ /* Valid SPI modes are 0-3. */
+ if (value > 3)
+ return (EINVAL);
+ devi->mode = (uint32_t)value;
+ break;
+ default:
+ return (EINVAL);
+ }
+
+ return (0);
+}
+
static device_t
spibus_add_child(device_t dev, u_int order, const char *name, int unit)
{
@@ -211,6 +242,7 @@ static device_method_t spibus_methods[] = {
DEVMETHOD(bus_print_child, spibus_print_child),
DEVMETHOD(bus_probe_nomatch, spibus_probe_nomatch),
DEVMETHOD(bus_read_ivar, spibus_read_ivar),
+ DEVMETHOD(bus_write_ivar, spibus_write_ivar),
DEVMETHOD(bus_child_pnpinfo_str, spibus_child_pnpinfo_str),
DEVMETHOD(bus_child_location_str, spibus_child_location_str),
DEVMETHOD(bus_hinted_child, spibus_hinted_child),
More information about the svn-src-all
mailing list