diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2014-05-28 19:26:45 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-06-18 17:33:52 -0400 |
commit | ae43763d347cd87f195bb63daf56dcbb3557c86b (patch) | |
tree | 98752533c2bb009962a331a66b98a359ba5c6201 | |
parent | 892885eafaf2ff88a6cddf21bba0edc7c6dd6e4f (diff) |
staging: comedi: ni_mio_common: remove forward declaration 22
Move ni_rtsi_insn_config() and its helper functions to remove the need
for the forward declaration.
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>
-rw-r--r-- | drivers/staging/comedi/drivers/ni_mio_common.c | 333 |
1 files changed, 165 insertions, 168 deletions
diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 77fda821efa4..ba876dee1922 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c | |||
@@ -194,10 +194,6 @@ static const struct comedi_lrange *const ni_range_lkup[] = { | |||
194 | [ai_gain_6143] = &range_bipolar5 | 194 | [ai_gain_6143] = &range_bipolar5 |
195 | }; | 195 | }; |
196 | 196 | ||
197 | static int ni_rtsi_insn_config(struct comedi_device *dev, | ||
198 | struct comedi_subdevice *s, | ||
199 | struct comedi_insn *insn, unsigned int *data); | ||
200 | |||
201 | #ifndef PCIDMA | 197 | #ifndef PCIDMA |
202 | static void ni_handle_fifo_half_full(struct comedi_device *dev); | 198 | static void ni_handle_fifo_half_full(struct comedi_device *dev); |
203 | static int ni_ao_fifo_half_empty(struct comedi_device *dev, | 199 | static int ni_ao_fifo_half_empty(struct comedi_device *dev, |
@@ -4691,6 +4687,171 @@ static int init_cs5529(struct comedi_device *dev) | |||
4691 | return 0; | 4687 | return 0; |
4692 | } | 4688 | } |
4693 | 4689 | ||
4690 | static unsigned num_configurable_rtsi_channels(struct comedi_device *dev) | ||
4691 | { | ||
4692 | const struct ni_board_struct *board = comedi_board(dev); | ||
4693 | |||
4694 | if (board->reg_type & ni_reg_m_series_mask) | ||
4695 | return 8; | ||
4696 | else | ||
4697 | return 7; | ||
4698 | } | ||
4699 | |||
4700 | static int ni_valid_rtsi_output_source(struct comedi_device *dev, | ||
4701 | unsigned chan, unsigned source) | ||
4702 | { | ||
4703 | const struct ni_board_struct *board = comedi_board(dev); | ||
4704 | |||
4705 | if (chan >= num_configurable_rtsi_channels(dev)) { | ||
4706 | if (chan == old_RTSI_clock_channel) { | ||
4707 | if (source == NI_RTSI_OUTPUT_RTSI_OSC) | ||
4708 | return 1; | ||
4709 | else { | ||
4710 | printk | ||
4711 | ("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", | ||
4712 | __func__, chan, old_RTSI_clock_channel); | ||
4713 | return 0; | ||
4714 | } | ||
4715 | } | ||
4716 | return 0; | ||
4717 | } | ||
4718 | switch (source) { | ||
4719 | case NI_RTSI_OUTPUT_ADR_START1: | ||
4720 | case NI_RTSI_OUTPUT_ADR_START2: | ||
4721 | case NI_RTSI_OUTPUT_SCLKG: | ||
4722 | case NI_RTSI_OUTPUT_DACUPDN: | ||
4723 | case NI_RTSI_OUTPUT_DA_START1: | ||
4724 | case NI_RTSI_OUTPUT_G_SRC0: | ||
4725 | case NI_RTSI_OUTPUT_G_GATE0: | ||
4726 | case NI_RTSI_OUTPUT_RGOUT0: | ||
4727 | case NI_RTSI_OUTPUT_RTSI_BRD_0: | ||
4728 | return 1; | ||
4729 | break; | ||
4730 | case NI_RTSI_OUTPUT_RTSI_OSC: | ||
4731 | if (board->reg_type & ni_reg_m_series_mask) | ||
4732 | return 1; | ||
4733 | else | ||
4734 | return 0; | ||
4735 | break; | ||
4736 | default: | ||
4737 | return 0; | ||
4738 | break; | ||
4739 | } | ||
4740 | } | ||
4741 | |||
4742 | static int ni_set_rtsi_routing(struct comedi_device *dev, | ||
4743 | unsigned chan, unsigned source) | ||
4744 | { | ||
4745 | struct ni_private *devpriv = dev->private; | ||
4746 | |||
4747 | if (ni_valid_rtsi_output_source(dev, chan, source) == 0) | ||
4748 | return -EINVAL; | ||
4749 | if (chan < 4) { | ||
4750 | devpriv->rtsi_trig_a_output_reg &= ~RTSI_Trig_Output_Mask(chan); | ||
4751 | devpriv->rtsi_trig_a_output_reg |= | ||
4752 | RTSI_Trig_Output_Bits(chan, source); | ||
4753 | devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, | ||
4754 | RTSI_Trig_A_Output_Register); | ||
4755 | } else if (chan < 8) { | ||
4756 | devpriv->rtsi_trig_b_output_reg &= ~RTSI_Trig_Output_Mask(chan); | ||
4757 | devpriv->rtsi_trig_b_output_reg |= | ||
4758 | RTSI_Trig_Output_Bits(chan, source); | ||
4759 | devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, | ||
4760 | RTSI_Trig_B_Output_Register); | ||
4761 | } | ||
4762 | return 2; | ||
4763 | } | ||
4764 | |||
4765 | static unsigned ni_get_rtsi_routing(struct comedi_device *dev, unsigned chan) | ||
4766 | { | ||
4767 | struct ni_private *devpriv = dev->private; | ||
4768 | |||
4769 | if (chan < 4) { | ||
4770 | return RTSI_Trig_Output_Source(chan, | ||
4771 | devpriv->rtsi_trig_a_output_reg); | ||
4772 | } else if (chan < num_configurable_rtsi_channels(dev)) { | ||
4773 | return RTSI_Trig_Output_Source(chan, | ||
4774 | devpriv->rtsi_trig_b_output_reg); | ||
4775 | } else { | ||
4776 | if (chan == old_RTSI_clock_channel) | ||
4777 | return NI_RTSI_OUTPUT_RTSI_OSC; | ||
4778 | printk("%s: bug! should never get here?\n", __func__); | ||
4779 | return 0; | ||
4780 | } | ||
4781 | } | ||
4782 | |||
4783 | static int ni_rtsi_insn_config(struct comedi_device *dev, | ||
4784 | struct comedi_subdevice *s, | ||
4785 | struct comedi_insn *insn, | ||
4786 | unsigned int *data) | ||
4787 | { | ||
4788 | const struct ni_board_struct *board = comedi_board(dev); | ||
4789 | struct ni_private *devpriv = dev->private; | ||
4790 | unsigned int chan = CR_CHAN(insn->chanspec); | ||
4791 | |||
4792 | switch (data[0]) { | ||
4793 | case INSN_CONFIG_DIO_OUTPUT: | ||
4794 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
4795 | devpriv->rtsi_trig_direction_reg |= | ||
4796 | RTSI_Output_Bit(chan, | ||
4797 | (board->reg_type & ni_reg_m_series_mask) != 0); | ||
4798 | } else if (chan == old_RTSI_clock_channel) { | ||
4799 | devpriv->rtsi_trig_direction_reg |= | ||
4800 | Drive_RTSI_Clock_Bit; | ||
4801 | } | ||
4802 | devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, | ||
4803 | RTSI_Trig_Direction_Register); | ||
4804 | break; | ||
4805 | case INSN_CONFIG_DIO_INPUT: | ||
4806 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
4807 | devpriv->rtsi_trig_direction_reg &= | ||
4808 | ~RTSI_Output_Bit(chan, | ||
4809 | (board->reg_type & ni_reg_m_series_mask) != 0); | ||
4810 | } else if (chan == old_RTSI_clock_channel) { | ||
4811 | devpriv->rtsi_trig_direction_reg &= | ||
4812 | ~Drive_RTSI_Clock_Bit; | ||
4813 | } | ||
4814 | devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, | ||
4815 | RTSI_Trig_Direction_Register); | ||
4816 | break; | ||
4817 | case INSN_CONFIG_DIO_QUERY: | ||
4818 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
4819 | data[1] = | ||
4820 | (devpriv->rtsi_trig_direction_reg & | ||
4821 | RTSI_Output_Bit(chan, | ||
4822 | (board->reg_type & ni_reg_m_series_mask) != 0)) | ||
4823 | ? INSN_CONFIG_DIO_OUTPUT | ||
4824 | : INSN_CONFIG_DIO_INPUT; | ||
4825 | } else if (chan == old_RTSI_clock_channel) { | ||
4826 | data[1] = | ||
4827 | (devpriv->rtsi_trig_direction_reg & | ||
4828 | Drive_RTSI_Clock_Bit) | ||
4829 | ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; | ||
4830 | } | ||
4831 | return 2; | ||
4832 | break; | ||
4833 | case INSN_CONFIG_SET_CLOCK_SRC: | ||
4834 | return ni_set_master_clock(dev, data[1], data[2]); | ||
4835 | break; | ||
4836 | case INSN_CONFIG_GET_CLOCK_SRC: | ||
4837 | data[1] = devpriv->clock_source; | ||
4838 | data[2] = devpriv->clock_ns; | ||
4839 | return 3; | ||
4840 | break; | ||
4841 | case INSN_CONFIG_SET_ROUTING: | ||
4842 | return ni_set_rtsi_routing(dev, chan, data[1]); | ||
4843 | break; | ||
4844 | case INSN_CONFIG_GET_ROUTING: | ||
4845 | data[1] = ni_get_rtsi_routing(dev, chan); | ||
4846 | return 2; | ||
4847 | break; | ||
4848 | default: | ||
4849 | return -EINVAL; | ||
4850 | break; | ||
4851 | } | ||
4852 | return 1; | ||
4853 | } | ||
4854 | |||
4694 | static int ni_rtsi_insn_bits(struct comedi_device *dev, | 4855 | static int ni_rtsi_insn_bits(struct comedi_device *dev, |
4695 | struct comedi_subdevice *s, | 4856 | struct comedi_subdevice *s, |
4696 | struct comedi_insn *insn, | 4857 | struct comedi_insn *insn, |
@@ -5295,16 +5456,6 @@ static int ni_mseries_get_pll_parameters(unsigned reference_period_ns, | |||
5295 | return 0; | 5456 | return 0; |
5296 | } | 5457 | } |
5297 | 5458 | ||
5298 | static inline unsigned num_configurable_rtsi_channels(struct comedi_device *dev) | ||
5299 | { | ||
5300 | const struct ni_board_struct *board = comedi_board(dev); | ||
5301 | |||
5302 | if (board->reg_type & ni_reg_m_series_mask) | ||
5303 | return 8; | ||
5304 | else | ||
5305 | return 7; | ||
5306 | } | ||
5307 | |||
5308 | static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, | 5459 | static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, |
5309 | unsigned source, unsigned period_ns) | 5460 | unsigned source, unsigned period_ns) |
5310 | { | 5461 | { |
@@ -5454,157 +5605,3 @@ static int ni_set_master_clock(struct comedi_device *dev, unsigned source, | |||
5454 | } | 5605 | } |
5455 | return 3; | 5606 | return 3; |
5456 | } | 5607 | } |
5457 | |||
5458 | static int ni_valid_rtsi_output_source(struct comedi_device *dev, unsigned chan, | ||
5459 | unsigned source) | ||
5460 | { | ||
5461 | const struct ni_board_struct *board = comedi_board(dev); | ||
5462 | |||
5463 | if (chan >= num_configurable_rtsi_channels(dev)) { | ||
5464 | if (chan == old_RTSI_clock_channel) { | ||
5465 | if (source == NI_RTSI_OUTPUT_RTSI_OSC) | ||
5466 | return 1; | ||
5467 | else { | ||
5468 | printk | ||
5469 | ("%s: invalid source for channel=%i, channel %i is always the RTSI clock for pre-m-series boards.\n", | ||
5470 | __func__, chan, old_RTSI_clock_channel); | ||
5471 | return 0; | ||
5472 | } | ||
5473 | } | ||
5474 | return 0; | ||
5475 | } | ||
5476 | switch (source) { | ||
5477 | case NI_RTSI_OUTPUT_ADR_START1: | ||
5478 | case NI_RTSI_OUTPUT_ADR_START2: | ||
5479 | case NI_RTSI_OUTPUT_SCLKG: | ||
5480 | case NI_RTSI_OUTPUT_DACUPDN: | ||
5481 | case NI_RTSI_OUTPUT_DA_START1: | ||
5482 | case NI_RTSI_OUTPUT_G_SRC0: | ||
5483 | case NI_RTSI_OUTPUT_G_GATE0: | ||
5484 | case NI_RTSI_OUTPUT_RGOUT0: | ||
5485 | case NI_RTSI_OUTPUT_RTSI_BRD_0: | ||
5486 | return 1; | ||
5487 | break; | ||
5488 | case NI_RTSI_OUTPUT_RTSI_OSC: | ||
5489 | if (board->reg_type & ni_reg_m_series_mask) | ||
5490 | return 1; | ||
5491 | else | ||
5492 | return 0; | ||
5493 | break; | ||
5494 | default: | ||
5495 | return 0; | ||
5496 | break; | ||
5497 | } | ||
5498 | } | ||
5499 | |||
5500 | static int ni_set_rtsi_routing(struct comedi_device *dev, unsigned chan, | ||
5501 | unsigned source) | ||
5502 | { | ||
5503 | struct ni_private *devpriv = dev->private; | ||
5504 | |||
5505 | if (ni_valid_rtsi_output_source(dev, chan, source) == 0) | ||
5506 | return -EINVAL; | ||
5507 | if (chan < 4) { | ||
5508 | devpriv->rtsi_trig_a_output_reg &= ~RTSI_Trig_Output_Mask(chan); | ||
5509 | devpriv->rtsi_trig_a_output_reg |= | ||
5510 | RTSI_Trig_Output_Bits(chan, source); | ||
5511 | devpriv->stc_writew(dev, devpriv->rtsi_trig_a_output_reg, | ||
5512 | RTSI_Trig_A_Output_Register); | ||
5513 | } else if (chan < 8) { | ||
5514 | devpriv->rtsi_trig_b_output_reg &= ~RTSI_Trig_Output_Mask(chan); | ||
5515 | devpriv->rtsi_trig_b_output_reg |= | ||
5516 | RTSI_Trig_Output_Bits(chan, source); | ||
5517 | devpriv->stc_writew(dev, devpriv->rtsi_trig_b_output_reg, | ||
5518 | RTSI_Trig_B_Output_Register); | ||
5519 | } | ||
5520 | return 2; | ||
5521 | } | ||
5522 | |||
5523 | static unsigned ni_get_rtsi_routing(struct comedi_device *dev, unsigned chan) | ||
5524 | { | ||
5525 | struct ni_private *devpriv = dev->private; | ||
5526 | |||
5527 | if (chan < 4) { | ||
5528 | return RTSI_Trig_Output_Source(chan, | ||
5529 | devpriv->rtsi_trig_a_output_reg); | ||
5530 | } else if (chan < num_configurable_rtsi_channels(dev)) { | ||
5531 | return RTSI_Trig_Output_Source(chan, | ||
5532 | devpriv->rtsi_trig_b_output_reg); | ||
5533 | } else { | ||
5534 | if (chan == old_RTSI_clock_channel) | ||
5535 | return NI_RTSI_OUTPUT_RTSI_OSC; | ||
5536 | printk("%s: bug! should never get here?\n", __func__); | ||
5537 | return 0; | ||
5538 | } | ||
5539 | } | ||
5540 | |||
5541 | static int ni_rtsi_insn_config(struct comedi_device *dev, | ||
5542 | struct comedi_subdevice *s, | ||
5543 | struct comedi_insn *insn, unsigned int *data) | ||
5544 | { | ||
5545 | const struct ni_board_struct *board = comedi_board(dev); | ||
5546 | struct ni_private *devpriv = dev->private; | ||
5547 | unsigned int chan = CR_CHAN(insn->chanspec); | ||
5548 | |||
5549 | switch (data[0]) { | ||
5550 | case INSN_CONFIG_DIO_OUTPUT: | ||
5551 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
5552 | devpriv->rtsi_trig_direction_reg |= | ||
5553 | RTSI_Output_Bit(chan, | ||
5554 | (board->reg_type & ni_reg_m_series_mask) != 0); | ||
5555 | } else if (chan == old_RTSI_clock_channel) { | ||
5556 | devpriv->rtsi_trig_direction_reg |= | ||
5557 | Drive_RTSI_Clock_Bit; | ||
5558 | } | ||
5559 | devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, | ||
5560 | RTSI_Trig_Direction_Register); | ||
5561 | break; | ||
5562 | case INSN_CONFIG_DIO_INPUT: | ||
5563 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
5564 | devpriv->rtsi_trig_direction_reg &= | ||
5565 | ~RTSI_Output_Bit(chan, | ||
5566 | (board->reg_type & ni_reg_m_series_mask) != 0); | ||
5567 | } else if (chan == old_RTSI_clock_channel) { | ||
5568 | devpriv->rtsi_trig_direction_reg &= | ||
5569 | ~Drive_RTSI_Clock_Bit; | ||
5570 | } | ||
5571 | devpriv->stc_writew(dev, devpriv->rtsi_trig_direction_reg, | ||
5572 | RTSI_Trig_Direction_Register); | ||
5573 | break; | ||
5574 | case INSN_CONFIG_DIO_QUERY: | ||
5575 | if (chan < num_configurable_rtsi_channels(dev)) { | ||
5576 | data[1] = | ||
5577 | (devpriv->rtsi_trig_direction_reg & | ||
5578 | RTSI_Output_Bit(chan, | ||
5579 | (board->reg_type & ni_reg_m_series_mask) != 0)) | ||
5580 | ? INSN_CONFIG_DIO_OUTPUT | ||
5581 | : INSN_CONFIG_DIO_INPUT; | ||
5582 | } else if (chan == old_RTSI_clock_channel) { | ||
5583 | data[1] = | ||
5584 | (devpriv->rtsi_trig_direction_reg & | ||
5585 | Drive_RTSI_Clock_Bit) | ||
5586 | ? INSN_CONFIG_DIO_OUTPUT : INSN_CONFIG_DIO_INPUT; | ||
5587 | } | ||
5588 | return 2; | ||
5589 | break; | ||
5590 | case INSN_CONFIG_SET_CLOCK_SRC: | ||
5591 | return ni_set_master_clock(dev, data[1], data[2]); | ||
5592 | break; | ||
5593 | case INSN_CONFIG_GET_CLOCK_SRC: | ||
5594 | data[1] = devpriv->clock_source; | ||
5595 | data[2] = devpriv->clock_ns; | ||
5596 | return 3; | ||
5597 | break; | ||
5598 | case INSN_CONFIG_SET_ROUTING: | ||
5599 | return ni_set_rtsi_routing(dev, chan, data[1]); | ||
5600 | break; | ||
5601 | case INSN_CONFIG_GET_ROUTING: | ||
5602 | data[1] = ni_get_rtsi_routing(dev, chan); | ||
5603 | return 2; | ||
5604 | break; | ||
5605 | default: | ||
5606 | return -EINVAL; | ||
5607 | break; | ||
5608 | } | ||
5609 | return 1; | ||
5610 | } | ||