Staging: comedi: Remove lsampl_t and sampl_t typedefs
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / comedi / drivers / addi-data / hwdrv_apci16xx.c
1 /**
2 @verbatim
3
4 Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
5
6 ADDI-DATA GmbH
7 Dieselstrasse 3
8 D-77833 Ottersweier
9 Tel: +19(0)7223/9493-0
10 Fax: +49(0)7223/9493-92
11 http://www.addi-data-com
12 info@addi-data.com
13
14 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
15
16 This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20 You shoud also find the complete GPL in the COPYING file accompanying this source code.
21
22 @endverbatim
23 */
24 /*
25
26 +-----------------------------------------------------------------------+
27 | (C) ADDI-DATA GmbH Dieselstraße 3 D-77833 Ottersweier |
28 +-----------------------------------------------------------------------+
29 | Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com |
30 | Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com |
31 +-----------------------------------------------------------------------+
32 | Project : API APCI1648 | Compiler : gcc |
33 | Module name : TTL.C | Version : 2.96 |
34 +-------------------------------+---------------------------------------+
35 | Project manager: S. Weber | Date : 25/05/2005 |
36 +-----------------------------------------------------------------------+
37 | Description : APCI-16XX TTL I/O module |
38 | |
39 | |
40 +-----------------------------------------------------------------------+
41 | UPDATES |
42 +-----------------------------------------------------------------------+
43 | Date | Author | Description of updates |
44 +----------+-----------+------------------------------------------------+
45 |25.05.2005| S.Weber | Creation |
46 | | | |
47 +-----------------------------------------------------------------------+
48 */
49
50 /*
51 +----------------------------------------------------------------------------+
52 | Included files |
53 +----------------------------------------------------------------------------+
54 */
55
56 #include "hwdrv_apci16xx.h"
57
58 /*
59 +----------------------------------------------------------------------------+
60 | Function Name : INT i_APCI16XX_InsnConfigInitTTLIO |
61 | (comedi_device *dev, |
62 | comedi_subdevice *s, |
63 | comedi_insn *insn, |
64 | unsigned int *data) |
65 +----------------------------------------------------------------------------+
66 | Task APCI16XX_TTL_INIT (using defaults) : |
67 | Configure the TTL I/O operating mode from all ports |
68 | You must calling this function be |
69 | for you call any other function witch access of TTL. |
70 | APCI16XX_TTL_INITDIRECTION(user inputs for direction) |
71 +----------------------------------------------------------------------------+
72 | Input Parameters : b_InitType = (BYTE) data[0]; |
73 | b_Port0Mode = (BYTE) data[1]; |
74 | b_Port1Mode = (BYTE) data[2]; |
75 | b_Port2Mode = (BYTE) data[3]; |
76 | b_Port3Mode = (BYTE) data[4]; |
77 | ........ |
78 +----------------------------------------------------------------------------+
79 | Output Parameters : - |
80 +----------------------------------------------------------------------------+
81 | Return Value :>0: No error |
82 | -1: Port 0 mode selection is wrong |
83 | -2: Port 1 mode selection is wrong |
84 | -3: Port 2 mode selection is wrong |
85 | -4: Port 3 mode selection is wrong |
86 | -X: Port X-1 mode selection is wrong |
87 | .... |
88 | -100 : Config command error |
89 | -101 : Data size error |
90 +----------------------------------------------------------------------------+
91 */
92
93 int i_APCI16XX_InsnConfigInitTTLIO(comedi_device * dev,
94 comedi_subdevice * s, comedi_insn * insn, unsigned int * data)
95 {
96 INT i_ReturnValue = insn->n;
97 BYTE b_Command = 0;
98 BYTE b_Cpt = 0;
99 BYTE b_NumberOfPort =
100 (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 8);
101
102 /************************/
103 /* Test the buffer size */
104 /************************/
105
106 if (insn->n >= 1) {
107 /*******************/
108 /* Get the command */
109 /* **************** */
110
111 b_Command = (BYTE) data[0];
112
113 /********************/
114 /* Test the command */
115 /********************/
116
117 if ((b_Command == APCI16XX_TTL_INIT) ||
118 (b_Command == APCI16XX_TTL_INITDIRECTION) ||
119 (b_Command == APCI16XX_TTL_OUTPUTMEMORY)) {
120 /***************************************/
121 /* Test the initialisation buffer size */
122 /***************************************/
123
124 if ((b_Command == APCI16XX_TTL_INITDIRECTION)
125 && ((BYTE) (insn->n - 1) != b_NumberOfPort)) {
126 /*******************/
127 /* Data size error */
128 /*******************/
129
130 printk("\nBuffer size error");
131 i_ReturnValue = -101;
132 }
133
134 if ((b_Command == APCI16XX_TTL_OUTPUTMEMORY)
135 && ((BYTE) (insn->n) != 2)) {
136 /*******************/
137 /* Data size error */
138 /*******************/
139
140 printk("\nBuffer size error");
141 i_ReturnValue = -101;
142 }
143 } else {
144 /************************/
145 /* Config command error */
146 /************************/
147
148 printk("\nCommand selection error");
149 i_ReturnValue = -100;
150 }
151 } else {
152 /*******************/
153 /* Data size error */
154 /*******************/
155
156 printk("\nBuffer size error");
157 i_ReturnValue = -101;
158 }
159
160 /**************************************************************************/
161 /* Test if no error occur and APCI16XX_TTL_INITDIRECTION command selected */
162 /**************************************************************************/
163
164 if ((i_ReturnValue >= 0) && (b_Command == APCI16XX_TTL_INITDIRECTION)) {
165 memset(devpriv->ul_TTLPortConfiguration, 0,
166 sizeof(devpriv->ul_TTLPortConfiguration));
167
168 /*************************************/
169 /* Test the port direction selection */
170 /*************************************/
171
172 for (b_Cpt = 1;
173 (b_Cpt <= b_NumberOfPort) && (i_ReturnValue >= 0);
174 b_Cpt++) {
175 /**********************/
176 /* Test the direction */
177 /**********************/
178
179 if ((data[b_Cpt] != 0) && (data[b_Cpt] != 0xFF)) {
180 /************************/
181 /* Port direction error */
182 /************************/
183
184 printk("\nPort %d direction selection error",
185 (INT) b_Cpt);
186 i_ReturnValue = -(INT) b_Cpt;
187 }
188
189 /**************************/
190 /* Save the configuration */
191 /**************************/
192
193 devpriv->ul_TTLPortConfiguration[(b_Cpt - 1) / 4] =
194 devpriv->ul_TTLPortConfiguration[(b_Cpt -
195 1) / 4] | (data[b_Cpt] << (8 * ((b_Cpt -
196 1) % 4)));
197 }
198 }
199
200 /**************************/
201 /* Test if no error occur */
202 /**************************/
203
204 if (i_ReturnValue >= 0) {
205 /***********************************/
206 /* Test if TTL port initilaisation */
207 /***********************************/
208
209 if ((b_Command == APCI16XX_TTL_INIT)
210 || (b_Command == APCI16XX_TTL_INITDIRECTION)) {
211 /******************************/
212 /* Set all port configuration */
213 /******************************/
214
215 for (b_Cpt = 0; b_Cpt <= b_NumberOfPort; b_Cpt++) {
216 if ((b_Cpt % 4) == 0) {
217 /*************************/
218 /* Set the configuration */
219 /*************************/
220
221 outl(devpriv->
222 ul_TTLPortConfiguration[b_Cpt /
223 4],
224 devpriv->iobase + 32 + b_Cpt);
225 }
226 }
227 }
228 }
229
230 /************************************************/
231 /* Test if output memory initialisation command */
232 /************************************************/
233
234 if (b_Command == APCI16XX_TTL_OUTPUTMEMORY) {
235 if (data[1]) {
236 devpriv->b_OutputMemoryStatus = ADDIDATA_ENABLE;
237 } else {
238 devpriv->b_OutputMemoryStatus = ADDIDATA_DISABLE;
239 }
240 }
241
242 return (i_ReturnValue);
243 }
244
245 /*
246 +----------------------------------------------------------------------------+
247 | INPUT FUNCTIONS |
248 +----------------------------------------------------------------------------+
249 */
250
251 /*
252 +----------------------------------------------------------------------------+
253 | Function Name : INT i_APCI16XX_InsnBitsReadTTLIO |
254 | (comedi_device *dev, |
255 | comedi_subdevice *s, |
256 | comedi_insn *insn, |
257 | unsigned int *data) |
258 +----------------------------------------------------------------------------+
259 | Task : Read the status from selected TTL digital input |
260 | (b_InputChannel) |
261 +----------------------------------------------------------------------------+
262 | Task : Read the status from digital input port |
263 | (b_SelectedPort) |
264 +----------------------------------------------------------------------------+
265 | Input Parameters : |
266 | APCI16XX_TTL_READCHANNEL |
267 | b_SelectedPort= CR_RANGE(insn->chanspec); |
268 | b_InputChannel= CR_CHAN(insn->chanspec); |
269 | b_ReadType = (BYTE) data[0]; |
270 | |
271 | APCI16XX_TTL_READPORT |
272 | b_SelectedPort= CR_RANGE(insn->chanspec); |
273 | b_ReadType = (BYTE) data[0]; |
274 +----------------------------------------------------------------------------+
275 | Output Parameters : data[0] 0 : Channle is not active |
276 | 1 : Channle is active |
277 +----------------------------------------------------------------------------+
278 | Return Value : >0 : No error |
279 | -100 : Config command error |
280 | -101 : Data size error |
281 | -102 : The selected TTL input port is wrong |
282 | -103 : The selected TTL digital input is wrong |
283 +----------------------------------------------------------------------------+
284 */
285
286 int i_APCI16XX_InsnBitsReadTTLIO(comedi_device * dev,
287 comedi_subdevice * s, comedi_insn * insn, unsigned int * data)
288 {
289 INT i_ReturnValue = insn->n;
290 BYTE b_Command = 0;
291 BYTE b_NumberOfPort =
292 (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 8);
293 BYTE b_SelectedPort = CR_RANGE(insn->chanspec);
294 BYTE b_InputChannel = CR_CHAN(insn->chanspec);
295 BYTE *pb_Status;
296 DWORD dw_Status;
297
298 /************************/
299 /* Test the buffer size */
300 /************************/
301
302 if (insn->n >= 1) {
303 /*******************/
304 /* Get the command */
305 /* **************** */
306
307 b_Command = (BYTE) data[0];
308
309 /********************/
310 /* Test the command */
311 /********************/
312
313 if ((b_Command == APCI16XX_TTL_READCHANNEL)
314 || (b_Command == APCI16XX_TTL_READPORT)) {
315 /**************************/
316 /* Test the selected port */
317 /**************************/
318
319 if (b_SelectedPort < b_NumberOfPort) {
320 /**********************/
321 /* Test if input port */
322 /**********************/
323
324 if (((devpriv->ul_TTLPortConfiguration
325 [b_SelectedPort /
326 4] >> (8 *
327 (b_SelectedPort
328 %
329 4))) &
330 0xFF) == 0) {
331 /***************************/
332 /* Test the channel number */
333 /***************************/
334
335 if ((b_Command ==
336 APCI16XX_TTL_READCHANNEL)
337 && (b_InputChannel > 7)) {
338 /*******************************************/
339 /* The selected TTL digital input is wrong */
340 /*******************************************/
341
342 printk("\nChannel selection error");
343 i_ReturnValue = -103;
344 }
345 } else {
346 /****************************************/
347 /* The selected TTL input port is wrong */
348 /****************************************/
349
350 printk("\nPort selection error");
351 i_ReturnValue = -102;
352 }
353 } else {
354 /****************************************/
355 /* The selected TTL input port is wrong */
356 /****************************************/
357
358 printk("\nPort selection error");
359 i_ReturnValue = -102;
360 }
361 } else {
362 /************************/
363 /* Config command error */
364 /************************/
365
366 printk("\nCommand selection error");
367 i_ReturnValue = -100;
368 }
369 } else {
370 /*******************/
371 /* Data size error */
372 /*******************/
373
374 printk("\nBuffer size error");
375 i_ReturnValue = -101;
376 }
377
378 /**************************/
379 /* Test if no error occur */
380 /**************************/
381
382 if (i_ReturnValue >= 0) {
383 pb_Status = (PBYTE) & data[0];
384
385 /*******************************/
386 /* Get the digital inpu status */
387 /*******************************/
388
389 dw_Status =
390 inl(devpriv->iobase + 8 + ((b_SelectedPort / 4) * 4));
391 dw_Status = (dw_Status >> (8 * (b_SelectedPort % 4))) & 0xFF;
392
393 /***********************/
394 /* Save the port value */
395 /***********************/
396
397 *pb_Status = (BYTE) dw_Status;
398
399 /***************************************/
400 /* Test if read channel status command */
401 /***************************************/
402
403 if (b_Command == APCI16XX_TTL_READCHANNEL) {
404 *pb_Status = (*pb_Status >> b_InputChannel) & 1;
405 }
406 }
407
408 return (i_ReturnValue);
409 }
410
411 /*
412 +----------------------------------------------------------------------------+
413 | Function Name : INT i_APCI16XX_InsnReadTTLIOAllPortValue |
414 | (comedi_device *dev, |
415 | comedi_subdevice *s, |
416 | comedi_insn *insn, |
417 | unsigned int *data) |
418 +----------------------------------------------------------------------------+
419 | Task : Read the status from all digital input ports |
420 +----------------------------------------------------------------------------+
421 | Input Parameters : - |
422 +----------------------------------------------------------------------------+
423 | Output Parameters : data[0] : Port 0 to 3 data |
424 | data[1] : Port 4 to 7 data |
425 | .... |
426 +----------------------------------------------------------------------------+
427 | Return Value : 0: No error |
428 | -100 : Read command error |
429 | -101 : Data size error |
430 +----------------------------------------------------------------------------+
431 */
432
433 int i_APCI16XX_InsnReadTTLIOAllPortValue(comedi_device * dev,
434 comedi_subdevice * s, comedi_insn * insn, unsigned int * data)
435 {
436 BYTE b_Command = (BYTE) CR_AREF(insn->chanspec);
437 INT i_ReturnValue = insn->n;
438 BYTE b_Cpt = 0;
439 BYTE b_NumberOfPort = 0;
440 unsigned int *pls_ReadData = data;
441
442 /********************/
443 /* Test the command */
444 /********************/
445
446 if ((b_Command == APCI16XX_TTL_READ_ALL_INPUTS)
447 || (b_Command == APCI16XX_TTL_READ_ALL_OUTPUTS)) {
448 /**********************************/
449 /* Get the number of 32-Bit ports */
450 /**********************************/
451
452 b_NumberOfPort =
453 (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 32);
454 if ((b_NumberOfPort * 32) <
455 devpriv->ps_BoardInfo->i_NbrTTLChannel) {
456 b_NumberOfPort = b_NumberOfPort + 1;
457 }
458
459 /************************/
460 /* Test the buffer size */
461 /************************/
462
463 if (insn->n >= b_NumberOfPort) {
464 if (b_Command == APCI16XX_TTL_READ_ALL_INPUTS) {
465 /**************************/
466 /* Read all digital input */
467 /**************************/
468
469 for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt++) {
470 /************************/
471 /* Read the 32-Bit port */
472 /************************/
473
474 pls_ReadData[b_Cpt] =
475 inl(devpriv->iobase + 8 +
476 (b_Cpt * 4));
477
478 /**************************************/
479 /* Mask all channels used als outputs */
480 /**************************************/
481
482 pls_ReadData[b_Cpt] =
483 pls_ReadData[b_Cpt] &
484 (~devpriv->
485 ul_TTLPortConfiguration[b_Cpt]);
486 }
487 } else {
488 /****************************/
489 /* Read all digital outputs */
490 /****************************/
491
492 for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt++) {
493 /************************/
494 /* Read the 32-Bit port */
495 /************************/
496
497 pls_ReadData[b_Cpt] =
498 inl(devpriv->iobase + 20 +
499 (b_Cpt * 4));
500
501 /**************************************/
502 /* Mask all channels used als outputs */
503 /**************************************/
504
505 pls_ReadData[b_Cpt] =
506 pls_ReadData[b_Cpt] & devpriv->
507 ul_TTLPortConfiguration[b_Cpt];
508 }
509 }
510 } else {
511 /*******************/
512 /* Data size error */
513 /*******************/
514
515 printk("\nBuffer size error");
516 i_ReturnValue = -101;
517 }
518 } else {
519 /*****************/
520 /* Command error */
521 /*****************/
522
523 printk("\nCommand selection error");
524 i_ReturnValue = -100;
525 }
526
527 return (i_ReturnValue);
528 }
529
530 /*
531 +----------------------------------------------------------------------------+
532 | OUTPUT FUNCTIONS |
533 +----------------------------------------------------------------------------+
534 */
535
536 /*
537 +----------------------------------------------------------------------------+
538 | Function Name : INT i_APCI16XX_InsnBitsWriteTTLIO |
539 | (comedi_device *dev, |
540 | comedi_subdevice *s, |
541 | comedi_insn *insn, |
542 | unsigned int *data) |
543 +----------------------------------------------------------------------------+
544 | Task : Set the state from selected TTL digital output |
545 | (b_OutputChannel) |
546 +----------------------------------------------------------------------------+
547 | Task : Set the state from digital output port |
548 | (b_SelectedPort) |
549 +----------------------------------------------------------------------------+
550 | Input Parameters : |
551 | APCI16XX_TTL_WRITECHANNEL_ON | APCI16XX_TTL_WRITECHANNEL_OFF |
552 | b_SelectedPort = CR_RANGE(insn->chanspec); |
553 | b_OutputChannel= CR_CHAN(insn->chanspec); |
554 | b_Command = (BYTE) data[0]; |
555 | |
556 | APCI16XX_TTL_WRITEPORT_ON | APCI16XX_TTL_WRITEPORT_OFF |
557 | b_SelectedPort = CR_RANGE(insn->chanspec); |
558 | b_Command = (BYTE) data[0]; |
559 +----------------------------------------------------------------------------+
560 | Output Parameters : data[0] : TTL output port 0 to 3 data |
561 | data[1] : TTL output port 4 to 7 data |
562 | .... |
563 +----------------------------------------------------------------------------+
564 | Return Value : >0 : No error |
565 | -100 : Command error |
566 | -101 : Data size error |
567 | -102 : The selected TTL output port is wrong |
568 | -103 : The selected TTL digital output is wrong |
569 | -104 : Output memory disabled |
570 +----------------------------------------------------------------------------+
571 */
572
573 int i_APCI16XX_InsnBitsWriteTTLIO(comedi_device * dev,
574 comedi_subdevice * s, comedi_insn * insn, unsigned int * data)
575 {
576 INT i_ReturnValue = insn->n;
577 BYTE b_Command = 0;
578 BYTE b_NumberOfPort =
579 (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 8);
580 BYTE b_SelectedPort = CR_RANGE(insn->chanspec);
581 BYTE b_OutputChannel = CR_CHAN(insn->chanspec);
582 DWORD dw_Status = 0;
583
584 /************************/
585 /* Test the buffer size */
586 /************************/
587
588 if (insn->n >= 1) {
589 /*******************/
590 /* Get the command */
591 /* **************** */
592
593 b_Command = (BYTE) data[0];
594
595 /********************/
596 /* Test the command */
597 /********************/
598
599 if ((b_Command == APCI16XX_TTL_WRITECHANNEL_ON) ||
600 (b_Command == APCI16XX_TTL_WRITEPORT_ON) ||
601 (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) ||
602 (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) {
603 /**************************/
604 /* Test the selected port */
605 /**************************/
606
607 if (b_SelectedPort < b_NumberOfPort) {
608 /***********************/
609 /* Test if output port */
610 /***********************/
611
612 if (((devpriv->ul_TTLPortConfiguration
613 [b_SelectedPort /
614 4] >> (8 *
615 (b_SelectedPort
616 %
617 4))) &
618 0xFF) == 0xFF) {
619 /***************************/
620 /* Test the channel number */
621 /***************************/
622
623 if (((b_Command == APCI16XX_TTL_WRITECHANNEL_ON) || (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF)) && (b_OutputChannel > 7)) {
624 /********************************************/
625 /* The selected TTL digital output is wrong */
626 /********************************************/
627
628 printk("\nChannel selection error");
629 i_ReturnValue = -103;
630 }
631
632 if (((b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) || (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE)) {
633 /********************************************/
634 /* The selected TTL digital output is wrong */
635 /********************************************/
636
637 printk("\nOutput memory disabled");
638 i_ReturnValue = -104;
639 }
640
641 /************************/
642 /* Test the buffer size */
643 /************************/
644
645 if (((b_Command == APCI16XX_TTL_WRITEPORT_ON) || (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (insn->n < 2)) {
646 /*******************/
647 /* Data size error */
648 /*******************/
649
650 printk("\nBuffer size error");
651 i_ReturnValue = -101;
652 }
653 } else {
654 /*****************************************/
655 /* The selected TTL output port is wrong */
656 /*****************************************/
657
658 printk("\nPort selection error %lX",
659 (unsigned long)devpriv->
660 ul_TTLPortConfiguration[0]);
661 i_ReturnValue = -102;
662 }
663 } else {
664 /****************************************/
665 /* The selected TTL output port is wrong */
666 /****************************************/
667
668 printk("\nPort selection error %d %d",
669 b_SelectedPort, b_NumberOfPort);
670 i_ReturnValue = -102;
671 }
672 } else {
673 /************************/
674 /* Config command error */
675 /************************/
676
677 printk("\nCommand selection error");
678 i_ReturnValue = -100;
679 }
680 } else {
681 /*******************/
682 /* Data size error */
683 /*******************/
684
685 printk("\nBuffer size error");
686 i_ReturnValue = -101;
687 }
688
689 /**************************/
690 /* Test if no error occur */
691 /**************************/
692
693 if (i_ReturnValue >= 0) {
694 /********************************/
695 /* Get the digital output state */
696 /********************************/
697
698 dw_Status =
699 inl(devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4));
700
701 /**********************************/
702 /* Test if output memory not used */
703 /**********************************/
704
705 if (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE) {
706 /*********************************/
707 /* Clear the selected port value */
708 /*********************************/
709
710 dw_Status =
711 dw_Status & (0xFFFFFFFFUL -
712 (0xFFUL << (8 * (b_SelectedPort % 4))));
713 }
714
715 /******************************/
716 /* Test if setting channel ON */
717 /******************************/
718
719 if (b_Command == APCI16XX_TTL_WRITECHANNEL_ON) {
720 dw_Status =
721 dw_Status | (1UL << ((8 * (b_SelectedPort %
722 4)) + b_OutputChannel));
723 }
724
725 /***************************/
726 /* Test if setting port ON */
727 /***************************/
728
729 if (b_Command == APCI16XX_TTL_WRITEPORT_ON) {
730 dw_Status =
731 dw_Status | ((data[1] & 0xFF) << (8 *
732 (b_SelectedPort % 4)));
733 }
734
735 /*******************************/
736 /* Test if setting channel OFF */
737 /*******************************/
738
739 if (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) {
740 dw_Status =
741 dw_Status & (0xFFFFFFFFUL -
742 (1UL << ((8 * (b_SelectedPort % 4)) +
743 b_OutputChannel)));
744 }
745
746 /****************************/
747 /* Test if setting port OFF */
748 /****************************/
749
750 if (b_Command == APCI16XX_TTL_WRITEPORT_OFF) {
751 dw_Status =
752 dw_Status & (0xFFFFFFFFUL -
753 ((data[1] & 0xFF) << (8 * (b_SelectedPort %
754 4))));
755 }
756
757 outl(dw_Status,
758 devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4));
759 }
760
761 return (i_ReturnValue);
762 }
763
764 /*
765 +----------------------------------------------------------------------------+
766 | Function Name : int i_APCI2200_Reset(comedi_device *dev) | +----------------------------------------------------------------------------+
767 | Task :resets all the registers |
768 +----------------------------------------------------------------------------+
769 | Input Parameters : comedi_device *dev |
770 +----------------------------------------------------------------------------+
771 | Output Parameters : - |
772 +----------------------------------------------------------------------------+
773 | Return Value : - |
774 +----------------------------------------------------------------------------+
775 */
776
777 int i_APCI16XX_Reset(comedi_device * dev)
778 {
779 return 0;
780 }