anchor.diff:  "mesaflash" utility should be used (available from Mesa). It is perfectly
   valid and reasonable to load these cards with no config string at all.
   
  -**num_dplls** [optional, default: -1]
  +=== **num_dplls** [optional, default: -1]
   The hm2dpll is a phase-locked loop timer module which may be used to trigger
   certain types of encoder. This parameter can be used to disable the hm2dpll by
   setting the number to 0. There is only ever one module of this type, with 4 
   timer channels, so the other valid numbers are -1 (enable all) and 1, both of
  -which end up meaning the same thing. 
  -
  -**num_encoders** [optional, default: -1]
  +which end up meaning the same thing.
  +
  +=== **num_encoders** [optional, default: -1]
   Only enable the first N encoders.  If N is -1, all encoders are enabled.
   If N is 0, no encoders are enabled.  If N is greater than the number of
   encoders available in the firmware, the board will fail to register.
   
  -**ssi_chan_N** [optional, default: ""]
  +=== **ssi_chan_N** [optional, default: ""]
   Specifies how the bit stream from a Synchronous Serial Interface device will be
   interpreted. There should be an entry for each device connected. Only channels
   with a format specifier will be enabled. (as the software can not guess data
  -rates and bit lengths) 
  -
  -**biss_chan_N** [optional, default: ""]
  +rates and bit lengths)
  +
  +=== **biss_chan_N** [optional, default: ""]
   As for ssi_chan_N, but for BiSS devices
   
  -**fanuc_chan_N** [optional, default: ""]
  +=== **fanuc_chan_N** [optional, default: ""]
   Specifies how the bit stream from a Fanuc absolute encoder will be
   interpreted. There should be an entry for each device connected. Only channels
   with a format specifier will be enabled. (as the software can not guess data
  -rates and bit lengths) 
  -
  -**num_resolvers** [optional, default: -1]
  +rates and bit lengths)
  +
  +=== **num_resolvers** [optional, default: -1]
   Only enable the first N resolvers. If N = -1 then all resolvers are enabled.
   This module does not work with generic resolvers (unlike the encoder module
   which works with any encoder). At the time of writing the  Hostmot2 Resolver
   function only works with the Mesa 7i49 card.
   
  -**num_pwmgens** [optional, default: -1]
  +=== **num_pwmgens** [optional, default: -1]
   Only enable the first N pwmgens.  If N is -1, all pwmgens are enabled.
   If N is 0, no pwmgens are enabled.  If N is greater than the number of
   pwmgens available in the firmware, the board will fail to register.
   
  -**num_3pwmgens** [optional, default: -1]
  +=== **num_3pwmgens** [optional, default: -1]
   Only enable the first N Three-phase pwmgens.  If N is -1, all 3pwmgens
   are enabled. If N is 0, no pwmgens are enabled.  If N is greater than the
   number of pwmgens available in the firmware, the board will fail to register.
   
  -**num_stepgens** [optional, default: -1]
  +=== **num_stepgens** [optional, default: -1]
   Only enable the first N stepgens.  If N is -1, all stepgens are enabled.
   If N is 0, no stepgens are enabled.  If N is greater than the number of
   stepgens available in the firmware, the board will fail to register.
   
  -
  -**stepgen_width** [optional, default: 2]
  +=== **stepgen_width** [optional, default: 2]
   Used to mask extra, unwanted, stepgen pins. Stepper drives typically require
   only two pins (step and dir) but the Hostmot2 stepgen can drive up to 8 output
   pins for specialised applications (depending on firmware). This parameter
   applies to all stepgen instances. Unused, masked pins will be available as GPIO.
   
  -**sserial_port_N (N = 0 .. 3)** [optional, default: 00000000 for all ports]
  +
  +=== **sserial_port_N (N = 0 .. 3)** [optional, default: 00000000 for all ports]
  +
   Up to 32 Smart Serial devices can be connected to a Mesa Anything IO board
   depending on the firmware used and the number of physical connections on the
   board. These are arranged in 1-4 ports of 1 to 8 channels.
  - Some Smart Serial (SSLBP) cards offer more than one load-time configuration,
  +
  +Some Smart Serial (SSLBP) cards offer more than one load-time configuration,
   for example all inputs, or all outputs, or offering additional analogue input on
   some digital pins.
  - To set the modes for port 0 use, for example **sserial_port_0=0120xxxx**
  - A '0'in the string sets the corresponding port to mode 0, 1 to mode 1, and so
  -on up to mode 9. An "x" in any position disables that channel and makes the
  +
  +To set the modes for port 0 use, for example **sserial_port_0=0120xxxx**
  +A '0'in the string sets the corresponding port to mode 0, 1 to mode 1, and so
  +on up to mode 9. An 'x' in any position disables that channel and makes the
   corresponding FPGA pins available as GPIO. 
  - The string can be up to 8 characters long, and if it defines more
  +
  +The string can be up to 8 characters long, and if it defines more
   modes than there are channels on the port then the extras are ignored. Channel
   numbering is left to right so the example above would set sserial device 0.0
   to mode 0, 0.2 to mode2 and disable channels 0.4 onwards. 
  - The sserial driver will auto-detect connected devices, no further configuration
  +
  +The sserial driver will auto-detect connected devices, no further configuration
   should be needed. Unconnected channels will default to GPIO, but the pin values
   will vary semi-randomly during boot when card-detection runs, to it is best to 
   actively disable any channel that is to be used for GPIO. 
   
  -**num_bspis** [optional, default: -1]
  +=== **num_bspis** [optional, default: -1]
   Only enable the first N Buffered SPI drivers. If N is -1 then all the drivers 
   are enabled. Each BSPI driver can address 16 devices.
   
  -**num_leds** [optional, default: -1]
  +=== **num_leds** [optional, default: -1]
   Only enable the first N of the LEDs on the FPGA board. If N is -1, then HAL
   pins for all the LEDs will be created. If N=0 then no pins will be added.
   
  -**enable_raw** [optional]
  +=== **enable_raw** [optional]
   If specified, this turns on a raw access mode, whereby a user can peek and
   poke the firmware from HAL.  See Raw Mode below.
  -
  -.RE
  -
   
   == dpll
   The hm2dpll module has pins like "hm2___<BoardType>__.__<BoardNum>__.dpll"
  
positive.code: and to the software encoder component.  Each encoder instance has the
  following pins and parameters:
  
  Pins:
  
  
  (s32 out) count
  Number of encoder counts since the previous reset.
  
  
  (float out) position
  Encoder position in position units (count / scale).
  
  
  (float out) velocity
  Estimated encoder velocity in position units
  per second.
  
  
  (bit in) reset
  When this pin is TRUE, the count and position pins are
  set to 0.  (The value of the velocity pin is not affected by this.)
  The driver does not reset this pin to FALSE after resetting the count
  to 0, that is the user's job.
  
  
  (bit in/out) index-enable
  When this pin is set to True, the count
  (and therefore also position) are reset to zero on the next Index
  (Phase-Z) pulse.  At the same time, index-enable is reset to zero to
  indicate that the pulse has occurred.
  
  
  (s32 out) rawcount
  Total number of encoder counts since the start,
  not adjusted for index or reset.
  
  Parameters:
  
  
  (float r/w) scale
  Converts from 'count' units to 'position' units.
  
  
  (bit r/w) index-invert
  If set to True, the rising edge of the Index
  input pin triggers the Index event (if index-enable is True).  If set
  to False, the falling edge triggers.
  
  
  (bit r/w) index-mask
  If set to True, the Index input pin only has an
  effect if the Index-Mask input pin is True (or False, depending on the
  index-mask-invert pin below).
  
  
  (bit r/w) index-mask-invert
  If set to True, Index-Mask must be False
  for Index to have an effect.  If set to False, the Index-Mask pin must
  be True.
  
  
  (bit r/w) counter-mode
  Set to False (the default) for Quadrature.
  Set to True for Step/Dir (in which case Step is on the A pin and Dir is
  on the B pin).
  
  
  (bit r/w) filter
  If set to True (the default), the quadrature counter
  needs 15 clocks to register a change on any of the three input lines
  (any pulse shorter than this is rejected as noise).  If set to False, the
  quadrature counter needs only 3 clocks to register a change.  The encoder
  sample clock runs at 33 MHz on the PCI AnyIO cards and 50 MHz on the 7i43.
  
  
  (float r/w) vel-timeout
  When the encoder is moving slower than one
  pulse for each time that the driver reads the count from the FPGA (in
  the hm2_read() function), the velocity is harder to estimate.  The driver
  
negative.code: With Raw mode enabled, a user may peek and poke the firmware from HAL,
  and may dump the internal state of the hostmot2 driver to the syslog.
  
  === Pins:
  (u32 in) read_address
  
  [indent=4]
  ====
  The bottom 16 bits of this is used as the address
  to read from.
  ====
  
  (u32 out) read_data
  
  [indent=4]
  ====
  Each time the hm2_read() function is called, this
  pin is updated with the value at .read_address.
  ====
  
  (u32 in) write_address
  
  [indent=4]
  ====
  The bottom 16 bits of this is used as the address
  to write to.
  ====
  
  (u32 in) write_data
  
  [indent=4]
  ====
  This is the value to write to .write_address.
  ====
  
  (bit in) write_strobe
  
  [indent=4]
  ====
  Each time the hm2_write() function is called, this
  pin is examined.  If it is True, then value in .write_data is written
  to the address in .write_address, and .write_strobe is set back to False.
  ====
  
  (bit in/out) dump_state
  
  [indent=4]
  ====
  This pin is normally False.  If it gets set to
  True the hostmot2 driver will write its representation of the board's
  internal state to the syslog, and set the pin back to False.
  ====
  
  == Setting up Smart Serial devices 
  See man setsserial for the current way to set smart-serial eeprom parameters. 
  
  == FUNCTIONS
  **hm2_**__<BoardType>__**.**__<BoardNum>__**.read**
  
  [indent=4]
  ====
  This reads the encoder counters, stepgen feedbacks, and GPIO input pins
  from the FPGA.
  ====
  
  **hm2_**__<BoardType>__**.**__<BoardNum>__**.write**
  
  [indent=4]
  ====
  This updates the PWM duty cycles, stepgen rates, and GPIO outputs on
  the FPGA.  Any changes to configuration pins such as stepgen timing,
  GPIO inversions, etc, are also effected by this function.
  ====
  
  **hm2_**__<BoardType>__**.**__<BoardNum>__**.pet-watchdog**
  
  [indent=4]
  ====
  Pet the watchdog to keep it from biting us for a while.
  ====
  
  **hm2_**__<BoardType>__**.**__<BoardNum>__**.read_gpio**
  
  [indent=4]
  ====
  Read the GPIO input pins.  Note that the effect of this function is a
  subset of the effect of the .read() function described above.  Normally
  only .read() is used.  The only reason to call this function is if you
  want to do GPIO things in a faster-than-servo thread.  (This function
  is not available on the 7i43 due to limitations of the EPP bus.)
  ====
  
  **hm2_**__<BoardType>__**.**__<BoardNum>__**.write_gpio**
  
  [indent=4]
  ====
  Write the GPIO control registers and output pins.  Note that the effect of
  this function is a subset of the effect of the .write() function described
  above.  Normally only .write() is used.  The only reason to call this
  function is if you want to do GPIO things in a faster-than-servo thread.
  (This function is not available on the 7i43 due to limitations of the
  EPP bus.)
  ====
  
  fBhm2___<BoardType>__**.**__<BoardNum>__**.trigger-encoders**
  
  [indent=4]
  ====
  This function will only appear if the firmware contains a BiSS, Fanuc or SSI 
  encoder module and if the firmare does not contain a hm2dpll 
  module (qv) or if the modparam contains num_dplls=0.
  