238}
239
240
241
242static inline unsigned char sx_in_off(struct specialix_board *bp,
243 unsigned short reg)
244{
245 bp->reg = reg;
246 outb(reg, bp->base + SX_ADDR_REG);
247 return inb(bp->base + SX_DATA_REG);
248}
249
250
251
252static inline void sx_out_off(struct specialix_board *bp,
253 unsigned short reg, unsigned char val)
254{
255 bp->reg = reg;
256 outb(reg, bp->base + SX_ADDR_REG);
257 outb(val, bp->base + SX_DATA_REG);
258}
259
260
261
262static void sx_wait_CCR(struct specialix_board *bp)
263{
264 unsigned long delay, flags;
265 unsigned char ccr;
266
267 for (delay = SX_CCR_TIMEOUT; delay; delay--) {
268 spin_lock_irqsave(&bp->lock, flags);
269 ccr = sx_in(bp, CD186x_CCR);
270 spin_unlock_irqrestore(&bp->lock, flags);
271 if (!ccr)
272 return;
273 udelay(1);
274 }
275
276 printk(KERN_ERR "sx%d: Timeout waiting for CCR.\n", board_No(bp));
277}
278