lkml.org 
[lkml]   [2006]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectStradis driver conflicts with all other SAA7146 drivers
    From
    Date
    Hi,

    [Nathan Laredo is the maintainer of the stradis driver but Jiri Slaby
    submitted the PCI probing change that went into 2.6.16 so I'm Cc-ing
    him too. I'm not a member of the video4linux mailing list so please
    Cc me on any responses.]

    The stradis driver in the 2.6.16 kernel only looks at the SAA7146
    vendor and product ID and binds to any SAA7146 based device even if it
    is not a stradis card. This stops all other SAA7146 drivers from
    working, for example my WinTV Nova-T card using the budget-ci driver
    doesn't work any longer. A lot of other people have also been bitten
    by this.

    So could you please modify your driver so that it only binds to real
    stradis cards? If stradis cards have a subvendor and subdevice ID you
    could just modify the pci_device_id table to look something like this:

    static struct pci_device_id stradis_pci_tbl[] = {
    {
    .vendor = PCI_VENDOR_ID_PHILIPS,
    .device = PCI_DEVICE_ID_PHILIPS_SAA7146,
    .subvendor = 0xdead,
    .subdevice = 0xbeef,
    },
    { 0 }
    };

    From the code it looks as if some boards don't have a good subsystem
    vendor and device ID:

    if (!pdev->subsystem_vendor)
    dev_info(&pdev->dev, "%d: rev1 decoder\n", saa_num);
    else
    dev_info(&pdev->dev, "%d: SDM2xx found\n", saa_num);

    Are those rev1 boards out in the real world or are they just
    prototypes? If they are prototypes, can you add the subvendor ID
    anway and add a module parameter so that your driver only binds to
    unspecified vendor IDs if you use that module parameter? Something
    like this:

    static int bind_to_anything = 0;
    module_param(bind_to_anything, int, 0);

    int __init stradis_init(void)
    {
    ...
    if (bind_to_anything) {
    stradis_pci_tbl[0].subvendor = PCI_ANY_ID;
    stradis_pci_tbl[0].subdevice = PCI_ANY_ID;
    }
    ...
    pci_register_driver(&stradis_driver);
    ...
    }

    For anyone submitting a new SAA7146 driver to the kernel in the
    future, please be aware that your card isn't the only one that uses
    that chip, so always add a subvendor/subdevice to your drivers.

    /Christer

    --
    "Just how much can I get away with and still go to heaven?"

    Freelance consultant specializing in device driver programming for Linux
    Christer Weinigel <christer@weinigel.se> http://www.weinigel.se
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-05-28 14:38    [W:0.024 / U:151.504 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site