173static int pcxhr_send_it_dsp(struct pcxhr_mgr *mgr, unsigned int itdsp, int atomic)
174{
175 int err;
176 unsigned char reg;
177
178 if (itdsp & PCXHR_MASK_IT_MANAGE_HF5) {
179
180 PCXHR_OUTPL(mgr, PCXHR_PLX_MBOX0,
181 PCXHR_INPL(mgr, PCXHR_PLX_MBOX0) & ~PCXHR_MBOX0_HF5);
182 }
183 if ((itdsp & PCXHR_MASK_IT_NO_HF0_HF1) == 0) {
184 reg = PCXHR_ICR_HI08_RREQ | PCXHR_ICR_HI08_TREQ | PCXHR_ICR_HI08_HDRQ;
185 if (itdsp & PCXHR_MASK_IT_HF0)
186 reg |= PCXHR_ICR_HI08_HF0;
187 if (itdsp & PCXHR_MASK_IT_HF1)
188 reg |= PCXHR_ICR_HI08_HF1;
189 PCXHR_OUTPB(mgr, PCXHR_DSP_ICR, reg);
190 }
191 reg = (unsigned char)(((itdsp & PCXHR_MASK_EXTRA_INFO) >> 1) | PCXHR_CVR_HI08_HC);
192 PCXHR_OUTPB(mgr, PCXHR_DSP_CVR, reg);
193 if (itdsp & PCXHR_MASK_IT_WAIT) {
194 if (atomic)
195 mdelay(PCXHR_WAIT_IT);
196 else
197 msleep(PCXHR_WAIT_IT);
198 }
199 if (itdsp & PCXHR_MASK_IT_WAIT_EXTRA) {
200 if (atomic)
201 mdelay(PCXHR_WAIT_IT_EXTRA);
202 else
203 msleep(PCXHR_WAIT_IT);
204 }
205
206 err = pcxhr_check_reg_bit(mgr, PCXHR_DSP_CVR, PCXHR_CVR_HI08_HC, 0,
207 PCXHR_TIMEOUT_DSP, ®);
208 if (err) {
209 snd_printk(KERN_ERR "pcxhr_send_it_dsp : TIMEOUT CVR\n");
210 return err;
211 }
212 if (itdsp & PCXHR_MASK_IT_MANAGE_HF5) {
213