aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-05-28 19:26:30 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-06-18 17:33:51 -0400
commit4187a79a8416cbbb37354d6e64d013db0f131646 (patch)
treebda3844cda6b98037e57111fa0017c401908304f
parentc8508a1d7bfcef2fa557770ef94f481b5d70c9a6 (diff)
staging: comedi: ni_mio_common: remove forward declaration 7
Move the programmable function inputs subdevice functions and helpers to remove the need for the forward declarations. 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.c372
1 files changed, 179 insertions, 193 deletions
diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c
index 2b997ef0f97c..55eadf43728b 100644
--- a/drivers/staging/comedi/drivers/ni_mio_common.c
+++ b/drivers/staging/comedi/drivers/ni_mio_common.c
@@ -221,15 +221,6 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev,
221 unsigned char data_out, 221 unsigned char data_out,
222 unsigned char *data_in); 222 unsigned char *data_in);
223 223
224static int ni_pfi_insn_bits(struct comedi_device *dev,
225 struct comedi_subdevice *s,
226 struct comedi_insn *insn, unsigned int *data);
227static int ni_pfi_insn_config(struct comedi_device *dev,
228 struct comedi_subdevice *s,
229 struct comedi_insn *insn, unsigned int *data);
230static unsigned ni_old_get_pfi_routing(struct comedi_device *dev,
231 unsigned chan);
232
233static void ni_rtsi_init(struct comedi_device *dev); 224static void ni_rtsi_init(struct comedi_device *dev);
234static int ni_rtsi_insn_bits(struct comedi_device *dev, 225static int ni_rtsi_insn_bits(struct comedi_device *dev,
235 struct comedi_subdevice *s, 226 struct comedi_subdevice *s,
@@ -4510,6 +4501,185 @@ static int ni_m_series_eeprom_insn_read(struct comedi_device *dev,
4510 return 1; 4501 return 1;
4511} 4502}
4512 4503
4504static unsigned ni_old_get_pfi_routing(struct comedi_device *dev,
4505 unsigned chan)
4506{
4507 /* pre-m-series boards have fixed signals on pfi pins */
4508 switch (chan) {
4509 case 0:
4510 return NI_PFI_OUTPUT_AI_START1;
4511 break;
4512 case 1:
4513 return NI_PFI_OUTPUT_AI_START2;
4514 break;
4515 case 2:
4516 return NI_PFI_OUTPUT_AI_CONVERT;
4517 break;
4518 case 3:
4519 return NI_PFI_OUTPUT_G_SRC1;
4520 break;
4521 case 4:
4522 return NI_PFI_OUTPUT_G_GATE1;
4523 break;
4524 case 5:
4525 return NI_PFI_OUTPUT_AO_UPDATE_N;
4526 break;
4527 case 6:
4528 return NI_PFI_OUTPUT_AO_START1;
4529 break;
4530 case 7:
4531 return NI_PFI_OUTPUT_AI_START_PULSE;
4532 break;
4533 case 8:
4534 return NI_PFI_OUTPUT_G_SRC0;
4535 break;
4536 case 9:
4537 return NI_PFI_OUTPUT_G_GATE0;
4538 break;
4539 default:
4540 printk("%s: bug, unhandled case in switch.\n", __func__);
4541 break;
4542 }
4543 return 0;
4544}
4545
4546static int ni_old_set_pfi_routing(struct comedi_device *dev,
4547 unsigned chan, unsigned source)
4548{
4549 /* pre-m-series boards have fixed signals on pfi pins */
4550 if (source != ni_old_get_pfi_routing(dev, chan))
4551 return -EINVAL;
4552 return 2;
4553}
4554
4555static unsigned ni_m_series_get_pfi_routing(struct comedi_device *dev,
4556 unsigned chan)
4557{
4558 struct ni_private *devpriv = dev->private;
4559 const unsigned array_offset = chan / 3;
4560
4561 return MSeries_PFI_Output_Select_Source(chan,
4562 devpriv->pfi_output_select_reg[array_offset]);
4563}
4564
4565static int ni_m_series_set_pfi_routing(struct comedi_device *dev,
4566 unsigned chan, unsigned source)
4567{
4568 struct ni_private *devpriv = dev->private;
4569 unsigned pfi_reg_index;
4570 unsigned array_offset;
4571
4572 if ((source & 0x1f) != source)
4573 return -EINVAL;
4574 pfi_reg_index = 1 + chan / 3;
4575 array_offset = pfi_reg_index - 1;
4576 devpriv->pfi_output_select_reg[array_offset] &=
4577 ~MSeries_PFI_Output_Select_Mask(chan);
4578 devpriv->pfi_output_select_reg[array_offset] |=
4579 MSeries_PFI_Output_Select_Bits(chan, source);
4580 ni_writew(devpriv->pfi_output_select_reg[array_offset],
4581 M_Offset_PFI_Output_Select(pfi_reg_index));
4582 return 2;
4583}
4584
4585static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan)
4586{
4587 const struct ni_board_struct *board = comedi_board(dev);
4588
4589 if (board->reg_type & ni_reg_m_series_mask)
4590 return ni_m_series_get_pfi_routing(dev, chan);
4591 else
4592 return ni_old_get_pfi_routing(dev, chan);
4593}
4594
4595static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan,
4596 unsigned source)
4597{
4598 const struct ni_board_struct *board = comedi_board(dev);
4599
4600 if (board->reg_type & ni_reg_m_series_mask)
4601 return ni_m_series_set_pfi_routing(dev, chan, source);
4602 else
4603 return ni_old_set_pfi_routing(dev, chan, source);
4604}
4605
4606static int ni_config_filter(struct comedi_device *dev,
4607 unsigned pfi_channel,
4608 enum ni_pfi_filter_select filter)
4609{
4610 const struct ni_board_struct *board = comedi_board(dev);
4611 struct ni_private *devpriv __maybe_unused = dev->private;
4612 unsigned bits;
4613
4614 if ((board->reg_type & ni_reg_m_series_mask) == 0)
4615 return -ENOTSUPP;
4616 bits = ni_readl(M_Offset_PFI_Filter);
4617 bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel);
4618 bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter);
4619 ni_writel(bits, M_Offset_PFI_Filter);
4620 return 0;
4621}
4622
4623static int ni_pfi_insn_config(struct comedi_device *dev,
4624 struct comedi_subdevice *s,
4625 struct comedi_insn *insn,
4626 unsigned int *data)
4627{
4628 struct ni_private *devpriv = dev->private;
4629 unsigned int chan;
4630
4631 if (insn->n < 1)
4632 return -EINVAL;
4633
4634 chan = CR_CHAN(insn->chanspec);
4635
4636 switch (data[0]) {
4637 case COMEDI_OUTPUT:
4638 ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 1);
4639 break;
4640 case COMEDI_INPUT:
4641 ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 0);
4642 break;
4643 case INSN_CONFIG_DIO_QUERY:
4644 data[1] =
4645 (devpriv->io_bidirection_pin_reg & (1 << chan)) ?
4646 COMEDI_OUTPUT : COMEDI_INPUT;
4647 return 0;
4648 break;
4649 case INSN_CONFIG_SET_ROUTING:
4650 return ni_set_pfi_routing(dev, chan, data[1]);
4651 break;
4652 case INSN_CONFIG_GET_ROUTING:
4653 data[1] = ni_get_pfi_routing(dev, chan);
4654 break;
4655 case INSN_CONFIG_FILTER:
4656 return ni_config_filter(dev, chan, data[1]);
4657 break;
4658 default:
4659 return -EINVAL;
4660 }
4661 return 0;
4662}
4663
4664static int ni_pfi_insn_bits(struct comedi_device *dev,
4665 struct comedi_subdevice *s,
4666 struct comedi_insn *insn,
4667 unsigned int *data)
4668{
4669 const struct ni_board_struct *board = comedi_board(dev);
4670 struct ni_private *devpriv __maybe_unused = dev->private;
4671
4672 if (!(board->reg_type & ni_reg_m_series_mask))
4673 return -ENOTSUPP;
4674
4675 if (comedi_dio_update_state(s, data))
4676 ni_writew(s->state, M_Offset_PFI_DO);
4677
4678 data[1] = ni_readw(M_Offset_PFI_DI);
4679
4680 return insn->n;
4681}
4682
4513#ifdef PCIDMA 4683#ifdef PCIDMA
4514static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) 4684static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
4515{ 4685{
@@ -4962,190 +5132,6 @@ static void GPCT_Reset(struct comedi_device *dev, int chan)
4962 5132
4963/* 5133/*
4964 * 5134 *
4965 * Programmable Function Inputs
4966 *
4967 */
4968
4969static int ni_m_series_set_pfi_routing(struct comedi_device *dev, unsigned chan,
4970 unsigned source)
4971{
4972 struct ni_private *devpriv = dev->private;
4973 unsigned pfi_reg_index;
4974 unsigned array_offset;
4975
4976 if ((source & 0x1f) != source)
4977 return -EINVAL;
4978 pfi_reg_index = 1 + chan / 3;
4979 array_offset = pfi_reg_index - 1;
4980 devpriv->pfi_output_select_reg[array_offset] &=
4981 ~MSeries_PFI_Output_Select_Mask(chan);
4982 devpriv->pfi_output_select_reg[array_offset] |=
4983 MSeries_PFI_Output_Select_Bits(chan, source);
4984 ni_writew(devpriv->pfi_output_select_reg[array_offset],
4985 M_Offset_PFI_Output_Select(pfi_reg_index));
4986 return 2;
4987}
4988
4989static int ni_old_set_pfi_routing(struct comedi_device *dev, unsigned chan,
4990 unsigned source)
4991{
4992 /* pre-m-series boards have fixed signals on pfi pins */
4993 if (source != ni_old_get_pfi_routing(dev, chan))
4994 return -EINVAL;
4995 return 2;
4996}
4997
4998static int ni_set_pfi_routing(struct comedi_device *dev, unsigned chan,
4999 unsigned source)
5000{
5001 const struct ni_board_struct *board = comedi_board(dev);
5002
5003 if (board->reg_type & ni_reg_m_series_mask)
5004 return ni_m_series_set_pfi_routing(dev, chan, source);
5005 else
5006 return ni_old_set_pfi_routing(dev, chan, source);
5007}
5008
5009static unsigned ni_m_series_get_pfi_routing(struct comedi_device *dev,
5010 unsigned chan)
5011{
5012 struct ni_private *devpriv = dev->private;
5013 const unsigned array_offset = chan / 3;
5014
5015 return MSeries_PFI_Output_Select_Source(chan,
5016 devpriv->
5017 pfi_output_select_reg
5018 [array_offset]);
5019}
5020
5021static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, unsigned chan)
5022{
5023 /* pre-m-series boards have fixed signals on pfi pins */
5024 switch (chan) {
5025 case 0:
5026 return NI_PFI_OUTPUT_AI_START1;
5027 break;
5028 case 1:
5029 return NI_PFI_OUTPUT_AI_START2;
5030 break;
5031 case 2:
5032 return NI_PFI_OUTPUT_AI_CONVERT;
5033 break;
5034 case 3:
5035 return NI_PFI_OUTPUT_G_SRC1;
5036 break;
5037 case 4:
5038 return NI_PFI_OUTPUT_G_GATE1;
5039 break;
5040 case 5:
5041 return NI_PFI_OUTPUT_AO_UPDATE_N;
5042 break;
5043 case 6:
5044 return NI_PFI_OUTPUT_AO_START1;
5045 break;
5046 case 7:
5047 return NI_PFI_OUTPUT_AI_START_PULSE;
5048 break;
5049 case 8:
5050 return NI_PFI_OUTPUT_G_SRC0;
5051 break;
5052 case 9:
5053 return NI_PFI_OUTPUT_G_GATE0;
5054 break;
5055 default:
5056 printk("%s: bug, unhandled case in switch.\n", __func__);
5057 break;
5058 }
5059 return 0;
5060}
5061
5062static unsigned ni_get_pfi_routing(struct comedi_device *dev, unsigned chan)
5063{
5064 const struct ni_board_struct *board = comedi_board(dev);
5065
5066 if (board->reg_type & ni_reg_m_series_mask)
5067 return ni_m_series_get_pfi_routing(dev, chan);
5068 else
5069 return ni_old_get_pfi_routing(dev, chan);
5070}
5071
5072static int ni_config_filter(struct comedi_device *dev, unsigned pfi_channel,
5073 enum ni_pfi_filter_select filter)
5074{
5075 const struct ni_board_struct *board = comedi_board(dev);
5076 struct ni_private *devpriv __maybe_unused = dev->private;
5077 unsigned bits;
5078
5079 if ((board->reg_type & ni_reg_m_series_mask) == 0)
5080 return -ENOTSUPP;
5081 bits = ni_readl(M_Offset_PFI_Filter);
5082 bits &= ~MSeries_PFI_Filter_Select_Mask(pfi_channel);
5083 bits |= MSeries_PFI_Filter_Select_Bits(pfi_channel, filter);
5084 ni_writel(bits, M_Offset_PFI_Filter);
5085 return 0;
5086}
5087
5088static int ni_pfi_insn_bits(struct comedi_device *dev,
5089 struct comedi_subdevice *s,
5090 struct comedi_insn *insn,
5091 unsigned int *data)
5092{
5093 const struct ni_board_struct *board = comedi_board(dev);
5094 struct ni_private *devpriv __maybe_unused = dev->private;
5095
5096 if (!(board->reg_type & ni_reg_m_series_mask))
5097 return -ENOTSUPP;
5098
5099 if (comedi_dio_update_state(s, data))
5100 ni_writew(s->state, M_Offset_PFI_DO);
5101
5102 data[1] = ni_readw(M_Offset_PFI_DI);
5103
5104 return insn->n;
5105}
5106
5107static int ni_pfi_insn_config(struct comedi_device *dev,
5108 struct comedi_subdevice *s,
5109 struct comedi_insn *insn, unsigned int *data)
5110{
5111 struct ni_private *devpriv = dev->private;
5112 unsigned int chan;
5113
5114 if (insn->n < 1)
5115 return -EINVAL;
5116
5117 chan = CR_CHAN(insn->chanspec);
5118
5119 switch (data[0]) {
5120 case COMEDI_OUTPUT:
5121 ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 1);
5122 break;
5123 case COMEDI_INPUT:
5124 ni_set_bits(dev, IO_Bidirection_Pin_Register, 1 << chan, 0);
5125 break;
5126 case INSN_CONFIG_DIO_QUERY:
5127 data[1] =
5128 (devpriv->io_bidirection_pin_reg & (1 << chan)) ?
5129 COMEDI_OUTPUT : COMEDI_INPUT;
5130 return 0;
5131 break;
5132 case INSN_CONFIG_SET_ROUTING:
5133 return ni_set_pfi_routing(dev, chan, data[1]);
5134 break;
5135 case INSN_CONFIG_GET_ROUTING:
5136 data[1] = ni_get_pfi_routing(dev, chan);
5137 break;
5138 case INSN_CONFIG_FILTER:
5139 return ni_config_filter(dev, chan, data[1]);
5140 break;
5141 default:
5142 return -EINVAL;
5143 }
5144 return 0;
5145}
5146
5147/*
5148 *
5149 * NI RTSI Bus Functions 5135 * NI RTSI Bus Functions
5150 * 5136 *
5151 */ 5137 */