diff -u dev/spibus/spibus.c.orig dev/spibus/spibus.c --- dev/spibus/spibus.c.orig 2012-09-12 15:40:52.302154640 -0300 +++ dev/spibus/spibus.c 2012-09-12 14:30:34.418155000 -0300 @@ -220,6 +220,24 @@ return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd)); } +static int +spibus_get_config_impl(device_t dev, struct spi_config *cfg) +{ + struct spibus_softc *sc = SPIBUS_SOFTC(dev); + + KASSERT(sc->sc_owner != NULL, ("SPI get config on unowned bus")); + return (SPIBUS_GET_CONFIG(device_get_parent(dev), cfg)); +} + +static int +spibus_set_config_impl(device_t dev, struct spi_config *cfg) +{ + struct spibus_softc *sc = SPIBUS_SOFTC(dev); + + KASSERT(sc->sc_owner != NULL, ("SPI set config on unowned bus")); + return (SPIBUS_SET_CONFIG(device_get_parent(dev), cfg)); +} + static device_method_t spibus_methods[] = { /* Device interface */ DEVMETHOD(device_probe, spibus_probe), @@ -242,6 +260,8 @@ DEVMETHOD(spibus_acquire_bus, spibus_acquire_bus_impl), DEVMETHOD(spibus_release_bus, spibus_release_bus_impl), DEVMETHOD(spibus_transfer, spibus_transfer_impl), + DEVMETHOD(spibus_get_config, spibus_get_config_impl), + DEVMETHOD(spibus_set_config, spibus_set_config_impl), DEVMETHOD_END }; diff -u dev/spibus/spibus_if.m.orig dev/spibus.final/spibus_if.m --- dev/spibus/spibus_if.m.orig 2012-09-12 15:40:03.005153883 -0300 +++ dev/spibus/spibus_if.m 2012-09-12 11:34:46.793475000 -0300 @@ -44,6 +44,21 @@ null_release_bus(device_t dev, device_t child) { } + + static int + null_get_config(device_t dev, struct spi_config *cfg) + { + + cfg->clock_hz = 0; + return (0); + } + + static int + null_set_config(device_t dev, struct spi_config *cfg) + { + + return (0); + } }; # @@ -70,3 +85,19 @@ device_t child; struct spi_command *cmd; }; + +# +# Get the spibus configuration +# +METHOD int get_config { + device_t dev; + struct spi_config *cfg; +} DEFAULT null_get_config; + +# +# Set the spibus configuration +# +METHOD int set_config { + device_t dev; + struct spi_config *cfg; +} DEFAULT null_set_config; Index: dev/spibus/spi.h =================================================================== --- dev/spibus/spi.h (revision 240418) +++ dev/spibus/spi.h (working copy) @@ -11,4 +11,9 @@ uint32_t rx_data_sz; }; +struct spi_config { + unsigned int clock_hz; /* Sending a 0 to spibus_set_config requests + the maximum possible frequency. */ +}; + #define SPI_CHIP_SELECT_HIGH 0x1 /* Chip select high (else low) */