Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 304705
b: refs/heads/master
c: b48ed62
h: refs/heads/master
i:
  304703: 93430ed
v: v3
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed May 16, 2012
1 parent 4493f14 commit f8e1f0b
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 139 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: fbf0e452dc105b4aea2ddd4f90bc7cb19a870388
refs/heads/master: b48ed6233b7ae137c698637baf1fc8628310fa05
242 changes: 104 additions & 138 deletions trunk/drivers/staging/comedi/drivers/ni_at_ao.c
Original file line number Diff line number Diff line change
Expand Up @@ -157,17 +157,6 @@ struct atao_board {
int n_ao_chans;
};

static const struct atao_board atao_boards[] = {
{
.name = "ai-ao-6",
.n_ao_chans = 6,
},
{
.name = "ai-ao-10",
.n_ao_chans = 10,
},
};

#define thisboard ((struct atao_board *)dev->board_ptr)

struct atao_private {
Expand All @@ -182,133 +171,6 @@ struct atao_private {

#define devpriv ((struct atao_private *)dev->private)

static int atao_attach(struct comedi_device *dev, struct comedi_devconfig *it);
static int atao_detach(struct comedi_device *dev);
static struct comedi_driver driver_atao = {
.driver_name = "ni_at_ao",
.module = THIS_MODULE,
.attach = atao_attach,
.detach = atao_detach,
.board_name = &atao_boards[0].name,
.offset = sizeof(struct atao_board),
.num_names = ARRAY_SIZE(atao_boards),
};

static int __init driver_atao_init_module(void)
{
return comedi_driver_register(&driver_atao);
}

static void __exit driver_atao_cleanup_module(void)
{
comedi_driver_unregister(&driver_atao);
}

module_init(driver_atao_init_module);
module_exit(driver_atao_cleanup_module);

static void atao_reset(struct comedi_device *dev);

static int atao_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);
static int atao_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);
static int atao_dio_insn_bits(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);
static int atao_dio_insn_config(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);
static int atao_calib_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);
static int atao_calib_insn_write(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data);

static int atao_attach(struct comedi_device *dev, struct comedi_devconfig *it)
{
struct comedi_subdevice *s;
unsigned long iobase;
int ao_unipolar;

iobase = it->options[0];
if (iobase == 0)
iobase = 0x1c0;
ao_unipolar = it->options[3];

printk(KERN_INFO "comedi%d: ni_at_ao: 0x%04lx", dev->minor, iobase);

if (!request_region(iobase, ATAO_SIZE, "ni_at_ao")) {
printk(" I/O port conflict\n");
return -EIO;
}
dev->iobase = iobase;

/* dev->board_ptr = atao_probe(dev); */

dev->board_name = thisboard->name;

if (alloc_private(dev, sizeof(struct atao_private)) < 0)
return -ENOMEM;

if (alloc_subdevices(dev, 4) < 0)
return -ENOMEM;

s = dev->subdevices + 0;
/* analog output subdevice */
s->type = COMEDI_SUBD_AO;
s->subdev_flags = SDF_WRITABLE;
s->n_chan = thisboard->n_ao_chans;
s->maxdata = (1 << 12) - 1;
if (ao_unipolar)
s->range_table = &range_unipolar10;
else
s->range_table = &range_bipolar10;
s->insn_write = &atao_ao_winsn;
s->insn_read = &atao_ao_rinsn;

s = dev->subdevices + 1;
/* digital i/o subdevice */
s->type = COMEDI_SUBD_DIO;
s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
s->n_chan = 8;
s->maxdata = 1;
s->range_table = &range_digital;
s->insn_bits = atao_dio_insn_bits;
s->insn_config = atao_dio_insn_config;

s = dev->subdevices + 2;
/* caldac subdevice */
s->type = COMEDI_SUBD_CALIB;
s->subdev_flags = SDF_WRITABLE | SDF_INTERNAL;
s->n_chan = 21;
s->maxdata = 0xff;
s->insn_read = atao_calib_insn_read;
s->insn_write = atao_calib_insn_write;

s = dev->subdevices + 3;
/* eeprom subdevice */
/* s->type=COMEDI_SUBD_EEPROM; */
s->type = COMEDI_SUBD_UNUSED;

atao_reset(dev);

printk(KERN_INFO "\n");

return 0;
}

static int atao_detach(struct comedi_device *dev)
{
printk(KERN_INFO "comedi%d: atao: remove\n", dev->minor);

if (dev->iobase)
release_region(dev->iobase, ATAO_SIZE);

return 0;
}

static void atao_reset(struct comedi_device *dev)
{
/* This is the reset sequence described in the manual */
Expand Down Expand Up @@ -471,6 +333,110 @@ static int atao_calib_insn_write(struct comedi_device *dev,
return insn->n;
}

static int atao_attach(struct comedi_device *dev, struct comedi_devconfig *it)
{
struct comedi_subdevice *s;
unsigned long iobase;
int ao_unipolar;

iobase = it->options[0];
if (iobase == 0)
iobase = 0x1c0;
ao_unipolar = it->options[3];

printk(KERN_INFO "comedi%d: ni_at_ao: 0x%04lx", dev->minor, iobase);

if (!request_region(iobase, ATAO_SIZE, "ni_at_ao")) {
printk(" I/O port conflict\n");
return -EIO;
}
dev->iobase = iobase;

/* dev->board_ptr = atao_probe(dev); */

dev->board_name = thisboard->name;

if (alloc_private(dev, sizeof(struct atao_private)) < 0)
return -ENOMEM;

if (alloc_subdevices(dev, 4) < 0)
return -ENOMEM;

s = dev->subdevices + 0;
/* analog output subdevice */
s->type = COMEDI_SUBD_AO;
s->subdev_flags = SDF_WRITABLE;
s->n_chan = thisboard->n_ao_chans;
s->maxdata = (1 << 12) - 1;
if (ao_unipolar)
s->range_table = &range_unipolar10;
else
s->range_table = &range_bipolar10;
s->insn_write = &atao_ao_winsn;
s->insn_read = &atao_ao_rinsn;

s = dev->subdevices + 1;
/* digital i/o subdevice */
s->type = COMEDI_SUBD_DIO;
s->subdev_flags = SDF_READABLE | SDF_WRITABLE;
s->n_chan = 8;
s->maxdata = 1;
s->range_table = &range_digital;
s->insn_bits = atao_dio_insn_bits;
s->insn_config = atao_dio_insn_config;

s = dev->subdevices + 2;
/* caldac subdevice */
s->type = COMEDI_SUBD_CALIB;
s->subdev_flags = SDF_WRITABLE | SDF_INTERNAL;
s->n_chan = 21;
s->maxdata = 0xff;
s->insn_read = atao_calib_insn_read;
s->insn_write = atao_calib_insn_write;

s = dev->subdevices + 3;
/* eeprom subdevice */
/* s->type=COMEDI_SUBD_EEPROM; */
s->type = COMEDI_SUBD_UNUSED;

atao_reset(dev);

printk(KERN_INFO "\n");

return 0;
}

static int atao_detach(struct comedi_device *dev)
{
printk(KERN_INFO "comedi%d: atao: remove\n", dev->minor);

if (dev->iobase)
release_region(dev->iobase, ATAO_SIZE);

return 0;
}

static const struct atao_board atao_boards[] = {
{
.name = "ai-ao-6",
.n_ao_chans = 6,
}, {
.name = "ai-ao-10",
.n_ao_chans = 10,
},
};

static struct comedi_driver ni_at_ao_driver = {
.driver_name = "ni_at_ao",
.module = THIS_MODULE,
.attach = atao_attach,
.detach = atao_detach,
.board_name = &atao_boards[0].name,
.offset = sizeof(struct atao_board),
.num_names = ARRAY_SIZE(atao_boards),
};
module_comedi_driver(ni_at_ao_driver);

MODULE_AUTHOR("Comedi http://www.comedi.org");
MODULE_DESCRIPTION("Comedi low-level driver");
MODULE_LICENSE("GPL");

0 comments on commit f8e1f0b

Please sign in to comment.