none
*/
-#include <linux/comedidev.h>
-#include <linux/pci.h>
+#include "../comedidev.h"
#include "mf624.h"
+#include <linux/pci.h>
MODULE_AUTHOR("Francois Poulain <fpoulain AT gmail DOT com>");
MODULE_DESCRIPTION("Humusoft MF624 Multifunction I/O Card");
MODULE_LICENSE("GPL");
+#define rt_printk printk
+
/* Some definition ... */
/* FIXME : adopt a REAL guideline for naming macros ... */
/* FIXME : adopt a REAL guideline for presenting functions */
/* Useful for shorthand access to the particular board structure */
#define thisboard ((mf624_board *)dev->board_ptr)
+typedef unsigned int lsampl_t;
+
/* Private data structure */
typedef struct{
int data;
/* Used for AO readback */
lsampl_t ao_readback[8];
-}mf624_private;
+} mf624_private;
/*
* most drivers define the following macro to make it easy to
#define devpriv ((mf624_private *)dev->private)
/* Attach/detach functions declaration */
-static int mf624_attach(comedi_device *dev,comedi_devconfig *it);
-static int mf624_detach(comedi_device *dev);
+static int mf624_attach(struct comedi_device *dev, struct comedi_devconfig *it);
+static int mf624_detach(struct comedi_device *dev);
/* Analog functions operation to be attached */
-static int mf624_ai_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_ai_cfg(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_ao_winsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_ao_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_ao_cfg(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
+static int mf624_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_ai_cfg(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_ao_cfg(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
/* Digital functions operation to be attached */
-static int mf624_di_insn_bits(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_do_insn_bits(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
+static int mf624_di_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_do_insn_bits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
/* Timers/counters functions operation to be attached */
-static int mf624_timer_winsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_timer_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_timer_cfg(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
+static int mf624_timer_winsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_timer_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_timer_cfg(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
/* Encoder functions operation to be attached */
-static int mf624_enc_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
-static int mf624_enc_cfg(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn, lsampl_t *data);
+static int mf624_enc_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
+static int mf624_enc_cfg(struct comedi_device *dev,struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data);
/*static irqreturn_t mf624_interrupt(int irq, void *d, struct pt_regs *regs);*/
* the board, and also about the kernel module that contains
* the device code.
*/
-static comedi_driver driver_mf624={
+static struct comedi_driver driver_mf624 = {
driver_name: "mf624",
module: THIS_MODULE,
attach: mf624_attach,
* in the driver structure, dev->board_ptr contains that
* address.
*/
-static int mf624_attach(comedi_device *dev,comedi_devconfig *it){
- comedi_subdevice *s;
+static int mf624_attach(struct comedi_device *dev,struct comedi_devconfig *it){
+ struct comedi_subdevice *s;
struct pci_dev* pcidev;
unsigned int index, channel, status;
* allocated by _attach(). dev->private and dev->subdevices are
* deallocated automatically by the core.
*/
-static int mf624_detach(comedi_device *dev)
+static int mf624_detach(struct comedi_device *dev)
{
rt_printk("comedi%d: mf624: remove\n", dev->minor);
- if(dev->irq){comedi_free_irq(dev->irq, dev);}
-
if(devpriv && devpriv->pci_dev)
{
if(devpriv->BADR0)
}
/* read n samples on Analog Input channel */
-static int mf624_ai_rinsn(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)
+static int mf624_ai_rinsn(struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn,lsampl_t *data)
{
unsigned int dat, n, i, status, chan = CR_CHAN(insn->chanspec);
}
/* Analog input configuration */
-static int mf624_ai_cfg(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){
+static int mf624_ai_cfg(struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn,lsampl_t *data){
#ifdef EXTDEBUG
rt_printk("comedi%d: mf624: _insn_ai_cfg called\n", dev->minor);
#endif
}
/* write n samples on Analog Output channel */
-static int mf624_ao_winsn(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)
+static int mf624_ao_winsn(struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn,lsampl_t *data)
{
unsigned int i, chan = CR_CHAN(insn->chanspec), status;
#ifdef EXTDEBUG
}
/* Analog output configuration */
-static int mf624_ao_cfg(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){
+static int mf624_ao_cfg(struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn,lsampl_t *data){
#ifdef EXTDEBUG
- rt_printk("comedi%d: mf624: _ao_cfg called\n, dev->minor");
+ rt_printk("comedi%d: mf624: _ao_cfg called\n", dev->minor);
#endif
return insn->n;
}
/* AO subdevices should have a read insn as well as a write insn.
* Usually this means copying a value stored in devpriv. */
-static int mf624_ao_rinsn(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)
+static int mf624_ao_rinsn(struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn,lsampl_t *data)
{
unsigned int i, chan = CR_CHAN(insn->chanspec);
}
/* Write digital data */
-static int mf624_do_insn_bits(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data)
+static int mf624_do_insn_bits(struct comedi_device *dev,struct comedi_subdevice *s, struct comedi_insn *insn,lsampl_t *data)
{
#ifdef EXTDEBUG
rt_printk("comedi%d: mf624: _do_insn_bits called with data: %d %d\n", dev->minor, data[0], data[1]);
}
/* Read digital data */
-static int mf624_di_insn_bits(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data)
+static int mf624_di_insn_bits(struct comedi_device *dev,struct comedi_subdevice *s, struct comedi_insn *insn,lsampl_t *data)
{
#ifdef EXTDEBUG
rt_printk("comedi%d: mf624: _di_insn_bits called with data: %d %d\n", dev->minor, data[0], data[1]);
}
/* Set the preload registers */
-static int mf624_timer_winsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data){
+static int mf624_timer_winsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data){
unsigned int channel = CR_CHAN(insn->chanspec);
#ifdef EXTDEBUG
}
/* Read the timer or the preload registers */
-static int mf624_timer_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data){
+static int mf624_timer_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data){
unsigned int channel = CR_CHAN(insn->chanspec), i = 0, status = 0, loadA = 0, loadB = 0, config = 0;
#ifdef EXTDEBUG
}
/* Configure timers */
-static int mf624_timer_cfg(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data){
+static int mf624_timer_cfg(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data){
unsigned int bitfield = 0, bitfield2 = 0, status = 0, mask = 0, mask2 = 0, i = 0, dataIndex = 0, channel = CR_CHAN(insn->chanspec);
}
/* Read an encoder */
-static int mf624_enc_rinsn(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data){
+static int mf624_enc_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data){
unsigned int i, channel = CR_CHAN(insn->chanspec);
#ifdef EXTDEBUG
rt_printk("comedi%d: mf624: _enc_rinsn called for channel %d, with n = %d\n", dev->minor, channel, insn->n);
}
/* Configure encoders */
-static int mf624_enc_cfg(comedi_device *dev, comedi_subdevice *s, comedi_insn *insn, lsampl_t *data){
+static int mf624_enc_cfg(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, lsampl_t *data){
unsigned char bitfield = 0;
unsigned int status = 0, mask = 0, i = 0, dataIndex = 0, channel = CR_CHAN(insn->chanspec);