Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/spibus/spibus.c
Show First 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | |||||
spibus_print_child(device_t dev, device_t child) | spibus_print_child(device_t dev, device_t child) | ||||
{ | { | ||||
struct spibus_ivar *devi = SPIBUS_IVAR(child); | struct spibus_ivar *devi = SPIBUS_IVAR(child); | ||||
int retval = 0; | int retval = 0; | ||||
retval += bus_print_child_header(dev, child); | retval += bus_print_child_header(dev, child); | ||||
retval += printf(" at cs %d", devi->cs); | retval += printf(" at cs %d", devi->cs); | ||||
retval += printf(" mode %d", devi->mode); | retval += printf(" mode %d", devi->mode); | ||||
retval += resource_list_print_type(&devi->rl, "irq", | |||||
SYS_RES_IRQ, "%jd"); | |||||
retval += bus_print_child_footer(dev, child); | retval += bus_print_child_footer(dev, child); | ||||
return (retval); | return (retval); | ||||
} | } | ||||
static void | static void | ||||
spibus_probe_nomatch(device_t bus, device_t child) | spibus_probe_nomatch(device_t bus, device_t child) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | spibus_add_child(device_t dev, u_int order, const char *name, int unit) | ||||
child = device_add_child_ordered(dev, order, name, unit); | child = device_add_child_ordered(dev, order, name, unit); | ||||
if (child == NULL) | if (child == NULL) | ||||
return (child); | return (child); | ||||
devi = malloc(sizeof(struct spibus_ivar), M_DEVBUF, M_NOWAIT | M_ZERO); | devi = malloc(sizeof(struct spibus_ivar), M_DEVBUF, M_NOWAIT | M_ZERO); | ||||
if (devi == NULL) { | if (devi == NULL) { | ||||
device_delete_child(dev, child); | device_delete_child(dev, child); | ||||
return (0); | return (0); | ||||
} | } | ||||
resource_list_init(&devi->rl); | |||||
device_set_ivars(child, devi); | device_set_ivars(child, devi); | ||||
return (child); | return (child); | ||||
} | } | ||||
static void | static void | ||||
spibus_hinted_child(device_t bus, const char *dname, int dunit) | spibus_hinted_child(device_t bus, const char *dname, int dunit) | ||||
{ | { | ||||
device_t child; | device_t child; | ||||
int irq; | |||||
struct spibus_ivar *devi; | struct spibus_ivar *devi; | ||||
child = BUS_ADD_CHILD(bus, 0, dname, dunit); | child = BUS_ADD_CHILD(bus, 0, dname, dunit); | ||||
devi = SPIBUS_IVAR(child); | devi = SPIBUS_IVAR(child); | ||||
devi->mode = SPIBUS_MODE_NONE; | devi->mode = SPIBUS_MODE_NONE; | ||||
resource_int_value(dname, dunit, "clock", &devi->clock); | resource_int_value(dname, dunit, "clock", &devi->clock); | ||||
resource_int_value(dname, dunit, "cs", &devi->cs); | resource_int_value(dname, dunit, "cs", &devi->cs); | ||||
resource_int_value(dname, dunit, "mode", &devi->mode); | resource_int_value(dname, dunit, "mode", &devi->mode); | ||||
if (resource_int_value(dname, dunit, "irq", &irq) == 0) { | |||||
if (bus_set_resource(child, SYS_RES_IRQ, 0, irq, 1) != 0) | |||||
device_printf(bus, | |||||
"Warning: bus_set_resource() failed\n"); | |||||
} | } | ||||
} | |||||
static struct resource_list * | |||||
spibus_get_resource_list(device_t bus __unused, device_t child) | |||||
{ | |||||
struct spibus_ivar *devi; | |||||
devi = SPIBUS_IVAR(child); | |||||
return (&devi->rl); | |||||
} | |||||
static int | static int | ||||
spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd) | spibus_transfer_impl(device_t dev, device_t child, struct spi_command *cmd) | ||||
{ | { | ||||
return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd)); | return (SPIBUS_TRANSFER(device_get_parent(dev), child, cmd)); | ||||
} | } | ||||
static device_method_t spibus_methods[] = { | static device_method_t spibus_methods[] = { | ||||
/* Device interface */ | /* Device interface */ | ||||
DEVMETHOD(device_probe, spibus_probe), | DEVMETHOD(device_probe, spibus_probe), | ||||
DEVMETHOD(device_attach, spibus_attach), | DEVMETHOD(device_attach, spibus_attach), | ||||
DEVMETHOD(device_detach, spibus_detach), | DEVMETHOD(device_detach, spibus_detach), | ||||
DEVMETHOD(device_shutdown, bus_generic_shutdown), | DEVMETHOD(device_shutdown, bus_generic_shutdown), | ||||
DEVMETHOD(device_suspend, spibus_suspend), | DEVMETHOD(device_suspend, spibus_suspend), | ||||
DEVMETHOD(device_resume, spibus_resume), | DEVMETHOD(device_resume, spibus_resume), | ||||
/* Bus interface */ | /* Bus interface */ | ||||
DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), | |||||
DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), | |||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource), | |||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), | |||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), | |||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource), | |||||
DEVMETHOD(bus_alloc_resource, bus_generic_rl_alloc_resource), | |||||
DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource), | |||||
DEVMETHOD(bus_set_resource, bus_generic_rl_set_resource), | |||||
DEVMETHOD(bus_get_resource_list, spibus_get_resource_list), | |||||
DEVMETHOD(bus_add_child, spibus_add_child), | DEVMETHOD(bus_add_child, spibus_add_child), | ||||
DEVMETHOD(bus_print_child, spibus_print_child), | DEVMETHOD(bus_print_child, spibus_print_child), | ||||
DEVMETHOD(bus_probe_nomatch, spibus_probe_nomatch), | DEVMETHOD(bus_probe_nomatch, spibus_probe_nomatch), | ||||
DEVMETHOD(bus_read_ivar, spibus_read_ivar), | DEVMETHOD(bus_read_ivar, spibus_read_ivar), | ||||
DEVMETHOD(bus_write_ivar, spibus_write_ivar), | DEVMETHOD(bus_write_ivar, spibus_write_ivar), | ||||
DEVMETHOD(bus_child_pnpinfo_str, spibus_child_pnpinfo_str), | DEVMETHOD(bus_child_pnpinfo_str, spibus_child_pnpinfo_str), | ||||
DEVMETHOD(bus_child_location_str, spibus_child_location_str), | DEVMETHOD(bus_child_location_str, spibus_child_location_str), | ||||
DEVMETHOD(bus_hinted_child, spibus_hinted_child), | DEVMETHOD(bus_hinted_child, spibus_hinted_child), | ||||
Show All 17 Lines |