| 633 | } |
| 634 | |
| 635 | static int |
| 636 | rk_i2c_detach(device_t dev) |
| 637 | { |
| 638 | struct rk_i2c_softc *sc; |
| 639 | int error; |
| 640 | |
| 641 | sc = device_get_softc(dev); |
| 642 | |
| 643 | if ((error = bus_generic_detach(dev)) != 0) |
| 644 | return (error); |
| 645 | |
| 646 | if (sc->iicbus != NULL) |
| 647 | if ((error = device_delete_child(dev, sc->iicbus)) != 0) |
| 648 | return (error); |
| 649 | |
| 650 | if (sc->sclk != NULL) |
| 651 | clk_release(sc->sclk); |
| 652 | if (sc->pclk != NULL) |
| 653 | clk_release(sc->pclk); |
| 654 | |
| 655 | if (sc->intrhand != NULL) |
| 656 | bus_teardown_intr(sc->dev, sc->res[1], sc->intrhand); |
| 657 | |
| 658 | bus_release_resources(dev, rk_i2c_spec, sc->res); |
| 659 | |
| 660 | mtx_destroy(&sc->mtx); |
| 661 | |
| 662 | return (0); |
| 663 | } |
| 664 | |
| 665 | static phandle_t |
| 666 | rk_i2c_get_node(device_t bus, device_t dev) |
no test coverage detected