Patchwork Exclude DAHDI devices from being probed by netjet

login
register
mail settings
Submitter Tzafrir Cohen
Date May 29, 2010, 11:29 p.m.
Message ID <20100529232946.GA1748@xorcom.com>
Download mbox | patch
Permalink /patch/53991/
State Changes Requested
Delegated to: David Miller
Headers show

Comments

Tzafrir Cohen - May 29, 2010, 11:29 p.m.
Many early Zaptel / DAHDI devices were based on the same Netjet PCI
chipset. However they are not the ISDN BRI adapters the netjet driver
expects to driver.

The patch excludes devices based solely on sub-vendor ID. It seems that
all of those drivers probe for that, and I don't have a better way to
check what are the exact sub-product IDs.

Notes:
1. It seems that the same change need also be applied to some hisax
   (i4l) drivers.
2. I don't have more precise data than the PCI ID tables in the drivers.
   Does this run the risk of excluding some actual Netjet ISDN cards?
3. A more informative failure message may help (if one is actually needed).
4. The MAINTAINERS file lists the git tree
   git://git.kernel.org/pub/scm/linux/kernel/git/kkeil/isdn-2.6.git but
   it does not seem to exist.

Signed-off-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
---
 drivers/isdn/hardware/mISDN/netjet.c |   30 +++++++++++++++++++++++++++---
 1 files changed, 27 insertions(+), 3 deletions(-)
Alan Cox - May 30, 2010, 2:07 p.m.
> 2. I don't have more precise data than the PCI ID tables in the drivers.
>    Does this run the risk of excluding some actual Netjet ISDN cards?

Is there a reason you are seeing so many different vendor values - surely
you should see a single 'Digium' subvendor, and various subdevice values ?


> +	switch (pdev->subsystem_vendor) {
> +	/* Fall-through */
> +	case 0x2151: /* Yeastart YSTDM8xx (ystdm8xx) */
> +	case 0xe16b: /* Zapata Project PCI-Radio (pciradio) */
> +	case 0x6159: /* Digium Wildcard T100/E100 (wct1xxp) */
> +	case 0x71fe: /* Digium Wildcard TE110P (wcte1xp) */
> +	case 0x795e: /* Digium Wildcard TE110P (wcte1xp) */
> +	case 0x797e: /* Digium Wildcard TE110P (wcte1xp) */
> +	case 0x79de: /* Digium Wildcard TE110P (wcte1xp) */
> +	case 0x79df: /* Digium Wildcard TE110P (wcte1xp) */
> +	case 0x8084: /* Digium Wildcard X101P clone (wcfxo) */
> +	case 0x8085: /* Digium Wildcard X101P (wcfxo) */
> +	case 0x8086: /* Digium Wildcard X101P clone (wcfxo) */
> +	case 0x8087: /* Digium Wildcard X101P clone (wcfxo) */
> +	case 0xa800: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xa801: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xa8fd: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xa901: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xa908: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xa9fd: /* Digium Wildcard TDM400P Rev H (wctdm) */
> +	case 0xb100: /* Digium Wildcard TDM400P Rev E/F (wctdm) */
> +	case 0xb118: /* Digium Wildcard TDM400P Rev I (wctdm) */
> +	case 0xb119: /* Digium Wildcard TDM400P Rev I (wctdm) */
> +	case 0xb1d9: /* Digium Wildcard TDM400P Rev I (wctdm) */
> +	case 0xa159: /* Digium Wildcard S400P Prototype (wctdm) */
> +	case 0xe159: /* Digium Wildcard S400P Prototype (wctdm) */

That might be better as a table. You can then als include the name and
match details in the report which will help diagnose problems with it eg

	struct whatever {
		u16 svid, sdid;
		const char *name;
	}

And then print

	netjet: %s card is not supported by this driver (%04X, %04X).\n", 
		name, svid, sdid

		
Then again we don't seem to have a driver for these other kernel devices
so perhaps the safe default would be to warn and continue unless a module
option is set. At least initially.

Alan
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/isdn/hardware/mISDN/netjet.c b/drivers/isdn/hardware/mISDN/netjet.c
index 0a3553d..42dded4 100644
--- a/drivers/isdn/hardware/mISDN/netjet.c
+++ b/drivers/isdn/hardware/mISDN/netjet.c
@@ -1060,9 +1060,33 @@  nj_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	int cfg;
 	struct tiger_hw *card;
 
-	if (pdev->subsystem_vendor == 0x8086 &&
-	    pdev->subsystem_device == 0x0003) {
-		pr_notice("Netjet: Digium X100P/X101P not handled\n");
+	switch (pdev->subsystem_vendor) {
+	/* Fall-through */
+	case 0x2151: /* Yeastart YSTDM8xx (ystdm8xx) */
+	case 0xe16b: /* Zapata Project PCI-Radio (pciradio) */
+	case 0x6159: /* Digium Wildcard T100/E100 (wct1xxp) */
+	case 0x71fe: /* Digium Wildcard TE110P (wcte1xp) */
+	case 0x795e: /* Digium Wildcard TE110P (wcte1xp) */
+	case 0x797e: /* Digium Wildcard TE110P (wcte1xp) */
+	case 0x79de: /* Digium Wildcard TE110P (wcte1xp) */
+	case 0x79df: /* Digium Wildcard TE110P (wcte1xp) */
+	case 0x8084: /* Digium Wildcard X101P clone (wcfxo) */
+	case 0x8085: /* Digium Wildcard X101P (wcfxo) */
+	case 0x8086: /* Digium Wildcard X101P clone (wcfxo) */
+	case 0x8087: /* Digium Wildcard X101P clone (wcfxo) */
+	case 0xa800: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xa801: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xa8fd: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xa901: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xa908: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xa9fd: /* Digium Wildcard TDM400P Rev H (wctdm) */
+	case 0xb100: /* Digium Wildcard TDM400P Rev E/F (wctdm) */
+	case 0xb118: /* Digium Wildcard TDM400P Rev I (wctdm) */
+	case 0xb119: /* Digium Wildcard TDM400P Rev I (wctdm) */
+	case 0xb1d9: /* Digium Wildcard TDM400P Rev I (wctdm) */
+	case 0xa159: /* Digium Wildcard S400P Prototype (wctdm) */
+	case 0xe159: /* Digium Wildcard S400P Prototype (wctdm) */
+		pr_notice("Netjet: DAHDI device not supported.\n");
 		return -ENODEV;
 	}