diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2014-05-28 19:26:30 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-06-18 17:33:51 -0400 |
commit | 4187a79a8416cbbb37354d6e64d013db0f131646 (patch) | |
tree | bda3844cda6b98037e57111fa0017c401908304f | |
parent | c8508a1d7bfcef2fa557770ef94f481b5d70c9a6 (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.c | 372 |
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 | ||
224 | static int ni_pfi_insn_bits(struct comedi_device *dev, | ||
225 | struct comedi_subdevice *s, | ||
226 | struct comedi_insn *insn, unsigned int *data); | ||
227 | static int ni_pfi_insn_config(struct comedi_device *dev, | ||
228 | struct comedi_subdevice *s, | ||
229 | struct comedi_insn *insn, unsigned int *data); | ||
230 | static unsigned ni_old_get_pfi_routing(struct comedi_device *dev, | ||
231 | unsigned chan); | ||
232 | |||
233 | static void ni_rtsi_init(struct comedi_device *dev); | 224 | static void ni_rtsi_init(struct comedi_device *dev); |
234 | static int ni_rtsi_insn_bits(struct comedi_device *dev, | 225 | static 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 | ||
4504 | static 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 | |||
4546 | static 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 | |||
4555 | static 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 | |||
4565 | static 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 | |||
4585 | static 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 | |||
4595 | static 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 | |||
4606 | static 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 | |||
4623 | static 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 | |||
4664 | static 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 |
4514 | static int ni_gpct_cmd(struct comedi_device *dev, struct comedi_subdevice *s) | 4684 | static 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 | |||
4969 | static 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 | |||
4989 | static 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 | |||
4998 | static 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 | |||
5009 | static 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 | |||
5021 | static 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 | |||
5062 | static 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 | |||
5072 | static 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 | |||
5088 | static 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 | |||
5107 | static 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 | */ |