bool_t unregister_bus_i2c(struct i2c_t * i2c) { struct bus_t * bus; struct i2c_t * driver; if(!i2c || !i2c->name) return FALSE; bus = search_bus_with_type(i2c->name, BUS_TYPE_I2C); if(!bus) return FALSE; driver = (struct i2c_t *)(bus->driver); if(driver && driver->exit) (driver->exit)(i2c); if(!unregister_bus(bus)) return FALSE; kobj_remove_self(bus->kobj); free(bus->name); free(bus); return TRUE; }
bool_t unregister_bus_uart(struct uart_t * uart) { struct bus_t * bus; struct uart_t * driver; if(!uart || !uart->name) return FALSE; bus = search_bus_with_type(uart->name, BUS_TYPE_UART); if(!bus) return FALSE; driver = (struct uart_t *)(bus->driver); if(driver && driver->exit) (driver->exit)(uart); if(!unregister_bus(bus)) return FALSE; kobj_remove_self(bus->kobj); free(bus->name); free(bus); return TRUE; }