Skip to content

Commit

Permalink
Staging: comedi: add kcomedilib to the tree
Browse files Browse the repository at this point in the history
This adds the kcomedilib module

From: David Schleef <ds@schleef.org>
Cc: Frank Mori Hess <fmhess@users.sourceforge.net>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
David Schleef authored and Greg Kroah-Hartman committed Jan 6, 2009
1 parent 02ebd47 commit b79a7a2
Show file tree
Hide file tree
Showing 7 changed files with 1,199 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/staging/comedi/Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
obj-$(CONFIG_COMEDI) += comedi.o
obj-$(CONFIG_COMEDI_RT) += comedi_rt.o

obj-$(CONFIG_COMEDI) += kcomedilib/

comedi-objs := \
comedi_fops.o \
proc.o \
Expand Down
8 changes: 8 additions & 0 deletions drivers/staging/comedi/kcomedilib/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
obj-$(CONFIG_COMEDI) += kcomedilib.o

kcomedilib-objs := \
data.o \
ksyms.o \
dio.o \
kcomedilib_main.o \
get.o
89 changes: 89 additions & 0 deletions drivers/staging/comedi/kcomedilib/data.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
kcomedilib/data.c
implements comedi_data_*() functions
COMEDI - Linux Control and Measurement Device Interface
Copyright (C) 2000 David A. Schleef <ds@schleef.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
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 "../comedi.h"
#include "../comedilib.h"
#include "../comedidev.h" /* for comedi_udelay() */

#include <linux/string.h>

int comedi_data_write(comedi_t * dev, unsigned int subdev, unsigned int chan,
unsigned int range, unsigned int aref, lsampl_t data)
{
comedi_insn insn;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_WRITE;
insn.n = 1;
insn.data = &data;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, range, aref);

return comedi_do_insn(dev, &insn);
}

int comedi_data_read(comedi_t * dev, unsigned int subdev, unsigned int chan,
unsigned int range, unsigned int aref, lsampl_t * data)
{
comedi_insn insn;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_READ;
insn.n = 1;
insn.data = data;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, range, aref);

return comedi_do_insn(dev, &insn);
}

int comedi_data_read_hint(comedi_t * dev, unsigned int subdev,
unsigned int chan, unsigned int range, unsigned int aref)
{
comedi_insn insn;
lsampl_t dummy_data;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_READ;
insn.n = 0;
insn.data = &dummy_data;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, range, aref);

return comedi_do_insn(dev, &insn);
}

int comedi_data_read_delayed(comedi_t * dev, unsigned int subdev,
unsigned int chan, unsigned int range, unsigned int aref,
lsampl_t * data, unsigned int nano_sec)
{
int retval;

retval = comedi_data_read_hint(dev, subdev, chan, range, aref);
if (retval < 0)
return retval;

comedi_udelay((nano_sec + 999) / 1000);

return comedi_data_read(dev, subdev, chan, range, aref, data);
}
95 changes: 95 additions & 0 deletions drivers/staging/comedi/kcomedilib/dio.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
kcomedilib/dio.c
implements comedi_dio_*() functions
COMEDI - Linux Control and Measurement Device Interface
Copyright (C) 2000 David A. Schleef <ds@schleef.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
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 "../comedi.h"
#include "../comedilib.h"

#include <linux/string.h>

int comedi_dio_config(comedi_t * dev, unsigned int subdev, unsigned int chan,
unsigned int io)
{
comedi_insn insn;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_CONFIG;
insn.n = 1;
insn.data = &io;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, 0, 0);

return comedi_do_insn(dev, &insn);
}

int comedi_dio_read(comedi_t * dev, unsigned int subdev, unsigned int chan,
unsigned int *val)
{
comedi_insn insn;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_READ;
insn.n = 1;
insn.data = val;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, 0, 0);

return comedi_do_insn(dev, &insn);
}

int comedi_dio_write(comedi_t * dev, unsigned int subdev, unsigned int chan,
unsigned int val)
{
comedi_insn insn;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_WRITE;
insn.n = 1;
insn.data = &val;
insn.subdev = subdev;
insn.chanspec = CR_PACK(chan, 0, 0);

return comedi_do_insn(dev, &insn);
}

int comedi_dio_bitfield(comedi_t * dev, unsigned int subdev, unsigned int mask,
unsigned int *bits)
{
comedi_insn insn;
lsampl_t data[2];
int ret;

memset(&insn, 0, sizeof(insn));
insn.insn = INSN_BITS;
insn.n = 2;
insn.data = data;
insn.subdev = subdev;

data[0] = mask;
data[1] = *bits;

ret = comedi_do_insn(dev, &insn);

*bits = data[1];

return ret;
}
Loading

0 comments on commit b79a7a2

Please sign in to comment.