aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2013-10-21 05:10:36 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-10-29 12:09:54 -0400
commit0830ada537ae50db3b2184df423e886b538989fa (patch)
treebaeeec0be8874ede9eb604e7e2585cda575ce5a5
parent2eaaccdeabf34ad70ecb7eb9c4aafa08b13a0e66 (diff)
staging: comedi: s626: make CRA and CRB setup conversions more readable
Use the new macros defined in "s626.h" for constructing and decomposing 'CRA', 'CRB' and standardized encoder setup values to make the conversions between standardized encoder setup values, and CRA/CRB register values easier to follow. There is some messing about with the 'IndxSrc' values which are 1-bit wide in the standardized encoder setup, and 2-bit wide in the 'CRA' and 'CRB' register values. This will be addressed by a later patch. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/s626.c317
1 files changed, 151 insertions, 166 deletions
diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c
index 92062ed0ac20..3fd544777abd 100644
--- a/drivers/staging/comedi/drivers/s626.c
+++ b/drivers/staging/comedi/drivers/s626.c
@@ -656,7 +656,7 @@ static void s626_set_latch_source(struct comedi_device *dev,
656{ 656{
657 s626_debi_replace(dev, k->my_crb, 657 s626_debi_replace(dev, k->my_crb,
658 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_LATCHSRC), 658 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_LATCHSRC),
659 value << S626_CRBBIT_LATCHSRC); 659 S626_SET_CRB_LATCHSRC(value));
660} 660}
661 661
662/* 662/*
@@ -678,14 +678,16 @@ static void s626_reset_cap_flags_a(struct comedi_device *dev,
678 const struct s626_enc_info *k) 678 const struct s626_enc_info *k)
679{ 679{
680 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, 680 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL,
681 S626_CRBMSK_INTRESETCMD | S626_CRBMSK_INTRESET_A); 681 (S626_SET_CRB_INTRESETCMD(1) |
682 S626_SET_CRB_INTRESET_A(1)));
682} 683}
683 684
684static void s626_reset_cap_flags_b(struct comedi_device *dev, 685static void s626_reset_cap_flags_b(struct comedi_device *dev,
685 const struct s626_enc_info *k) 686 const struct s626_enc_info *k)
686{ 687{
687 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, 688 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL,
688 S626_CRBMSK_INTRESETCMD | S626_CRBMSK_INTRESET_B); 689 (S626_SET_CRB_INTRESETCMD(1) |
690 S626_SET_CRB_INTRESET_B(1)));
689} 691}
690 692
691/* 693/*
@@ -698,6 +700,7 @@ static uint16_t s626_get_mode_a(struct comedi_device *dev,
698 uint16_t cra; 700 uint16_t cra;
699 uint16_t crb; 701 uint16_t crb;
700 uint16_t setup; 702 uint16_t setup;
703 unsigned cntsrc, clkmult, clkpol, encmode;
701 704
702 /* Fetch CRA and CRB register images. */ 705 /* Fetch CRA and CRB register images. */
703 cra = s626_debi_read(dev, k->my_cra); 706 cra = s626_debi_read(dev, k->my_cra);
@@ -707,44 +710,41 @@ static uint16_t s626_get_mode_a(struct comedi_device *dev,
707 * Populate the standardized counter setup bit fields. 710 * Populate the standardized counter setup bit fields.
708 * Note: IndexSrc is restricted to ENC_X or IndxPol. 711 * Note: IndexSrc is restricted to ENC_X or IndxPol.
709 */ 712 */
710 setup = (cra & S626_STDMSK_LOADSRC) | /* LoadSrc = LoadSrcA. */ 713 setup =
711 ((crb << (S626_STDBIT_LATCHSRC - S626_CRBBIT_LATCHSRC)) & 714 /* LoadSrc = LoadSrcA. */
712 S626_STDMSK_LATCHSRC) | /* LatchSrc = LatchSrcA. */ 715 S626_SET_STD_LOADSRC(S626_GET_CRA_LOADSRC_A(cra)) |
713 ((cra << (S626_STDBIT_INTSRC - S626_CRABIT_INTSRC_A)) & 716 /* LatchSrc = LatchSrcA. */
714 S626_STDMSK_INTSRC) | /* IntSrc = IntSrcA. */ 717 S626_SET_STD_LATCHSRC(S626_GET_CRB_LATCHSRC(crb)) |
715 ((cra << (S626_STDBIT_INDXSRC - (S626_CRABIT_INDXSRC_A + 1))) & 718 /* IntSrc = IntSrcA. */
716 S626_STDMSK_INDXSRC) | /* IndxSrc = IndxSrcA<1>. */ 719 S626_SET_STD_INTSRC(S626_GET_CRA_INTSRC_A(cra)) |
717 ((cra >> (S626_CRABIT_INDXPOL_A - S626_STDBIT_INDXPOL)) & 720 /* IndxSrc = IndxSrcA<1>. */
718 S626_STDMSK_INDXPOL) | /* IndxPol = IndxPolA. */ 721 S626_SET_STD_INDXSRC(S626_GET_CRA_INDXSRC_A(cra) >> 1) |
719 ((crb >> (S626_CRBBIT_CLKENAB_A - S626_STDBIT_CLKENAB)) & 722 /* IndxPol = IndxPolA. */
720 S626_STDMSK_CLKENAB); /* ClkEnab = ClkEnabA. */ 723 S626_SET_STD_INDXPOL(S626_GET_CRA_INDXPOL_A(cra)) |
724 /* ClkEnab = ClkEnabA. */
725 S626_SET_STD_CLKENAB(S626_GET_CRB_CLKENAB_A(crb));
721 726
722 /* Adjust mode-dependent parameters. */ 727 /* Adjust mode-dependent parameters. */
723 if (cra & (S626_CNTSRC_SYSCLK << S626_CRABIT_CNTSRC_A)) { 728 cntsrc = S626_GET_CRA_CNTSRC_A(cra);
729 if (cntsrc & S626_CNTSRC_SYSCLK) {
724 /* Timer mode (CntSrcA<1> == 1): */ 730 /* Timer mode (CntSrcA<1> == 1): */
725 /* Indicate Timer mode. */ 731 encmode = S626_ENCMODE_TIMER;
726 setup |= S626_ENCMODE_TIMER << S626_STDBIT_ENCMODE;
727 /* Set ClkPol to indicate count direction (CntSrcA<0>). */ 732 /* Set ClkPol to indicate count direction (CntSrcA<0>). */
728 setup |= (cra << (S626_STDBIT_CLKPOL - S626_CRABIT_CNTSRC_A)) & 733 clkpol = cntsrc & 1;
729 S626_STDMSK_CLKPOL;
730 /* ClkMult must be 1x in Timer mode. */ 734 /* ClkMult must be 1x in Timer mode. */
731 setup |= S626_MULT_X1 << S626_STDBIT_CLKMULT; 735 clkmult = S626_MULT_X1;
732 } else { 736 } else {
733 /* Counter mode (CntSrcA<1> == 0): */ 737 /* Counter mode (CntSrcA<1> == 0): */
734 /* Indicate Counter mode. */ 738 encmode = S626_ENCMODE_COUNTER;
735 setup |= S626_ENCMODE_COUNTER << S626_STDBIT_ENCMODE;
736 /* Pass through ClkPol. */ 739 /* Pass through ClkPol. */
737 setup |= (cra >> (S626_CRABIT_CLKPOL_A - S626_STDBIT_CLKPOL)) & 740 clkpol = S626_GET_CRA_CLKPOL_A(cra);
738 S626_STDMSK_CLKPOL;
739 /* Force ClkMult to 1x if not legal, else pass through. */ 741 /* Force ClkMult to 1x if not legal, else pass through. */
740 if ((cra & S626_CRAMSK_CLKMULT_A) == 742 clkmult = S626_GET_CRA_CLKMULT_A(cra);
741 (S626_MULT_X0 << S626_CRABIT_CLKMULT_A)) 743 if (clkmult == S626_MULT_X0)
742 setup |= S626_MULT_X1 << S626_STDBIT_CLKMULT; 744 clkmult = S626_MULT_X1;
743 else
744 setup |= (cra >> (S626_CRABIT_CLKMULT_A -
745 S626_STDBIT_CLKMULT)) &
746 S626_STDMSK_CLKMULT;
747 } 745 }
746 setup |= S626_SET_STD_ENCMODE(encmode) | S626_SET_STD_CLKMULT(clkmult) |
747 S626_SET_STD_CLKPOL(clkpol);
748 748
749 /* Return adjusted counter setup. */ 749 /* Return adjusted counter setup. */
750 return setup; 750 return setup;
@@ -756,6 +756,7 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev,
756 uint16_t cra; 756 uint16_t cra;
757 uint16_t crb; 757 uint16_t crb;
758 uint16_t setup; 758 uint16_t setup;
759 unsigned cntsrc, clkmult, clkpol, encmode;
759 760
760 /* Fetch CRA and CRB register images. */ 761 /* Fetch CRA and CRB register images. */
761 cra = s626_debi_read(dev, k->my_cra); 762 cra = s626_debi_read(dev, k->my_cra);
@@ -765,50 +766,46 @@ static uint16_t s626_get_mode_b(struct comedi_device *dev,
765 * Populate the standardized counter setup bit fields. 766 * Populate the standardized counter setup bit fields.
766 * Note: IndexSrc is restricted to ENC_X or IndxPol. 767 * Note: IndexSrc is restricted to ENC_X or IndxPol.
767 */ 768 */
768 setup = ((crb << (S626_STDBIT_INTSRC - S626_CRBBIT_INTSRC_B)) & 769 setup =
769 S626_STDMSK_INTSRC) | /* IntSrc = IntSrcB. */ 770 /* IntSrc = IntSrcB. */
770 ((crb << (S626_STDBIT_LATCHSRC - S626_CRBBIT_LATCHSRC)) & 771 S626_SET_STD_INTSRC(S626_GET_CRB_INTSRC_B(crb)) |
771 S626_STDMSK_LATCHSRC) | /* LatchSrc = LatchSrcB. */ 772 /* LatchSrc = LatchSrcB. */
772 ((crb << (S626_STDBIT_LOADSRC - S626_CRBBIT_LOADSRC_B)) & 773 S626_SET_STD_LATCHSRC(S626_GET_CRB_LATCHSRC(crb)) |
773 S626_STDMSK_LOADSRC) | /* LoadSrc = LoadSrcB. */ 774 /* LoadSrc = LoadSrcB. */
774 ((crb << (S626_STDBIT_INDXPOL - S626_CRBBIT_INDXPOL_B)) & 775 S626_SET_STD_LOADSRC(S626_GET_CRB_LOADSRC_B(crb)) |
775 S626_STDMSK_INDXPOL) | /* IndxPol = IndxPolB. */ 776 /* IndxPol = IndxPolB. */
776 ((crb >> (S626_CRBBIT_CLKENAB_B - S626_STDBIT_CLKENAB)) & 777 S626_SET_STD_INDXPOL(S626_GET_CRB_INDXPOL_B(crb)) |
777 S626_STDMSK_CLKENAB) | /* ClkEnab = ClkEnabB. */ 778 /* ClkEnab = ClkEnabB. */
778 ((cra >> ((S626_CRABIT_INDXSRC_B + 1) - S626_STDBIT_INDXSRC)) & 779 S626_SET_STD_CLKENAB(S626_GET_CRB_CLKENAB_B(crb)) |
779 S626_STDMSK_INDXSRC); /* IndxSrc = IndxSrcB<1>. */ 780 /* IndxSrc = IndxSrcB<1>. */
781 S626_SET_STD_INDXSRC(S626_GET_CRA_INDXSRC_B(cra) >> 1);
780 782
781 /* Adjust mode-dependent parameters. */ 783 /* Adjust mode-dependent parameters. */
782 if ((crb & S626_CRBMSK_CLKMULT_B) == 784 cntsrc = S626_GET_CRA_CNTSRC_B(cra);
783 (S626_MULT_X0 << S626_CRBBIT_CLKMULT_B)) { 785 clkmult = S626_GET_CRB_CLKMULT_B(crb);
786 if (clkmult == S626_MULT_X0) {
784 /* Extender mode (ClkMultB == S626_MULT_X0): */ 787 /* Extender mode (ClkMultB == S626_MULT_X0): */
785 /* Indicate Extender mode. */ 788 encmode = S626_ENCMODE_EXTENDER;
786 setup |= S626_ENCMODE_EXTENDER << S626_STDBIT_ENCMODE;
787 /* Indicate multiplier is 1x. */ 789 /* Indicate multiplier is 1x. */
788 setup |= S626_MULT_X1 << S626_STDBIT_CLKMULT; 790 clkmult = S626_MULT_X1;
789 /* Set ClkPol equal to Timer count direction (CntSrcB<0>). */ 791 /* Set ClkPol equal to Timer count direction (CntSrcB<0>). */
790 setup |= (cra >> (S626_CRABIT_CNTSRC_B - S626_STDBIT_CLKPOL)) & 792 clkpol = cntsrc & 1;
791 S626_STDMSK_CLKPOL; 793 } else if (cntsrc & S626_CNTSRC_SYSCLK) {
792 } else if (cra & (S626_CNTSRC_SYSCLK << S626_CRABIT_CNTSRC_B)) {
793 /* Timer mode (CntSrcB<1> == 1): */ 794 /* Timer mode (CntSrcB<1> == 1): */
794 /* Indicate Timer mode. */ 795 encmode = S626_ENCMODE_TIMER;
795 setup |= S626_ENCMODE_TIMER << S626_STDBIT_ENCMODE;
796 /* Indicate multiplier is 1x. */ 796 /* Indicate multiplier is 1x. */
797 setup |= S626_MULT_X1 << S626_STDBIT_CLKMULT; 797 clkmult = S626_MULT_X1;
798 /* Set ClkPol equal to Timer count direction (CntSrcB<0>). */ 798 /* Set ClkPol equal to Timer count direction (CntSrcB<0>). */
799 setup |= (cra >> (S626_CRABIT_CNTSRC_B - S626_STDBIT_CLKPOL)) & 799 clkpol = cntsrc & 1;
800 S626_STDMSK_CLKPOL;
801 } else { 800 } else {
802 /* If Counter mode (CntSrcB<1> == 0): */ 801 /* If Counter mode (CntSrcB<1> == 0): */
803 /* Indicate Counter mode. */ 802 encmode = S626_ENCMODE_COUNTER;
804 setup |= S626_ENCMODE_COUNTER << S626_STDBIT_ENCMODE;
805 /* Clock multiplier is passed through. */ 803 /* Clock multiplier is passed through. */
806 setup |= (crb >> (S626_CRBBIT_CLKMULT_B -
807 S626_STDBIT_CLKMULT)) & S626_STDMSK_CLKMULT;
808 /* Clock polarity is passed through. */ 804 /* Clock polarity is passed through. */
809 setup |= (crb << (S626_STDBIT_CLKPOL - S626_CRBBIT_CLKPOL_B)) & 805 clkpol = S626_GET_CRB_CLKPOL_B(crb);
810 S626_STDMSK_CLKPOL;
811 } 806 }
807 setup |= S626_SET_STD_ENCMODE(encmode) | S626_SET_STD_CLKMULT(clkmult) |
808 S626_SET_STD_CLKPOL(clkpol);
812 809
813 /* Return adjusted counter setup. */ 810 /* Return adjusted counter setup. */
814 return setup; 811 return setup;
@@ -827,64 +824,58 @@ static void s626_set_mode_a(struct comedi_device *dev,
827 struct s626_private *devpriv = dev->private; 824 struct s626_private *devpriv = dev->private;
828 uint16_t cra; 825 uint16_t cra;
829 uint16_t crb; 826 uint16_t crb;
827 unsigned cntsrc, clkmult, clkpol;
830 828
831 /* Initialize CRA and CRB images. */ 829 /* Initialize CRA and CRB images. */
832 /* Preload trigger is passed through. */ 830 /* Preload trigger is passed through. */
833 cra = setup & S626_CRAMSK_LOADSRC_A; 831 cra = S626_SET_CRA_LOADSRC_A(S626_GET_STD_LOADSRC(setup));
834 /* IndexSrc is restricted to ENC_X or IndxPol. */ 832 /* IndexSrc is restricted to ENC_X or IndxPol. */
835 cra |= (setup & S626_STDMSK_INDXSRC) >> 833 cra |= S626_SET_CRA_INDXSRC_A(S626_GET_STD_INDXSRC(setup) << 1);
836 (S626_STDBIT_INDXSRC - (S626_CRABIT_INDXSRC_A + 1));
837 834
838 /* Reset any pending CounterA event captures. */ 835 /* Reset any pending CounterA event captures. */
839 crb = S626_CRBMSK_INTRESETCMD | S626_CRBMSK_INTRESET_A; 836 crb = S626_SET_CRB_INTRESETCMD(1) | S626_SET_CRB_INTRESET_A(1);
840 /* Clock enable is passed through. */ 837 /* Clock enable is passed through. */
841 crb |= (setup & S626_STDMSK_CLKENAB) << 838 crb |= S626_SET_CRB_CLKENAB_A(S626_GET_STD_CLKENAB(setup));
842 (S626_CRBBIT_CLKENAB_A - S626_STDBIT_CLKENAB);
843 839
844 /* Force IntSrc to Disabled if disable_int_src is asserted. */ 840 /* Force IntSrc to Disabled if disable_int_src is asserted. */
845 if (!disable_int_src) 841 if (!disable_int_src)
846 cra |= (setup & S626_STDMSK_INTSRC) >> 842 cra |= S626_SET_CRA_INTSRC_A(S626_GET_STD_INTSRC(setup));
847 (S626_STDBIT_INTSRC - S626_CRABIT_INTSRC_A);
848 843
849 /* Populate all mode-dependent attributes of CRA & CRB images. */ 844 /* Populate all mode-dependent attributes of CRA & CRB images. */
850 switch ((setup & S626_STDMSK_ENCMODE) >> S626_STDBIT_ENCMODE) { 845 clkpol = S626_GET_STD_CLKPOL(setup);
846 switch (S626_GET_STD_ENCMODE(setup)) {
851 case S626_ENCMODE_EXTENDER: /* Extender Mode: */ 847 case S626_ENCMODE_EXTENDER: /* Extender Mode: */
852 /* Force to Timer mode (Extender valid only for B counters). */ 848 /* Force to Timer mode (Extender valid only for B counters). */
853 /* Fall through to case S626_ENCMODE_TIMER: */ 849 /* Fall through to case S626_ENCMODE_TIMER: */
854 case S626_ENCMODE_TIMER: /* Timer Mode: */ 850 case S626_ENCMODE_TIMER: /* Timer Mode: */
855 /* CntSrcA<1> selects system clock */ 851 /* CntSrcA<1> selects system clock */
856 cra |= S626_CNTSRC_SYSCLK << S626_CRABIT_CNTSRC_A; 852 cntsrc = S626_CNTSRC_SYSCLK;
857 /* Count direction (CntSrcA<0>) obtained from ClkPol. */ 853 /* Count direction (CntSrcA<0>) obtained from ClkPol. */
858 cra |= (setup & S626_STDMSK_CLKPOL) >> 854 cntsrc |= clkpol;
859 (S626_STDBIT_CLKPOL - S626_CRABIT_CNTSRC_A);
860 /* ClkPolA behaves as always-on clock enable. */ 855 /* ClkPolA behaves as always-on clock enable. */
861 cra |= 1 << S626_CRABIT_CLKPOL_A; 856 clkpol = 1;
862 /* ClkMult must be 1x. */ 857 /* ClkMult must be 1x. */
863 cra |= S626_MULT_X1 << S626_CRABIT_CLKMULT_A; 858 clkmult = S626_MULT_X1;
864 break; 859 break;
865 default: /* Counter Mode: */ 860 default: /* Counter Mode: */
866 /* Select ENC_C and ENC_D as clock/direction inputs. */ 861 /* Select ENC_C and ENC_D as clock/direction inputs. */
867 cra |= S626_CNTSRC_ENCODER << S626_CRABIT_CNTSRC_A; 862 cntsrc = S626_CNTSRC_ENCODER;
868 /* Clock polarity is passed through. */ 863 /* Clock polarity is passed through. */
869 cra |= (setup & S626_STDMSK_CLKPOL) <<
870 (S626_CRABIT_CLKPOL_A - S626_STDBIT_CLKPOL);
871 /* Force multiplier to x1 if not legal, else pass through. */ 864 /* Force multiplier to x1 if not legal, else pass through. */
872 if ((setup & S626_STDMSK_CLKMULT) == 865 clkmult = S626_GET_STD_CLKMULT(setup);
873 (S626_MULT_X0 << S626_STDBIT_CLKMULT)) 866 if (clkmult == S626_MULT_X0)
874 cra |= S626_MULT_X1 << S626_CRABIT_CLKMULT_A; 867 clkmult = S626_MULT_X1;
875 else
876 cra |= (setup & S626_STDMSK_CLKMULT) <<
877 (S626_CRABIT_CLKMULT_A - S626_STDBIT_CLKMULT);
878 break; 868 break;
879 } 869 }
870 cra |= S626_SET_CRA_CNTSRC_A(cntsrc) | S626_SET_CRA_CLKPOL_A(clkpol) |
871 S626_SET_CRA_CLKMULT_A(clkmult);
880 872
881 /* 873 /*
882 * Force positive index polarity if IndxSrc is software-driven only, 874 * Force positive index polarity if IndxSrc is software-driven only,
883 * otherwise pass it through. 875 * otherwise pass it through.
884 */ 876 */
885 if (~setup & S626_STDMSK_INDXSRC) 877 if (S626_GET_STD_INDXSRC(setup) == S626_INDXSRC_HARD)
886 cra |= (setup & S626_STDMSK_INDXPOL) << 878 cra |= S626_SET_CRA_INDXPOL_A(S626_GET_STD_INDXPOL(setup));
887 (S626_CRABIT_INDXPOL_A - S626_STDBIT_INDXPOL);
888 879
889 /* 880 /*
890 * If IntSrc has been forced to Disabled, update the MISC2 interrupt 881 * If IntSrc has been forced to Disabled, update the MISC2 interrupt
@@ -910,73 +901,65 @@ static void s626_set_mode_b(struct comedi_device *dev,
910 struct s626_private *devpriv = dev->private; 901 struct s626_private *devpriv = dev->private;
911 uint16_t cra; 902 uint16_t cra;
912 uint16_t crb; 903 uint16_t crb;
904 unsigned cntsrc, clkmult, clkpol;
913 905
914 /* Initialize CRA and CRB images. */ 906 /* Initialize CRA and CRB images. */
915 /* IndexSrc field is restricted to ENC_X or IndxPol. */ 907 /* IndexSrc field is restricted to ENC_X or IndxPol. */
916 cra = (setup & S626_STDMSK_INDXSRC) << 908 cra = S626_SET_CRA_INDXSRC_B(S626_GET_STD_INDXSRC(setup) << 1);
917 (S626_CRABIT_INDXSRC_B + 1 - S626_STDBIT_INDXSRC);
918 909
919 /* Reset event captures and disable interrupts. */ 910 /* Reset event captures and disable interrupts. */
920 crb = S626_CRBMSK_INTRESETCMD | S626_CRBMSK_INTRESET_B; 911 crb = S626_SET_CRB_INTRESETCMD(1) | S626_SET_CRB_INTRESET_B(1);
921 /* Clock enable is passed through. */ 912 /* Clock enable is passed through. */
922 crb |= (setup & S626_STDMSK_CLKENAB) << 913 crb |= S626_SET_CRB_CLKENAB_B(S626_GET_STD_CLKENAB(setup));
923 (S626_CRBBIT_CLKENAB_B - S626_STDBIT_CLKENAB);
924 /* Preload trigger source is passed through. */ 914 /* Preload trigger source is passed through. */
925 crb |= (setup & S626_STDMSK_LOADSRC) >> 915 crb |= S626_SET_CRB_LOADSRC_B(S626_GET_STD_LOADSRC(setup));
926 (S626_STDBIT_LOADSRC - S626_CRBBIT_LOADSRC_B);
927 916
928 /* Force IntSrc to Disabled if disable_int_src is asserted. */ 917 /* Force IntSrc to Disabled if disable_int_src is asserted. */
929 if (!disable_int_src) 918 if (!disable_int_src)
930 crb |= (setup & S626_STDMSK_INTSRC) >> 919 crb |= S626_SET_CRB_INTSRC_B(S626_GET_STD_INTSRC(setup));
931 (S626_STDBIT_INTSRC - S626_CRBBIT_INTSRC_B);
932 920
933 /* Populate all mode-dependent attributes of CRA & CRB images. */ 921 /* Populate all mode-dependent attributes of CRA & CRB images. */
934 switch ((setup & S626_STDMSK_ENCMODE) >> S626_STDBIT_ENCMODE) { 922 clkpol = S626_GET_STD_CLKPOL(setup);
923 switch (S626_GET_STD_ENCMODE(setup)) {
935 case S626_ENCMODE_TIMER: /* Timer Mode: */ 924 case S626_ENCMODE_TIMER: /* Timer Mode: */
936 /* CntSrcB<1> selects system clock */ 925 /* CntSrcB<1> selects system clock */
937 cra |= S626_CNTSRC_SYSCLK << S626_CRABIT_CNTSRC_B; 926 cntsrc = S626_CNTSRC_SYSCLK;
938 /* with direction (CntSrcB<0>) obtained from ClkPol. */ 927 /* with direction (CntSrcB<0>) obtained from ClkPol. */
939 cra |= (setup & S626_STDMSK_CLKPOL) << 928 cntsrc |= clkpol;
940 (S626_CRABIT_CNTSRC_B - S626_STDBIT_CLKPOL);
941 /* ClkPolB behaves as always-on clock enable. */ 929 /* ClkPolB behaves as always-on clock enable. */
942 crb |= 1 << S626_CRBBIT_CLKPOL_B; 930 clkpol = 1;
943 /* ClkMultB must be 1x. */ 931 /* ClkMultB must be 1x. */
944 crb |= S626_MULT_X1 << S626_CRBBIT_CLKMULT_B; 932 clkmult = S626_MULT_X1;
945 break; 933 break;
946 case S626_ENCMODE_EXTENDER: /* Extender Mode: */ 934 case S626_ENCMODE_EXTENDER: /* Extender Mode: */
947 /* CntSrcB source is OverflowA (same as "timer") */ 935 /* CntSrcB source is OverflowA (same as "timer") */
948 cra |= S626_CNTSRC_SYSCLK << S626_CRABIT_CNTSRC_B; 936 cntsrc = S626_CNTSRC_SYSCLK;
949 /* with direction obtained from ClkPol. */ 937 /* with direction obtained from ClkPol. */
950 cra |= (setup & S626_STDMSK_CLKPOL) << 938 cntsrc |= clkpol;
951 (S626_CRABIT_CNTSRC_B - S626_STDBIT_CLKPOL);
952 /* ClkPolB controls IndexB -- always set to active. */ 939 /* ClkPolB controls IndexB -- always set to active. */
953 crb |= 1 << S626_CRBBIT_CLKPOL_B; 940 clkpol = 1;
954 /* ClkMultB selects OverflowA as the clock source. */ 941 /* ClkMultB selects OverflowA as the clock source. */
955 crb |= S626_MULT_X0 << S626_CRBBIT_CLKMULT_B; 942 clkmult = S626_MULT_X0;
956 break; 943 break;
957 default: /* Counter Mode: */ 944 default: /* Counter Mode: */
958 /* Select ENC_C and ENC_D as clock/direction inputs. */ 945 /* Select ENC_C and ENC_D as clock/direction inputs. */
959 cra |= S626_CNTSRC_ENCODER << S626_CRABIT_CNTSRC_B; 946 cntsrc = S626_CNTSRC_ENCODER;
960 /* ClkPol is passed through. */ 947 /* ClkPol is passed through. */
961 crb |= (setup & S626_STDMSK_CLKPOL) >>
962 (S626_STDBIT_CLKPOL - S626_CRBBIT_CLKPOL_B);
963 /* Force ClkMult to x1 if not legal, otherwise pass through. */ 948 /* Force ClkMult to x1 if not legal, otherwise pass through. */
964 if ((setup & S626_STDMSK_CLKMULT) == 949 clkmult = S626_GET_STD_CLKMULT(setup);
965 (S626_MULT_X0 << S626_STDBIT_CLKMULT)) 950 if (clkmult == S626_MULT_X0)
966 crb |= S626_MULT_X1 << S626_CRBBIT_CLKMULT_B; 951 clkmult = S626_MULT_X1;
967 else
968 crb |= (setup & S626_STDMSK_CLKMULT) <<
969 (S626_CRBBIT_CLKMULT_B - S626_STDBIT_CLKMULT);
970 break; 952 break;
971 } 953 }
954 cra |= S626_SET_CRA_CNTSRC_B(cntsrc);
955 crb |= S626_SET_CRB_CLKPOL_B(clkpol) | S626_SET_CRB_CLKMULT_B(clkmult);
972 956
973 /* 957 /*
974 * Force positive index polarity if IndxSrc is software-driven only, 958 * Force positive index polarity if IndxSrc is software-driven only,
975 * otherwise pass it through. 959 * otherwise pass it through.
976 */ 960 */
977 if (~setup & S626_STDMSK_INDXSRC) 961 if (S626_GET_STD_INDXSRC(setup) == S626_INDXSRC_HARD)
978 crb |= (setup & S626_STDMSK_INDXPOL) >> 962 crb |= S626_SET_CRB_INDXPOL_B(S626_GET_STD_INDXPOL(setup));
979 (S626_STDBIT_INDXPOL - S626_CRBBIT_INDXPOL_B);
980 963
981 /* 964 /*
982 * If IntSrc has been forced to Disabled, update the MISC2 interrupt 965 * If IntSrc has been forced to Disabled, update the MISC2 interrupt
@@ -1003,7 +986,7 @@ static void s626_set_enable_a(struct comedi_device *dev,
1003{ 986{
1004 s626_debi_replace(dev, k->my_crb, 987 s626_debi_replace(dev, k->my_crb,
1005 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A), 988 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_A),
1006 enab << S626_CRBBIT_CLKENAB_A); 989 S626_SET_CRB_CLKENAB_A(enab));
1007} 990}
1008 991
1009static void s626_set_enable_b(struct comedi_device *dev, 992static void s626_set_enable_b(struct comedi_device *dev,
@@ -1011,26 +994,26 @@ static void s626_set_enable_b(struct comedi_device *dev,
1011{ 994{
1012 s626_debi_replace(dev, k->my_crb, 995 s626_debi_replace(dev, k->my_crb,
1013 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_B), 996 ~(S626_CRBMSK_INTCTRL | S626_CRBMSK_CLKENAB_B),
1014 enab << S626_CRBBIT_CLKENAB_B); 997 S626_SET_CRB_CLKENAB_B(enab));
1015} 998}
1016 999
1017static uint16_t s626_get_enable_a(struct comedi_device *dev, 1000static uint16_t s626_get_enable_a(struct comedi_device *dev,
1018 const struct s626_enc_info *k) 1001 const struct s626_enc_info *k)
1019{ 1002{
1020 return (s626_debi_read(dev, k->my_crb) >> S626_CRBBIT_CLKENAB_A) & 1; 1003 return S626_GET_CRB_CLKENAB_A(s626_debi_read(dev, k->my_crb));
1021} 1004}
1022 1005
1023static uint16_t s626_get_enable_b(struct comedi_device *dev, 1006static uint16_t s626_get_enable_b(struct comedi_device *dev,
1024 const struct s626_enc_info *k) 1007 const struct s626_enc_info *k)
1025{ 1008{
1026 return (s626_debi_read(dev, k->my_crb) >> S626_CRBBIT_CLKENAB_B) & 1; 1009 return S626_GET_CRB_CLKENAB_B(s626_debi_read(dev, k->my_crb));
1027} 1010}
1028 1011
1029#ifdef unused 1012#ifdef unused
1030static uint16_t s626_get_latch_source(struct comedi_device *dev, 1013static uint16_t s626_get_latch_source(struct comedi_device *dev,
1031 const struct s626_enc_info *k) 1014 const struct s626_enc_info *k)
1032{ 1015{
1033 return (s626_debi_read(dev, k->my_crb) >> S626_CRBBIT_LATCHSRC) & 3; 1016 return S626_GET_CRB_LATCHSRC(s626_debi_read(dev, k->my_crb));
1034} 1017}
1035#endif 1018#endif
1036 1019
@@ -1043,7 +1026,7 @@ static void s626_set_load_trig_a(struct comedi_device *dev,
1043 const struct s626_enc_info *k, uint16_t trig) 1026 const struct s626_enc_info *k, uint16_t trig)
1044{ 1027{
1045 s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_LOADSRC_A, 1028 s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_LOADSRC_A,
1046 trig << S626_CRABIT_LOADSRC_A); 1029 S626_SET_CRA_LOADSRC_A(trig));
1047} 1030}
1048 1031
1049static void s626_set_load_trig_b(struct comedi_device *dev, 1032static void s626_set_load_trig_b(struct comedi_device *dev,
@@ -1051,19 +1034,19 @@ static void s626_set_load_trig_b(struct comedi_device *dev,
1051{ 1034{
1052 s626_debi_replace(dev, k->my_crb, 1035 s626_debi_replace(dev, k->my_crb,
1053 ~(S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL), 1036 ~(S626_CRBMSK_LOADSRC_B | S626_CRBMSK_INTCTRL),
1054 trig << S626_CRBBIT_LOADSRC_B); 1037 S626_SET_CRB_LOADSRC_B(trig));
1055} 1038}
1056 1039
1057static uint16_t s626_get_load_trig_a(struct comedi_device *dev, 1040static uint16_t s626_get_load_trig_a(struct comedi_device *dev,
1058 const struct s626_enc_info *k) 1041 const struct s626_enc_info *k)
1059{ 1042{
1060 return (s626_debi_read(dev, k->my_cra) >> S626_CRABIT_LOADSRC_A) & 3; 1043 return S626_GET_CRA_LOADSRC_A(s626_debi_read(dev, k->my_cra));
1061} 1044}
1062 1045
1063static uint16_t s626_get_load_trig_b(struct comedi_device *dev, 1046static uint16_t s626_get_load_trig_b(struct comedi_device *dev,
1064 const struct s626_enc_info *k) 1047 const struct s626_enc_info *k)
1065{ 1048{
1066 return (s626_debi_read(dev, k->my_crb) >> S626_CRBBIT_LOADSRC_B) & 3; 1049 return S626_GET_CRB_LOADSRC_B(s626_debi_read(dev, k->my_crb));
1067} 1050}
1068 1051
1069/* 1052/*
@@ -1079,11 +1062,12 @@ static void s626_set_int_src_a(struct comedi_device *dev,
1079 1062
1080 /* Reset any pending counter overflow or index captures. */ 1063 /* Reset any pending counter overflow or index captures. */
1081 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL, 1064 s626_debi_replace(dev, k->my_crb, ~S626_CRBMSK_INTCTRL,
1082 S626_CRBMSK_INTRESETCMD | S626_CRBMSK_INTRESET_A); 1065 (S626_SET_CRB_INTRESETCMD(1) |
1066 S626_SET_CRB_INTRESET_A(1)));
1083 1067
1084 /* Program counter interrupt source. */ 1068 /* Program counter interrupt source. */
1085 s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_INTSRC_A, 1069 s626_debi_replace(dev, k->my_cra, ~S626_CRAMSK_INTSRC_A,
1086 int_source << S626_CRABIT_INTSRC_A); 1070 S626_SET_CRA_INTSRC_A(int_source));
1087 1071
1088 /* Update MISC2 interrupt enable mask. */ 1072 /* Update MISC2 interrupt enable mask. */
1089 devpriv->counter_int_enabs = 1073 devpriv->counter_int_enabs =
@@ -1102,13 +1086,12 @@ static void s626_set_int_src_b(struct comedi_device *dev,
1102 crb = s626_debi_read(dev, k->my_crb) & ~S626_CRBMSK_INTCTRL; 1086 crb = s626_debi_read(dev, k->my_crb) & ~S626_CRBMSK_INTCTRL;
1103 1087
1104 /* Reset any pending counter overflow or index captures. */ 1088 /* Reset any pending counter overflow or index captures. */
1105 s626_debi_write(dev, k->my_crb, (crb | S626_CRBMSK_INTRESETCMD | 1089 s626_debi_write(dev, k->my_crb, (crb | S626_SET_CRB_INTRESETCMD(1) |
1106 S626_CRBMSK_INTRESET_B)); 1090 S626_SET_CRB_INTRESET_B(1)));
1107 1091
1108 /* Program counter interrupt source. */ 1092 /* Program counter interrupt source. */
1109 s626_debi_write(dev, k->my_crb, 1093 s626_debi_write(dev, k->my_crb, ((crb & ~S626_CRBMSK_INTSRC_B) |
1110 ((crb & ~S626_CRBMSK_INTSRC_B) | 1094 S626_SET_CRB_INTSRC_B(int_source)));
1111 (int_source << S626_CRBBIT_INTSRC_B)));
1112 1095
1113 /* Update MISC2 interrupt enable mask. */ 1096 /* Update MISC2 interrupt enable mask. */
1114 devpriv->counter_int_enabs = 1097 devpriv->counter_int_enabs =
@@ -1119,13 +1102,13 @@ static void s626_set_int_src_b(struct comedi_device *dev,
1119static uint16_t s626_get_int_src_a(struct comedi_device *dev, 1102static uint16_t s626_get_int_src_a(struct comedi_device *dev,
1120 const struct s626_enc_info *k) 1103 const struct s626_enc_info *k)
1121{ 1104{
1122 return (s626_debi_read(dev, k->my_cra) >> S626_CRABIT_INTSRC_A) & 3; 1105 return S626_GET_CRA_INTSRC_A(s626_debi_read(dev, k->my_cra));
1123} 1106}
1124 1107
1125static uint16_t s626_get_int_src_b(struct comedi_device *dev, 1108static uint16_t s626_get_int_src_b(struct comedi_device *dev,
1126 const struct s626_enc_info *k) 1109 const struct s626_enc_info *k)
1127{ 1110{
1128 return (s626_debi_read(dev, k->my_crb) >> S626_CRBBIT_INTSRC_B) & 3; 1111 return S626_GET_CRB_INTSRC_B(s626_debi_read(dev, k->my_crb));
1129} 1112}
1130 1113
1131#ifdef unused 1114#ifdef unused
@@ -1136,13 +1119,13 @@ static void s626_set_clk_mult(struct comedi_device *dev,
1136 const struct s626_enc_info *k, uint16_t value) 1119 const struct s626_enc_info *k, uint16_t value)
1137{ 1120{
1138 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKMULT) | 1121 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKMULT) |
1139 (value << S626_STDBIT_CLKMULT)), false); 1122 S626_SET_STD_CLKMULT(value)), false);
1140} 1123}
1141 1124
1142static uint16_t s626_get_clk_mult(struct comedi_device *dev, 1125static uint16_t s626_get_clk_mult(struct comedi_device *dev,
1143 const struct s626_enc_info *k) 1126 const struct s626_enc_info *k)
1144{ 1127{
1145 return (k->get_mode(dev, k) >> S626_STDBIT_CLKMULT) & 3; 1128 return S626_GET_STD_CLKMULT(k->get_mode(dev, k));
1146} 1129}
1147 1130
1148/* 1131/*
@@ -1152,13 +1135,13 @@ static void s626_set_clk_pol(struct comedi_device *dev,
1152 const struct s626_enc_info *k, uint16_t value) 1135 const struct s626_enc_info *k, uint16_t value)
1153{ 1136{
1154 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKPOL) | 1137 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_CLKPOL) |
1155 (value << S626_STDBIT_CLKPOL)), false); 1138 S626_SET_STD_CLKPOL(value)), false);
1156} 1139}
1157 1140
1158static uint16_t s626_get_clk_pol(struct comedi_device *dev, 1141static uint16_t s626_get_clk_pol(struct comedi_device *dev,
1159 const struct s626_enc_info *k) 1142 const struct s626_enc_info *k)
1160{ 1143{
1161 return (k->get_mode(dev, k) >> S626_STDBIT_CLKPOL) & 1; 1144 return S626_GET_STD_CLKPOL(k->get_mode(dev, k));
1162} 1145}
1163 1146
1164/* 1147/*
@@ -1168,13 +1151,13 @@ static void s626_set_enc_mode(struct comedi_device *dev,
1168 const struct s626_enc_info *k, uint16_t value) 1151 const struct s626_enc_info *k, uint16_t value)
1169{ 1152{
1170 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_ENCMODE) | 1153 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_ENCMODE) |
1171 (value << S626_STDBIT_ENCMODE)), false); 1154 S626_SET_STD_ENCMODE(value)), false);
1172} 1155}
1173 1156
1174static uint16_t s626_get_enc_mode(struct comedi_device *dev, 1157static uint16_t s626_get_enc_mode(struct comedi_device *dev,
1175 const struct s626_enc_info *k) 1158 const struct s626_enc_info *k)
1176{ 1159{
1177 return (k->get_mode(dev, k) >> S626_STDBIT_ENCMODE) & 3; 1160 return S626_GET_STD_ENCMODE(k->get_mode(dev, k));
1178} 1161}
1179 1162
1180/* 1163/*
@@ -1184,13 +1167,13 @@ static void s626_set_index_pol(struct comedi_device *dev,
1184 const struct s626_enc_info *k, uint16_t value) 1167 const struct s626_enc_info *k, uint16_t value)
1185{ 1168{
1186 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXPOL) | 1169 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXPOL) |
1187 ((value != 0) << S626_STDBIT_INDXPOL)), false); 1170 S626_SET_STD_INDXPOL(value != 0)), false);
1188} 1171}
1189 1172
1190static uint16_t s626_get_index_pol(struct comedi_device *dev, 1173static uint16_t s626_get_index_pol(struct comedi_device *dev,
1191 const struct s626_enc_info *k) 1174 const struct s626_enc_info *k)
1192{ 1175{
1193 return (k->get_mode(dev, k) >> S626_STDBIT_INDXPOL) & 1; 1176 return S626_GET_STD_INDXPOL(k->get_mode(dev, k));
1194} 1177}
1195 1178
1196/* 1179/*
@@ -1200,13 +1183,13 @@ static void s626_set_index_src(struct comedi_device *dev,
1200 const struct s626_enc_info *k, uint16_t value) 1183 const struct s626_enc_info *k, uint16_t value)
1201{ 1184{
1202 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXSRC) | 1185 k->set_mode(dev, k, ((k->get_mode(dev, k) & ~S626_STDMSK_INDXSRC) |
1203 ((value != 0) << S626_STDBIT_INDXSRC)), false); 1186 S626_SET_STD_INDXSRC(value != 0)), false);
1204} 1187}
1205 1188
1206static uint16_t s626_get_index_src(struct comedi_device *dev, 1189static uint16_t s626_get_index_src(struct comedi_device *dev,
1207 const struct s626_enc_info *k) 1190 const struct s626_enc_info *k)
1208{ 1191{
1209 return (k->get_mode(dev, k) >> S626_STDBIT_INDXSRC) & 1; 1192 return S626_GET_STD_INDXSRC(k->get_mode(dev, k));
1210} 1193}
1211#endif 1194#endif
1212 1195
@@ -2031,16 +2014,17 @@ static void s626_timer_load(struct comedi_device *dev,
2031{ 2014{
2032 uint16_t setup = 2015 uint16_t setup =
2033 /* Preload upon index. */ 2016 /* Preload upon index. */
2034 (S626_LOADSRC_INDX << S626_BF_LOADSRC) | 2017 S626_SET_STD_LOADSRC(S626_LOADSRC_INDX) |
2035 /* Disable hardware index. */ 2018 /* Disable hardware index. */
2036 (S626_INDXSRC_SOFT << S626_BF_INDXSRC) | 2019 S626_SET_STD_INDXSRC(S626_INDXSRC_SOFT) |
2037 /* Operating mode is Timer. */ 2020 /* Operating mode is Timer. */
2038 (S626_ENCMODE_TIMER << S626_BF_ENCMODE) | 2021 S626_SET_STD_ENCMODE(S626_ENCMODE_TIMER) |
2039 /* Count direction is Down. */ 2022 /* Count direction is Down. */
2040 (S626_CNTDIR_DOWN << S626_BF_CLKPOL) | 2023 S626_SET_STD_CLKPOL(S626_CNTDIR_DOWN) |
2041 /* Clock multiplier is 1x. */ 2024 /* Clock multiplier is 1x. */
2042 (S626_CLKMULT_1X << S626_BF_CLKMULT) | 2025 S626_SET_STD_CLKMULT(S626_CLKMULT_1X) |
2043 (S626_CLKENAB_INDEX << S626_BF_CLKENAB); 2026 /* Enabled by index */
2027 S626_SET_STD_CLKENAB(S626_CLKENAB_INDEX);
2044 uint16_t value_latchsrc = S626_LATCHSRC_A_INDXA; 2028 uint16_t value_latchsrc = S626_LATCHSRC_A_INDXA;
2045 /* uint16_t enab = S626_CLKENAB_ALWAYS; */ 2029 /* uint16_t enab = S626_CLKENAB_ALWAYS; */
2046 2030
@@ -2423,16 +2407,17 @@ static int s626_enc_insn_config(struct comedi_device *dev,
2423{ 2407{
2424 uint16_t setup = 2408 uint16_t setup =
2425 /* Preload upon index. */ 2409 /* Preload upon index. */
2426 (S626_LOADSRC_INDX << S626_BF_LOADSRC) | 2410 S626_SET_STD_LOADSRC(S626_LOADSRC_INDX) |
2427 /* Disable hardware index. */ 2411 /* Disable hardware index. */
2428 (S626_INDXSRC_SOFT << S626_BF_INDXSRC) | 2412 S626_SET_STD_INDXSRC(S626_INDXSRC_SOFT) |
2429 /* Operating mode is Counter. */ 2413 /* Operating mode is Counter. */
2430 (S626_ENCMODE_COUNTER << S626_BF_ENCMODE) | 2414 S626_SET_STD_ENCMODE(S626_ENCMODE_COUNTER) |
2431 /* Active high clock. */ 2415 /* Active high clock. */
2432 (S626_CLKPOL_POS << S626_BF_CLKPOL) | 2416 S626_SET_STD_CLKPOL(S626_CLKPOL_POS) |
2433 /* Clock multiplier is 1x. */ 2417 /* Clock multiplier is 1x. */
2434 (S626_CLKMULT_1X << S626_BF_CLKMULT) | 2418 S626_SET_STD_CLKMULT(S626_CLKMULT_1X) |
2435 (S626_CLKENAB_INDEX << S626_BF_CLKENAB); 2419 /* Enabled by index */
2420 S626_SET_STD_CLKENAB(S626_CLKENAB_INDEX);
2436 /* uint16_t disable_int_src = true; */ 2421 /* uint16_t disable_int_src = true; */
2437 /* uint32_t Preloadvalue; //Counter initial value */ 2422 /* uint32_t Preloadvalue; //Counter initial value */
2438 uint16_t value_latchsrc = S626_LATCHSRC_AB_READ; 2423 uint16_t value_latchsrc = S626_LATCHSRC_AB_READ;
@@ -2519,17 +2504,17 @@ static void s626_counters_init(struct comedi_device *dev)
2519 const struct s626_enc_info *k; 2504 const struct s626_enc_info *k;
2520 uint16_t setup = 2505 uint16_t setup =
2521 /* Preload upon index. */ 2506 /* Preload upon index. */
2522 (S626_LOADSRC_INDX << S626_BF_LOADSRC) | 2507 S626_SET_STD_LOADSRC(S626_LOADSRC_INDX) |
2523 /* Disable hardware index. */ 2508 /* Disable hardware index. */
2524 (S626_INDXSRC_SOFT << S626_BF_INDXSRC) | 2509 S626_SET_STD_INDXSRC(S626_INDXSRC_SOFT) |
2525 /* Operating mode is counter. */ 2510 /* Operating mode is counter. */
2526 (S626_ENCMODE_COUNTER << S626_BF_ENCMODE) | 2511 S626_SET_STD_ENCMODE(S626_ENCMODE_COUNTER) |
2527 /* Active high clock. */ 2512 /* Active high clock. */
2528 (S626_CLKPOL_POS << S626_BF_CLKPOL) | 2513 S626_SET_STD_CLKPOL(S626_CLKPOL_POS) |
2529 /* Clock multiplier is 1x. */ 2514 /* Clock multiplier is 1x. */
2530 (S626_CLKMULT_1X << S626_BF_CLKMULT) | 2515 S626_SET_STD_CLKMULT(S626_CLKMULT_1X) |
2531 /* Enabled by index */ 2516 /* Enabled by index */
2532 (S626_CLKENAB_INDEX << S626_BF_CLKENAB); 2517 S626_SET_STD_CLKENAB(S626_CLKENAB_INDEX);
2533 2518
2534 /* 2519 /*
2535 * Disable all counter interrupts and clear any captured counter events. 2520 * Disable all counter interrupts and clear any captured counter events.