diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2014-05-29 13:56:32 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-06-18 17:56:45 -0400 |
commit | 9c340ac934dbbfd46e776465b08391baac32d486 (patch) | |
tree | 35dab4ac9042f21f091f59a9ab5954f67a3e9f63 /drivers | |
parent | 9588fa8fe908c5501de5076de9a0c9d44ef737ec (diff) |
staging: comedi: ni_stc.h: add read/write callbacks to struct ni_private
The {read,write}[bwl] macros used to access the registers in the ni_atmio,
ni_mio_cs, and ni_pcimio drivers and the included ni_mio_common.c file all
rely on a local variable having a specific name. They also require some of
the ni_mio_common code to need a __maybe_unused tag on the devpriv local
variable.
Remove all the macros by converting them into private functions and storing
the callbacks in the private data.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/comedi/drivers/ni_atmio.c | 62 | ||||
-rw-r--r-- | drivers/staging/comedi/drivers/ni_mio_common.c | 379 | ||||
-rw-r--r-- | drivers/staging/comedi/drivers/ni_mio_cs.c | 55 | ||||
-rw-r--r-- | drivers/staging/comedi/drivers/ni_pcimio.c | 118 | ||||
-rw-r--r-- | drivers/staging/comedi/drivers/ni_stc.h | 7 |
5 files changed, 384 insertions, 237 deletions
diff --git a/drivers/staging/comedi/drivers/ni_atmio.c b/drivers/staging/comedi/drivers/ni_atmio.c index 5b54a49c84b2..ae9ace9ee99b 100644 --- a/drivers/staging/comedi/drivers/ni_atmio.c +++ b/drivers/staging/comedi/drivers/ni_atmio.c | |||
@@ -272,12 +272,35 @@ static const int ni_irqpin[] = { | |||
272 | 272 | ||
273 | /* How we access registers */ | 273 | /* How we access registers */ |
274 | 274 | ||
275 | #define ni_writel(a, b) (outl((a), (b)+dev->iobase)) | 275 | static uint8_t ni_atmio_inb(struct comedi_device *dev, int reg) |
276 | #define ni_readl(a) (inl((a)+dev->iobase)) | 276 | { |
277 | #define ni_writew(a, b) (outw((a), (b)+dev->iobase)) | 277 | return inb(dev->iobase + reg); |
278 | #define ni_readw(a) (inw((a)+dev->iobase)) | 278 | } |
279 | #define ni_writeb(a, b) (outb((a), (b)+dev->iobase)) | 279 | |
280 | #define ni_readb(a) (inb((a)+dev->iobase)) | 280 | static uint16_t ni_atmio_inw(struct comedi_device *dev, int reg) |
281 | { | ||
282 | return inw(dev->iobase + reg); | ||
283 | } | ||
284 | |||
285 | static uint32_t ni_atmio_inl(struct comedi_device *dev, int reg) | ||
286 | { | ||
287 | return inl(dev->iobase + reg); | ||
288 | } | ||
289 | |||
290 | static void ni_atmio_outb(struct comedi_device *dev, uint8_t val, int reg) | ||
291 | { | ||
292 | outb(val, dev->iobase + reg); | ||
293 | } | ||
294 | |||
295 | static void ni_atmio_outw(struct comedi_device *dev, uint16_t val, int reg) | ||
296 | { | ||
297 | outw(val, dev->iobase + reg); | ||
298 | } | ||
299 | |||
300 | static void ni_atmio_outl(struct comedi_device *dev, uint32_t val, int reg) | ||
301 | { | ||
302 | outl(val, dev->iobase + reg); | ||
303 | } | ||
281 | 304 | ||
282 | /* How we access windowed registers */ | 305 | /* How we access windowed registers */ |
283 | 306 | ||
@@ -292,10 +315,10 @@ static void ni_atmio_win_out(struct comedi_device *dev, uint16_t data, int addr) | |||
292 | 315 | ||
293 | spin_lock_irqsave(&devpriv->window_lock, flags); | 316 | spin_lock_irqsave(&devpriv->window_lock, flags); |
294 | if ((addr) < 8) { | 317 | if ((addr) < 8) { |
295 | ni_writew(data, addr * 2); | 318 | devpriv->writew(dev, data, addr * 2); |
296 | } else { | 319 | } else { |
297 | ni_writew(addr, Window_Address); | 320 | devpriv->writew(dev, addr, Window_Address); |
298 | ni_writew(data, Window_Data); | 321 | devpriv->writew(dev, data, Window_Data); |
299 | } | 322 | } |
300 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 323 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
301 | } | 324 | } |
@@ -308,10 +331,10 @@ static uint16_t ni_atmio_win_in(struct comedi_device *dev, int addr) | |||
308 | 331 | ||
309 | spin_lock_irqsave(&devpriv->window_lock, flags); | 332 | spin_lock_irqsave(&devpriv->window_lock, flags); |
310 | if (addr < 8) { | 333 | if (addr < 8) { |
311 | ret = ni_readw(addr * 2); | 334 | ret = devpriv->readw(dev, addr * 2); |
312 | } else { | 335 | } else { |
313 | ni_writew(addr, Window_Address); | 336 | devpriv->writew(dev, addr, Window_Address); |
314 | ret = ni_readw(Window_Data); | 337 | ret = devpriv->readw(dev, Window_Data); |
315 | } | 338 | } |
316 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 339 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
317 | 340 | ||
@@ -405,10 +428,17 @@ static int ni_atmio_attach(struct comedi_device *dev, | |||
405 | return ret; | 428 | return ret; |
406 | devpriv = dev->private; | 429 | devpriv = dev->private; |
407 | 430 | ||
408 | devpriv->stc_writew = &ni_atmio_win_out; | 431 | devpriv->readb = ni_atmio_inb; |
409 | devpriv->stc_readw = &ni_atmio_win_in; | 432 | devpriv->readw = ni_atmio_inw; |
410 | devpriv->stc_writel = &win_out2; | 433 | devpriv->readl = ni_atmio_inl; |
411 | devpriv->stc_readl = &win_in2; | 434 | devpriv->writeb = ni_atmio_outb; |
435 | devpriv->writew = ni_atmio_outw; | ||
436 | devpriv->writel = ni_atmio_outl; | ||
437 | |||
438 | devpriv->stc_writew = ni_atmio_win_out; | ||
439 | devpriv->stc_readw = ni_atmio_win_in; | ||
440 | devpriv->stc_writel = win_out2; | ||
441 | devpriv->stc_readl = win_in2; | ||
412 | 442 | ||
413 | iobase = it->options[0]; | 443 | iobase = it->options[0]; |
414 | irq = it->options[1]; | 444 | irq = it->options[1]; |
diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 45c42089f690..7632bd6cafc1 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c | |||
@@ -275,12 +275,12 @@ static inline void ni_set_bitfield(struct comedi_device *dev, int reg, | |||
275 | case AI_AO_Select: | 275 | case AI_AO_Select: |
276 | devpriv->ai_ao_select_reg &= ~bit_mask; | 276 | devpriv->ai_ao_select_reg &= ~bit_mask; |
277 | devpriv->ai_ao_select_reg |= bit_values & bit_mask; | 277 | devpriv->ai_ao_select_reg |= bit_values & bit_mask; |
278 | ni_writeb(devpriv->ai_ao_select_reg, AI_AO_Select); | 278 | devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); |
279 | break; | 279 | break; |
280 | case G0_G1_Select: | 280 | case G0_G1_Select: |
281 | devpriv->g0_g1_select_reg &= ~bit_mask; | 281 | devpriv->g0_g1_select_reg &= ~bit_mask; |
282 | devpriv->g0_g1_select_reg |= bit_values & bit_mask; | 282 | devpriv->g0_g1_select_reg |= bit_values & bit_mask; |
283 | ni_writeb(devpriv->g0_g1_select_reg, G0_G1_Select); | 283 | devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); |
284 | break; | 284 | break; |
285 | default: | 285 | default: |
286 | printk("Warning %s() called with invalid register\n", __func__); | 286 | printk("Warning %s() called with invalid register\n", __func__); |
@@ -356,7 +356,7 @@ static inline void ni_set_cdo_dma_channel(struct comedi_device *dev, | |||
356 | (ni_stc_dma_channel_select_bitfield(mite_channel) << | 356 | (ni_stc_dma_channel_select_bitfield(mite_channel) << |
357 | CDO_DMA_Select_Shift) & CDO_DMA_Select_Mask; | 357 | CDO_DMA_Select_Shift) & CDO_DMA_Select_Mask; |
358 | } | 358 | } |
359 | ni_writeb(devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); | 359 | devpriv->writeb(dev, devpriv->cdio_dma_select_reg, M_Offset_CDIO_DMA_Select); |
360 | mmiowb(); | 360 | mmiowb(); |
361 | spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags); | 361 | spin_unlock_irqrestore(&devpriv->soft_reg_copy_lock, flags); |
362 | } | 362 | } |
@@ -572,11 +572,11 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) | |||
572 | 572 | ||
573 | if (board->reg_type == ni_reg_6143) { | 573 | if (board->reg_type == ni_reg_6143) { |
574 | /* Flush the 6143 data FIFO */ | 574 | /* Flush the 6143 data FIFO */ |
575 | ni_writel(0x10, AIFIFO_Control_6143); /* Flush fifo */ | 575 | devpriv->writel(dev, 0x10, AIFIFO_Control_6143); |
576 | ni_writel(0x00, AIFIFO_Control_6143); /* Flush fifo */ | 576 | devpriv->writel(dev, 0x00, AIFIFO_Control_6143); |
577 | /* Wait for complete */ | 577 | /* Wait for complete */ |
578 | for (i = 0; i < timeout; i++) { | 578 | for (i = 0; i < timeout; i++) { |
579 | if (!(ni_readl(AIFIFO_Status_6143) & 0x10)) | 579 | if (!(devpriv->readl(dev, AIFIFO_Status_6143) & 0x10)) |
580 | break; | 580 | break; |
581 | udelay(1); | 581 | udelay(1); |
582 | } | 582 | } |
@@ -586,8 +586,8 @@ static void ni_clear_ai_fifo(struct comedi_device *dev) | |||
586 | } else { | 586 | } else { |
587 | devpriv->stc_writew(dev, 1, ADC_FIFO_Clear); | 587 | devpriv->stc_writew(dev, 1, ADC_FIFO_Clear); |
588 | if (board->reg_type == ni_reg_625x) { | 588 | if (board->reg_type == ni_reg_625x) { |
589 | ni_writeb(0, M_Offset_Static_AI_Control(0)); | 589 | devpriv->writeb(dev, 0, M_Offset_Static_AI_Control(0)); |
590 | ni_writeb(1, M_Offset_Static_AI_Control(0)); | 590 | devpriv->writeb(dev, 1, M_Offset_Static_AI_Control(0)); |
591 | #if 0 | 591 | #if 0 |
592 | /* the NI example code does 3 convert pulses for 625x boards, | 592 | /* the NI example code does 3 convert pulses for 625x boards, |
593 | but that appears to be wrong in practice. */ | 593 | but that appears to be wrong in practice. */ |
@@ -628,8 +628,8 @@ static inline void ni_ao_win_outw(struct comedi_device *dev, uint16_t data, | |||
628 | unsigned long flags; | 628 | unsigned long flags; |
629 | 629 | ||
630 | spin_lock_irqsave(&devpriv->window_lock, flags); | 630 | spin_lock_irqsave(&devpriv->window_lock, flags); |
631 | ni_writew(addr, AO_Window_Address_611x); | 631 | devpriv->writew(dev, addr, AO_Window_Address_611x); |
632 | ni_writew(data, AO_Window_Data_611x); | 632 | devpriv->writew(dev, data, AO_Window_Data_611x); |
633 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 633 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
634 | } | 634 | } |
635 | 635 | ||
@@ -640,8 +640,8 @@ static inline void ni_ao_win_outl(struct comedi_device *dev, uint32_t data, | |||
640 | unsigned long flags; | 640 | unsigned long flags; |
641 | 641 | ||
642 | spin_lock_irqsave(&devpriv->window_lock, flags); | 642 | spin_lock_irqsave(&devpriv->window_lock, flags); |
643 | ni_writew(addr, AO_Window_Address_611x); | 643 | devpriv->writew(dev, addr, AO_Window_Address_611x); |
644 | ni_writel(data, AO_Window_Data_611x); | 644 | devpriv->writel(dev, data, AO_Window_Data_611x); |
645 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 645 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
646 | } | 646 | } |
647 | 647 | ||
@@ -652,8 +652,8 @@ static inline unsigned short ni_ao_win_inw(struct comedi_device *dev, int addr) | |||
652 | unsigned short data; | 652 | unsigned short data; |
653 | 653 | ||
654 | spin_lock_irqsave(&devpriv->window_lock, flags); | 654 | spin_lock_irqsave(&devpriv->window_lock, flags); |
655 | ni_writew(addr, AO_Window_Address_611x); | 655 | devpriv->writew(dev, addr, AO_Window_Address_611x); |
656 | data = ni_readw(AO_Window_Data_611x); | 656 | data = devpriv->readw(dev, AO_Window_Data_611x); |
657 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 657 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
658 | return data; | 658 | return data; |
659 | } | 659 | } |
@@ -770,6 +770,7 @@ static void ni_ao_fifo_load(struct comedi_device *dev, | |||
770 | struct comedi_subdevice *s, int n) | 770 | struct comedi_subdevice *s, int n) |
771 | { | 771 | { |
772 | const struct ni_board_struct *board = comedi_board(dev); | 772 | const struct ni_board_struct *board = comedi_board(dev); |
773 | struct ni_private *devpriv = dev->private; | ||
773 | struct comedi_async *async = s->async; | 774 | struct comedi_async *async = s->async; |
774 | struct comedi_cmd *cmd = &async->cmd; | 775 | struct comedi_cmd *cmd = &async->cmd; |
775 | int chan; | 776 | int chan; |
@@ -798,9 +799,9 @@ static void ni_ao_fifo_load(struct comedi_device *dev, | |||
798 | i++; | 799 | i++; |
799 | packed_data |= (d << 16) & 0xffff0000; | 800 | packed_data |= (d << 16) & 0xffff0000; |
800 | } | 801 | } |
801 | ni_writel(packed_data, DAC_FIFO_Data_611x); | 802 | devpriv->writel(dev, packed_data, DAC_FIFO_Data_611x); |
802 | } else { | 803 | } else { |
803 | ni_writew(d, DAC_FIFO_Data); | 804 | devpriv->writew(dev, d, DAC_FIFO_Data); |
804 | } | 805 | } |
805 | chan++; | 806 | chan++; |
806 | chan %= cmd->chanlist_len; | 807 | chan %= cmd->chanlist_len; |
@@ -888,7 +889,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, | |||
888 | u32 dl; | 889 | u32 dl; |
889 | 890 | ||
890 | for (i = 0; i < n / 2; i++) { | 891 | for (i = 0; i < n / 2; i++) { |
891 | dl = ni_readl(ADC_FIFO_Data_611x); | 892 | dl = devpriv->readl(dev, ADC_FIFO_Data_611x); |
892 | /* This may get the hi/lo data in the wrong order */ | 893 | /* This may get the hi/lo data in the wrong order */ |
893 | data[0] = (dl >> 16) & 0xffff; | 894 | data[0] = (dl >> 16) & 0xffff; |
894 | data[1] = dl & 0xffff; | 895 | data[1] = dl & 0xffff; |
@@ -896,7 +897,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, | |||
896 | } | 897 | } |
897 | /* Check if there's a single sample stuck in the FIFO */ | 898 | /* Check if there's a single sample stuck in the FIFO */ |
898 | if (n % 2) { | 899 | if (n % 2) { |
899 | dl = ni_readl(ADC_FIFO_Data_611x); | 900 | dl = devpriv->readl(dev, ADC_FIFO_Data_611x); |
900 | data[0] = dl & 0xffff; | 901 | data[0] = dl & 0xffff; |
901 | cfc_write_to_buffer(s, data[0]); | 902 | cfc_write_to_buffer(s, data[0]); |
902 | } | 903 | } |
@@ -906,7 +907,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, | |||
906 | 907 | ||
907 | /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ | 908 | /* This just reads the FIFO assuming the data is present, no checks on the FIFO status are performed */ |
908 | for (i = 0; i < n / 2; i++) { | 909 | for (i = 0; i < n / 2; i++) { |
909 | dl = ni_readl(AIFIFO_Data_6143); | 910 | dl = devpriv->readl(dev, AIFIFO_Data_6143); |
910 | 911 | ||
911 | data[0] = (dl >> 16) & 0xffff; | 912 | data[0] = (dl >> 16) & 0xffff; |
912 | data[1] = dl & 0xffff; | 913 | data[1] = dl & 0xffff; |
@@ -914,8 +915,9 @@ static void ni_ai_fifo_read(struct comedi_device *dev, | |||
914 | } | 915 | } |
915 | if (n % 2) { | 916 | if (n % 2) { |
916 | /* Assume there is a single sample stuck in the FIFO */ | 917 | /* Assume there is a single sample stuck in the FIFO */ |
917 | ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ | 918 | /* Get stranded sample into FIFO */ |
918 | dl = ni_readl(AIFIFO_Data_6143); | 919 | devpriv->writel(dev, 0x01, AIFIFO_Control_6143); |
920 | dl = devpriv->readl(dev, AIFIFO_Data_6143); | ||
919 | data[0] = (dl >> 16) & 0xffff; | 921 | data[0] = (dl >> 16) & 0xffff; |
920 | cfc_write_to_buffer(s, data[0]); | 922 | cfc_write_to_buffer(s, data[0]); |
921 | } | 923 | } |
@@ -928,7 +930,7 @@ static void ni_ai_fifo_read(struct comedi_device *dev, | |||
928 | } | 930 | } |
929 | for (i = 0; i < n; i++) { | 931 | for (i = 0; i < n; i++) { |
930 | devpriv->ai_fifo_buffer[i] = | 932 | devpriv->ai_fifo_buffer[i] = |
931 | ni_readw(ADC_FIFO_Data_Register); | 933 | devpriv->readw(dev, ADC_FIFO_Data_Register); |
932 | } | 934 | } |
933 | cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, | 935 | cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, |
934 | n * | 936 | n * |
@@ -965,7 +967,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) | |||
965 | while ((devpriv->stc_readw(dev, | 967 | while ((devpriv->stc_readw(dev, |
966 | AI_Status_1_Register) & | 968 | AI_Status_1_Register) & |
967 | AI_FIFO_Empty_St) == 0) { | 969 | AI_FIFO_Empty_St) == 0) { |
968 | dl = ni_readl(ADC_FIFO_Data_611x); | 970 | dl = devpriv->readl(dev, ADC_FIFO_Data_611x); |
969 | 971 | ||
970 | /* This may get the hi/lo data in the wrong order */ | 972 | /* This may get the hi/lo data in the wrong order */ |
971 | data[0] = (dl >> 16); | 973 | data[0] = (dl >> 16); |
@@ -974,8 +976,8 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) | |||
974 | } | 976 | } |
975 | } else if (board->reg_type == ni_reg_6143) { | 977 | } else if (board->reg_type == ni_reg_6143) { |
976 | i = 0; | 978 | i = 0; |
977 | while (ni_readl(AIFIFO_Status_6143) & 0x04) { | 979 | while (devpriv->readl(dev, AIFIFO_Status_6143) & 0x04) { |
978 | dl = ni_readl(AIFIFO_Data_6143); | 980 | dl = devpriv->readl(dev, AIFIFO_Data_6143); |
979 | 981 | ||
980 | /* This may get the hi/lo data in the wrong order */ | 982 | /* This may get the hi/lo data in the wrong order */ |
981 | data[0] = (dl >> 16); | 983 | data[0] = (dl >> 16); |
@@ -984,9 +986,10 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) | |||
984 | i += 2; | 986 | i += 2; |
985 | } | 987 | } |
986 | /* Check if stranded sample is present */ | 988 | /* Check if stranded sample is present */ |
987 | if (ni_readl(AIFIFO_Status_6143) & 0x01) { | 989 | if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { |
988 | ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ | 990 | /* Get stranded sample into FIFO */ |
989 | dl = ni_readl(AIFIFO_Data_6143); | 991 | devpriv->writel(dev, 0x01, AIFIFO_Control_6143); |
992 | dl = devpriv->readl(dev, AIFIFO_Data_6143); | ||
990 | data[0] = (dl >> 16) & 0xffff; | 993 | data[0] = (dl >> 16) & 0xffff; |
991 | cfc_write_to_buffer(s, data[0]); | 994 | cfc_write_to_buffer(s, data[0]); |
992 | } | 995 | } |
@@ -1007,7 +1010,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) | |||
1007 | if (fifo_empty) | 1010 | if (fifo_empty) |
1008 | break; | 1011 | break; |
1009 | devpriv->ai_fifo_buffer[i] = | 1012 | devpriv->ai_fifo_buffer[i] = |
1010 | ni_readw(ADC_FIFO_Data_Register); | 1013 | devpriv->readw(dev, ADC_FIFO_Data_Register); |
1011 | } | 1014 | } |
1012 | cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, | 1015 | cfc_write_array_to_buffer(s, devpriv->ai_fifo_buffer, |
1013 | i * | 1016 | i * |
@@ -1020,7 +1023,7 @@ static void ni_handle_fifo_dregs(struct comedi_device *dev) | |||
1020 | static void get_last_sample_611x(struct comedi_device *dev) | 1023 | static void get_last_sample_611x(struct comedi_device *dev) |
1021 | { | 1024 | { |
1022 | const struct ni_board_struct *board = comedi_board(dev); | 1025 | const struct ni_board_struct *board = comedi_board(dev); |
1023 | struct ni_private *devpriv __maybe_unused = dev->private; | 1026 | struct ni_private *devpriv = dev->private; |
1024 | struct comedi_subdevice *s = dev->read_subdev; | 1027 | struct comedi_subdevice *s = dev->read_subdev; |
1025 | unsigned short data; | 1028 | unsigned short data; |
1026 | u32 dl; | 1029 | u32 dl; |
@@ -1029,8 +1032,8 @@ static void get_last_sample_611x(struct comedi_device *dev) | |||
1029 | return; | 1032 | return; |
1030 | 1033 | ||
1031 | /* Check if there's a single sample stuck in the FIFO */ | 1034 | /* Check if there's a single sample stuck in the FIFO */ |
1032 | if (ni_readb(XXX_Status) & 0x80) { | 1035 | if (devpriv->readb(dev, XXX_Status) & 0x80) { |
1033 | dl = ni_readl(ADC_FIFO_Data_611x); | 1036 | dl = devpriv->readl(dev, ADC_FIFO_Data_611x); |
1034 | data = (dl & 0xffff); | 1037 | data = (dl & 0xffff); |
1035 | cfc_write_to_buffer(s, data); | 1038 | cfc_write_to_buffer(s, data); |
1036 | } | 1039 | } |
@@ -1039,7 +1042,7 @@ static void get_last_sample_611x(struct comedi_device *dev) | |||
1039 | static void get_last_sample_6143(struct comedi_device *dev) | 1042 | static void get_last_sample_6143(struct comedi_device *dev) |
1040 | { | 1043 | { |
1041 | const struct ni_board_struct *board = comedi_board(dev); | 1044 | const struct ni_board_struct *board = comedi_board(dev); |
1042 | struct ni_private *devpriv __maybe_unused = dev->private; | 1045 | struct ni_private *devpriv = dev->private; |
1043 | struct comedi_subdevice *s = dev->read_subdev; | 1046 | struct comedi_subdevice *s = dev->read_subdev; |
1044 | unsigned short data; | 1047 | unsigned short data; |
1045 | u32 dl; | 1048 | u32 dl; |
@@ -1048,9 +1051,10 @@ static void get_last_sample_6143(struct comedi_device *dev) | |||
1048 | return; | 1051 | return; |
1049 | 1052 | ||
1050 | /* Check if there's a single sample stuck in the FIFO */ | 1053 | /* Check if there's a single sample stuck in the FIFO */ |
1051 | if (ni_readl(AIFIFO_Status_6143) & 0x01) { | 1054 | if (devpriv->readl(dev, AIFIFO_Status_6143) & 0x01) { |
1052 | ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ | 1055 | /* Get stranded sample into FIFO */ |
1053 | dl = ni_readl(AIFIFO_Data_6143); | 1056 | devpriv->writel(dev, 0x01, AIFIFO_Control_6143); |
1057 | dl = devpriv->readl(dev, AIFIFO_Data_6143); | ||
1054 | 1058 | ||
1055 | /* This may get the hi/lo data in the wrong order */ | 1059 | /* This may get the hi/lo data in the wrong order */ |
1056 | data = (dl >> 16) & 0xffff; | 1060 | data = (dl >> 16) & 0xffff; |
@@ -1416,7 +1420,7 @@ static int ni_ai_reset(struct comedi_device *dev, struct comedi_subdevice *s) | |||
1416 | ni_clear_ai_fifo(dev); | 1420 | ni_clear_ai_fifo(dev); |
1417 | 1421 | ||
1418 | if (board->reg_type != ni_reg_6143) | 1422 | if (board->reg_type != ni_reg_6143) |
1419 | ni_writeb(0, Misc_Command); | 1423 | devpriv->writeb(dev, 0, Misc_Command); |
1420 | 1424 | ||
1421 | devpriv->stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ | 1425 | devpriv->stc_writew(dev, AI_Disarm, AI_Command_1_Register); /* reset pulses */ |
1422 | devpriv->stc_writew(dev, | 1426 | devpriv->stc_writew(dev, |
@@ -1560,9 +1564,10 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, | |||
1560 | bypass_bits |= MSeries_AI_Bypass_Dither_Bit; | 1564 | bypass_bits |= MSeries_AI_Bypass_Dither_Bit; |
1561 | /* don't use 2's complement encoding */ | 1565 | /* don't use 2's complement encoding */ |
1562 | bypass_bits |= MSeries_AI_Bypass_Polarity_Bit; | 1566 | bypass_bits |= MSeries_AI_Bypass_Polarity_Bit; |
1563 | ni_writel(bypass_bits, M_Offset_AI_Config_FIFO_Bypass); | 1567 | devpriv->writel(dev, bypass_bits, |
1568 | M_Offset_AI_Config_FIFO_Bypass); | ||
1564 | } else { | 1569 | } else { |
1565 | ni_writel(0, M_Offset_AI_Config_FIFO_Bypass); | 1570 | devpriv->writel(dev, 0, M_Offset_AI_Config_FIFO_Bypass); |
1566 | } | 1571 | } |
1567 | offset = 0; | 1572 | offset = 0; |
1568 | for (i = 0; i < n_chan; i++) { | 1573 | for (i = 0; i < n_chan; i++) { |
@@ -1600,7 +1605,7 @@ static void ni_m_series_load_channelgain_list(struct comedi_device *dev, | |||
1600 | config_bits |= MSeries_AI_Config_Dither_Bit; | 1605 | config_bits |= MSeries_AI_Config_Dither_Bit; |
1601 | /* don't use 2's complement encoding */ | 1606 | /* don't use 2's complement encoding */ |
1602 | config_bits |= MSeries_AI_Config_Polarity_Bit; | 1607 | config_bits |= MSeries_AI_Config_Polarity_Bit; |
1603 | ni_writew(config_bits, M_Offset_AI_Config_FIFO_Data); | 1608 | devpriv->writew(dev, config_bits, M_Offset_AI_Config_FIFO_Data); |
1604 | } | 1609 | } |
1605 | ni_prime_channelgain_list(dev); | 1610 | ni_prime_channelgain_list(dev); |
1606 | } | 1611 | } |
@@ -1669,21 +1674,21 @@ static void ni_load_channelgain_list(struct comedi_device *dev, | |||
1669 | if ((list[0] & CR_ALT_SOURCE) | 1674 | if ((list[0] & CR_ALT_SOURCE) |
1670 | && !devpriv->ai_calib_source_enabled) { | 1675 | && !devpriv->ai_calib_source_enabled) { |
1671 | /* Strobe Relay enable bit */ | 1676 | /* Strobe Relay enable bit */ |
1672 | ni_writew(devpriv->ai_calib_source | | 1677 | devpriv->writew(dev, devpriv->ai_calib_source | |
1673 | Calibration_Channel_6143_RelayOn, | 1678 | Calibration_Channel_6143_RelayOn, |
1674 | Calibration_Channel_6143); | 1679 | Calibration_Channel_6143); |
1675 | ni_writew(devpriv->ai_calib_source, | 1680 | devpriv->writew(dev, devpriv->ai_calib_source, |
1676 | Calibration_Channel_6143); | 1681 | Calibration_Channel_6143); |
1677 | devpriv->ai_calib_source_enabled = 1; | 1682 | devpriv->ai_calib_source_enabled = 1; |
1678 | msleep_interruptible(100); /* Allow relays to change */ | 1683 | msleep_interruptible(100); /* Allow relays to change */ |
1679 | } else if (!(list[0] & CR_ALT_SOURCE) | 1684 | } else if (!(list[0] & CR_ALT_SOURCE) |
1680 | && devpriv->ai_calib_source_enabled) { | 1685 | && devpriv->ai_calib_source_enabled) { |
1681 | /* Strobe Relay disable bit */ | 1686 | /* Strobe Relay disable bit */ |
1682 | ni_writew(devpriv->ai_calib_source | | 1687 | devpriv->writew(dev, devpriv->ai_calib_source | |
1683 | Calibration_Channel_6143_RelayOff, | 1688 | Calibration_Channel_6143_RelayOff, |
1684 | Calibration_Channel_6143); | 1689 | Calibration_Channel_6143); |
1685 | ni_writew(devpriv->ai_calib_source, | 1690 | devpriv->writew(dev, devpriv->ai_calib_source, |
1686 | Calibration_Channel_6143); | 1691 | Calibration_Channel_6143); |
1687 | devpriv->ai_calib_source_enabled = 0; | 1692 | devpriv->ai_calib_source_enabled = 0; |
1688 | msleep_interruptible(100); /* Allow relays to change */ | 1693 | msleep_interruptible(100); /* Allow relays to change */ |
1689 | } | 1694 | } |
@@ -1711,8 +1716,8 @@ static void ni_load_channelgain_list(struct comedi_device *dev, | |||
1711 | hi = 0; | 1716 | hi = 0; |
1712 | if ((list[i] & CR_ALT_SOURCE)) { | 1717 | if ((list[i] & CR_ALT_SOURCE)) { |
1713 | if (board->reg_type == ni_reg_611x) | 1718 | if (board->reg_type == ni_reg_611x) |
1714 | ni_writew(CR_CHAN(list[i]) & 0x0003, | 1719 | devpriv->writew(dev, CR_CHAN(list[i]) & 0x0003, |
1715 | Calibration_Channel_Select_611x); | 1720 | Calibration_Channel_Select_611x); |
1716 | } else { | 1721 | } else { |
1717 | if (board->reg_type == ni_reg_611x) | 1722 | if (board->reg_type == ni_reg_611x) |
1718 | aref = AREF_DIFF; | 1723 | aref = AREF_DIFF; |
@@ -1734,7 +1739,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, | |||
1734 | } | 1739 | } |
1735 | hi |= AI_CONFIG_CHANNEL(chan); | 1740 | hi |= AI_CONFIG_CHANNEL(chan); |
1736 | 1741 | ||
1737 | ni_writew(hi, Configuration_Memory_High); | 1742 | devpriv->writew(dev, hi, Configuration_Memory_High); |
1738 | 1743 | ||
1739 | if (board->reg_type != ni_reg_6143) { | 1744 | if (board->reg_type != ni_reg_6143) { |
1740 | lo = range; | 1745 | lo = range; |
@@ -1743,7 +1748,7 @@ static void ni_load_channelgain_list(struct comedi_device *dev, | |||
1743 | if (dither) | 1748 | if (dither) |
1744 | lo |= AI_DITHER; | 1749 | lo |= AI_DITHER; |
1745 | 1750 | ||
1746 | ni_writew(lo, Configuration_Memory_Low); | 1751 | devpriv->writew(dev, lo, Configuration_Memory_Low); |
1747 | } | 1752 | } |
1748 | } | 1753 | } |
1749 | 1754 | ||
@@ -1784,16 +1789,19 @@ static int ni_ai_insn_read(struct comedi_device *dev, | |||
1784 | /* The 611x has screwy 32-bit FIFOs. */ | 1789 | /* The 611x has screwy 32-bit FIFOs. */ |
1785 | d = 0; | 1790 | d = 0; |
1786 | for (i = 0; i < NI_TIMEOUT; i++) { | 1791 | for (i = 0; i < NI_TIMEOUT; i++) { |
1787 | if (ni_readb(XXX_Status) & 0x80) { | 1792 | if (devpriv->readb(dev, XXX_Status) & 0x80) { |
1788 | d = (ni_readl(ADC_FIFO_Data_611x) >> 16) | 1793 | d = devpriv->readl(dev, |
1789 | & 0xffff; | 1794 | ADC_FIFO_Data_611x); |
1795 | d >>= 16; | ||
1796 | d &= 0xffff; | ||
1790 | break; | 1797 | break; |
1791 | } | 1798 | } |
1792 | if (!(devpriv->stc_readw(dev, | 1799 | if (!(devpriv->stc_readw(dev, |
1793 | AI_Status_1_Register) & | 1800 | AI_Status_1_Register) & |
1794 | AI_FIFO_Empty_St)) { | 1801 | AI_FIFO_Empty_St)) { |
1795 | d = ni_readl(ADC_FIFO_Data_611x) & | 1802 | d = devpriv->readl(dev, |
1796 | 0xffff; | 1803 | ADC_FIFO_Data_611x); |
1804 | d &= 0xffff; | ||
1797 | break; | 1805 | break; |
1798 | } | 1806 | } |
1799 | } | 1807 | } |
@@ -1813,9 +1821,13 @@ static int ni_ai_insn_read(struct comedi_device *dev, | |||
1813 | /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ | 1821 | /* The 6143 has 32-bit FIFOs. You need to strobe a bit to move a single 16bit stranded sample into the FIFO */ |
1814 | dl = 0; | 1822 | dl = 0; |
1815 | for (i = 0; i < NI_TIMEOUT; i++) { | 1823 | for (i = 0; i < NI_TIMEOUT; i++) { |
1816 | if (ni_readl(AIFIFO_Status_6143) & 0x01) { | 1824 | if (devpriv->readl(dev, AIFIFO_Status_6143) & |
1817 | ni_writel(0x01, AIFIFO_Control_6143); /* Get stranded sample into FIFO */ | 1825 | 0x01) { |
1818 | dl = ni_readl(AIFIFO_Data_6143); | 1826 | /* Get stranded sample into FIFO */ |
1827 | devpriv->writel(dev, 0x01, | ||
1828 | AIFIFO_Control_6143); | ||
1829 | dl = devpriv->readl(dev, | ||
1830 | AIFIFO_Data_6143); | ||
1819 | break; | 1831 | break; |
1820 | } | 1832 | } |
1821 | } | 1833 | } |
@@ -1842,10 +1854,11 @@ static int ni_ai_insn_read(struct comedi_device *dev, | |||
1842 | return -ETIME; | 1854 | return -ETIME; |
1843 | } | 1855 | } |
1844 | if (board->reg_type & ni_reg_m_series_mask) { | 1856 | if (board->reg_type & ni_reg_m_series_mask) { |
1845 | data[n] = | 1857 | dl = devpriv->readl(dev, M_Offset_AI_FIFO_Data); |
1846 | ni_readl(M_Offset_AI_FIFO_Data) & mask; | 1858 | dl &= mask; |
1859 | data[n] = dl; | ||
1847 | } else { | 1860 | } else { |
1848 | d = ni_readw(ADC_FIFO_Data_Register); | 1861 | d = devpriv->readw(dev, ADC_FIFO_Data_Register); |
1849 | d += signbits; /* subtle: needs to be short addition */ | 1862 | d += signbits; /* subtle: needs to be short addition */ |
1850 | data[n] = d; | 1863 | data[n] = d; |
1851 | } | 1864 | } |
@@ -2500,7 +2513,8 @@ static int ni_ai_insn_config(struct comedi_device *dev, | |||
2500 | return -EINVAL; | 2513 | return -EINVAL; |
2501 | 2514 | ||
2502 | devpriv->ai_calib_source = calib_source; | 2515 | devpriv->ai_calib_source = calib_source; |
2503 | ni_writew(calib_source, Calibration_Channel_6143); | 2516 | devpriv->writew(dev, calib_source, |
2517 | Calibration_Channel_6143); | ||
2504 | } else { | 2518 | } else { |
2505 | unsigned int calib_source; | 2519 | unsigned int calib_source; |
2506 | unsigned int calib_source_adjust; | 2520 | unsigned int calib_source_adjust; |
@@ -2512,8 +2526,8 @@ static int ni_ai_insn_config(struct comedi_device *dev, | |||
2512 | return -EINVAL; | 2526 | return -EINVAL; |
2513 | devpriv->ai_calib_source = calib_source; | 2527 | devpriv->ai_calib_source = calib_source; |
2514 | if (board->reg_type == ni_reg_611x) { | 2528 | if (board->reg_type == ni_reg_611x) { |
2515 | ni_writeb(calib_source_adjust, | 2529 | devpriv->writeb(dev, calib_source_adjust, |
2516 | Cal_Gain_Select_611x); | 2530 | Cal_Gain_Select_611x); |
2517 | } | 2531 | } |
2518 | } | 2532 | } |
2519 | return 2; | 2533 | return 2; |
@@ -2566,9 +2580,10 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, | |||
2566 | if (timed) { | 2580 | if (timed) { |
2567 | for (i = 0; i < board->n_aochan; ++i) { | 2581 | for (i = 0; i < board->n_aochan; ++i) { |
2568 | devpriv->ao_conf[i] &= ~MSeries_AO_Update_Timed_Bit; | 2582 | devpriv->ao_conf[i] &= ~MSeries_AO_Update_Timed_Bit; |
2569 | ni_writeb(devpriv->ao_conf[i], | 2583 | devpriv->writeb(dev, devpriv->ao_conf[i], |
2570 | M_Offset_AO_Config_Bank(i)); | 2584 | M_Offset_AO_Config_Bank(i)); |
2571 | ni_writeb(0xf, M_Offset_AO_Waveform_Order(i)); | 2585 | devpriv->writeb(dev, 0xf, |
2586 | M_Offset_AO_Waveform_Order(i)); | ||
2572 | } | 2587 | } |
2573 | } | 2588 | } |
2574 | for (i = 0; i < n_chans; i++) { | 2589 | for (i = 0; i < n_chans; i++) { |
@@ -2581,21 +2596,23 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, | |||
2581 | switch (krange->max - krange->min) { | 2596 | switch (krange->max - krange->min) { |
2582 | case 20000000: | 2597 | case 20000000: |
2583 | conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; | 2598 | conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; |
2584 | ni_writeb(0, M_Offset_AO_Reference_Attenuation(chan)); | 2599 | devpriv->writeb(dev, 0, |
2600 | M_Offset_AO_Reference_Attenuation(chan)); | ||
2585 | break; | 2601 | break; |
2586 | case 10000000: | 2602 | case 10000000: |
2587 | conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; | 2603 | conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; |
2588 | ni_writeb(0, M_Offset_AO_Reference_Attenuation(chan)); | 2604 | devpriv->writeb(dev, 0, |
2605 | M_Offset_AO_Reference_Attenuation(chan)); | ||
2589 | break; | 2606 | break; |
2590 | case 4000000: | 2607 | case 4000000: |
2591 | conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; | 2608 | conf |= MSeries_AO_DAC_Reference_10V_Internal_Bits; |
2592 | ni_writeb(MSeries_Attenuate_x5_Bit, | 2609 | devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, |
2593 | M_Offset_AO_Reference_Attenuation(chan)); | 2610 | M_Offset_AO_Reference_Attenuation(chan)); |
2594 | break; | 2611 | break; |
2595 | case 2000000: | 2612 | case 2000000: |
2596 | conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; | 2613 | conf |= MSeries_AO_DAC_Reference_5V_Internal_Bits; |
2597 | ni_writeb(MSeries_Attenuate_x5_Bit, | 2614 | devpriv->writeb(dev, MSeries_Attenuate_x5_Bit, |
2598 | M_Offset_AO_Reference_Attenuation(chan)); | 2615 | M_Offset_AO_Reference_Attenuation(chan)); |
2599 | break; | 2616 | break; |
2600 | default: | 2617 | default: |
2601 | printk("%s: bug! unhandled ao reference voltage\n", | 2618 | printk("%s: bug! unhandled ao reference voltage\n", |
@@ -2616,9 +2633,9 @@ static int ni_m_series_ao_config_chanlist(struct comedi_device *dev, | |||
2616 | } | 2633 | } |
2617 | if (timed) | 2634 | if (timed) |
2618 | conf |= MSeries_AO_Update_Timed_Bit; | 2635 | conf |= MSeries_AO_Update_Timed_Bit; |
2619 | ni_writeb(conf, M_Offset_AO_Config_Bank(chan)); | 2636 | devpriv->writeb(dev, conf, M_Offset_AO_Config_Bank(chan)); |
2620 | devpriv->ao_conf[chan] = conf; | 2637 | devpriv->ao_conf[chan] = conf; |
2621 | ni_writeb(i, M_Offset_AO_Waveform_Order(chan)); | 2638 | devpriv->writeb(dev, i, M_Offset_AO_Waveform_Order(chan)); |
2622 | } | 2639 | } |
2623 | return invert; | 2640 | return invert; |
2624 | } | 2641 | } |
@@ -2664,7 +2681,7 @@ static int ni_old_ao_config_chanlist(struct comedi_device *dev, | |||
2664 | conf |= (CR_AREF(chanspec[i]) == | 2681 | conf |= (CR_AREF(chanspec[i]) == |
2665 | AREF_OTHER) ? AO_Ground_Ref : 0; | 2682 | AREF_OTHER) ? AO_Ground_Ref : 0; |
2666 | 2683 | ||
2667 | ni_writew(conf, AO_Configuration); | 2684 | devpriv->writew(dev, conf, AO_Configuration); |
2668 | devpriv->ao_conf[chan] = conf; | 2685 | devpriv->ao_conf[chan] = conf; |
2669 | } | 2686 | } |
2670 | return invert; | 2687 | return invert; |
@@ -2709,10 +2726,10 @@ static int ni_ao_insn_write(struct comedi_device *dev, | |||
2709 | devpriv->ao[chan] = data[0]; | 2726 | devpriv->ao[chan] = data[0]; |
2710 | 2727 | ||
2711 | if (board->reg_type & ni_reg_m_series_mask) { | 2728 | if (board->reg_type & ni_reg_m_series_mask) { |
2712 | ni_writew(data[0], M_Offset_DAC_Direct_Data(chan)); | 2729 | devpriv->writew(dev, data[0], M_Offset_DAC_Direct_Data(chan)); |
2713 | } else | 2730 | } else |
2714 | ni_writew(data[0] ^ invert, | 2731 | devpriv->writew(dev, data[0] ^ invert, |
2715 | (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); | 2732 | (chan) ? DAC1_Direct_Data : DAC0_Direct_Data); |
2716 | 2733 | ||
2717 | return 1; | 2734 | return 1; |
2718 | } | 2735 | } |
@@ -3225,14 +3242,14 @@ static int ni_m_series_dio_insn_config(struct comedi_device *dev, | |||
3225 | struct comedi_insn *insn, | 3242 | struct comedi_insn *insn, |
3226 | unsigned int *data) | 3243 | unsigned int *data) |
3227 | { | 3244 | { |
3228 | struct ni_private *devpriv __maybe_unused = dev->private; | 3245 | struct ni_private *devpriv = dev->private; |
3229 | int ret; | 3246 | int ret; |
3230 | 3247 | ||
3231 | ret = comedi_dio_insn_config(dev, s, insn, data, 0); | 3248 | ret = comedi_dio_insn_config(dev, s, insn, data, 0); |
3232 | if (ret) | 3249 | if (ret) |
3233 | return ret; | 3250 | return ret; |
3234 | 3251 | ||
3235 | ni_writel(s->io_bits, M_Offset_DIO_Direction); | 3252 | devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); |
3236 | 3253 | ||
3237 | return insn->n; | 3254 | return insn->n; |
3238 | } | 3255 | } |
@@ -3242,12 +3259,12 @@ static int ni_m_series_dio_insn_bits(struct comedi_device *dev, | |||
3242 | struct comedi_insn *insn, | 3259 | struct comedi_insn *insn, |
3243 | unsigned int *data) | 3260 | unsigned int *data) |
3244 | { | 3261 | { |
3245 | struct ni_private *devpriv __maybe_unused = dev->private; | 3262 | struct ni_private *devpriv = dev->private; |
3246 | 3263 | ||
3247 | if (comedi_dio_update_state(s, data)) | 3264 | if (comedi_dio_update_state(s, data)) |
3248 | ni_writel(s->state, M_Offset_Static_Digital_Output); | 3265 | devpriv->writel(dev, s->state, M_Offset_Static_Digital_Output); |
3249 | 3266 | ||
3250 | data[1] = ni_readl(M_Offset_Static_Digital_Input); | 3267 | data[1] = devpriv->readl(dev, M_Offset_Static_Digital_Input); |
3251 | 3268 | ||
3252 | return insn->n; | 3269 | return insn->n; |
3253 | } | 3270 | } |
@@ -3326,14 +3343,14 @@ static int ni_cdo_inttrig(struct comedi_device *dev, | |||
3326 | struct comedi_subdevice *s, | 3343 | struct comedi_subdevice *s, |
3327 | unsigned int trig_num) | 3344 | unsigned int trig_num) |
3328 | { | 3345 | { |
3329 | #ifdef PCIDMA | ||
3330 | struct ni_private *devpriv = dev->private; | 3346 | struct ni_private *devpriv = dev->private; |
3331 | unsigned long flags; | ||
3332 | #endif | ||
3333 | struct comedi_cmd *cmd = &s->async->cmd; | 3347 | struct comedi_cmd *cmd = &s->async->cmd; |
3348 | const unsigned timeout = 1000; | ||
3334 | int retval = 0; | 3349 | int retval = 0; |
3335 | unsigned i; | 3350 | unsigned i; |
3336 | const unsigned timeout = 1000; | 3351 | #ifdef PCIDMA |
3352 | unsigned long flags; | ||
3353 | #endif | ||
3337 | 3354 | ||
3338 | if (trig_num != cmd->start_arg) | 3355 | if (trig_num != cmd->start_arg) |
3339 | return -EINVAL; | 3356 | return -EINVAL; |
@@ -3358,11 +3375,12 @@ static int ni_cdo_inttrig(struct comedi_device *dev, | |||
3358 | #endif | 3375 | #endif |
3359 | /* | 3376 | /* |
3360 | * XXX not sure what interrupt C group does | 3377 | * XXX not sure what interrupt C group does |
3361 | * ni_writeb(Interrupt_Group_C_Enable_Bit, | 3378 | * devpriv->writeb(dev, Interrupt_Group_C_Enable_Bit, |
3362 | * M_Offset_Interrupt_C_Enable); wait for dma to fill output fifo | 3379 | * M_Offset_Interrupt_C_Enable); wait for dma to fill output fifo |
3363 | */ | 3380 | */ |
3364 | for (i = 0; i < timeout; ++i) { | 3381 | for (i = 0; i < timeout; ++i) { |
3365 | if (ni_readl(M_Offset_CDIO_Status) & CDO_FIFO_Full_Bit) | 3382 | if (devpriv->readl(dev, M_Offset_CDIO_Status) & |
3383 | CDO_FIFO_Full_Bit) | ||
3366 | break; | 3384 | break; |
3367 | udelay(10); | 3385 | udelay(10); |
3368 | } | 3386 | } |
@@ -3371,20 +3389,20 @@ static int ni_cdo_inttrig(struct comedi_device *dev, | |||
3371 | s->cancel(dev, s); | 3389 | s->cancel(dev, s); |
3372 | return -EIO; | 3390 | return -EIO; |
3373 | } | 3391 | } |
3374 | ni_writel(CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | | 3392 | devpriv->writel(dev, CDO_Arm_Bit | CDO_Error_Interrupt_Enable_Set_Bit | |
3375 | CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, | 3393 | CDO_Empty_FIFO_Interrupt_Enable_Set_Bit, |
3376 | M_Offset_CDIO_Command); | 3394 | M_Offset_CDIO_Command); |
3377 | return retval; | 3395 | return retval; |
3378 | } | 3396 | } |
3379 | 3397 | ||
3380 | static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | 3398 | static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) |
3381 | { | 3399 | { |
3382 | struct ni_private *devpriv __maybe_unused = dev->private; | 3400 | struct ni_private *devpriv = dev->private; |
3383 | const struct comedi_cmd *cmd = &s->async->cmd; | 3401 | const struct comedi_cmd *cmd = &s->async->cmd; |
3384 | unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; | 3402 | unsigned cdo_mode_bits = CDO_FIFO_Mode_Bit | CDO_Halt_On_Error_Bit; |
3385 | int retval; | 3403 | int retval; |
3386 | 3404 | ||
3387 | ni_writel(CDO_Reset_Bit, M_Offset_CDIO_Command); | 3405 | devpriv->writel(dev, CDO_Reset_Bit, M_Offset_CDIO_Command); |
3388 | switch (cmd->scan_begin_src) { | 3406 | switch (cmd->scan_begin_src) { |
3389 | case TRIG_EXT: | 3407 | case TRIG_EXT: |
3390 | cdo_mode_bits |= | 3408 | cdo_mode_bits |= |
@@ -3397,11 +3415,11 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | |||
3397 | } | 3415 | } |
3398 | if (cmd->scan_begin_arg & CR_INVERT) | 3416 | if (cmd->scan_begin_arg & CR_INVERT) |
3399 | cdo_mode_bits |= CDO_Polarity_Bit; | 3417 | cdo_mode_bits |= CDO_Polarity_Bit; |
3400 | ni_writel(cdo_mode_bits, M_Offset_CDO_Mode); | 3418 | devpriv->writel(dev, cdo_mode_bits, M_Offset_CDO_Mode); |
3401 | if (s->io_bits) { | 3419 | if (s->io_bits) { |
3402 | ni_writel(s->state, M_Offset_CDO_FIFO_Data); | 3420 | devpriv->writel(dev, s->state, M_Offset_CDO_FIFO_Data); |
3403 | ni_writel(CDO_SW_Update_Bit, M_Offset_CDIO_Command); | 3421 | devpriv->writel(dev, CDO_SW_Update_Bit, M_Offset_CDIO_Command); |
3404 | ni_writel(s->io_bits, M_Offset_CDO_Mask_Enable); | 3422 | devpriv->writel(dev, s->io_bits, M_Offset_CDO_Mask_Enable); |
3405 | } else { | 3423 | } else { |
3406 | comedi_error(dev, | 3424 | comedi_error(dev, |
3407 | "attempted to run digital output command with no lines configured as outputs"); | 3425 | "attempted to run digital output command with no lines configured as outputs"); |
@@ -3418,17 +3436,18 @@ static int ni_cdio_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | |||
3418 | 3436 | ||
3419 | static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) | 3437 | static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) |
3420 | { | 3438 | { |
3421 | struct ni_private *devpriv __maybe_unused = dev->private; | 3439 | struct ni_private *devpriv = dev->private; |
3422 | 3440 | ||
3423 | ni_writel(CDO_Disarm_Bit | CDO_Error_Interrupt_Enable_Clear_Bit | | 3441 | devpriv->writel(dev, CDO_Disarm_Bit | |
3424 | CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | | 3442 | CDO_Error_Interrupt_Enable_Clear_Bit | |
3425 | CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, | 3443 | CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit | |
3426 | M_Offset_CDIO_Command); | 3444 | CDO_FIFO_Request_Interrupt_Enable_Clear_Bit, |
3445 | M_Offset_CDIO_Command); | ||
3427 | /* | 3446 | /* |
3428 | * XXX not sure what interrupt C group does ni_writeb(0, | 3447 | * XXX not sure what interrupt C group does devpriv->writeb(dev, 0, |
3429 | * M_Offset_Interrupt_C_Enable); | 3448 | * M_Offset_Interrupt_C_Enable); |
3430 | */ | 3449 | */ |
3431 | ni_writel(0, M_Offset_CDO_Mask_Enable); | 3450 | devpriv->writel(dev, 0, M_Offset_CDO_Mask_Enable); |
3432 | ni_release_cdo_mite_channel(dev); | 3451 | ni_release_cdo_mite_channel(dev); |
3433 | return 0; | 3452 | return 0; |
3434 | } | 3453 | } |
@@ -3436,7 +3455,7 @@ static int ni_cdio_cancel(struct comedi_device *dev, struct comedi_subdevice *s) | |||
3436 | static void handle_cdio_interrupt(struct comedi_device *dev) | 3455 | static void handle_cdio_interrupt(struct comedi_device *dev) |
3437 | { | 3456 | { |
3438 | const struct ni_board_struct *board = comedi_board(dev); | 3457 | const struct ni_board_struct *board = comedi_board(dev); |
3439 | struct ni_private *devpriv __maybe_unused = dev->private; | 3458 | struct ni_private *devpriv = dev->private; |
3440 | unsigned cdio_status; | 3459 | unsigned cdio_status; |
3441 | struct comedi_subdevice *s = &dev->subdevices[NI_DIO_SUBDEV]; | 3460 | struct comedi_subdevice *s = &dev->subdevices[NI_DIO_SUBDEV]; |
3442 | #ifdef PCIDMA | 3461 | #ifdef PCIDMA |
@@ -3460,16 +3479,18 @@ static void handle_cdio_interrupt(struct comedi_device *dev) | |||
3460 | spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); | 3479 | spin_unlock_irqrestore(&devpriv->mite_channel_lock, flags); |
3461 | #endif | 3480 | #endif |
3462 | 3481 | ||
3463 | cdio_status = ni_readl(M_Offset_CDIO_Status); | 3482 | cdio_status = devpriv->readl(dev, M_Offset_CDIO_Status); |
3464 | if (cdio_status & (CDO_Overrun_Bit | CDO_Underflow_Bit)) { | 3483 | if (cdio_status & (CDO_Overrun_Bit | CDO_Underflow_Bit)) { |
3465 | /* printk("cdio error: statux=0x%x\n", cdio_status); */ | 3484 | /* printk("cdio error: statux=0x%x\n", cdio_status); */ |
3466 | ni_writel(CDO_Error_Interrupt_Confirm_Bit, M_Offset_CDIO_Command); /* XXX just guessing this is needed and does something useful */ | 3485 | /* XXX just guessing this is needed and does something useful */ |
3486 | devpriv->writel(dev, CDO_Error_Interrupt_Confirm_Bit, | ||
3487 | M_Offset_CDIO_Command); | ||
3467 | s->async->events |= COMEDI_CB_OVERFLOW; | 3488 | s->async->events |= COMEDI_CB_OVERFLOW; |
3468 | } | 3489 | } |
3469 | if (cdio_status & CDO_FIFO_Empty_Bit) { | 3490 | if (cdio_status & CDO_FIFO_Empty_Bit) { |
3470 | /* printk("cdio fifo empty\n"); */ | 3491 | /* printk("cdio fifo empty\n"); */ |
3471 | ni_writel(CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, | 3492 | devpriv->writel(dev, CDO_Empty_FIFO_Interrupt_Enable_Clear_Bit, |
3472 | M_Offset_CDIO_Command); | 3493 | M_Offset_CDIO_Command); |
3473 | /* s->async->events |= COMEDI_CB_EOA; */ | 3494 | /* s->async->events |= COMEDI_CB_EOA; */ |
3474 | } | 3495 | } |
3475 | cfc_handle_events(dev, s); | 3496 | cfc_handle_events(dev, s); |
@@ -3786,28 +3807,28 @@ static void ni_gpct_write_register(struct ni_gpct *counter, unsigned bits, | |||
3786 | switch (reg) { | 3807 | switch (reg) { |
3787 | /* m-series-only registers */ | 3808 | /* m-series-only registers */ |
3788 | case NITIO_G0_CNT_MODE: | 3809 | case NITIO_G0_CNT_MODE: |
3789 | ni_writew(bits, M_Offset_G0_Counting_Mode); | 3810 | devpriv->writew(dev, bits, M_Offset_G0_Counting_Mode); |
3790 | break; | 3811 | break; |
3791 | case NITIO_G1_CNT_MODE: | 3812 | case NITIO_G1_CNT_MODE: |
3792 | ni_writew(bits, M_Offset_G1_Counting_Mode); | 3813 | devpriv->writew(dev, bits, M_Offset_G1_Counting_Mode); |
3793 | break; | 3814 | break; |
3794 | case NITIO_G0_GATE2: | 3815 | case NITIO_G0_GATE2: |
3795 | ni_writew(bits, M_Offset_G0_Second_Gate); | 3816 | devpriv->writew(dev, bits, M_Offset_G0_Second_Gate); |
3796 | break; | 3817 | break; |
3797 | case NITIO_G1_GATE2: | 3818 | case NITIO_G1_GATE2: |
3798 | ni_writew(bits, M_Offset_G1_Second_Gate); | 3819 | devpriv->writew(dev, bits, M_Offset_G1_Second_Gate); |
3799 | break; | 3820 | break; |
3800 | case NITIO_G0_DMA_CFG: | 3821 | case NITIO_G0_DMA_CFG: |
3801 | ni_writew(bits, M_Offset_G0_DMA_Config); | 3822 | devpriv->writew(dev, bits, M_Offset_G0_DMA_Config); |
3802 | break; | 3823 | break; |
3803 | case NITIO_G1_DMA_CFG: | 3824 | case NITIO_G1_DMA_CFG: |
3804 | ni_writew(bits, M_Offset_G1_DMA_Config); | 3825 | devpriv->writew(dev, bits, M_Offset_G1_DMA_Config); |
3805 | break; | 3826 | break; |
3806 | case NITIO_G0_ABZ: | 3827 | case NITIO_G0_ABZ: |
3807 | ni_writew(bits, M_Offset_G0_MSeries_ABZ); | 3828 | devpriv->writew(dev, bits, M_Offset_G0_MSeries_ABZ); |
3808 | break; | 3829 | break; |
3809 | case NITIO_G1_ABZ: | 3830 | case NITIO_G1_ABZ: |
3810 | ni_writew(bits, M_Offset_G1_MSeries_ABZ); | 3831 | devpriv->writew(dev, bits, M_Offset_G1_MSeries_ABZ); |
3811 | break; | 3832 | break; |
3812 | 3833 | ||
3813 | /* 32 bit registers */ | 3834 | /* 32 bit registers */ |
@@ -3849,9 +3870,9 @@ static unsigned ni_gpct_read_register(struct ni_gpct *counter, | |||
3849 | switch (reg) { | 3870 | switch (reg) { |
3850 | /* m-series only registers */ | 3871 | /* m-series only registers */ |
3851 | case NITIO_G0_DMA_STATUS: | 3872 | case NITIO_G0_DMA_STATUS: |
3852 | return ni_readw(M_Offset_G0_DMA_Status); | 3873 | return devpriv->readw(dev, M_Offset_G0_DMA_Status); |
3853 | case NITIO_G1_DMA_STATUS: | 3874 | case NITIO_G1_DMA_STATUS: |
3854 | return ni_readw(M_Offset_G1_DMA_Status); | 3875 | return devpriv->readw(dev, M_Offset_G1_DMA_Status); |
3855 | 3876 | ||
3856 | /* 32 bit registers */ | 3877 | /* 32 bit registers */ |
3857 | case NITIO_G0_HW_SAVE: | 3878 | case NITIO_G0_HW_SAVE: |
@@ -3948,13 +3969,13 @@ static int ni_freq_out_insn_config(struct comedi_device *dev, | |||
3948 | static int ni_8255_callback(int dir, int port, int data, unsigned long arg) | 3969 | static int ni_8255_callback(int dir, int port, int data, unsigned long arg) |
3949 | { | 3970 | { |
3950 | struct comedi_device *dev = (struct comedi_device *)arg; | 3971 | struct comedi_device *dev = (struct comedi_device *)arg; |
3951 | struct ni_private *devpriv __maybe_unused = dev->private; | 3972 | struct ni_private *devpriv = dev->private; |
3952 | 3973 | ||
3953 | if (dir) { | 3974 | if (dir) { |
3954 | ni_writeb(data, Port_A + 2 * port); | 3975 | devpriv->writeb(dev, data, Port_A + 2 * port); |
3955 | return 0; | 3976 | return 0; |
3956 | } else { | 3977 | } else { |
3957 | return ni_readb(Port_A + 2 * port); | 3978 | return devpriv->readb(dev, Port_A + 2 * port); |
3958 | } | 3979 | } |
3959 | } | 3980 | } |
3960 | 3981 | ||
@@ -4019,9 +4040,9 @@ static int ni_m_series_pwm_config(struct comedi_device *dev, | |||
4019 | data[4] = down_count * devpriv->clock_ns; | 4040 | data[4] = down_count * devpriv->clock_ns; |
4020 | return -EAGAIN; | 4041 | return -EAGAIN; |
4021 | } | 4042 | } |
4022 | ni_writel(MSeries_Cal_PWM_High_Time_Bits(up_count) | | 4043 | devpriv->writel(dev, MSeries_Cal_PWM_High_Time_Bits(up_count) | |
4023 | MSeries_Cal_PWM_Low_Time_Bits(down_count), | 4044 | MSeries_Cal_PWM_Low_Time_Bits(down_count), |
4024 | M_Offset_Cal_PWM); | 4045 | M_Offset_Cal_PWM); |
4025 | devpriv->pwm_up_count = up_count; | 4046 | devpriv->pwm_up_count = up_count; |
4026 | devpriv->pwm_down_count = down_count; | 4047 | devpriv->pwm_down_count = down_count; |
4027 | return 5; | 4048 | return 5; |
@@ -4088,9 +4109,9 @@ static int ni_6143_pwm_config(struct comedi_device *dev, | |||
4088 | data[4] = down_count * devpriv->clock_ns; | 4109 | data[4] = down_count * devpriv->clock_ns; |
4089 | return -EAGAIN; | 4110 | return -EAGAIN; |
4090 | } | 4111 | } |
4091 | ni_writel(up_count, Calibration_HighTime_6143); | 4112 | devpriv->writel(dev, up_count, Calibration_HighTime_6143); |
4092 | devpriv->pwm_up_count = up_count; | 4113 | devpriv->pwm_up_count = up_count; |
4093 | ni_writel(down_count, Calibration_LowTime_6143); | 4114 | devpriv->writel(dev, down_count, Calibration_LowTime_6143); |
4094 | devpriv->pwm_down_count = down_count; | 4115 | devpriv->pwm_down_count = down_count; |
4095 | return 5; | 4116 | return 5; |
4096 | break; | 4117 | break; |
@@ -4194,14 +4215,16 @@ static void ni_write_caldac(struct comedi_device *dev, int addr, int val) | |||
4194 | } | 4215 | } |
4195 | 4216 | ||
4196 | for (bit = 1 << (bits - 1); bit; bit >>= 1) { | 4217 | for (bit = 1 << (bits - 1); bit; bit >>= 1) { |
4197 | ni_writeb(((bit & bitstring) ? 0x02 : 0), Serial_Command); | 4218 | devpriv->writeb(dev, ((bit & bitstring) ? 0x02 : 0), |
4219 | Serial_Command); | ||
4198 | udelay(1); | 4220 | udelay(1); |
4199 | ni_writeb(1 | ((bit & bitstring) ? 0x02 : 0), Serial_Command); | 4221 | devpriv->writeb(dev, 1 | ((bit & bitstring) ? 0x02 : 0), |
4222 | Serial_Command); | ||
4200 | udelay(1); | 4223 | udelay(1); |
4201 | } | 4224 | } |
4202 | ni_writeb(loadbit, Serial_Command); | 4225 | devpriv->writeb(dev, loadbit, Serial_Command); |
4203 | udelay(1); | 4226 | udelay(1); |
4204 | ni_writeb(0, Serial_Command); | 4227 | devpriv->writeb(dev, 0, Serial_Command); |
4205 | } | 4228 | } |
4206 | 4229 | ||
4207 | static int ni_calib_insn_write(struct comedi_device *dev, | 4230 | static int ni_calib_insn_write(struct comedi_device *dev, |
@@ -4282,25 +4305,26 @@ static void caldac_setup(struct comedi_device *dev, struct comedi_subdevice *s) | |||
4282 | 4305 | ||
4283 | static int ni_read_eeprom(struct comedi_device *dev, int addr) | 4306 | static int ni_read_eeprom(struct comedi_device *dev, int addr) |
4284 | { | 4307 | { |
4285 | struct ni_private *devpriv __maybe_unused = dev->private; | 4308 | struct ni_private *devpriv = dev->private; |
4286 | int bit; | 4309 | int bit; |
4287 | int bitstring; | 4310 | int bitstring; |
4288 | 4311 | ||
4289 | bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); | 4312 | bitstring = 0x0300 | ((addr & 0x100) << 3) | (addr & 0xff); |
4290 | ni_writeb(0x04, Serial_Command); | 4313 | devpriv->writeb(dev, 0x04, Serial_Command); |
4291 | for (bit = 0x8000; bit; bit >>= 1) { | 4314 | for (bit = 0x8000; bit; bit >>= 1) { |
4292 | ni_writeb(0x04 | ((bit & bitstring) ? 0x02 : 0), | 4315 | devpriv->writeb(dev, 0x04 | ((bit & bitstring) ? 0x02 : 0), |
4293 | Serial_Command); | 4316 | Serial_Command); |
4294 | ni_writeb(0x05 | ((bit & bitstring) ? 0x02 : 0), | 4317 | devpriv->writeb(dev, 0x05 | ((bit & bitstring) ? 0x02 : 0), |
4295 | Serial_Command); | 4318 | Serial_Command); |
4296 | } | 4319 | } |
4297 | bitstring = 0; | 4320 | bitstring = 0; |
4298 | for (bit = 0x80; bit; bit >>= 1) { | 4321 | for (bit = 0x80; bit; bit >>= 1) { |
4299 | ni_writeb(0x04, Serial_Command); | 4322 | devpriv->writeb(dev, 0x04, Serial_Command); |
4300 | ni_writeb(0x05, Serial_Command); | 4323 | devpriv->writeb(dev, 0x05, Serial_Command); |
4301 | bitstring |= ((ni_readb(XXX_Status) & PROMOUT) ? bit : 0); | 4324 | bitstring |= ((devpriv->readb(dev, XXX_Status) & PROMOUT) |
4325 | ? bit : 0); | ||
4302 | } | 4326 | } |
4303 | ni_writeb(0x00, Serial_Command); | 4327 | devpriv->writeb(dev, 0x00, Serial_Command); |
4304 | 4328 | ||
4305 | return bitstring; | 4329 | return bitstring; |
4306 | } | 4330 | } |
@@ -4403,8 +4427,8 @@ static int ni_m_series_set_pfi_routing(struct comedi_device *dev, | |||
4403 | ~MSeries_PFI_Output_Select_Mask(chan); | 4427 | ~MSeries_PFI_Output_Select_Mask(chan); |
4404 | devpriv->pfi_output_select_reg[array_offset] |= | 4428 | devpriv->pfi_output_select_reg[array_offset] |= |
4405 | MSeries_PFI_Output_Select_Bits(chan, source); | 4429 | MSeries_PFI_Output_Select_Bits(chan, source); |
4406 | ni_writew(devpriv->pfi_output_select_reg[array_offset], | 4430 | devpriv->writew(dev, devpriv->pfi_output_select_reg[array_offset], |
4407 | M_Offset_PFI_Output_Select(pfi_reg_index)); | 4431 | M_Offset_PFI_Output_Select(pfi_reg_index)); |
4408 | return 2; | 4432 | return 2; |
4409 | } | 4433 | } |
4410 | 4434 | ||
@@ -4434,15 +4458,15 @@ static int ni_config_filter(struct comedi_device *dev, | |||
4434 | enum ni_pfi_filter_select filter) | 4458 | enum ni_pfi_filter_select filter) |
4435 | { | 4459 | { |
4436 | const struct ni_board_struct *board = comedi_board(dev); | 4460 | const struct ni_board_struct *board = comedi_board(dev); |
4437 | struct ni_private *devpriv __maybe_unused = dev->private; | 4461 | struct ni_private *devpriv = dev->private; |
4438 | unsigned bits; | 4462 | unsigned bits; |
4439 | 4463 | ||
4440 | if ((board->reg_type & ni_reg_m_series_mask) == 0) | 4464 | if ((board->reg_type & ni_reg_m_series_mask) == 0) |
4441 | return -ENOTSUPP; | 4465 | return -ENOTSUPP; |
4442 | bits = ni_readl(M_Offset_PFI_Filter); | 4466 | bits = devpriv->readl(dev, M_Offset_PFI_Filter); |
4443 | bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); | 4467 | bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel); |
4444 | bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); | 4468 | bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter); |
4445 | ni_writel(bits, M_Offset_PFI_Filter); | 4469 | devpriv->writel(dev, bits, M_Offset_PFI_Filter); |
4446 | return 0; | 4470 | return 0; |
4447 | } | 4471 | } |
4448 | 4472 | ||
@@ -4493,15 +4517,15 @@ static int ni_pfi_insn_bits(struct comedi_device *dev, | |||
4493 | unsigned int *data) | 4517 | unsigned int *data) |
4494 | { | 4518 | { |
4495 | const struct ni_board_struct *board = comedi_board(dev); | 4519 | const struct ni_board_struct *board = comedi_board(dev); |
4496 | struct ni_private *devpriv __maybe_unused = dev->private; | 4520 | struct ni_private *devpriv = dev->private; |
4497 | 4521 | ||
4498 | if (!(board->reg_type & ni_reg_m_series_mask)) | 4522 | if (!(board->reg_type & ni_reg_m_series_mask)) |
4499 | return -ENOTSUPP; | 4523 | return -ENOTSUPP; |
4500 | 4524 | ||
4501 | if (comedi_dio_update_state(s, data)) | 4525 | if (comedi_dio_update_state(s, data)) |
4502 | ni_writew(s->state, M_Offset_PFI_DO); | 4526 | devpriv->writew(dev, s->state, M_Offset_PFI_DO); |
4503 | 4527 | ||
4504 | data[1] = ni_readw(M_Offset_PFI_DI); | 4528 | data[1] = devpriv->readw(dev, M_Offset_PFI_DI); |
4505 | 4529 | ||
4506 | return insn->n; | 4530 | return insn->n; |
4507 | } | 4531 | } |
@@ -4766,7 +4790,8 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, | |||
4766 | } | 4790 | } |
4767 | break; | 4791 | break; |
4768 | } | 4792 | } |
4769 | ni_writew(devpriv->clock_and_fout2, M_Offset_Clock_and_Fout2); | 4793 | devpriv->writew(dev, devpriv->clock_and_fout2, |
4794 | M_Offset_Clock_and_Fout2); | ||
4770 | pll_control_bits |= | 4795 | pll_control_bits |= |
4771 | MSeries_PLL_Divisor_Bits(freq_divider) | | 4796 | MSeries_PLL_Divisor_Bits(freq_divider) | |
4772 | MSeries_PLL_Multiplier_Bits(freq_multiplier); | 4797 | MSeries_PLL_Multiplier_Bits(freq_multiplier); |
@@ -4774,11 +4799,12 @@ static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, | |||
4774 | /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", | 4799 | /* printk("using divider=%i, multiplier=%i for PLL. pll_control_bits = 0x%x\n", |
4775 | * freq_divider, freq_multiplier, pll_control_bits); */ | 4800 | * freq_divider, freq_multiplier, pll_control_bits); */ |
4776 | /* printk("clock_ns=%d\n", devpriv->clock_ns); */ | 4801 | /* printk("clock_ns=%d\n", devpriv->clock_ns); */ |
4777 | ni_writew(pll_control_bits, M_Offset_PLL_Control); | 4802 | devpriv->writew(dev, pll_control_bits, M_Offset_PLL_Control); |
4778 | devpriv->clock_source = source; | 4803 | devpriv->clock_source = source; |
4779 | /* it seems to typically take a few hundred microseconds for PLL to lock */ | 4804 | /* it seems to typically take a few hundred microseconds for PLL to lock */ |
4780 | for (i = 0; i < timeout; ++i) { | 4805 | for (i = 0; i < timeout; ++i) { |
4781 | if (ni_readw(M_Offset_PLL_Status) & MSeries_PLL_Locked_Bit) | 4806 | if (devpriv->readw(dev, M_Offset_PLL_Status) & |
4807 | MSeries_PLL_Locked_Bit) | ||
4782 | break; | 4808 | break; |
4783 | udelay(1); | 4809 | udelay(1); |
4784 | } | 4810 | } |
@@ -4806,9 +4832,9 @@ static int ni_set_master_clock(struct comedi_device *dev, | |||
4806 | devpriv->clock_and_fout2 &= | 4832 | devpriv->clock_and_fout2 &= |
4807 | ~(MSeries_Timebase1_Select_Bit | | 4833 | ~(MSeries_Timebase1_Select_Bit | |
4808 | MSeries_Timebase3_Select_Bit); | 4834 | MSeries_Timebase3_Select_Bit); |
4809 | ni_writew(devpriv->clock_and_fout2, | 4835 | devpriv->writew(dev, devpriv->clock_and_fout2, |
4810 | M_Offset_Clock_and_Fout2); | 4836 | M_Offset_Clock_and_Fout2); |
4811 | ni_writew(0, M_Offset_PLL_Control); | 4837 | devpriv->writew(dev, 0, M_Offset_PLL_Control); |
4812 | } | 4838 | } |
4813 | devpriv->clock_source = source; | 4839 | devpriv->clock_source = source; |
4814 | } else { | 4840 | } else { |
@@ -5355,13 +5381,15 @@ static int ni_E_init(struct comedi_device *dev) | |||
5355 | s->async_dma_dir = DMA_BIDIRECTIONAL; | 5381 | s->async_dma_dir = DMA_BIDIRECTIONAL; |
5356 | s->len_chanlist = s->n_chan; | 5382 | s->len_chanlist = s->n_chan; |
5357 | 5383 | ||
5358 | ni_writel(CDO_Reset_Bit | CDI_Reset_Bit, M_Offset_CDIO_Command); | 5384 | devpriv->writel(dev, CDO_Reset_Bit | CDI_Reset_Bit, |
5359 | ni_writel(s->io_bits, M_Offset_DIO_Direction); | 5385 | M_Offset_CDIO_Command); |
5386 | devpriv->writel(dev, s->io_bits, M_Offset_DIO_Direction); | ||
5360 | } else { | 5387 | } else { |
5361 | s->insn_bits = &ni_dio_insn_bits; | 5388 | s->insn_bits = &ni_dio_insn_bits; |
5362 | s->insn_config = &ni_dio_insn_config; | 5389 | s->insn_config = &ni_dio_insn_config; |
5363 | devpriv->dio_control = DIO_Pins_Dir(s->io_bits); | 5390 | devpriv->dio_control = DIO_Pins_Dir(s->io_bits); |
5364 | ni_writew(devpriv->dio_control, DIO_Control_Register); | 5391 | devpriv->writew(dev, devpriv->dio_control, |
5392 | DIO_Control_Register); | ||
5365 | } | 5393 | } |
5366 | 5394 | ||
5367 | /* 8255 device */ | 5395 | /* 8255 device */ |
@@ -5388,7 +5416,7 @@ static int ni_E_init(struct comedi_device *dev) | |||
5388 | s->insn_config = &ni_m_series_pwm_config; | 5416 | s->insn_config = &ni_m_series_pwm_config; |
5389 | s->n_chan = 1; | 5417 | s->n_chan = 1; |
5390 | s->maxdata = 0; | 5418 | s->maxdata = 0; |
5391 | ni_writel(0x0, M_Offset_Cal_PWM); | 5419 | devpriv->writel(dev, 0x0, M_Offset_Cal_PWM); |
5392 | } else if (board->reg_type == ni_reg_6143) { | 5420 | } else if (board->reg_type == ni_reg_6143) { |
5393 | /* internal PWM analog output used for AI nonlinearity calibration */ | 5421 | /* internal PWM analog output used for AI nonlinearity calibration */ |
5394 | s->subdev_flags = SDF_INTERNAL; | 5422 | s->subdev_flags = SDF_INTERNAL; |
@@ -5422,10 +5450,10 @@ static int ni_E_init(struct comedi_device *dev) | |||
5422 | if (board->reg_type & ni_reg_m_series_mask) { | 5450 | if (board->reg_type & ni_reg_m_series_mask) { |
5423 | unsigned i; | 5451 | unsigned i; |
5424 | s->n_chan = 16; | 5452 | s->n_chan = 16; |
5425 | ni_writew(s->state, M_Offset_PFI_DO); | 5453 | devpriv->writew(dev, s->state, M_Offset_PFI_DO); |
5426 | for (i = 0; i < NUM_PFI_OUTPUT_SELECT_REGS; ++i) { | 5454 | for (i = 0; i < NUM_PFI_OUTPUT_SELECT_REGS; ++i) { |
5427 | ni_writew(devpriv->pfi_output_select_reg[i], | 5455 | devpriv->writew(dev, devpriv->pfi_output_select_reg[i], |
5428 | M_Offset_PFI_Output_Select(i + 1)); | 5456 | M_Offset_PFI_Output_Select(i + 1)); |
5429 | } | 5457 | } |
5430 | } else { | 5458 | } else { |
5431 | s->n_chan = 10; | 5459 | s->n_chan = 10; |
@@ -5559,19 +5587,20 @@ static int ni_E_init(struct comedi_device *dev) | |||
5559 | } | 5587 | } |
5560 | 5588 | ||
5561 | /* DMA setup */ | 5589 | /* DMA setup */ |
5562 | ni_writeb(devpriv->ai_ao_select_reg, AI_AO_Select); | 5590 | devpriv->writeb(dev, devpriv->ai_ao_select_reg, AI_AO_Select); |
5563 | ni_writeb(devpriv->g0_g1_select_reg, G0_G1_Select); | 5591 | devpriv->writeb(dev, devpriv->g0_g1_select_reg, G0_G1_Select); |
5564 | 5592 | ||
5565 | if (board->reg_type & ni_reg_6xxx_mask) { | 5593 | if (board->reg_type & ni_reg_6xxx_mask) { |
5566 | ni_writeb(0, Magic_611x); | 5594 | devpriv->writeb(dev, 0, Magic_611x); |
5567 | } else if (board->reg_type & ni_reg_m_series_mask) { | 5595 | } else if (board->reg_type & ni_reg_m_series_mask) { |
5568 | int channel; | 5596 | int channel; |
5569 | for (channel = 0; channel < board->n_aochan; ++channel) { | 5597 | for (channel = 0; channel < board->n_aochan; ++channel) { |
5570 | ni_writeb(0xf, M_Offset_AO_Waveform_Order(channel)); | 5598 | devpriv->writeb(dev, 0xf, |
5571 | ni_writeb(0x0, | 5599 | M_Offset_AO_Waveform_Order(channel)); |
5572 | M_Offset_AO_Reference_Attenuation(channel)); | 5600 | devpriv->writeb(dev, 0x0, |
5601 | M_Offset_AO_Reference_Attenuation(channel)); | ||
5573 | } | 5602 | } |
5574 | ni_writeb(0x0, M_Offset_AO_Calibration); | 5603 | devpriv->writeb(dev, 0x0, M_Offset_AO_Calibration); |
5575 | } | 5604 | } |
5576 | 5605 | ||
5577 | return 0; | 5606 | return 0; |
diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index e0945f72a869..d61baffb4bf0 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c | |||
@@ -143,12 +143,35 @@ static const struct ni_board_struct ni_boards[] = { | |||
143 | 143 | ||
144 | /* How we access registers */ | 144 | /* How we access registers */ |
145 | 145 | ||
146 | #define ni_writel(a, b) (outl((a), (b)+dev->iobase)) | 146 | static uint8_t mio_cs_inb(struct comedi_device *dev, int reg) |
147 | #define ni_readl(a) (inl((a)+dev->iobase)) | 147 | { |
148 | #define ni_writew(a, b) (outw((a), (b)+dev->iobase)) | 148 | return inb(dev->iobase + reg); |
149 | #define ni_readw(a) (inw((a)+dev->iobase)) | 149 | } |
150 | #define ni_writeb(a, b) (outb((a), (b)+dev->iobase)) | 150 | |
151 | #define ni_readb(a) (inb((a)+dev->iobase)) | 151 | static uint16_t mio_cs_inw(struct comedi_device *dev, int reg) |
152 | { | ||
153 | return inw(dev->iobase + reg); | ||
154 | } | ||
155 | |||
156 | static uint32_t mio_cs_inl(struct comedi_device *dev, int reg) | ||
157 | { | ||
158 | return inl(dev->iobase + reg); | ||
159 | } | ||
160 | |||
161 | static void mio_cs_outb(struct comedi_device *dev, uint8_t val, int reg) | ||
162 | { | ||
163 | outb(val, dev->iobase + reg); | ||
164 | } | ||
165 | |||
166 | static void mio_cs_outw(struct comedi_device *dev, uint16_t val, int reg) | ||
167 | { | ||
168 | outw(val, dev->iobase + reg); | ||
169 | } | ||
170 | |||
171 | static void mio_cs_outl(struct comedi_device *dev, uint32_t val, int reg) | ||
172 | { | ||
173 | outl(val, dev->iobase + reg); | ||
174 | } | ||
152 | 175 | ||
153 | /* How we access windowed registers */ | 176 | /* How we access windowed registers */ |
154 | 177 | ||
@@ -163,10 +186,10 @@ static void mio_cs_win_out(struct comedi_device *dev, uint16_t data, int addr) | |||
163 | 186 | ||
164 | spin_lock_irqsave(&devpriv->window_lock, flags); | 187 | spin_lock_irqsave(&devpriv->window_lock, flags); |
165 | if (addr < 8) { | 188 | if (addr < 8) { |
166 | ni_writew(data, addr * 2); | 189 | devpriv->writew(dev, data, addr * 2); |
167 | } else { | 190 | } else { |
168 | ni_writew(addr, Window_Address); | 191 | devpriv->writew(dev, addr, Window_Address); |
169 | ni_writew(data, Window_Data); | 192 | devpriv->writew(dev, data, Window_Data); |
170 | } | 193 | } |
171 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 194 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
172 | } | 195 | } |
@@ -179,10 +202,10 @@ static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr) | |||
179 | 202 | ||
180 | spin_lock_irqsave(&devpriv->window_lock, flags); | 203 | spin_lock_irqsave(&devpriv->window_lock, flags); |
181 | if (addr < 8) { | 204 | if (addr < 8) { |
182 | ret = ni_readw(addr * 2); | 205 | ret = devpriv->readw(dev, addr * 2); |
183 | } else { | 206 | } else { |
184 | ni_writew(addr, Window_Address); | 207 | devpriv->writew(dev, addr, Window_Address); |
185 | ret = ni_readw(Window_Data); | 208 | ret = devpriv->readw(dev, Window_Data); |
186 | } | 209 | } |
187 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 210 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
188 | 211 | ||
@@ -252,6 +275,14 @@ static int mio_cs_auto_attach(struct comedi_device *dev, | |||
252 | return ret; | 275 | return ret; |
253 | 276 | ||
254 | devpriv = dev->private; | 277 | devpriv = dev->private; |
278 | |||
279 | devpriv->readb = mio_cs_inb; | ||
280 | devpriv->readw = mio_cs_inw; | ||
281 | devpriv->readl = mio_cs_inl; | ||
282 | devpriv->writeb = mio_cs_outb; | ||
283 | devpriv->writew = mio_cs_outw; | ||
284 | devpriv->writel = mio_cs_outl; | ||
285 | |||
255 | devpriv->stc_writew = mio_cs_win_out; | 286 | devpriv->stc_writew = mio_cs_win_out; |
256 | devpriv->stc_readw = mio_cs_win_in; | 287 | devpriv->stc_readw = mio_cs_win_in; |
257 | devpriv->stc_writel = win_out2; | 288 | devpriv->stc_writel = win_out2; |
diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index cfe97345dd47..c1c2730cf3e1 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c | |||
@@ -1044,12 +1044,47 @@ static const struct ni_board_struct ni_boards[] = { | |||
1044 | 1044 | ||
1045 | /* How we access registers */ | 1045 | /* How we access registers */ |
1046 | 1046 | ||
1047 | #define ni_writel(a, b) (writel((a), devpriv->mite->daq_io_addr + (b))) | 1047 | static uint8_t pcimio_readb(struct comedi_device *dev, int reg) |
1048 | #define ni_readl(a) (readl(devpriv->mite->daq_io_addr + (a))) | 1048 | { |
1049 | #define ni_writew(a, b) (writew((a), devpriv->mite->daq_io_addr + (b))) | 1049 | struct ni_private *devpriv = dev->private; |
1050 | #define ni_readw(a) (readw(devpriv->mite->daq_io_addr + (a))) | 1050 | |
1051 | #define ni_writeb(a, b) (writeb((a), devpriv->mite->daq_io_addr + (b))) | 1051 | return readb(devpriv->mite->daq_io_addr + reg); |
1052 | #define ni_readb(a) (readb(devpriv->mite->daq_io_addr + (a))) | 1052 | } |
1053 | |||
1054 | static uint16_t pcimio_readw(struct comedi_device *dev, int reg) | ||
1055 | { | ||
1056 | struct ni_private *devpriv = dev->private; | ||
1057 | |||
1058 | return readw(devpriv->mite->daq_io_addr + reg); | ||
1059 | } | ||
1060 | |||
1061 | static uint32_t pcimio_readl(struct comedi_device *dev, int reg) | ||
1062 | { | ||
1063 | struct ni_private *devpriv = dev->private; | ||
1064 | |||
1065 | return readl(devpriv->mite->daq_io_addr + reg); | ||
1066 | } | ||
1067 | |||
1068 | static void pcimio_writeb(struct comedi_device *dev, uint8_t val, int reg) | ||
1069 | { | ||
1070 | struct ni_private *devpriv = dev->private; | ||
1071 | |||
1072 | writeb(val, devpriv->mite->daq_io_addr + reg); | ||
1073 | } | ||
1074 | |||
1075 | static void pcimio_writew(struct comedi_device *dev, uint16_t val, int reg) | ||
1076 | { | ||
1077 | struct ni_private *devpriv = dev->private; | ||
1078 | |||
1079 | writew(val, devpriv->mite->daq_io_addr + reg); | ||
1080 | } | ||
1081 | |||
1082 | static void pcimio_writel(struct comedi_device *dev, uint32_t val, int reg) | ||
1083 | { | ||
1084 | struct ni_private *devpriv = dev->private; | ||
1085 | |||
1086 | writel(val, devpriv->mite->daq_io_addr + reg); | ||
1087 | } | ||
1053 | 1088 | ||
1054 | /* How we access STC registers */ | 1089 | /* How we access STC registers */ |
1055 | 1090 | ||
@@ -1067,8 +1102,8 @@ static void e_series_win_out(struct comedi_device *dev, uint16_t data, int reg) | |||
1067 | unsigned long flags; | 1102 | unsigned long flags; |
1068 | 1103 | ||
1069 | spin_lock_irqsave(&devpriv->window_lock, flags); | 1104 | spin_lock_irqsave(&devpriv->window_lock, flags); |
1070 | ni_writew(reg, Window_Address); | 1105 | devpriv->writew(dev, reg, Window_Address); |
1071 | ni_writew(data, Window_Data); | 1106 | devpriv->writew(dev, data, Window_Data); |
1072 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 1107 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
1073 | } | 1108 | } |
1074 | 1109 | ||
@@ -1079,8 +1114,8 @@ static uint16_t e_series_win_in(struct comedi_device *dev, int reg) | |||
1079 | uint16_t ret; | 1114 | uint16_t ret; |
1080 | 1115 | ||
1081 | spin_lock_irqsave(&devpriv->window_lock, flags); | 1116 | spin_lock_irqsave(&devpriv->window_lock, flags); |
1082 | ni_writew(reg, Window_Address); | 1117 | devpriv->writew(dev, reg, Window_Address); |
1083 | ret = ni_readw(Window_Data); | 1118 | ret = devpriv->readw(dev, Window_Data); |
1084 | spin_unlock_irqrestore(&devpriv->window_lock, flags); | 1119 | spin_unlock_irqrestore(&devpriv->window_lock, flags); |
1085 | 1120 | ||
1086 | return ret; | 1121 | return ret; |
@@ -1119,12 +1154,12 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, | |||
1119 | break; | 1154 | break; |
1120 | case AI_SI2_Load_A_Register: | 1155 | case AI_SI2_Load_A_Register: |
1121 | /* this is actually a 32 bit register on m series boards */ | 1156 | /* this is actually a 32 bit register on m series boards */ |
1122 | ni_writel(data, M_Offset_AI_SI2_Load_A); | 1157 | devpriv->writel(dev, data, M_Offset_AI_SI2_Load_A); |
1123 | return; | 1158 | return; |
1124 | break; | 1159 | break; |
1125 | case AI_SI2_Load_B_Register: | 1160 | case AI_SI2_Load_B_Register: |
1126 | /* this is actually a 32 bit register on m series boards */ | 1161 | /* this is actually a 32 bit register on m series boards */ |
1127 | ni_writel(data, M_Offset_AI_SI2_Load_B); | 1162 | devpriv->writel(dev, data, M_Offset_AI_SI2_Load_B); |
1128 | return; | 1163 | return; |
1129 | break; | 1164 | break; |
1130 | case AI_START_STOP_Select_Register: | 1165 | case AI_START_STOP_Select_Register: |
@@ -1242,7 +1277,7 @@ static void m_series_stc_writew(struct comedi_device *dev, uint16_t data, | |||
1242 | return; | 1277 | return; |
1243 | break; | 1278 | break; |
1244 | } | 1279 | } |
1245 | ni_writew(data, offset); | 1280 | devpriv->writew(dev, data, offset); |
1246 | } | 1281 | } |
1247 | 1282 | ||
1248 | static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) | 1283 | static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) |
@@ -1261,7 +1296,7 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) | |||
1261 | offset = M_Offset_AO_Status_2; | 1296 | offset = M_Offset_AO_Status_2; |
1262 | break; | 1297 | break; |
1263 | case DIO_Serial_Input_Register: | 1298 | case DIO_Serial_Input_Register: |
1264 | return ni_readb(M_Offset_SCXI_Serial_Data_In); | 1299 | return devpriv->readb(dev, M_Offset_SCXI_Serial_Data_In); |
1265 | break; | 1300 | break; |
1266 | case Joint_Status_1_Register: | 1301 | case Joint_Status_1_Register: |
1267 | offset = M_Offset_Joint_Status_1; | 1302 | offset = M_Offset_Joint_Status_1; |
@@ -1280,7 +1315,7 @@ static uint16_t m_series_stc_readw(struct comedi_device *dev, int reg) | |||
1280 | return 0; | 1315 | return 0; |
1281 | break; | 1316 | break; |
1282 | } | 1317 | } |
1283 | return ni_readw(offset); | 1318 | return devpriv->readw(dev, offset); |
1284 | } | 1319 | } |
1285 | 1320 | ||
1286 | static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, | 1321 | static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, |
@@ -1325,7 +1360,7 @@ static void m_series_stc_writel(struct comedi_device *dev, uint32_t data, | |||
1325 | return; | 1360 | return; |
1326 | break; | 1361 | break; |
1327 | } | 1362 | } |
1328 | ni_writel(data, offset); | 1363 | devpriv->writel(dev, data, offset); |
1329 | } | 1364 | } |
1330 | 1365 | ||
1331 | static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) | 1366 | static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) |
@@ -1354,7 +1389,7 @@ static uint32_t m_series_stc_readl(struct comedi_device *dev, int reg) | |||
1354 | return 0; | 1389 | return 0; |
1355 | break; | 1390 | break; |
1356 | } | 1391 | } |
1357 | return ni_readl(offset); | 1392 | return devpriv->readl(dev, offset); |
1358 | } | 1393 | } |
1359 | 1394 | ||
1360 | #define interrupt_pin(a) 0 | 1395 | #define interrupt_pin(a) 0 |
@@ -1403,12 +1438,14 @@ static void m_series_init_eeprom_buffer(struct comedi_device *dev) | |||
1403 | BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number)); | 1438 | BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number)); |
1404 | for (i = 0; i < serial_number_eeprom_length; ++i) { | 1439 | for (i = 0; i < serial_number_eeprom_length; ++i) { |
1405 | char *byte_ptr = (char *)&devpriv->serial_number + i; | 1440 | char *byte_ptr = (char *)&devpriv->serial_number + i; |
1406 | *byte_ptr = ni_readb(serial_number_eeprom_offset + i); | 1441 | *byte_ptr = devpriv->readb(dev, |
1442 | serial_number_eeprom_offset + i); | ||
1407 | } | 1443 | } |
1408 | devpriv->serial_number = be32_to_cpu(devpriv->serial_number); | 1444 | devpriv->serial_number = be32_to_cpu(devpriv->serial_number); |
1409 | 1445 | ||
1410 | for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) | 1446 | for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) |
1411 | devpriv->eeprom_buffer[i] = ni_readb(Start_Cal_EEPROM + i); | 1447 | devpriv->eeprom_buffer[i] = devpriv->readb(dev, |
1448 | Start_Cal_EEPROM + i); | ||
1412 | 1449 | ||
1413 | writel(old_iodwbsr1_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR_1); | 1450 | writel(old_iodwbsr1_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR_1); |
1414 | writel(old_iodwbsr_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR); | 1451 | writel(old_iodwbsr_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR); |
@@ -1425,18 +1462,24 @@ static void init_6143(struct comedi_device *dev) | |||
1425 | devpriv->stc_writew(dev, 0, Interrupt_Control_Register); | 1462 | devpriv->stc_writew(dev, 0, Interrupt_Control_Register); |
1426 | 1463 | ||
1427 | /* Initialise 6143 AI specific bits */ | 1464 | /* Initialise 6143 AI specific bits */ |
1428 | ni_writeb(0x00, Magic_6143); /* Set G0,G1 DMA mode to E series version */ | 1465 | |
1429 | ni_writeb(0x80, PipelineDelay_6143); /* Set EOCMode, ADCMode and pipelinedelay */ | 1466 | /* Set G0,G1 DMA mode to E series version */ |
1430 | ni_writeb(0x00, EOC_Set_6143); /* Set EOC Delay */ | 1467 | devpriv->writeb(dev, 0x00, Magic_6143); |
1468 | /* Set EOCMode, ADCMode and pipelinedelay */ | ||
1469 | devpriv->writeb(dev, 0x80, PipelineDelay_6143); | ||
1470 | /* Set EOC Delay */ | ||
1471 | devpriv->writeb(dev, 0x00, EOC_Set_6143); | ||
1431 | 1472 | ||
1432 | /* Set the FIFO half full level */ | 1473 | /* Set the FIFO half full level */ |
1433 | ni_writel(board->ai_fifo_depth / 2, AIFIFO_Flag_6143); | 1474 | devpriv->writel(dev, board->ai_fifo_depth / 2, AIFIFO_Flag_6143); |
1434 | 1475 | ||
1435 | /* Strobe Relay disable bit */ | 1476 | /* Strobe Relay disable bit */ |
1436 | devpriv->ai_calib_source_enabled = 0; | 1477 | devpriv->ai_calib_source_enabled = 0; |
1437 | ni_writew(devpriv->ai_calib_source | Calibration_Channel_6143_RelayOff, | 1478 | devpriv->writew(dev, devpriv->ai_calib_source | |
1438 | Calibration_Channel_6143); | 1479 | Calibration_Channel_6143_RelayOff, |
1439 | ni_writew(devpriv->ai_calib_source, Calibration_Channel_6143); | 1480 | Calibration_Channel_6143); |
1481 | devpriv->writew(dev, devpriv->ai_calib_source, | ||
1482 | Calibration_Channel_6143); | ||
1440 | } | 1483 | } |
1441 | 1484 | ||
1442 | static void pcimio_detach(struct comedi_device *dev) | 1485 | static void pcimio_detach(struct comedi_device *dev) |
@@ -1489,16 +1532,23 @@ static int pcimio_auto_attach(struct comedi_device *dev, | |||
1489 | if (!devpriv->mite) | 1532 | if (!devpriv->mite) |
1490 | return -ENOMEM; | 1533 | return -ENOMEM; |
1491 | 1534 | ||
1535 | devpriv->readb = pcimio_readb; | ||
1536 | devpriv->readw = pcimio_readw; | ||
1537 | devpriv->readl = pcimio_readl; | ||
1538 | devpriv->writeb = pcimio_writeb; | ||
1539 | devpriv->writew = pcimio_writew; | ||
1540 | devpriv->writel = pcimio_writel; | ||
1541 | |||
1492 | if (board->reg_type & ni_reg_m_series_mask) { | 1542 | if (board->reg_type & ni_reg_m_series_mask) { |
1493 | devpriv->stc_writew = &m_series_stc_writew; | 1543 | devpriv->stc_writew = m_series_stc_writew; |
1494 | devpriv->stc_readw = &m_series_stc_readw; | 1544 | devpriv->stc_readw = m_series_stc_readw; |
1495 | devpriv->stc_writel = &m_series_stc_writel; | 1545 | devpriv->stc_writel = m_series_stc_writel; |
1496 | devpriv->stc_readl = &m_series_stc_readl; | 1546 | devpriv->stc_readl = m_series_stc_readl; |
1497 | } else { | 1547 | } else { |
1498 | devpriv->stc_writew = &e_series_win_out; | 1548 | devpriv->stc_writew = e_series_win_out; |
1499 | devpriv->stc_readw = &e_series_win_in; | 1549 | devpriv->stc_readw = e_series_win_in; |
1500 | devpriv->stc_writel = &win_out2; | 1550 | devpriv->stc_writel = win_out2; |
1501 | devpriv->stc_readl = &win_in2; | 1551 | devpriv->stc_readl = win_in2; |
1502 | } | 1552 | } |
1503 | 1553 | ||
1504 | ret = mite_setup(devpriv->mite); | 1554 | ret = mite_setup(devpriv->mite); |
diff --git a/drivers/staging/comedi/drivers/ni_stc.h b/drivers/staging/comedi/drivers/ni_stc.h index 1cc035ba9c93..a93ef6b488e1 100644 --- a/drivers/staging/comedi/drivers/ni_stc.h +++ b/drivers/staging/comedi/drivers/ni_stc.h | |||
@@ -1421,6 +1421,13 @@ struct ni_board_struct { | |||
1421 | #define NUM_GPCT 2 | 1421 | #define NUM_GPCT 2 |
1422 | 1422 | ||
1423 | struct ni_private { | 1423 | struct ni_private { |
1424 | uint8_t (*readb)(struct comedi_device *, int reg); | ||
1425 | uint16_t (*readw)(struct comedi_device *, int reg); | ||
1426 | uint32_t (*readl)(struct comedi_device *, int reg); | ||
1427 | void (*writeb)(struct comedi_device *, uint8_t value, int reg); | ||
1428 | void (*writew)(struct comedi_device *, uint16_t value, int reg); | ||
1429 | void (*writel)(struct comedi_device *, uint32_t value, int reg); | ||
1430 | |||
1424 | uint16_t (*stc_readw)(struct comedi_device *, int reg); | 1431 | uint16_t (*stc_readw)(struct comedi_device *, int reg); |
1425 | uint32_t (*stc_readl)(struct comedi_device *, int reg); | 1432 | uint32_t (*stc_readl)(struct comedi_device *, int reg); |
1426 | void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); | 1433 | void (*stc_writew)(struct comedi_device *, uint16_t value, int reg); |