Merge tag 'staging-3.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[firefly-linux-kernel-4.4.55.git] / drivers / staging / comedi / drivers / amplc_dio200_common.c
index 3403e5ccfa93034acf6b1b19d5b49bffff2f0f8a..649fc69724fb70373c3880f324315e0c853495fa 100644 (file)
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
 */
 
 #include <linux/interrupt.h>
@@ -561,7 +556,7 @@ dio200_subdev_intr_init(struct comedi_device *dev, struct comedi_subdevice *s,
        const struct dio200_layout *layout = dio200_dev_layout(dev);
        struct dio200_subdev_intr *subpriv;
 
-       subpriv = kzalloc(sizeof(*subpriv), GFP_KERNEL);
+       subpriv = comedi_alloc_spriv(s, sizeof(*subpriv));
        if (!subpriv)
                return -ENOMEM;
 
@@ -573,7 +568,6 @@ dio200_subdev_intr_init(struct comedi_device *dev, struct comedi_subdevice *s,
                /* Disable interrupt sources. */
                dio200_write8(dev, subpriv->ofs, 0);
 
-       s->private = subpriv;
        s->type = COMEDI_SUBD_DI;
        s->subdev_flags = SDF_READABLE | SDF_CMD_READ;
        if (layout->has_int_sce) {
@@ -888,11 +882,10 @@ dio200_subdev_8254_init(struct comedi_device *dev, struct comedi_subdevice *s,
        struct dio200_subdev_8254 *subpriv;
        unsigned int chan;
 
-       subpriv = kzalloc(sizeof(*subpriv), GFP_KERNEL);
+       subpriv = comedi_alloc_spriv(s, sizeof(*subpriv));
        if (!subpriv)
                return -ENOMEM;
 
-       s->private = subpriv;
        s->type = COMEDI_SUBD_COUNTER;
        s->subdev_flags = SDF_WRITABLE | SDF_READABLE;
        s->n_chan = 3;
@@ -1024,11 +1017,12 @@ static int dio200_subdev_8255_init(struct comedi_device *dev,
 {
        struct dio200_subdev_8255 *subpriv;
 
-       subpriv = kzalloc(sizeof(*subpriv), GFP_KERNEL);
+       subpriv = comedi_alloc_spriv(s, sizeof(*subpriv));
        if (!subpriv)
                return -ENOMEM;
+
        subpriv->ofs = offset;
-       s->private = subpriv;
+
        s->type = COMEDI_SUBD_DIO;
        s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
        s->n_chan = 24;
@@ -1230,28 +1224,11 @@ void amplc_dio200_common_detach(struct comedi_device *dev)
 {
        const struct dio200_board *thisboard = comedi_board(dev);
        struct dio200_private *devpriv = dev->private;
-       const struct dio200_layout *layout;
-       unsigned n;
 
        if (!thisboard || !devpriv)
                return;
        if (dev->irq)
                free_irq(dev->irq, dev);
-       if (dev->subdevices) {
-               layout = dio200_board_layout(thisboard);
-               for (n = 0; n < dev->n_subdevices; n++) {
-                       switch (layout->sdtype[n]) {
-                       case sd_8254:
-                       case sd_8255:
-                       case sd_intr:
-                               comedi_spriv_free(dev, n);
-                               break;
-                       case sd_timer:
-                       default:
-                               break;
-                       }
-               }
-       }
 }
 EXPORT_SYMBOL_GPL(amplc_dio200_common_detach);