staging: comedi: adl_pci6208: combine PCI-6208 and PCI-6216 support
authorIan Abbott <abbotti@mev.co.uk>
Fri, 27 Feb 2015 15:07:35 +0000 (15:07 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 2 Mar 2015 02:57:40 +0000 (18:57 -0800)
commitcd6b76604d1df088409856fade41b26675d5952e
tree95c15555a92ed428a23f8b4761f68837ff806a31
parentaff0dff965604b22119b0c5fa7751dc78bf5d96a
staging: comedi: adl_pci6208: combine PCI-6208 and PCI-6216 support

This module's PCI device table has separate PCI device IDs for PCI-6208
and PCI-6216, but in reality, both boards and their cPCI and PCIe
variants seem to have the same PCI device ID: 0x6208.  The PCI subdevice
ID doesn't seem to help either.

It shouldn't do any harm to claim 16 AO channels for all devices
supported by this driver.  The original PCI-6216 is just a PCI-6208 with
a daughter board providing the extra DACs.  The data is clocked out to
the DACs serially with no acknowledgment.  I assume this would still
happen when the DACs for the upper 8 channels are missing.  Therefore,
change the driver to support a single board type with 16 AO channels,
and remove the suspicious PCI device ID for the PCI-6216.

Evidence about lack of a separate PCI device ID for PCI-6216 follows....

1. Jesus Vasquez reports the following lspci output for a PCIe-6216 on
his Ubuntu 12.04 system:

lspci -n -vvv
07:00.0 1180: 144a:6208 (rev 02)
        Subsystem: 144a:6208
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
        Region 0: Memory at f6000000 (32-bit, non-prefetchable)
[size=128]
        Region 1: I/O ports at c100 [size=128]
        Region 2: I/O ports at c000 [size=256]
        Kernel driver in use: adl_pci6208
        Kernel modules: adl_pci6208

That system's "adl_pci6208" module only has the single PCI device ID for
the PCI-6208, but works for his PCIe-6216 except that it only supports 8
analog output channels instead of 16.

2. ADLINK's binary Linux module "pci6208.ko" (there is no separate
module for the PCI-6216) has a single alias:

  alias: pci:v0000144Ad00006208sv*sd*bc*sc*i*

3. The MS Windows drivers include this set of hardware IDs for the
PCI-6208 series, with nothing more specific for the PCI-6216 (they are
all tied to the same name "ADLINK PCI-6208" and there is no mention of
PCI-6216):

  PCI\VEN_10B5&DEV_9050&SUBSYS_62089999
  PCI\VEN_144A&DEV_6208&SUBSYS_6208144A
  PCI\VEN_144A&DEV_6208&SUBSYS_62089999
  PCI\VEN_144A&DEV_6208&SUBSYS_C208144A
  PCI\VEN_144A&DEV_6208&SUBSYS_C20855AA
  PCI\VEN_144A&DEV_6208

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/adl_pci6208.c