aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-05-28 19:26:45 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-06-18 17:33:52 -0400
commitae43763d347cd87f195bb63daf56dcbb3557c86b (patch)
tree98752533c2bb009962a331a66b98a359ba5c6201
parent892885eafaf2ff88a6cddf21bba0edc7c6dd6e4f (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.c333
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
197static 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
202static void ni_handle_fifo_half_full(struct comedi_device *dev); 198static void ni_handle_fifo_half_full(struct comedi_device *dev);
203static int ni_ao_fifo_half_empty(struct comedi_device *dev, 199static 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
4690static 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
4700static 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
4742static 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
4765static 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
4783static 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
4694static int ni_rtsi_insn_bits(struct comedi_device *dev, 4855static 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
5298static 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
5308static int ni_mseries_set_pll_master_clock(struct comedi_device *dev, 5459static 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
5458static 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
5500static 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
5523static 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
5541static 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}