Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 354303
b: refs/heads/master
c: 8cd98c8
h: refs/heads/master
i:
  354301: fed61b8
  354299: 86e3a08
  354295: 104248e
  354287: c20d41a
  354271: e52b6ec
  354239: 0e89c24
  354175: 939cfc5
  354047: da6a08e
  353791: f60c668
  353279: 37b31e2
  352255: 8f9982f
v: v3
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Jan 31, 2013
1 parent f859535 commit b1d2044
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 83 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2bdaef1afc15ae675a1d26e19d2b77bde215ef4a
refs/heads/master: 8cd98c826352b74281b8995a592b02e1c71b7204
130 changes: 48 additions & 82 deletions trunk/drivers/staging/comedi/drivers/das08_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,81 +51,25 @@ Command support does not exist, but could be added for this board.

#include "../comedidev.h"

#include "das08.h"

/* pcmcia includes */
#include <pcmcia/cistpl.h>
#include <pcmcia/ds.h>

#include "das08.h"

static const struct das08_board_struct das08_cs_boards[] = {
{
.name = "pcm-das08",
.id = 0x0, /* XXX */
.bustype = pcmcia,
.ai_nbits = 12,
.ai_pg = das08_bipolar5,
.ai_encoding = das08_pcm_encode12,
.di_nchan = 3,
.do_nchan = 3,
.iosize = 16,
},
/* duplicate so driver name can be used also */
{
.name = "das08_cs",
.id = 0x0, /* XXX */
.bustype = pcmcia,
.ai_nbits = 12,
.ai_pg = das08_bipolar5,
.ai_encoding = das08_pcm_encode12,
.di_nchan = 3,
.do_nchan = 3,
.iosize = 16,
.name = "pcm-das08",
.id = 0x0, /* XXX */
.bustype = pcmcia,
.ai_nbits = 12,
.ai_pg = das08_bipolar5,
.ai_encoding = das08_pcm_encode12,
.di_nchan = 3,
.do_nchan = 3,
.iosize = 16,
},
};

static struct pcmcia_device *cur_dev;

static int das08_cs_attach(struct comedi_device *dev,
struct comedi_devconfig *it)
{
const struct das08_board_struct *thisboard = comedi_board(dev);
struct das08_private_struct *devpriv;
unsigned long iobase;
struct pcmcia_device *link = cur_dev; /* XXX hack */

devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
if (!devpriv)
return -ENOMEM;
dev->private = devpriv;

dev_info(dev->class_dev, "das08_cs: attach\n");
/* deal with a pci board */

if (thisboard->bustype == pcmcia) {
if (link == NULL) {
dev_err(dev->class_dev, "no pcmcia cards found\n");
return -EIO;
}
iobase = link->resource[0]->start;
} else {
dev_err(dev->class_dev,
"bug! board does not have PCMCIA bustype\n");
return -EINVAL;
}

return das08_common_attach(dev, iobase);
}

static struct comedi_driver driver_das08_cs = {
.driver_name = "das08_cs",
.module = THIS_MODULE,
.attach = das08_cs_attach,
.detach = das08_common_detach,
.board_name = &das08_cs_boards[0].name,
.num_names = ARRAY_SIZE(das08_cs_boards),
.offset = sizeof(struct das08_board_struct),
};

static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev,
void *priv_data)
{
Expand All @@ -135,35 +79,58 @@ static int das08_pcmcia_config_loop(struct pcmcia_device *p_dev,
return pcmcia_request_io(p_dev);
}

static int das08_pcmcia_attach(struct pcmcia_device *link)
static int das08_cs_auto_attach(struct comedi_device *dev,
unsigned long context)
{
struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
struct das08_private_struct *devpriv;
unsigned long iobase;
int ret;

/* The das08 driver needs the board_ptr */
dev->board_ptr = &das08_cs_boards[0];

link->config_flags |= CONF_ENABLE_IRQ | CONF_AUTO_SET_IO;

ret = pcmcia_loop_config(link, das08_pcmcia_config_loop, NULL);
if (ret)
goto failed;
return ret;

if (!link->irq)
goto failed;
return -EINVAL;

ret = pcmcia_enable_device(link);
if (ret)
goto failed;
return ret;
iobase = link->resource[0]->start;

devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
if (!devpriv)
return -ENOMEM;
dev->private = devpriv;

return das08_common_attach(dev, iobase);
}

cur_dev = link;
return 0;
static void das08_cs_detach(struct comedi_device *dev)
{
struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);

failed:
pcmcia_disable_device(link);
return ret;
das08_common_detach(dev);
if (dev->iobase)
pcmcia_disable_device(link);
}

static void das08_pcmcia_detach(struct pcmcia_device *link)
static struct comedi_driver driver_das08_cs = {
.driver_name = "das08_cs",
.module = THIS_MODULE,
.auto_attach = das08_cs_auto_attach,
.detach = das08_cs_detach,
};

static int das08_pcmcia_attach(struct pcmcia_device *link)
{
pcmcia_disable_device(link);
cur_dev = NULL;
return comedi_pcmcia_auto_config(link, &driver_das08_cs);
}

static const struct pcmcia_device_id das08_cs_id_table[] = {
Expand All @@ -175,11 +142,10 @@ MODULE_DEVICE_TABLE(pcmcia, das08_cs_id_table);
static struct pcmcia_driver das08_cs_driver = {
.name = "pcm-das08",
.owner = THIS_MODULE,
.probe = das08_pcmcia_attach,
.remove = das08_pcmcia_detach,
.id_table = das08_cs_id_table,
.probe = das08_pcmcia_attach,
.remove = comedi_pcmcia_auto_unconfig,
};

module_comedi_pcmcia_driver(driver_das08_cs, das08_cs_driver);

MODULE_AUTHOR("David A. Schleef <ds@schleef.org>, "
Expand Down

0 comments on commit b1d2044

Please sign in to comment.