Staging: comedi: ni_labpc_cs: removed null check from kfree
[safe/jmp/linux-2.6] / drivers / staging / comedi / drivers / ni_labpc_cs.c
1 /*
2     comedi/drivers/ni_labpc_cs.c
3     Driver for National Instruments daqcard-1200 boards
4     Copyright (C) 2001, 2002, 2003 Frank Mori Hess <fmhess@users.sourceforge.net>
5
6     PCMCIA crap is adapted from dummy_cs.c 1.31 2001/08/24 12:13:13
7     from the pcmcia package.
8     The initial developer of the pcmcia dummy_cs.c code is David A. Hinds
9     <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
10     are Copyright (C) 1999 David A. Hinds.
11
12     This program is free software; you can redistribute it and/or modify
13     it under the terms of the GNU General Public License as published by
14     the Free Software Foundation; either version 2 of the License, or
15     (at your option) any later version.
16
17     This program is distributed in the hope that it will be useful,
18     but WITHOUT ANY WARRANTY; without even the implied warranty of
19     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20     GNU General Public License for more details.
21
22     You should have received a copy of the GNU General Public License
23     along with this program; if not, write to the Free Software
24     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25
26 ************************************************************************
27 */
28 /*
29 Driver: ni_labpc_cs
30 Description: National Instruments Lab-PC (& compatibles)
31 Author: Frank Mori Hess <fmhess@users.sourceforge.net>
32 Devices: [National Instruments] DAQCard-1200 (daqcard-1200)
33 Status: works
34
35 Thanks go to Fredrik Lingvall for much testing and perseverance in
36 helping to debug daqcard-1200 support.
37
38 The 1200 series boards have onboard calibration dacs for correcting
39 analog input/output offsets and gains.  The proper settings for these
40 caldacs are stored on the board's eeprom.  To read the caldac values
41 from the eeprom and store them into a file that can be then be used by
42 comedilib, use the comedi_calibrate program.
43
44 Configuration options:
45   none
46
47 The daqcard-1200 has quirky chanlist requirements
48 when scanning multiple channels.  Multiple channel scan
49 sequence must start at highest channel, then decrement down to
50 channel 0.  Chanlists consisting of all one channel
51 are also legal, and allow you to pace conversions in bursts.
52
53 */
54
55 /*
56
57 NI manuals:
58 340988a (daqcard-1200)
59
60 */
61
62 #undef LABPC_DEBUG  /* debugging messages */
63
64 #include "../comedidev.h"
65
66 #include <linux/delay.h>
67
68 #include "8253.h"
69 #include "8255.h"
70 #include "comedi_fc.h"
71 #include "ni_labpc.h"
72
73 #include <pcmcia/cs_types.h>
74 #include <pcmcia/cs.h>
75 #include <pcmcia/cistpl.h>
76 #include <pcmcia/cisreg.h>
77 #include <pcmcia/ds.h>
78
79 static struct pcmcia_device *pcmcia_cur_dev;
80
81 static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it);
82
83 static const struct labpc_board_struct labpc_cs_boards[] = {
84         {
85          .name = "daqcard-1200",
86          .device_id = 0x103,    /*  0x10b is manufacturer id, 0x103 is device id */
87          .ai_speed = 10000,
88          .bustype = pcmcia_bustype,
89          .register_layout = labpc_1200_layout,
90          .has_ao = 1,
91          .ai_range_table = &range_labpc_1200_ai,
92          .ai_range_code = labpc_1200_ai_gain_bits,
93          .ai_range_is_unipolar = labpc_1200_is_unipolar,
94          .ai_scan_up = 0,
95          .memory_mapped_io = 0,
96          },
97         /* duplicate entry, to support using alternate name */
98         {
99          .name = "ni_labpc_cs",
100          .device_id = 0x103,
101          .ai_speed = 10000,
102          .bustype = pcmcia_bustype,
103          .register_layout = labpc_1200_layout,
104          .has_ao = 1,
105          .ai_range_table = &range_labpc_1200_ai,
106          .ai_range_code = labpc_1200_ai_gain_bits,
107          .ai_range_is_unipolar = labpc_1200_is_unipolar,
108          .ai_scan_up = 0,
109          .memory_mapped_io = 0,
110          },
111 };
112
113 /*
114  * Useful for shorthand access to the particular board structure
115  */
116 #define thisboard ((const struct labpc_board_struct *)dev->board_ptr)
117
118 static struct comedi_driver driver_labpc_cs = {
119         .driver_name = "ni_labpc_cs",
120         .module = THIS_MODULE,
121         .attach = &labpc_attach,
122         .detach = &labpc_common_detach,
123         .num_names = ARRAY_SIZE(labpc_cs_boards),
124         .board_name = &labpc_cs_boards[0].name,
125         .offset = sizeof(struct labpc_board_struct),
126 };
127
128 static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
129 {
130         unsigned long iobase = 0;
131         unsigned int irq = 0;
132         struct pcmcia_device *link;
133
134         /* allocate and initialize dev->private */
135         if (alloc_private(dev, sizeof(struct labpc_private)) < 0)
136                 return -ENOMEM;
137
138         /*  get base address, irq etc. based on bustype */
139         switch (thisboard->bustype) {
140         case pcmcia_bustype:
141                 link = pcmcia_cur_dev;  /* XXX hack */
142                 if (!link)
143                         return -EIO;
144                 iobase = link->io.BasePort1;
145                 irq = link->irq.AssignedIRQ;
146                 break;
147         default:
148                 printk("bug! couldn't determine board type\n");
149                 return -EINVAL;
150                 break;
151         }
152         return labpc_common_attach(dev, iobase, irq, 0);
153 }
154
155 /*====================================================================*/
156
157 /*
158    The event() function is this driver's Card Services event handler.
159    It will be called by Card Services when an appropriate card status
160    event is received.  The config() and release() entry points are
161    used to configure or release a socket, in response to card
162    insertion and ejection events.  They are invoked from the dummy
163    event handler.
164
165    Kernel version 2.6.16 upwards uses suspend() and resume() functions
166    instead of an event() function.
167 */
168
169 static void labpc_config(struct pcmcia_device *link);
170 static void labpc_release(struct pcmcia_device *link);
171 static int labpc_cs_suspend(struct pcmcia_device *p_dev);
172 static int labpc_cs_resume(struct pcmcia_device *p_dev);
173
174 /*
175    The attach() and detach() entry points are used to create and destroy
176    "instances" of the driver, where each instance represents everything
177    needed to manage one actual PCMCIA card.
178 */
179
180 static int labpc_cs_attach(struct pcmcia_device *);
181 static void labpc_cs_detach(struct pcmcia_device *);
182
183 /*
184    You'll also need to prototype all the functions that will actually
185    be used to talk to your device.  See 'memory_cs' for a good example
186    of a fully self-sufficient driver; the other drivers rely more or
187    less on other parts of the kernel.
188 */
189
190 /*
191    The dev_info variable is the "key" that is used to match up this
192    device driver with appropriate cards, through the card configuration
193    database.
194 */
195
196 static const dev_info_t dev_info = "daqcard-1200";
197
198 struct local_info_t {
199         struct pcmcia_device *link;
200         dev_node_t node;
201         int stop;
202         struct bus_operations *bus;
203 };
204
205 /*======================================================================
206
207     labpc_cs_attach() creates an "instance" of the driver, allocating
208     local data structures for one device.  The device is registered
209     with Card Services.
210
211     The dev_link structure is initialized, but we don't actually
212     configure the card at this point -- we wait until we receive a
213     card insertion event.
214
215 ======================================================================*/
216
217 static int labpc_cs_attach(struct pcmcia_device *link)
218 {
219         struct local_info_t *local;
220
221         dev_dbg(&link->dev, "labpc_cs_attach()\n");
222
223         /* Allocate space for private device-specific data */
224         local = kzalloc(sizeof(struct local_info_t), GFP_KERNEL);
225         if (!local)
226                 return -ENOMEM;
227         local->link = link;
228         link->priv = local;
229
230         /* Interrupt setup */
231         link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_FORCED_PULSE;
232         link->irq.Handler = NULL;
233
234         /*
235            General socket configuration defaults can go here.  In this
236            client, we assume very little, and rely on the CIS for almost
237            everything.  In most clients, many details (i.e., number, sizes,
238            and attributes of IO windows) are fixed by the nature of the
239            device, and can be hard-wired here.
240          */
241         link->conf.Attributes = 0;
242         link->conf.IntType = INT_MEMORY_AND_IO;
243
244         pcmcia_cur_dev = link;
245
246         labpc_config(link);
247
248         return 0;
249 }                               /* labpc_cs_attach */
250
251 /*======================================================================
252
253     This deletes a driver "instance".  The device is de-registered
254     with Card Services.  If it has been released, all local data
255     structures are freed.  Otherwise, the structures will be freed
256     when the device is released.
257
258 ======================================================================*/
259
260 static void labpc_cs_detach(struct pcmcia_device *link)
261 {
262         dev_dbg(&link->dev, "labpc_cs_detach\n");
263
264         /*
265            If the device is currently configured and active, we won't
266            actually delete it yet.  Instead, it is marked so that when
267            the release() function is called, that will trigger a proper
268            detach().
269          */
270         if (link->dev_node) {
271                 ((struct local_info_t *)link->priv)->stop = 1;
272                 labpc_release(link);
273         }
274
275         /* This points to the parent local_info_t struct (may be null) */
276         kfree(link->priv);
277
278 }                               /* labpc_cs_detach */
279
280 /*======================================================================
281
282     labpc_config() is scheduled to run after a CARD_INSERTION event
283     is received, to configure the PCMCIA socket, and to make the
284     device available to the system.
285
286 ======================================================================*/
287
288 static int labpc_pcmcia_config_loop(struct pcmcia_device *p_dev,
289                                 cistpl_cftable_entry_t *cfg,
290                                 cistpl_cftable_entry_t *dflt,
291                                 unsigned int vcc,
292                                 void *priv_data)
293 {
294         win_req_t *req = priv_data;
295         memreq_t map;
296
297         if (cfg->index == 0)
298                 return -ENODEV;
299
300         /* Does this card need audio output? */
301         if (cfg->flags & CISTPL_CFTABLE_AUDIO) {
302                 p_dev->conf.Attributes |= CONF_ENABLE_SPKR;
303                 p_dev->conf.Status = CCSR_AUDIO_ENA;
304         }
305
306         /* Do we need to allocate an interrupt? */
307         if (cfg->irq.IRQInfo1 || dflt->irq.IRQInfo1)
308                 p_dev->conf.Attributes |= CONF_ENABLE_IRQ;
309
310         /* IO window settings */
311         p_dev->io.NumPorts1 = p_dev->io.NumPorts2 = 0;
312         if ((cfg->io.nwin > 0) || (dflt->io.nwin > 0)) {
313                 cistpl_io_t *io = (cfg->io.nwin) ? &cfg->io : &dflt->io;
314                 p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
315                 if (!(io->flags & CISTPL_IO_8BIT))
316                         p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_16;
317                 if (!(io->flags & CISTPL_IO_16BIT))
318                         p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
319                 p_dev->io.IOAddrLines = io->flags & CISTPL_IO_LINES_MASK;
320                 p_dev->io.BasePort1 = io->win[0].base;
321                 p_dev->io.NumPorts1 = io->win[0].len;
322                 if (io->nwin > 1) {
323                         p_dev->io.Attributes2 = p_dev->io.Attributes1;
324                         p_dev->io.BasePort2 = io->win[1].base;
325                         p_dev->io.NumPorts2 = io->win[1].len;
326                 }
327                 /* This reserves IO space but doesn't actually enable it */
328                 if (pcmcia_request_io(p_dev, &p_dev->io) != 0)
329                         return -ENODEV;
330         }
331
332         if ((cfg->mem.nwin > 0) || (dflt->mem.nwin > 0)) {
333                 cistpl_mem_t *mem =
334                         (cfg->mem.nwin) ? &cfg->mem : &dflt->mem;
335                 req->Attributes = WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM;
336                 req->Attributes |= WIN_ENABLE;
337                 req->Base = mem->win[0].host_addr;
338                 req->Size = mem->win[0].len;
339                 if (req->Size < 0x1000)
340                         req->Size = 0x1000;
341                 req->AccessSpeed = 0;
342                 if (pcmcia_request_window(p_dev, req, &p_dev->win))
343                         return -ENODEV;
344                 map.Page = 0;
345                 map.CardOffset = mem->win[0].card_addr;
346                 if (pcmcia_map_mem_page(p_dev, p_dev->win, &map))
347                         return -ENODEV;
348         }
349         /* If we got this far, we're cool! */
350         return 0;
351 }
352
353
354 static void labpc_config(struct pcmcia_device *link)
355 {
356         struct local_info_t *dev = link->priv;
357         int ret;
358         win_req_t req;
359
360         dev_dbg(&link->dev, "labpc_config\n");
361
362         ret = pcmcia_loop_config(link, labpc_pcmcia_config_loop, &req);
363         if (ret) {
364                 dev_warn(&link->dev, "no configuration found\n");
365                 goto failed;
366         }
367
368         /*
369            Allocate an interrupt line.  Note that this does not assign a
370            handler to the interrupt, unless the 'Handler' member of the
371            irq structure is initialized.
372          */
373         if (link->conf.Attributes & CONF_ENABLE_IRQ) {
374                 ret = pcmcia_request_irq(link, &link->irq);
375                 if (ret)
376                         goto failed;
377         }
378
379         /*
380            This actually configures the PCMCIA socket -- setting up
381            the I/O windows and the interrupt mapping, and putting the
382            card and host interface into "Memory and IO" mode.
383          */
384         ret = pcmcia_request_configuration(link, &link->conf);
385         if (ret)
386                 goto failed;
387
388         /*
389            At this point, the dev_node_t structure(s) need to be
390            initialized and arranged in a linked list at link->dev.
391          */
392         sprintf(dev->node.dev_name, "daqcard-1200");
393         dev->node.major = dev->node.minor = 0;
394         link->dev_node = &dev->node;
395
396         /* Finally, report what we've done */
397         printk(KERN_INFO "%s: index 0x%02x",
398                dev->node.dev_name, link->conf.ConfigIndex);
399         if (link->conf.Attributes & CONF_ENABLE_IRQ)
400                 printk(", irq %d", link->irq.AssignedIRQ);
401         if (link->io.NumPorts1)
402                 printk(", io 0x%04x-0x%04x", link->io.BasePort1,
403                        link->io.BasePort1 + link->io.NumPorts1 - 1);
404         if (link->io.NumPorts2)
405                 printk(" & 0x%04x-0x%04x", link->io.BasePort2,
406                        link->io.BasePort2 + link->io.NumPorts2 - 1);
407         if (link->win)
408                 printk(", mem 0x%06lx-0x%06lx", req.Base,
409                        req.Base + req.Size - 1);
410         printk("\n");
411
412         return;
413
414 failed:
415         labpc_release(link);
416
417 }                               /* labpc_config */
418
419 static void labpc_release(struct pcmcia_device *link)
420 {
421         dev_dbg(&link->dev, "labpc_release\n");
422
423         pcmcia_disable_device(link);
424 }                               /* labpc_release */
425
426 /*======================================================================
427
428     The card status event handler.  Mostly, this schedules other
429     stuff to run after an event is received.
430
431     When a CARD_REMOVAL event is received, we immediately set a
432     private flag to block future accesses to this device.  All the
433     functions that actually access the device should check this flag
434     to make sure the card is still present.
435
436 ======================================================================*/
437
438 static int labpc_cs_suspend(struct pcmcia_device *link)
439 {
440         struct local_info_t *local = link->priv;
441
442         /* Mark the device as stopped, to block IO until later */
443         local->stop = 1;
444         return 0;
445 }                               /* labpc_cs_suspend */
446
447 static int labpc_cs_resume(struct pcmcia_device *link)
448 {
449         struct local_info_t *local = link->priv;
450
451         local->stop = 0;
452         return 0;
453 }                               /* labpc_cs_resume */
454
455 /*====================================================================*/
456
457 static struct pcmcia_device_id labpc_cs_ids[] = {
458         /* N.B. These IDs should match those in labpc_cs_boards (ni_labpc.c) */
459         PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103),        /* daqcard-1200 */
460         PCMCIA_DEVICE_NULL
461 };
462
463 MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids);
464
465 struct pcmcia_driver labpc_cs_driver = {
466         .probe = labpc_cs_attach,
467         .remove = labpc_cs_detach,
468         .suspend = labpc_cs_suspend,
469         .resume = labpc_cs_resume,
470         .id_table = labpc_cs_ids,
471         .owner = THIS_MODULE,
472         .drv = {
473                 .name = dev_info,
474                 },
475 };
476
477 static int __init init_labpc_cs(void)
478 {
479         pcmcia_register_driver(&labpc_cs_driver);
480         return 0;
481 }
482
483 static void __exit exit_labpc_cs(void)
484 {
485         pcmcia_unregister_driver(&labpc_cs_driver);
486 }
487
488 int __init labpc_init_module(void)
489 {
490         int ret;
491
492         ret = init_labpc_cs();
493         if (ret < 0)
494                 return ret;
495
496         return comedi_driver_register(&driver_labpc_cs);
497 }
498
499 void __exit labpc_exit_module(void)
500 {
501         exit_labpc_cs();
502         comedi_driver_unregister(&driver_labpc_cs);
503 }
504
505 MODULE_LICENSE("GPL");
506 module_init(labpc_init_module);
507 module_exit(labpc_exit_module);