So both claim the same PCI ID? In this case you need to creat a small
shim driver that exports a pseudo-bus to the serial and ide driver using
the driver model. You must never return an error from ->probe if you
actually use that particular device.
+/* defining this will force the driver to run in polled mode */
+//#define POLLING_FOR_CHARACTERS
Again, what's the need for these conditionals?
+/* a table to keep the card names as passed to request_region */
+static struct {
+ char c_name[20];
+} Table_o_cards[IOC4_NUM_CARDS];
Completely superflous. Just pass "ioc4_serial" as argument to request_region.
+
+ switch (type) {
+ case IOC4_SIO_INTR_TYPE:
+ switch (which) {
+ case IOC4_W_IES:
+ writel(val, (void *)&mem->sio_ies_ro);
The second argumnet to writeX (and readX) is actually void __iomem *,
but to see the difference you need to run sparse (from sparse.bkbits.net)
over the driver. Please store all I/O addresses in void __iomem * pointers
in your structures and avoid the cast here and in all the other places.
no need to cast the return value from kmalloc (dito for the other places)