static int amixer_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct amixer_rsc_ctrl_blk *ctl = blk; if (ctl->dirty.bf.amoplo || ctl->dirty.bf.amophi) { hw_write_20kx(hw, AMOPLO+idx*8, ctl->amoplo); ctl->dirty.bf.amoplo = 0; hw_write_20kx(hw, AMOPHI+idx*8, ctl->amophi); ctl->dirty.bf.amophi = 0; } return 0; }
static int dai_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct dai_ctrl_blk *ctl = blk; if (ctl->dirty.bf.srtctl) { if (idx < 4) { /* S/PDIF SRTs */ hw_write_20kx(hw, SRTSCTL+0x4*idx, ctl->srtctl); } else { /* I2S SRT */ hw_write_20kx(hw, SRTICTL, ctl->srtctl); } ctl->dirty.bf.srtctl = 0; } return 0; }
static int dai_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct dai_ctrl_blk *ctl = blk; if (ctl->dirty.bf.srt) { hw_write_20kx(hw, AUDIO_IO_RX_SRT_CTL+0x40*idx, ctl->srt); ctl->dirty.bf.srt = 0; } return 0; }
static int srcimp_mgr_commit_write(struct hw *hw, void *blk) { struct srcimp_mgr_ctrl_blk *ctl = blk; if (ctl->dirty.bf.srcimap) { hw_write_20kx(hw, SRCIMAP+ctl->srcimap.idx*0x100, ctl->srcimap.srcaim); ctl->dirty.bf.srcimap = 0; } return 0; }
static int src_mgr_commit_write(struct hw *hw, void *blk) { struct src_mgr_ctrl_blk *ctl = blk; int i; unsigned int ret; if (ctl->dirty.bf.enbsa) { do { ret = hw_read_20kx(hw, SRCENBSTAT); } while (ret & 0x1); hw_write_20kx(hw, SRCENBS, ctl->enbsa); ctl->dirty.bf.enbsa = 0; } for (i = 0; i < 8; i++) { if ((ctl->dirty.data & (0x1 << i))) { hw_write_20kx(hw, SRCENB+(i*0x100), ctl->enb[i]); ctl->dirty.data &= ~(0x1 << i); } } return 0; }
static int dao_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct dao_ctrl_blk *ctl = blk; if (ctl->dirty.bf.spos) { if (idx < 4) { /* S/PDIF SPOSx */ hw_write_20kx(hw, SPOS+0x4*idx, ctl->spos); } ctl->dirty.bf.spos = 0; } return 0; }
static int dao_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct dao_ctrl_blk *ctl = blk; if (ctl->dirty.bf.atxcsl) { if (idx < 4) { /* S/PDIF SPOSx */ hw_write_20kx(hw, AUDIO_IO_TX_CSTAT_L+0x40*idx, ctl->atxcsl); } ctl->dirty.bf.atxcsl = 0; } return 0; }
static int src_commit_write(struct hw *hw, unsigned int idx, void *blk) { struct src_rsc_ctrl_blk *ctl = blk; int i; if (ctl->dirty.bf.czbfs) { /* Clear Z-Buffer registers */ for (i = 0; i < 8; i++) hw_write_20kx(hw, SRCUPZ+idx*0x100+i*0x4, 0); for (i = 0; i < 4; i++) hw_write_20kx(hw, SRCDN0Z+idx*0x100+i*0x4, 0); for (i = 0; i < 8; i++) hw_write_20kx(hw, SRCDN1Z+idx*0x100+i*0x4, 0); ctl->dirty.bf.czbfs = 0; } if (ctl->dirty.bf.mpr) { /* Take the parameter mixer resource in the same group as that * the idx src is in for simplicity. Unlike src, all conjugate * parameter mixer resources must be programmed for * corresponding conjugate src resources. */ unsigned int pm_idx = src_param_pitch_mixer(idx); hw_write_20kx(hw, PRING_LO_HI+4*pm_idx, ctl->mpr); hw_write_20kx(hw, PMOPLO+8*pm_idx, 0x3); hw_write_20kx(hw, PMOPHI+8*pm_idx, 0x0); ctl->dirty.bf.mpr = 0; } if (ctl->dirty.bf.sa) { hw_write_20kx(hw, SRCSA+idx*0x100, ctl->sa); ctl->dirty.bf.sa = 0; } if (ctl->dirty.bf.la) { hw_write_20kx(hw, SRCLA+idx*0x100, ctl->la); ctl->dirty.bf.la = 0; } if (ctl->dirty.bf.ca) { hw_write_20kx(hw, SRCCA+idx*0x100, ctl->ca); ctl->dirty.bf.ca = 0; } /* Write srccf register */ hw_write_20kx(hw, SRCCF+idx*0x100, 0x0); if (ctl->dirty.bf.ccr) { hw_write_20kx(hw, SRCCCR+idx*0x100, ctl->ccr); ctl->dirty.bf.ccr = 0; } if (ctl->dirty.bf.ctl) { hw_write_20kx(hw, SRCCTL+idx*0x100, ctl->ctl); ctl->dirty.bf.ctl = 0; } return 0; }