int pxa2x0_i2s_attach_sub(struct pxa2x0_i2s_softc *sc) { int rv; KASSERT(sc->sc_intr_lock != NULL); rv = bus_space_map(sc->sc_iot, PXA2X0_I2S_BASE, PXA2X0_I2S_SIZE, 0, &sc->sc_ioh); if (rv) { sc->sc_size = 0; return 1; } sc->sc_dr.ds_addr = PXA2X0_I2S_BASE + I2S_SADR; sc->sc_dr.ds_len = 4; sc->sc_sadiv = SADIV_3_058MHz; bus_space_barrier(sc->sc_iot, sc->sc_ioh, 0, sc->sc_size, BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); pxa2x0_i2s_init(sc); return 0; }
int pxa2x0_i2s_attach_sub(struct pxa2x0_i2s_softc *sc) { if (bus_space_map(sc->sc_iot, PXA2X0_I2S_BASE, PXA2X0_I2S_SIZE, 0, &sc->sc_ioh)) { sc->sc_size = 0; return 1; } sc->sc_sadiv = SADIV_3_058MHz; bus_space_barrier(sc->sc_iot, sc->sc_ioh, 0, sc->sc_size, BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE); pxa2x0_gpio_set_function(28, GPIO_ALT_FN_1_OUT); /* I2S_BITCLK */ pxa2x0_gpio_set_function(113, GPIO_ALT_FN_1_OUT); /* I2S_SYSCLK */ pxa2x0_gpio_set_function(31, GPIO_ALT_FN_1_OUT); /* I2S_SYNC */ pxa2x0_gpio_set_function(30, GPIO_ALT_FN_1_OUT); /* I2S_SDATA_OUT */ pxa2x0_gpio_set_function(29, GPIO_ALT_FN_2_IN); /* I2S_SDATA_IN */ pxa2x0_i2s_init(sc); return 0; }