Staging: Drop memory allocation cast
[safe/jmp/linux-2.6] / drivers / staging / comedi / drivers / unioxx5.c
index bc5511d..16d4c9f 100644 (file)
@@ -44,6 +44,7 @@ Devices: [Fastwel] UNIOxx-5 (unioxx5),
 
 #include "../comedidev.h"
 #include <linux/ioport.h>
+#include <linux/slab.h>
 
 #define DRIVER_NAME "unioxx5"
 #define UNIOXX5_SIZE 0x10
@@ -72,46 +73,51 @@ Devices: [Fastwel] UNIOxx-5 (unioxx5),
 #define ALL_2_OUTPUT 1         /* config all digital channels to output */
 
 /* 'private' structure for each subdevice */
-typedef struct unioxx5_subd_priv {
+struct unioxx5_subd_priv {
        int usp_iobase;
        unsigned char usp_module_type[12];      /* 12 modules. each can be 70L or 73L */
        unsigned char usp_extra_data[12][4];    /* for saving previous written value for analog modules */
        unsigned char usp_prev_wr_val[3];       /* previous written value */
        unsigned char usp_prev_cn_val[3];       /* previous channel value */
-} unioxx5_subd_priv;
-
-static int unioxx5_attach(struct comedi_device * dev, comedi_devconfig * it);
-static int unioxx5_subdev_write(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data);
-static int unioxx5_subdev_read(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data);
-static int unioxx5_insn_config(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data);
-static int unioxx5_detach(struct comedi_device * dev);
-static int __unioxx5_subdev_init(struct comedi_subdevice * subdev, int subdev_iobase,
-       int minor);
-static int __unioxx5_digital_write(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor);
-static int __unioxx5_digital_read(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor);
-//static void __unioxx5_digital_config(unioxx5_subd_priv* usp, int mode);
-static int __unioxx5_analog_write(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor);
-static int __unioxx5_analog_read(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor);
+};
+
+static int unioxx5_attach(struct comedi_device *dev,
+                         struct comedi_devconfig *it);
+static int unioxx5_subdev_write(struct comedi_device *dev,
+                               struct comedi_subdevice *subdev,
+                               struct comedi_insn *insn, unsigned int *data);
+static int unioxx5_subdev_read(struct comedi_device *dev,
+                              struct comedi_subdevice *subdev,
+                              struct comedi_insn *insn, unsigned int *data);
+static int unioxx5_insn_config(struct comedi_device *dev,
+                              struct comedi_subdevice *subdev,
+                              struct comedi_insn *insn, unsigned int *data);
+static int unioxx5_detach(struct comedi_device *dev);
+static int __unioxx5_subdev_init(struct comedi_subdevice *subdev,
+                                int subdev_iobase, int minor);
+static int __unioxx5_digital_write(struct unioxx5_subd_priv *usp,
+                                  unsigned int *data, int channel, int minor);
+static int __unioxx5_digital_read(struct unioxx5_subd_priv *usp,
+                                 unsigned int *data, int channel, int minor);
+/* static void __unioxx5_digital_config(struct unioxx5_subd_priv* usp, int mode); */
+static int __unioxx5_analog_write(struct unioxx5_subd_priv *usp,
+                                 unsigned int *data, int channel, int minor);
+static int __unioxx5_analog_read(struct unioxx5_subd_priv *usp,
+                                unsigned int *data, int channel, int minor);
 static int __unioxx5_define_chan_offset(int chan_num);
-static void __unioxx5_analog_config(unioxx5_subd_priv * usp, int channel);
+static void __unioxx5_analog_config(struct unioxx5_subd_priv *usp, int channel);
 
 static struct comedi_driver unioxx5_driver = {
-      driver_name:DRIVER_NAME,
-      module:THIS_MODULE,
-      attach:unioxx5_attach,
-      detach:unioxx5_detach
+       .driver_name = DRIVER_NAME,
+       .module = THIS_MODULE,
+       .attach = unioxx5_attach,
+       .detach = unioxx5_detach
 };
 
 COMEDI_INITCLEANUP(unioxx5_driver);
 
-static int unioxx5_attach(struct comedi_device * dev, comedi_devconfig * it)
+static int unioxx5_attach(struct comedi_device *dev,
+                         struct comedi_devconfig *it)
 {
        int iobase, i, n_subd;
        int id, num, ba;
@@ -136,7 +142,7 @@ static int unioxx5_attach(struct comedi_device * dev, comedi_devconfig * it)
        /* unioxx5 can has from two to four subdevices */
        if (n_subd < 2) {
                printk(KERN_ERR
-                       "your card must has at least 2 'g01' subdevices\n");
+                      "your card must has at least 2 'g01' subdevices\n");
                return -1;
        }
 
@@ -148,7 +154,7 @@ static int unioxx5_attach(struct comedi_device * dev, comedi_devconfig * it)
        /* initializing each of for same subdevices */
        for (i = 0; i < n_subd; i++, iobase += UNIOXX5_SUBDEV_ODDS) {
                if (__unioxx5_subdev_init(&dev->subdevices[i], iobase,
-                               dev->minor) < 0)
+                                         dev->minor) < 0)
                        return -1;
        }
 
@@ -156,10 +162,11 @@ static int unioxx5_attach(struct comedi_device * dev, comedi_devconfig * it)
        return 0;
 }
 
-static int unioxx5_subdev_read(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data)
+static int unioxx5_subdev_read(struct comedi_device *dev,
+                              struct comedi_subdevice *subdev,
+                              struct comedi_insn *insn, unsigned int *data)
 {
-       unioxx5_subd_priv *usp = subdev->private;
+       struct unioxx5_subd_priv *usp = subdev->private;
        int channel, type;
 
        channel = CR_CHAN(insn->chanspec);
@@ -176,10 +183,11 @@ static int unioxx5_subdev_read(struct comedi_device * dev, struct comedi_subdevi
        return 1;
 }
 
-static int unioxx5_subdev_write(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data)
+static int unioxx5_subdev_write(struct comedi_device *dev,
+                               struct comedi_subdevice *subdev,
+                               struct comedi_insn *insn, unsigned int *data)
 {
-       unioxx5_subd_priv *usp = subdev->private;
+       struct unioxx5_subd_priv *usp = subdev->private;
        int channel, type;
 
        channel = CR_CHAN(insn->chanspec);
@@ -197,26 +205,28 @@ static int unioxx5_subdev_write(struct comedi_device * dev, struct comedi_subdev
 }
 
 /* for digital modules only */
-static int unioxx5_insn_config(struct comedi_device * dev, struct comedi_subdevice * subdev,
-       comedi_insn * insn, unsigned int * data)
+static int unioxx5_insn_config(struct comedi_device *dev,
+                              struct comedi_subdevice *subdev,
+                              struct comedi_insn *insn, unsigned int *data)
 {
        int channel_offset, flags, channel = CR_CHAN(insn->chanspec), type;
-       unioxx5_subd_priv *usp = subdev->private;
+       struct unioxx5_subd_priv *usp = subdev->private;
        int mask = 1 << (channel & 0x07);
 
        type = usp->usp_module_type[channel / 2];
 
        if (type != MODULE_DIGITAL) {
                printk(KERN_ERR
-                       "comedi%d: channel configuration accessible only for digital modules\n",
-                       dev->minor);
+                      "comedi%d: channel configuration accessible only for digital modules\n",
+                      dev->minor);
                return -1;
        }
 
-       if ((channel_offset = __unioxx5_define_chan_offset(channel)) < 0) {
+       channel_offset = __unioxx5_define_chan_offset(channel);
+       if (channel_offset < 0) {
                printk(KERN_ERR
-                       "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
-                       dev->minor, channel);
+                      "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
+                      dev->minor, channel);
                return -1;
        }
 
@@ -247,11 +257,11 @@ static int unioxx5_insn_config(struct comedi_device * dev, struct comedi_subdevi
        return 0;
 }
 
-static int unioxx5_detach(struct comedi_device * dev)
+static int unioxx5_detach(struct comedi_device *dev)
 {
        int i;
        struct comedi_subdevice *subdev;
-       unioxx5_subd_priv *usp;
+       struct unioxx5_subd_priv *usp;
 
        for (i = 0; i < dev->n_subdevices; i++) {
                subdev = &dev->subdevices[i];
@@ -264,10 +274,10 @@ static int unioxx5_detach(struct comedi_device * dev)
 }
 
 /* initializing subdevice with given address */
-static int __unioxx5_subdev_init(struct comedi_subdevice * subdev, int subdev_iobase,
-       int minor)
+static int __unioxx5_subdev_init(struct comedi_subdevice *subdev,
+                                int subdev_iobase, int minor)
 {
-       unioxx5_subd_priv *usp;
+       struct unioxx5_subd_priv *usp;
        int i, to, ndef_flag = 0;
 
        if (!request_region(subdev_iobase, UNIOXX5_SIZE, DRIVER_NAME)) {
@@ -275,8 +285,9 @@ static int __unioxx5_subdev_init(struct comedi_subdevice * subdev, int subdev_io
                return -EIO;
        }
 
-       if ((usp = (unioxx5_subd_priv *) kzalloc(sizeof(*usp),
-                               GFP_KERNEL)) == NULL) {
+       usp = kzalloc(sizeof(*usp), GFP_KERNEL);
+
+       if (usp == NULL) {
                printk(KERN_ERR "comedi%d: erorr! --> out of memory!\n", minor);
                return -1;
        }
@@ -309,7 +320,7 @@ static int __unioxx5_subdev_init(struct comedi_subdevice * subdev, int subdev_io
                        usp->usp_module_type[i] = inb(subdev_iobase + 6);
 
                printk(" [%d] 0x%02x |", i, usp->usp_module_type[i]);
-               comedi_udelay(1);
+               udelay(1);
        }
 
        printk("\n");
@@ -330,16 +341,17 @@ static int __unioxx5_subdev_init(struct comedi_subdevice * subdev, int subdev_io
        return 0;
 }
 
-static int __unioxx5_digital_write(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor)
+static int __unioxx5_digital_write(struct unioxx5_subd_priv *usp,
+                                  unsigned int *data, int channel, int minor)
 {
        int channel_offset, val;
        int mask = 1 << (channel & 0x07);
 
-       if ((channel_offset = __unioxx5_define_chan_offset(channel)) < 0) {
+       channel_offset = __unioxx5_define_chan_offset(channel);
+       if (channel_offset < 0) {
                printk(KERN_ERR
-                       "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
-                       minor, channel);
+                      "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
+                      minor, channel);
                return 0;
        }
 
@@ -357,15 +369,16 @@ static int __unioxx5_digital_write(unioxx5_subd_priv * usp, unsigned int * data,
 }
 
 /* function for digital reading */
-static int __unioxx5_digital_read(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor)
+static int __unioxx5_digital_read(struct unioxx5_subd_priv *usp,
+                                 unsigned int *data, int channel, int minor)
 {
        int channel_offset, mask = 1 << (channel & 0x07);
 
-       if ((channel_offset = __unioxx5_define_chan_offset(channel)) < 0) {
+       channel_offset = __unioxx5_define_chan_offset(channel);
+       if (channel_offset < 0) {
                printk(KERN_ERR
-                       "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
-                       minor, channel);
+                      "comedi%d: undefined channel %d. channel range is 0 .. 23\n",
+                      minor, channel);
                return 0;
        }
 
@@ -380,7 +393,7 @@ static int __unioxx5_digital_read(unioxx5_subd_priv * usp, unsigned int * data,
 }
 
 #if 0                          /* not used? */
-static void __unioxx5_digital_config(unioxx5_subd_priv * usp, int mode)
+static void __unioxx5_digital_config(struct unioxx5_subd_priv *usp, int mode)
 {
        int i, mask;
 
@@ -396,8 +409,8 @@ static void __unioxx5_digital_config(unioxx5_subd_priv * usp, int mode)
 }
 #endif
 
-static int __unioxx5_analog_write(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor)
+static int __unioxx5_analog_write(struct unioxx5_subd_priv *usp,
+                                 unsigned int *data, int channel, int minor)
 {
        int module, i;
 
@@ -407,8 +420,8 @@ static int __unioxx5_analog_write(unioxx5_subd_priv * usp, unsigned int * data,
        /* defining if given module can work on output */
        if (!(usp->usp_module_type[module] & MODULE_OUTPUT_MASK)) {
                printk(KERN_ERR
-                       "comedi%d: module in position %d with id 0x%0x is for input only!\n",
-                       minor, module, usp->usp_module_type[module]);
+                      "comedi%d: module in position %d with id 0x%0x is for input only!\n",
+                      minor, module, usp->usp_module_type[module]);
                return 0;
        }
 
@@ -418,7 +431,7 @@ static int __unioxx5_analog_write(unioxx5_subd_priv * usp, unsigned int * data,
        /* saving major byte */
        usp->usp_extra_data[module][i] = (unsigned char)((*data & 0xFF00) >> 8);
 
-       //while(!((inb(usp->usp_iobase + 0)) & TxBE));
+       /* while(!((inb(usp->usp_iobase + 0)) & TxBE)); */
        outb(module + 1, usp->usp_iobase + 5);  /* sending module number to card(1 .. 12) */
        outb('W', usp->usp_iobase + 6); /* sends (W)rite command to module */
 
@@ -431,8 +444,8 @@ static int __unioxx5_analog_write(unioxx5_subd_priv * usp, unsigned int * data,
        return 1;
 }
 
-static int __unioxx5_analog_read(unioxx5_subd_priv * usp, unsigned int * data,
-       int channel, int minor)
+static int __unioxx5_analog_read(struct unioxx5_subd_priv *usp,
+                                unsigned int *data, int channel, int minor)
 {
        int module_no, read_ch;
        char control;
@@ -443,8 +456,8 @@ static int __unioxx5_analog_read(unioxx5_subd_priv * usp, unsigned int * data,
        /* defining if given module can work on input */
        if (usp->usp_module_type[module_no] & MODULE_OUTPUT_MASK) {
                printk(KERN_ERR
-                       "comedi%d: module in position %d with id 0x%02x is for output only",
-                       minor, module_no, usp->usp_module_type[module_no]);
+                      "comedi%d: module in position %d with id 0x%02x is for output only",
+                      minor, module_no, usp->usp_module_type[module_no]);
                return 0;
        }
 
@@ -471,7 +484,7 @@ static int __unioxx5_analog_read(unioxx5_subd_priv * usp, unsigned int * data,
 }
 
 /* configure channels for analog i/o (even to output, odd to input) */
-static void __unioxx5_analog_config(unioxx5_subd_priv * usp, int channel)
+static void __unioxx5_analog_config(struct unioxx5_subd_priv *usp, int channel)
 {
        int chan_a, chan_b, conf, channel_offset;