Messages in this thread | | | Date | Wed, 28 Nov 2007 13:49:14 +0300 | From | Andrey Panin <> | Subject | Re: [PATCH] serial: add ADDI-DATA GmbH Communication cards in 8250_pci.c and pci_ids.h. |
| |
On 332, 11 28, 2007 at 10:57:02AM +0100, Krauth.Julien wrote: > From: Krauth Julien <krauth.julien@addi-data.com> > > Add ADDI-DATA GmbH communication cards to 8250_pci driver. > Supported cards are: > > APCI-7300, APCI-7420, APCI-7500, APCI-7800 > APCI-7300-2, APCI-7420-2, APCI-7500-2 > APCI-7300-3, APCI-7420-3, APCI-7500-3, APCI-7800-3 > > 8250_pci.c.patch > ================ > Add ADDI-DATA GmbH communication cards to 8250_pci.c. > > pci_ids.h.patch > =============== > Add ADDI-DATA GmbH communication cards Vendor and Device IDs to > pci_ids.h. > > WARNING: > ======== > 8250_pci.c.patch depend on pci_ids.h.patch. > 8250_pci.c is using Vendor and Device ID defined in pci_ids.h. > > > Signed-off-by: Krauth J. <krauth.julien@addi-data.com> > --- > > This patch applies to kernel 2.6.23.9. > > --- linux-2.6.23.9-vanilla/include/linux/pci_ids.h 2007-11-26 > 18:51:43.000000000 +0100 > +++ linux-2.6.23.9/include/linux/pci_ids.h 2007-11-27 > 10:55:12.000000000 +0100 > @@ -2019,6 +2019,23 @@ > #define PCI_VENDOR_ID_QUICKNET 0x15e2 > #define PCI_DEVICE_ID_QUICKNET_XJ 0x0500 > > +/* > + * ADDI-DATA GmbH communication cards <info@addi-data.com> > + */ > +#define PCI_VENDOR_ID_ADDIDATA_OLD 0x10E8 > +#define PCI_VENDOR_ID_ADDIDATA 0x15B8 > +#define PCI_DEVICE_ID_ADDIDATA_APCI7500 0x7000 > +#define PCI_DEVICE_ID_ADDIDATA_APCI7420 0x7001 > +#define PCI_DEVICE_ID_ADDIDATA_APCI7300 0x7002 > +#define PCI_DEVICE_ID_ADDIDATA_APCI7800 0x818E > +#define PCI_DEVICE_ID_ADDIDATA_APCI7500_2 0x7009 > +#define PCI_DEVICE_ID_ADDIDATA_APCI7420_2 0x700A > +#define PCI_DEVICE_ID_ADDIDATA_APCI7300_2 0x700B > +#define PCI_DEVICE_ID_ADDIDATA_APCI7500_3 0x700C > +#define PCI_DEVICE_ID_ADDIDATA_APCI7420_3 0x700D > +#define PCI_DEVICE_ID_ADDIDATA_APCI7300_3 0x700E > +#define PCI_DEVICE_ID_ADDIDATA_APCI7800_3 0x700F > + > #define PCI_VENDOR_ID_PDC 0x15e9 > > #define PCI_VENDOR_ID_FARSITE 0x1619 > > --- linux-2.6.23.9-vanilla/drivers/serial/8250_pci.c 2007-11-26 > 18:51:43.000000000 +0100 > +++ linux-2.6.23.9/drivers/serial/8250_pci.c 2007-11-27 > 10:53:09.000000000 +0100 > @@ -106,6 +106,51 @@ setup_port(struct serial_private *priv, > } > > /* > + * ADDI-DATA GmbH communication cards <info@addi-data.com> > + */ > +static int > +addidata_setup(struct serial_private *priv, struct pciserial_board > *board, > + struct uart_port *port, int idx) > +{ > + unsigned int bar = 0, offset = board->first_offset; > + bar = FL_GET_BASE(board->flags); > + > + switch (priv->dev->device) { > + case PCI_DEVICE_ID_ADDIDATA_APCI7500: > + case PCI_DEVICE_ID_ADDIDATA_APCI7420: > + case PCI_DEVICE_ID_ADDIDATA_APCI7300: > + case PCI_DEVICE_ID_ADDIDATA_APCI7500_2: > + case PCI_DEVICE_ID_ADDIDATA_APCI7420_2: > + case PCI_DEVICE_ID_ADDIDATA_APCI7300_2: > + case PCI_DEVICE_ID_ADDIDATA_APCI7500_3: > + case PCI_DEVICE_ID_ADDIDATA_APCI7420_3: > + case PCI_DEVICE_ID_ADDIDATA_APCI7300_3: > + case PCI_DEVICE_ID_ADDIDATA_APCI7800_3: > + offset += idx * board->uart_offset; > + break;
Why do you need this ? Looks like you can use pci_default_setup() for all cards except PCI_DEVICE_ID_ADDIDATA_APCI7800.
> + case PCI_DEVICE_ID_ADDIDATA_APCI7800: > + if (idx < 2 ) { > + bar += 0;
Ughmm, this line looks especially useful :)
> + offset += idx * board->uart_offset; > + } else if ((idx >= 2) && (idx < 4)) { > + bar += 1; > + offset += ((idx - 2) * board->uart_offset); > + } else if ((idx >= 4) && (idx < 6 )) { > + bar += 2; > + offset += ((idx - 4) * board->uart_offset); > + } else if (idx >= 6) { > + bar += 3; > + offset += ((idx - 6) * board->uart_offset); > + } > + > + break; > + } > + > + return setup_port(priv, port, bar, offset, board->reg_shift); > +} > + > +/* > * AFAVLAB uses a different mixture of BARs and offsets > * Not that ugly ;) -- HW > */ > @@ -752,6 +797,86 @@ pci_default_setup(struct serial_private > */ > static struct pci_serial_quirk pci_serial_quirks[] = { > /* > + * ADDI-DATA GmbH communication cards <info@addi-data.com> > + */ > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7500, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7420, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7300, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA_OLD, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7800, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7500_2, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7420_2, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7300_2, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7500_3, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7420_3, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7300_3, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + }, > + { > + .vendor = PCI_VENDOR_ID_ADDIDATA, > + .device = PCI_DEVICE_ID_ADDIDATA_APCI7800_3, > + .subvendor = PCI_ANY_ID, > + .subdevice = PCI_ANY_ID, > + .setup = addidata_setup, > + },
All these entries except PCI_DEVICE_ID_ADDIDATA_APCI7800 are unnecessary too.
> + /* > * AFAVLAB cards - these may be called via parport_serial > * It is not clear whether this applies to all products. > */ > @@ -2574,6 +2699,97 @@ static struct pci_device_id serial_pci_t > pbn_pasemi_1682M }, > > /* > + * ADDI-DATA GmbH communication cards <info@addi-data.com> > + */ > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7500, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_4_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7420, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_2_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7300, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_1_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA_OLD, > + PCI_DEVICE_ID_ADDIDATA_APCI7800, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b1_8_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7500_2, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_4_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7420_2, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_2_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7300_2, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_1_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7500_3, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_4_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7420_3, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_2_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7300_3, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_1_115200 }, > + > + { PCI_VENDOR_ID_ADDIDATA, > + PCI_DEVICE_ID_ADDIDATA_APCI7800_3, > + PCI_ANY_ID, > + PCI_ANY_ID, > + 0, > + 0, > + pbn_b0_bt_8_115200 }, > + > + /* > * These entries match devices with class COMMUNICATION_SERIAL, > * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL > */
Otherwise patch looks good.
-- Andrey Panin | Linux and UNIX system administrator pazke@donpac.ru | PGP key: wwwkeys.pgp.net [unhandled content-type:application/pgp-signature] | |