#define thisboard ((const struct pcmmio_board *)dev->board_ptr)
 
 /* this structure is for data unique to this subdevice.  */
-typedef struct {
+struct pcmmio_subdev_private {
 
        union {
                /* for DIO: mapping of halfwords (bytes) in port/chanarray to iobase */
                        unsigned int shadow_samples[8]; /* the last unsigned int data written */
                } ao;
        };
-} pcmmio_subdev_private;
+};
 
 /* this structure is for data unique to this hardware driver.  If
    several hardware drivers keep similar information in this structure,
                unsigned int irq;
                spinlock_t spinlock;
        } asics[MAX_ASICS];
-       pcmmio_subdev_private *sprivs;
+       struct pcmmio_subdev_private *sprivs;
 } pcmmio_private;
 
 /*
  * access the private structure.
  */
 #define devpriv ((pcmmio_private *)dev->private)
-#define subpriv ((pcmmio_subdev_private *)s->private)
+#define subpriv ((struct pcmmio_subdev_private *)s->private)
 /*
  * The struct comedi_driver structure tells the Comedi core module
  * which functions to call to configure/deconfigure (attach/detach)
        n_dio_subdevs = CALC_N_DIO_SUBDEVS(chans_left);
        n_subdevs = n_dio_subdevs + 2;
        devpriv->sprivs =
-               kcalloc(n_subdevs, sizeof(pcmmio_subdev_private), GFP_KERNEL);
+               kcalloc(n_subdevs, sizeof(struct pcmmio_subdev_private), GFP_KERNEL);
        if (!devpriv->sprivs) {
                printk("cannot allocate subdevice private data structures\n");
                return -ENOMEM;