@@ -276,14 +276,6 @@ struct pci1710_private {
276
276
* internal state */
277
277
};
278
278
279
- /* used for gain list programming */
280
- static const unsigned int muxonechan [] = {
281
- 0x0000 , 0x0101 , 0x0202 , 0x0303 , 0x0404 , 0x0505 , 0x0606 , 0x0707 ,
282
- 0x0808 , 0x0909 , 0x0a0a , 0x0b0b , 0x0c0c , 0x0d0d , 0x0e0e , 0x0f0f ,
283
- 0x1010 , 0x1111 , 0x1212 , 0x1313 , 0x1414 , 0x1515 , 0x1616 , 0x1717 ,
284
- 0x1818 , 0x1919 , 0x1a1a , 0x1b1b , 0x1c1c , 0x1d1d , 0x1e1e , 0x1f1f
285
- };
286
-
287
279
static int pci171x_ai_dropout (struct comedi_device * dev ,
288
280
struct comedi_subdevice * s ,
289
281
unsigned int chan ,
@@ -375,30 +367,39 @@ static int pci171x_ai_check_chanlist(struct comedi_device *dev,
375
367
return 0 ;
376
368
}
377
369
378
- static void setup_channel_list (struct comedi_device * dev ,
379
- struct comedi_subdevice * s ,
380
- unsigned int * chanlist , unsigned int n_chan ,
381
- unsigned int seglen )
370
+ static void pci171x_ai_setup_chanlist (struct comedi_device * dev ,
371
+ struct comedi_subdevice * s ,
372
+ unsigned int * chanlist ,
373
+ unsigned int n_chan ,
374
+ unsigned int seglen )
382
375
{
383
376
const struct boardtype * board = dev -> board_ptr ;
384
377
struct pci1710_private * devpriv = dev -> private ;
385
- unsigned int i , range , chanprog ;
378
+ unsigned int first_chan = CR_CHAN (chanlist [0 ]);
379
+ unsigned int last_chan = CR_CHAN (chanlist [seglen - 1 ]);
380
+ unsigned int i ;
386
381
387
382
for (i = 0 ; i < seglen ; i ++ ) { /* store range list to card */
388
- chanprog = muxonechan [CR_CHAN (chanlist [i ])];
389
- outw (chanprog , dev -> iobase + PCI171x_MUX ); /* select channel */
390
- range = board -> rangecode_ai [CR_RANGE (chanlist [i ])];
391
- if (CR_AREF (chanlist [i ]) == AREF_DIFF )
392
- range |= 0x0020 ;
393
- outw (range , dev -> iobase + PCI171x_RANGE ); /* select gain */
394
- devpriv -> act_chanlist [i ] = CR_CHAN (chanlist [i ]);
383
+ unsigned int chan = CR_CHAN (chanlist [i ]);
384
+ unsigned int range = CR_RANGE (chanlist [i ]);
385
+ unsigned int aref = CR_AREF (chanlist [i ]);
386
+ unsigned int rangeval ;
387
+
388
+ rangeval = board -> rangecode_ai [range ];
389
+ if (aref == AREF_DIFF )
390
+ rangeval |= 0x0020 ;
391
+
392
+ /* select channel and set range */
393
+ outw (chan | (chan << 8 ), dev -> iobase + PCI171x_MUX );
394
+ outw (rangeval , dev -> iobase + PCI171x_RANGE );
395
+
396
+ devpriv -> act_chanlist [i ] = chan ;
395
397
}
396
398
for ( ; i < n_chan ; i ++ ) /* store remainder of channel list */
397
399
devpriv -> act_chanlist [i ] = CR_CHAN (chanlist [i ]);
398
400
399
- devpriv -> ai_et_MuxVal =
400
- CR_CHAN (chanlist [0 ]) | (CR_CHAN (chanlist [seglen - 1 ]) << 8 );
401
401
/* select channel interval to scan */
402
+ devpriv -> ai_et_MuxVal = first_chan | (last_chan << 8 );
402
403
outw (devpriv -> ai_et_MuxVal , dev -> iobase + PCI171x_MUX );
403
404
}
404
405
@@ -431,7 +432,7 @@ static int pci171x_ai_insn_read(struct comedi_device *dev,
431
432
outb (0 , dev -> iobase + PCI171x_CLRFIFO );
432
433
outb (0 , dev -> iobase + PCI171x_CLRINT );
433
434
434
- setup_channel_list (dev , s , & insn -> chanspec , 1 , 1 );
435
+ pci171x_ai_setup_chanlist (dev , s , & insn -> chanspec , 1 , 1 );
435
436
436
437
for (i = 0 ; i < insn -> n ; i ++ ) {
437
438
unsigned int val ;
@@ -813,8 +814,8 @@ static int pci171x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
813
814
814
815
pci171x_start_pacer (dev , false);
815
816
816
- setup_channel_list (dev , s , cmd -> chanlist , cmd -> chanlist_len ,
817
- devpriv -> saved_seglen );
817
+ pci171x_ai_setup_chanlist (dev , s , cmd -> chanlist , cmd -> chanlist_len ,
818
+ devpriv -> saved_seglen );
818
819
819
820
outb (0 , dev -> iobase + PCI171x_CLRFIFO );
820
821
outb (0 , dev -> iobase + PCI171x_CLRINT );
0 commit comments