static int nm_loadcoeff(struct neo_softc *sc, int dir, int num) { int ofs, sz, i; u_int32_t addr; if (nf == NULL) { size_t buflen; u_char *buf; int error; error = loadfirmware("neo-coefficients", &buf, &buflen); if (error) return (error); nf = (struct neo_firmware *)buf; } addr = (dir == AUMODE_PLAY)? 0x01c : 0x21c; if (dir == AUMODE_RECORD) num += 8; sz = nf->coefficientSizes[num]; ofs = 0; while (num-- > 0) ofs+= nf->coefficientSizes[num]; for (i = 0; i < sz; i++) nm_wrbuf(sc, sc->cbuf + i, nf->coefficients[ofs + i], 1); nm_wr(sc, addr, sc->cbuf, 4); if (dir == AUMODE_PLAY) sz--; nm_wr(sc, addr + 4, sc->cbuf + sz, 4); return (0); }
static int nm_loadcoeff(struct sc_info *sc, int dir, int num) { int ofs, sz, i; u_int32_t addr; addr = (dir == PCMDIR_PLAY)? 0x01c : 0x21c; if (dir == PCMDIR_REC) num += 8; sz = coefficientSizes[num]; ofs = 0; while (num-- > 0) ofs+= coefficientSizes[num]; for (i = 0; i < sz; i++) nm_wrbuf(sc, sc->cbuf + i, coefficients[ofs + i], 1); nm_wr(sc, addr, sc->cbuf, 4); if (dir == PCMDIR_PLAY) sz--; nm_wr(sc, addr + 4, sc->cbuf + sz, 4); return 0; }