Re: [PATCH] Staging: dt3155: fix checkpatch.pl style issues and errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Mar 27, 2010 at 06:55:50PM -0400, Jason Baldus wrote:
> This patch fixes many checkpatch.pl style issues.  Lines are now all shorter
> than 80 characters and braces are placed correctly.  Indentation is done with
> tabs instead of spaces.  Also fixed checkpatch.pl errors with assignment
> within conditionals.
> 
> Signed-off-by: Jason Baldus <jason.baldus@xxxxxxxxx>

I know these are all trivial changes,
but would it be possible to break the patch up a bit?
Its a lot to review in one hit.

> ---
>  drivers/staging/dt3155/dt3155_drv.c | 1744 +++++++++++++++++------------------
>  1 files changed, 867 insertions(+), 877 deletions(-)
> 
> diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c
> index a67c622..f76ba7d 100644
> --- a/drivers/staging/dt3155/dt3155_drv.c
> +++ b/drivers/staging/dt3155/dt3155_drv.c
> @@ -1,59 +1,59 @@
>  /*
> -
> -Copyright 1996,2002,2005 Gregory D. Hager, Alfred A. Rizzi, Noah J. Cowan,
> -                         Jason Lapenta, Scott Smedley, Greg Sharp
> -
> -This file is part of the DT3155 Device Driver.
> -
> -The DT3155 Device Driver 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.
> -
> -The DT3155 Device Driver 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 the DT3155 Device Driver; if not, write to the Free
> -Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> -MA 02111-1307 USA
> -
> --- Changes --
> -
> -  Date     Programmer	Description of changes made
> -  -------------------------------------------------------------------
> -  03-Jul-2000 JML       n/a
> -  10-Oct-2001 SS        port to 2.4 kernel
> -  02-Apr-2002 SS        Mods to use allocator as a standalone module;
> -                        Merged John Roll's changes (john@xxxxxxxxxxxxxxx)
> -                        to make work with multiple boards.
> -  02-Jul-2002 SS        Merged James Rose's chages (rosejr@xxxxxxxxxx) to:
> -                         * fix successive interrupt-driven captures
> -                         * add select/poll support.
> -  10-Jul-2002 GCS       Add error check when ndevices > MAXBOARDS.
> -  02-Aug-2002 GCS       Fix field mode so that odd (lower) field is stored
> -                        in lower half of buffer.
> -  05-Aug-2005 SS        port to 2.6 kernel.
> -  26-Oct-2009 SS	port to 2.6.30 kernel.
> -
> --- Notes --
> -
> -** appended "mem=124" in lilo.conf to allow for 4megs free on my 128meg system.
> - * using allocator.c and allocator.h from o'reilly book (alessandro rubini)
> -    ftp://ftp.systemy.it/pub/develop (see README.allocator)
> -
> - + might want to get rid of MAXboards for allocating initial buffer.
> -    confusing and not necessary
> -
> - + in cleanup_module the MOD_IN_USE looks like it is check after it should
> -
> - * GFP_DMA should not be set with a PCI system (pg 291)
> -
> - - NJC why are only two buffers allowed? (see isr, approx line 358)
> -
> -*/
> + *
> + *Copyright 1996,2002,2005 Gregory D. Hager, Alfred A. Rizzi, Noah J. Cowan,
> + *			Jason Lapenta, Scott Smedley, Greg Sharp
> + *
> + *This file is part of the DT3155 Device Driver.
> + *
> + *The DT3155 Device Driver 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.
> + *
> + *The DT3155 Device Driver 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 the DT3155 Device Driver; if not, write to the Free
> + *Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + *MA 02111-1307 USA
> + *
> + *-- Changes --
> + *
> + *Date     Programmer	Description of changes made
> + *-------------------------------------------------------------------
> + *03-Jul-2000 JML       n/a
> + *10-Oct-2001 SS        port to 2.4 kernel
> + *02-Apr-2002 SS        Mods to use allocator as a standalone module;
> + *Merged John Roll's changes (john@xxxxxxxxxxxxxxx)
> + *to make work with multiple boards.
> + *02-Jul-2002 SS        Merged James Rose's chages (rosejr@xxxxxxxxxx) to:
> + ** fix successive interrupt-driven captures
> + ** add select/poll support.
> + *10-Jul-2002 GCS       Add error check when ndevices > MAXBOARDS.
> + *02-Aug-2002 GCS       Fix field mode so that odd (lower) field is stored
> + *in lower half of buffer.
> + *05-Aug-2005 SS        port to 2.6 kernel.
> + *26-Oct-2009 SS	port to 2.6.30 kernel.
> + *
> + *-- Notes --
> + *
> + ** appended "mem=124" in lilo.conf to allow for 4megs free on my 128meg system.
> + ** using allocator.c and allocator.h from o'reilly book (alessandro rubini)
> + *ftp://ftp.systemy.it/pub/develop (see README.allocator)
> + *
> + *+ might want to get rid of MAXboards for allocating initial buffer.
> + *confusing and not necessary
> + *
> + *+ in cleanup_module the MOD_IN_USE looks like it is check after it should
> + *
> + ** GFP_DMA should not be set with a PCI system (pg 291)
> + *
> + *- NJC why are only two buffers allowed? (see isr, approx line 358)
> + *
> + */
>  
>  extern void printques(int);
>  
> @@ -61,7 +61,6 @@ extern void printques(int);
>  #include <linux/module.h>
>  #include <linux/interrupt.h>
>  
> -
>  MODULE_LICENSE("GPL");
>  
>  #endif
> @@ -96,1000 +95,991 @@ int dt3155_errno = 0;
>  #define MAXPCI    16
>  
>  #ifdef DT_DEBUG
> -#define DT_3155_DEBUG_MSG(x,y) printk(x,y)
> +#define DT_3155_DEBUG_MSG(x, y) printk(x, y)
>  #else
> -#define DT_3155_DEBUG_MSG(x,y)
> +#define DT_3155_DEBUG_MSG(x, y)
>  #endif
>  
>  /* wait queue for interrupts */
> -wait_queue_head_t dt3155_read_wait_queue[ MAXBOARDS ];
> +wait_queue_head_t dt3155_read_wait_queue[MAXBOARDS];
>  
>  #define DT_3155_SUCCESS 0
> -#define DT_3155_FAILURE -EIO
> +#define DT_3155_FAILURE (-EIO)
>  
>  /* set to dynamicaly allocate, but it is tunable: */
>  /* insmod DT_3155 dt3155 dt3155_major=XX */
>  int dt3155_major = 0;
>  
>  /* The minor numbers are 0 and 1 ... they are not tunable.
> - * They are used as the indices for the structure vectors,
> - * and register address vectors
> - */
> +* They are used as the indices for the structure vectors,
> +* and register address vectors
> +*/
>  
>  /* Global structures and variables */
>  
>  /* Status of each device */
> -struct dt3155_status_s dt3155_status[ MAXBOARDS ];
> +struct dt3155_status_s dt3155_status[MAXBOARDS];
>  
>  /* kernel logical address of the board */
> -u8 *dt3155_lbase[ MAXBOARDS ] = { NULL
> +u8 *dt3155_lbase[MAXBOARDS] = { NULL
>  #if MAXBOARDS == 2
> -				      , NULL
> +	    , NULL
>  #endif
>  };
> +
>  /* DT3155 registers              */
> -u8 *dt3155_bbase = NULL;		  /* kernel logical address of the *
> -					   * buffer region                 */
> -u32  dt3155_dev_open[ MAXBOARDS ] = {0
> +u8 *dt3155_bbase = NULL;	/* kernel logical address of the *
> +				 * buffer region                 */
> +u32 dt3155_dev_open[MAXBOARDS] = { 0
>  #if MAXBOARDS == 2
> -				       , 0
> +	    , 0
>  #endif
>  };
>  
> -u32  ndevices = 0;
> -u32 unique_tag = 0;;
> -
> +u32 ndevices = 0;
> +u32 unique_tag = 0;
>  
>  /*
>   * Stops interrupt generation right away and resets the status
>   * to idle.  I don't know why this works and the other way doesn't.
>   * (James Rose)
>   */
> -static void quick_stop (int minor)
> +static void quick_stop(int minor)
>  {
> -  // TODO: scott was here
> +/* TODO: scott was here */
>  #if 1
> -  ReadMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg);
> -  /* disable interrupts */
> -  int_csr_r.fld.FLD_END_EVE_EN = 0;
> -  int_csr_r.fld.FLD_END_ODD_EN = 0;
> -  WriteMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg );
> -
> -  dt3155_status[ minor ].state &= ~(DT3155_STATE_STOP|0xff);
> -  /* mark the system stopped: */
> -  dt3155_status[ minor ].state |= DT3155_STATE_IDLE;
> -  dt3155_fbuffer[ minor ]->stop_acquire = 0;
> -  dt3155_fbuffer[ minor ]->even_stopped = 0;
> +	ReadMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
> +/* disable interrupts */
> +	int_csr_r.fld.FLD_END_EVE_EN = 0;
> +	int_csr_r.fld.FLD_END_ODD_EN = 0;
> +	WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
> +
> +	dt3155_status[minor].state &= ~(DT3155_STATE_STOP | 0xff);
> +/* mark the system stopped: */
> +	dt3155_status[minor].state |= DT3155_STATE_IDLE;
> +	dt3155_fbuffer[minor]->stop_acquire = 0;
> +	dt3155_fbuffer[minor]->even_stopped = 0;
>  #else
> -  dt3155_status[minor].state |= DT3155_STATE_STOP;
> -  dt3155_status[minor].fbuffer.stop_acquire = 1;
> +	dt3155_status[minor].state |= DT3155_STATE_STOP;
> +	dt3155_status[minor].fbuffer.stop_acquire = 1;
>  #endif
>  
>  }
>  
> -
>  /*****************************************************
> - *  dt3155_isr() Interrupt service routien
> - *
> - * - looks like this isr supports IRQ sharing (or could) JML
> - * - Assumes irq's are disabled, via SA_INTERRUPT flag
> - * being set in request_irq() call from init_module()
> - *****************************************************/
> -static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs )
> +*  dt3155_isr() Interrupt service routien
> +*
> +* - looks like this isr supports IRQ sharing (or could) JML
> +* - Assumes irq's are disabled, via SA_INTERRUPT flag
> +* being set in request_irq() call from init_module()
> +*****************************************************/
> +static inline void dt3155_isr(int irq, void *dev_id, struct pt_regs *regs)
>  {
> -  int    minor = -1;
> -  int    index;
> -  unsigned long flags;
> -  u32 buffer_addr;
> -
> -  /* find out who issued the interrupt */
> -  for ( index = 0; index < ndevices; index++ ) {
> -    if( dev_id == (void*) &dt3155_status[ index ])
> -      {
> -	minor = index;
> -	break;
> -      }
> -  }
> -
> -  /* hopefully we should not get here */
> -  if ( minor < 0 || minor >= MAXBOARDS ) {
> -    printk(KERN_ERR "dt3155_isr called with invalid dev_id\n");
> -    return;
> -  }
> -
> -  /* Check for corruption and set a flag if so */
> -  ReadMReg( (dt3155_lbase[ minor ] + CSR1), csr1_r.reg );
> -
> -  if ( (csr1_r.fld.FLD_CRPT_EVE) || (csr1_r.fld.FLD_CRPT_ODD) )
> -    {
> -      /* TODO: this should probably stop acquisition */
> -      /* and set some flags so that dt3155_read      */
> -      /* returns an error next time it is called     */
> -      dt3155_errno = DT_ERR_CORRUPT;
> -      printk("dt3155:  corrupt field\n");
> -      return;
> -    }
> -
> -  ReadMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg);
> -
> -  /* Handle the even field ... */
> -  if (int_csr_r.fld.FLD_END_EVE)
> -    {
> -      if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE) ==
> -	   DT3155_STATE_FLD )
> -	{
> -	  dt3155_fbuffer[ minor ]->frame_count++;
> +	int minor = -1;
> +	int index;
> +	unsigned long flags;
> +	u32 buffer_addr;
> +
> +/* find out who issued the interrupt */
> +	for (index = 0; index < ndevices; index++) {
> +		if (dev_id == (void *)&dt3155_status[index]) {
> +			minor = index;
> +			break;
> +		}
>  	}
>  
> -      ReadI2C(dt3155_lbase[ minor ], EVEN_CSR, &i2c_even_csr.reg);
> +/* hopefully we should not get here */
> +	if (minor < 0 || minor >= MAXBOARDS) {
> +		printk(KERN_ERR "dt3155_isr called with invalid dev_id\n");
> +		return;
> +	}
>  
> -      /* Clear the interrupt? */
> -      int_csr_r.fld.FLD_END_EVE = 1;
> +/* Check for corruption and set a flag if so */
> +	ReadMReg((dt3155_lbase[minor] + CSR1), csr1_r.reg);
>  
> -      /* disable the interrupt if last field */
> -      if (dt3155_fbuffer[ minor ]->stop_acquire)
> -	{
> -	  printk("dt3155:  even stopped.\n");
> -	  dt3155_fbuffer[ minor ]->even_stopped = 1;
> -	  if (i2c_even_csr.fld.SNGL_EVE)
> -	    {
> -	      int_csr_r.fld.FLD_END_EVE_EN = 0;
> -	    }
> -	  else
> -	    {
> -	      i2c_even_csr.fld.SNGL_EVE  = 1;
> -	    }
> +	if ((csr1_r.fld.FLD_CRPT_EVE) || (csr1_r.fld.FLD_CRPT_ODD)) {
> +/*
> + *TODO: this should probably stop acquisition
> + * and set some flags so that dt3155_read
> + * returns an error next time it is called
> + */
> +		dt3155_errno = DT_ERR_CORRUPT;
> +		printk(KERN_ERR "dt3155:  corrupt field\n");
> +		return;
>  	}
>  
> -      WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg );
> +	ReadMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
>  
> -      /* Set up next DMA if we are doing FIELDS */
> -      if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE ) ==
> -	   DT3155_STATE_FLD)
> -	{
> -	  /* GCS (Aug 2, 2002) -- In field mode, dma the odd field
> -	     into the lower half of the buffer */
> -	  const u32 stride =  dt3155_status[ minor ].config.cols;
> -	  buffer_addr = dt3155_fbuffer[ minor ]->
> -	    frame_info[ dt3155_fbuffer[ minor ]->active_buf ].addr
> -	    + (DT3155_MAX_ROWS / 2) * stride;
> -	  local_save_flags(flags);
> -	  local_irq_disable();
> -	  wake_up_interruptible( &dt3155_read_wait_queue[ minor ] );
> -
> -	  /* Set up the DMA address for the next field */
> -	  local_irq_restore(flags);
> -	  WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START), buffer_addr);
> -	}
> +/* Handle the even field ... */
> +	if (int_csr_r.fld.FLD_END_EVE) {
> +		if ((dt3155_status[minor].state & DT3155_STATE_MODE) ==
> +		    DT3155_STATE_FLD) {
> +			dt3155_fbuffer[minor]->frame_count++;
> +		}
>  
> -      /* Check for errors. */
> -      i2c_even_csr.fld.DONE_EVE = 1;
> -      if ( i2c_even_csr.fld.ERROR_EVE )
> -	dt3155_errno = DT_ERR_OVERRUN;
> +		ReadI2C(dt3155_lbase[minor], EVEN_CSR, &i2c_even_csr.reg);
>  
> -      WriteI2C( dt3155_lbase[ minor ], EVEN_CSR, i2c_even_csr.reg );
> +/* Clear the interrupt? */
> +		int_csr_r.fld.FLD_END_EVE = 1;
>  
> -      /* Note that we actually saw an even field meaning  */
> -      /* that subsequent odd field complete the frame     */
> -      dt3155_fbuffer[ minor ]->even_happened = 1;
> +/* disable the interrupt if last field */
> +		if (dt3155_fbuffer[minor]->stop_acquire) {
> +			printk(KERN_INFO "dt3155:  even stopped.\n");
> +			dt3155_fbuffer[minor]->even_stopped = 1;
> +			if (i2c_even_csr.fld.SNGL_EVE)
> +				int_csr_r.fld.FLD_END_EVE_EN = 0;
> +			else
> +				i2c_even_csr.fld.SNGL_EVE = 1;
> +		}
>  
> -      /* recording the time that the even field finished, this should be */
> -      /* about time in the middle of the frame */
> -      do_gettimeofday( &(dt3155_fbuffer[ minor ]->
> -			 frame_info[ dt3155_fbuffer[ minor ]->
> -				     active_buf ].time) );
> -      return;
> -    }
> +		WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
> +
> +/* Set up next DMA if we are doing FIELDS */
> +		if ((dt3155_status[minor].state & DT3155_STATE_MODE) ==
> +			DT3155_STATE_FLD) {
> +/* GCS (Aug 2, 2002) -- In field mode, dma the odd field
> +into the lower half of the buffer */
> +			const u32 stride = dt3155_status[minor].config.cols;
> +			buffer_addr =
> +			    dt3155_fbuffer[minor]->frame_info[dt3155_fbuffer
> +							      [minor]->
> +							      active_buf].addr +
> +			    (DT3155_MAX_ROWS / 2) * stride;
> +			local_save_flags(flags);
> +			local_irq_disable();
> +			wake_up_interruptible(&dt3155_read_wait_queue[minor]);
> +
> +/* Set up the DMA address for the next field */
> +			local_irq_restore(flags);
> +			WriteMReg((dt3155_lbase[minor] + ODD_DMA_START),
> +				  buffer_addr);
> +		}
>  
> -  /* ... now handle the odd field */
> -  if ( int_csr_r.fld.FLD_END_ODD )
> -    {
> -      ReadI2C( dt3155_lbase[ minor ], ODD_CSR, &i2c_odd_csr.reg );
> +/* Check for errors. */
> +		i2c_even_csr.fld.DONE_EVE = 1;
> +		if (i2c_even_csr.fld.ERROR_EVE)
> +			dt3155_errno = DT_ERR_OVERRUN;
>  
> -      /* Clear the interrupt? */
> -      int_csr_r.fld.FLD_END_ODD = 1;
> +		WriteI2C(dt3155_lbase[minor], EVEN_CSR, i2c_even_csr.reg);
>  
> -      if (dt3155_fbuffer[ minor ]->even_happened ||
> -	  (dt3155_status[ minor ].state & DT3155_STATE_MODE) ==
> -	  DT3155_STATE_FLD)
> -	{
> -	  dt3155_fbuffer[ minor ]->frame_count++;
> -	}
> +/*
> + *Note that we actually saw an even field meaning
> + *that subsequent odd field complete the frame
> + */
> +		dt3155_fbuffer[minor]->even_happened = 1;
>  
> -      if ( dt3155_fbuffer[ minor ]->stop_acquire &&
> -	   dt3155_fbuffer[ minor ]->even_stopped )
> -	{
> -	  printk(KERN_DEBUG "dt3155:  stopping odd..\n");
> -	  if ( i2c_odd_csr.fld.SNGL_ODD )
> -	    {
> -	      /* disable interrupts */
> -	      int_csr_r.fld.FLD_END_ODD_EN = 0;
> -	      dt3155_status[ minor ].state &= ~(DT3155_STATE_STOP|0xff);
> -
> -	      /* mark the system stopped: */
> -	      dt3155_status[ minor ].state |= DT3155_STATE_IDLE;
> -	      dt3155_fbuffer[ minor ]->stop_acquire = 0;
> -	      dt3155_fbuffer[ minor ]->even_stopped = 0;
> -
> -	      printk(KERN_DEBUG "dt3155:  state is now %x\n",
> -		     dt3155_status[minor].state);
> -	    }
> -	  else
> -	    {
> -	      i2c_odd_csr.fld.SNGL_ODD  = 1;
> -	    }
> +/*
> + *Recording the time that the even field finished, this should be
> + *about time in the middle of the frame
> + */
> +		do_gettimeofday(&
> +				(dt3155_fbuffer[minor]->frame_info
> +				 [dt3155_fbuffer[minor]->active_buf].time));
> +		return;
>  	}
>  
> -      WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg );
> -
> -      /* if the odd field has been acquired, then     */
> -      /* change the next dma location for both fields */
> -      /* and wake up the process if sleeping          */
> -      if ( dt3155_fbuffer[ minor ]->even_happened ||
> -	   (dt3155_status[ minor ].state & DT3155_STATE_MODE) ==
> -	   DT3155_STATE_FLD )
> -	{
> +/* ... now handle the odd field */
> +	if (int_csr_r.fld.FLD_END_ODD) {
> +		ReadI2C(dt3155_lbase[minor], ODD_CSR, &i2c_odd_csr.reg);
>  
> -	  local_save_flags(flags);
> -	  local_irq_disable();
> +/* Clear the interrupt? */
> +		int_csr_r.fld.FLD_END_ODD = 1;
>  
> -#ifdef DEBUG_QUES_B
> -	  printques( minor );
> -#endif
> -	  if ( dt3155_fbuffer[ minor ]->nbuffers > 2 )
> -	    {
> -	      if ( !are_empty_buffers( minor ) )
> -		{
> -		  /* The number of active + locked buffers is
> -		   * at most 2, and since there are none empty, there
> -		   * must be at least nbuffers-2 ready buffers.
> -		   * This is where we 'drop frames', oldest first. */
> -		  push_empty( pop_ready( minor ),  minor );
> +		if (dt3155_fbuffer[minor]->even_happened ||
> +		    (dt3155_status[minor].state & DT3155_STATE_MODE) ==
> +		    DT3155_STATE_FLD) {
> +			dt3155_fbuffer[minor]->frame_count++;
>  		}
>  
> -	      /* The ready_que can't be full, since we know
> -	       * there is one active buffer right now, so it's safe
> -	       * to push the active buf on the ready_que. */
> -	      push_ready( minor, dt3155_fbuffer[ minor ]->active_buf );
> -	      /* There's at least 1 empty -- make it active */
> -	      dt3155_fbuffer[ minor ]->active_buf = pop_empty( minor );
> -	      dt3155_fbuffer[ minor ]->
> -		frame_info[ dt3155_fbuffer[ minor ]->
> -			    active_buf ].tag = ++unique_tag;
> -	    }
> -	  else /* nbuffers == 2, special case */
> -	    { /* There is 1 active buffer.
> -	       * If there is a locked buffer, keep the active buffer
> -	       * the same -- that means we drop a frame.
> -	       */
> -	      if ( dt3155_fbuffer[ minor ]->locked_buf < 0 )
> -		{
> -		  push_ready( minor,
> -			      dt3155_fbuffer[ minor ]->active_buf );
> -		  if (are_empty_buffers( minor ) )
> -		    {
> -		      dt3155_fbuffer[ minor ]->active_buf =
> -			pop_empty( minor );
> -		    }
> -		  else
> -		    { /* no empty or locked buffers, so use a readybuf */
> -		      dt3155_fbuffer[ minor ]->active_buf =
> -			pop_ready( minor );
> -		    }
> +		if (dt3155_fbuffer[minor]->stop_acquire &&
> +		    dt3155_fbuffer[minor]->even_stopped) {
> +
> +			printk(KERN_DEBUG "dt3155:  stopping odd..\n");
> +			if (i2c_odd_csr.fld.SNGL_ODD) {
> +/* disable interrupts */
> +				int_csr_r.fld.FLD_END_ODD_EN = 0;
> +				dt3155_status[minor].state &=
> +				    ~(DT3155_STATE_STOP | 0xff);
> +
> +/* mark the system stopped: */
> +				dt3155_status[minor].state |= DT3155_STATE_IDLE;
> +				dt3155_fbuffer[minor]->stop_acquire = 0;
> +				dt3155_fbuffer[minor]->even_stopped = 0;
> +
> +				printk(KERN_DEBUG "dt3155:  state is now %x\n",
> +				       dt3155_status[minor].state);
> +			} else {
> +				i2c_odd_csr.fld.SNGL_ODD = 1;
> +			}
>  		}
> -	    }
> +
> +		WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
> +
> +/*
> + *if the odd field has been acquired, then
> + *change the next dma location for both fields
> + *and wake up the process if sleeping
> + */
> +		if (dt3155_fbuffer[minor]->even_happened ||
> +			(dt3155_status[minor].state & DT3155_STATE_MODE) ==
> +			DT3155_STATE_FLD) {
> +
> +			local_save_flags(flags);
> +			local_irq_disable();
>  
>  #ifdef DEBUG_QUES_B
> -	  printques( minor );
> +			printques(minor);
>  #endif
> +			if (dt3155_fbuffer[minor]->nbuffers > 2) {
> +				if (!are_empty_buffers(minor)) {
> +					/*
> +					 *The number of active + locked buffers
> +					 *is at most 2, and since there are none
> +					 *empty, there must be at least
> +					 *nbuffers-2 ready buffers. This is
> +					 *where we 'drop frames', oldest first.
> +					 */
> +					push_empty(pop_ready(minor), minor);
> +				}
> +
> +				/*
> +				 *The ready_que can't be full, since we know
> +				 * there is one active buffer right now, so it's
> +				 * safe to push the active buf on the ready_que.
> +				 */
> +				push_ready(minor,
> +					   dt3155_fbuffer[minor]->active_buf);
> +/* There's at least 1 empty -- make it active */
> +				dt3155_fbuffer[minor]->active_buf =
> +							pop_empty(minor);
> +				dt3155_fbuffer[minor]->frame_info[dt3155_fbuffer
> +							[minor]->active_buf].
> +							tag = ++unique_tag;
> +			} else {	/* nbuffers == 2, special case */
> +				/*
> +				 *There is 1 active buffer.
> +				 * If there is a locked buffer, keep the active
> +				 * buffer the same -- that means we drop a
> +				 * frame.
> +				 */
> +				if (dt3155_fbuffer[minor]->locked_buf < 0) {
> +					push_ready(minor,
> +						   dt3155_fbuffer[minor]->
> +						   active_buf);
> +					if (are_empty_buffers(minor)) {
> +						dt3155_fbuffer[minor]->
> +						    active_buf =
> +						    pop_empty(minor);
> +					} else {
> +						/* no empty or locked buffers,
> +						 *so use a readybuf
> +						 */
> +						dt3155_fbuffer[minor]->
> +						    active_buf =
> +						    pop_ready(minor);
> +					}
> +				}
> +			}
>  
> -	  dt3155_fbuffer[ minor ]->even_happened = 0;
> -
> -	  wake_up_interruptible( &dt3155_read_wait_queue[ minor ] );
> +#ifdef DEBUG_QUES_B
> +			printques(minor);
> +#endif
>  
> -	  local_irq_restore(flags);
> -	}
> +			dt3155_fbuffer[minor]->even_happened = 0;
>  
> +			wake_up_interruptible(&dt3155_read_wait_queue[minor]);
>  
> -      /* Set up the DMA address for the next frame/field */
> -      buffer_addr = dt3155_fbuffer[ minor ]->
> -	frame_info[ dt3155_fbuffer[ minor ]->active_buf ].addr;
> -      if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE) ==
> -	   DT3155_STATE_FLD )
> -	{
> -	  WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), buffer_addr);
> -	}
> -      else
> -	{
> -	  WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), buffer_addr);
> +			local_irq_restore(flags);
> +		}
>  
> -	  WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START), buffer_addr
> -		    + dt3155_status[ minor ].config.cols);
> -	}
> +/* Set up the DMA address for the next frame/field */
> +		buffer_addr =
> +		    dt3155_fbuffer[minor]->frame_info[dt3155_fbuffer[minor]->
> +						      active_buf].addr;
> +		if ((dt3155_status[minor].state & DT3155_STATE_MODE) ==
> +		    DT3155_STATE_FLD) {
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START),
> +				  buffer_addr);
> +		} else {
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START),
> +				  buffer_addr);
> +
> +			WriteMReg((dt3155_lbase[minor] + ODD_DMA_START),
> +				  buffer_addr +
> +				  dt3155_status[minor].config.cols);
> +		}
>  
> -      /* Do error checking */
> -      i2c_odd_csr.fld.DONE_ODD = 1;
> -      if ( i2c_odd_csr.fld.ERROR_ODD )
> -	dt3155_errno = DT_ERR_OVERRUN;
> +/* Do error checking */
> +		i2c_odd_csr.fld.DONE_ODD = 1;
> +		if (i2c_odd_csr.fld.ERROR_ODD)
> +			dt3155_errno = DT_ERR_OVERRUN;
>  
> -      WriteI2C(dt3155_lbase[ minor ], ODD_CSR, i2c_odd_csr.reg );
> +		WriteI2C(dt3155_lbase[minor], ODD_CSR, i2c_odd_csr.reg);
>  
> -      return;
> -    }
> -  /* If we get here, the Odd Field wasn't it either... */
> -  printk( "neither even nor odd.  shared perhaps?\n");
> +		return;
> +	}
> +/* If we get here, the Odd Field wasn't it either... */
> +	printk(KERN_ERR "neither even nor odd.  shared perhaps?\n");
>  }
>  
>  /*****************************************************
> - * init_isr(int minor)
> - *   turns on interupt generation for the card
> - *   designated by "minor".
> - *   It is called *only* from inside ioctl().
> - *****************************************************/
> +* init_isr(int minor)
> +*   turns on interupt generation for the card
> +*   designated by "minor".
> +*   It is called *only* from inside ioctl().
> +*****************************************************/
>  static void dt3155_init_isr(int minor)
>  {
> -  const u32 stride =  dt3155_status[ minor ].config.cols;
> -
> -  switch (dt3155_status[ minor ].state & DT3155_STATE_MODE)
> -    {
> -    case DT3155_STATE_FLD:
> -      {
> -	even_dma_start_r  = dt3155_status[ minor ].
> -	  fbuffer.frame_info[ dt3155_status[ minor ].fbuffer.active_buf ].addr;
> -	even_dma_stride_r = 0;
> -	odd_dma_stride_r  = 0;
> -
> -	WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START),
> -		  even_dma_start_r);
> -	WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_STRIDE),
> -		  even_dma_stride_r);
> -	WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_STRIDE),
> -		  odd_dma_stride_r);
> -	break;
> -      }
> -
> -    case DT3155_STATE_FRAME:
> -    default:
> -      {
> -	even_dma_start_r  = dt3155_status[ minor ].
> -	  fbuffer.frame_info[ dt3155_status[ minor ].fbuffer.active_buf ].addr;
> -	odd_dma_start_r   =  even_dma_start_r + stride;
> -	even_dma_stride_r =  stride;
> -	odd_dma_stride_r  =  stride;
> -
> -	WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START),
> -		  even_dma_start_r);
> -	WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START),
> -		  odd_dma_start_r);
> -	WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_STRIDE),
> -		  even_dma_stride_r);
> -	WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_STRIDE),
> -		  odd_dma_stride_r);
> -	break;
> -      }
> -    }
> -
> -  /* 50/60 Hz should be set before this point but let's make sure it is */
> -  /* right anyway */
> -
> -  ReadI2C(dt3155_lbase[ minor ], CONFIG, &i2c_csr2.reg);
> -  i2c_csr2.fld.HZ50 = FORMAT50HZ;
> -  WriteI2C(dt3155_lbase[ minor ], CONFIG, i2c_config.reg);
> -
> -  /* enable busmaster chip, clear flags */
> -
> -  /*
> -   * TODO:
> -   * shouldn't we be concered with continuous values of
> -   * DT3155_SNAP & DT3155_ACQ here? (SS)
> -   */
> -
> -  csr1_r.reg                = 0;
> -  csr1_r.fld.CAP_CONT_EVE   = 1; /* use continuous capture bits to */
> -  csr1_r.fld.CAP_CONT_ODD   = 1; /* enable */
> -  csr1_r.fld.FLD_DN_EVE     = 1; /* writing a 1 clears flags */
> -  csr1_r.fld.FLD_DN_ODD     = 1;
> -  csr1_r.fld.SRST           = 1; /* reset        - must be 1 */
> -  csr1_r.fld.FIFO_EN        = 1; /* fifo control - must be 1 */
> -  csr1_r.fld.FLD_CRPT_EVE   = 1; /* writing a 1 clears flags */
> -  csr1_r.fld.FLD_CRPT_ODD   = 1;
> -
> -  WriteMReg((dt3155_lbase[ minor ] + CSR1),csr1_r.reg);
> -
> -  /* Enable interrupts at the end of each field */
> -
> -  int_csr_r.reg = 0;
> -  int_csr_r.fld.FLD_END_EVE_EN = 1;
> -  int_csr_r.fld.FLD_END_ODD_EN = 1;
> -  int_csr_r.fld.FLD_START_EN = 0;
> -
> -  WriteMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg);
> -
> -  /* start internal BUSY bits */
> -
> -  ReadI2C(dt3155_lbase[ minor ], CSR2, &i2c_csr2.reg);
> -  i2c_csr2.fld.BUSY_ODD  = 1;
> -  i2c_csr2.fld.BUSY_EVE  = 1;
> -  WriteI2C(dt3155_lbase[ minor ], CSR2, i2c_csr2.reg);
> -
> -  /* Now its up to the interrupt routine!! */
> -
> -  return;
> -}
> +	const u32 stride = dt3155_status[minor].config.cols;
> +
> +	switch (dt3155_status[minor].state & DT3155_STATE_MODE) {
> +	case DT3155_STATE_FLD:
> +		{
> +			even_dma_start_r =
> +			    dt3155_status[minor].fbuffer.
> +			    frame_info[dt3155_status[minor].fbuffer.active_buf].
> +			    addr;
> +			even_dma_stride_r = 0;
> +			odd_dma_stride_r = 0;
> +
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START),
> +				  even_dma_start_r);
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_STRIDE),
> +				  even_dma_stride_r);
> +			WriteMReg((dt3155_lbase[minor] + ODD_DMA_STRIDE),
> +				  odd_dma_stride_r);
> +			break;
> +		}
> +
> +	case DT3155_STATE_FRAME:
> +	default:
> +		{
> +			even_dma_start_r =
> +			    dt3155_status[minor].fbuffer.
> +			    frame_info[dt3155_status[minor].fbuffer.active_buf].
> +			    addr;
> +			odd_dma_start_r = even_dma_start_r + stride;
> +			even_dma_stride_r = stride;
> +			odd_dma_stride_r = stride;
> +
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START),
> +				  even_dma_start_r);
> +			WriteMReg((dt3155_lbase[minor] + ODD_DMA_START),
> +				  odd_dma_start_r);
> +			WriteMReg((dt3155_lbase[minor] + EVEN_DMA_STRIDE),
> +				  even_dma_stride_r);
> +			WriteMReg((dt3155_lbase[minor] + ODD_DMA_STRIDE),
> +				  odd_dma_stride_r);
> +			break;
> +		}
> +	}
> +
> +/* 50/60 Hz should be set before this point but let's make sure it is */
> +/* right anyway */
> +
> +	ReadI2C(dt3155_lbase[minor], CONFIG, &i2c_csr2.reg);
> +	i2c_csr2.fld.HZ50 = FORMAT50HZ;
> +	WriteI2C(dt3155_lbase[minor], CONFIG, i2c_config.reg);
> +
> +/* enable busmaster chip, clear flags */
> +
> +/*
> +* TODO:
> +* shouldn't we be concered with continuous values of
> +* DT3155_SNAP & DT3155_ACQ here? (SS)
> +*/
> +
> +	csr1_r.reg = 0;
> +	csr1_r.fld.CAP_CONT_EVE = 1;	/* use continuous capture bits to */
> +	csr1_r.fld.CAP_CONT_ODD = 1;	/* enable */
> +	csr1_r.fld.FLD_DN_EVE = 1;	/* writing a 1 clears flags */
> +	csr1_r.fld.FLD_DN_ODD = 1;
> +	csr1_r.fld.SRST = 1;	/* reset        - must be 1 */
> +	csr1_r.fld.FIFO_EN = 1;	/* fifo control - must be 1 */
> +	csr1_r.fld.FLD_CRPT_EVE = 1;	/* writing a 1 clears flags */
> +	csr1_r.fld.FLD_CRPT_ODD = 1;
> +
> +	WriteMReg((dt3155_lbase[minor] + CSR1), csr1_r.reg);
> +
> +/* Enable interrupts at the end of each field */
> +
> +	int_csr_r.reg = 0;
> +	int_csr_r.fld.FLD_END_EVE_EN = 1;
> +	int_csr_r.fld.FLD_END_ODD_EN = 1;
> +	int_csr_r.fld.FLD_START_EN = 0;
> +
> +	WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
> +
> +/* start internal BUSY bits */
> +
> +	ReadI2C(dt3155_lbase[minor], CSR2, &i2c_csr2.reg);
> +	i2c_csr2.fld.BUSY_ODD = 1;
> +	i2c_csr2.fld.BUSY_EVE = 1;
> +	WriteI2C(dt3155_lbase[minor], CSR2, i2c_csr2.reg);
> +
> +/* Now its up to the interrupt routine!! */
>  
> +	return;
> +}
>  
>  /*****************************************************
> - * ioctl()
> - *
> - *****************************************************/
> +* ioctl()
> +*
> +*****************************************************/
>  static int dt3155_ioctl(struct inode *inode,
> -			struct file *file,
> -			unsigned int cmd,
> -			unsigned long arg)
> +			struct file *file, unsigned int cmd, unsigned long arg)
>  {
> -  int minor = MINOR(inode->i_rdev); /* What device are we ioctl()'ing? */
> -
> -  if ( minor >= MAXBOARDS || minor < 0 )
> -    return -ENODEV;
> -
> -  /* make sure it is valid command */
> -  if (_IOC_NR(cmd) > DT3155_IOC_MAXNR)
> -    {
> -      printk("DT3155: invalid IOCTL(0x%x)\n",cmd);
> -      printk("DT3155: Valid commands (0x%x), (0x%x), (0x%x), (0x%x), (0x%x)\n",
> -	     (unsigned int)DT3155_GET_CONFIG,
> -	     (unsigned int)DT3155_SET_CONFIG,
> -	     (unsigned int)DT3155_START,
> -	     (unsigned int)DT3155_STOP,
> -	     (unsigned int)DT3155_FLUSH);
> -      return -EINVAL;
> -    }
> -
> -  switch (cmd)
> -    {
> -    case DT3155_SET_CONFIG:
> -      {
> -	if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> -	  return -EBUSY;
> +	/* What device are we ioctl()'ing? */
> +	int minor = MINOR(inode->i_rdev);
> +
> +	if (minor >= MAXBOARDS || minor < 0)
> +		return -ENODEV;
> +
> +/* make sure it is valid command */
> +	if (_IOC_NR(cmd) > DT3155_IOC_MAXNR) {
> +		printk(KERN_ERR "DT3155: invalid IOCTL(0x%x)\n", cmd);
> +		printk(KERN_INFO "DT3155: Valid commands (0x%x), (0x%x), "
> +					"(0x%x), (0x%x), (0x%x)\n",
> +					(unsigned int)DT3155_GET_CONFIG,
> +					(unsigned int)DT3155_SET_CONFIG,
> +					(unsigned int)DT3155_START,
> +					(unsigned int)DT3155_STOP,
> +					(unsigned int)DT3155_FLUSH);
> +		return -EINVAL;
> +	}
>  
> -	{
> -	  struct dt3155_config_s tmp;
> -	  if (copy_from_user((void *)&tmp, (void *) arg, sizeof(tmp)))
> -	      return -EFAULT;
> -	  /* check for valid settings */
> -	  if (tmp.rows > DT3155_MAX_ROWS ||
> -	      tmp.cols > DT3155_MAX_COLS ||
> -	      (tmp.acq_mode != DT3155_MODE_FRAME &&
> -	       tmp.acq_mode != DT3155_MODE_FIELD) ||
> -	      (tmp.continuous != DT3155_SNAP &&
> -	       tmp.continuous != DT3155_ACQ))
> -	    {
> -	      return -EINVAL;
> -	    }
> -	  dt3155_status[minor].config = tmp;
> +	switch (cmd) {
> +	case DT3155_SET_CONFIG:
> +		{
> +			if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> +				return -EBUSY;
> +
> +			{
> +				struct dt3155_config_s tmp;
> +				if (copy_from_user
> +				    ((void *)&tmp, (void *)arg, sizeof(tmp)))
> +					return -EFAULT;
> +/* check for valid settings */
> +				if (tmp.rows > DT3155_MAX_ROWS ||
> +				    tmp.cols > DT3155_MAX_COLS ||
> +				    (tmp.acq_mode != DT3155_MODE_FRAME &&
> +				     tmp.acq_mode != DT3155_MODE_FIELD) ||
> +				    (tmp.continuous != DT3155_SNAP &&
> +				     tmp.continuous != DT3155_ACQ)) {
> +					return -EINVAL;
> +				}
> +				dt3155_status[minor].config = tmp;
> +			}
> +			return 0;
> +		}
> +	case DT3155_GET_CONFIG:
> +		{
> +			if (copy_to_user
> +			    ((void *)arg, (void *)&dt3155_status[minor],
> +			     sizeof(dt3155_status_t)))
> +				return -EFAULT;
> +			return 0;
> +		}
> +	case DT3155_FLUSH:	/* Flushes the buffers -- ensures fresh data */
> +		{
> +			if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> +				return -EBUSY;
> +			return dt3155_flush(minor);
> +		}
> +	case DT3155_STOP:
> +		{
> +			if (dt3155_status[minor].state & DT3155_STATE_STOP ||
> +			    dt3155_status[minor].fbuffer.stop_acquire)
> +				return -EBUSY;
> +
> +			if (dt3155_status[minor].state == DT3155_STATE_IDLE)
> +				return 0;
> +
> +			quick_stop(minor);
> +			if (copy_to_user
> +			    ((void *)arg, (void *)&dt3155_status[minor],
> +			     sizeof(dt3155_status_t)))
> +				return -EFAULT;
> +			return 0;
> +		}
> +	case DT3155_START:
> +		{
> +			if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> +				return -EBUSY;
> +
> +			dt3155_status[minor].fbuffer.stop_acquire = 0;
> +			dt3155_status[minor].fbuffer.frame_count = 0;
> +
> +/* Set the MODE in the status -- we default to FRAME */
> +			if (dt3155_status[minor].config.acq_mode ==
> +			    DT3155_MODE_FIELD) {
> +				dt3155_status[minor].state = DT3155_STATE_FLD;
> +			} else {
> +				dt3155_status[minor].state = DT3155_STATE_FRAME;
> +			}
> +
> +			dt3155_init_isr(minor);
> +			if (copy_to_user
> +			    ((void *)arg, (void *)&dt3155_status[minor],
> +			     sizeof(dt3155_status_t)))
> +				return -EFAULT;
> +			return 0;
> +		}
> +	default:
> +		{
> +			printk(KERN_ERR "DT3155: invalid IOCTL(0x%x)\n", cmd);
> +			printk(KERN_INFO "DT3155: Valid commands (0x%x), "
> +				"(0x%x), (0x%x), (0x%x), (0x%x)\n",
> +				(unsigned int)DT3155_GET_CONFIG,
> +				(unsigned int)DT3155_SET_CONFIG, DT3155_START,
> +				DT3155_STOP, DT3155_FLUSH);
> +			return -ENOSYS;
> +		}
>  	}
> -	return 0;
> -      }
> -    case DT3155_GET_CONFIG:
> -      {
> -	if (copy_to_user((void *) arg, (void *) &dt3155_status[minor],
> -		     sizeof(dt3155_status_t) ))
> -	    return -EFAULT;
> -	return 0;
> -      }
> -    case DT3155_FLUSH: /* Flushes the buffers -- ensures fresh data */
> -      {
> -	if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> -	  return -EBUSY;
> -	return dt3155_flush(minor);
> -      }
> -    case DT3155_STOP:
> -      {
> -	if (dt3155_status[minor].state & DT3155_STATE_STOP ||
> -	    dt3155_status[minor].fbuffer.stop_acquire)
> -	  return -EBUSY;
> -
> -	if (dt3155_status[minor].state == DT3155_STATE_IDLE)
> -	  return 0;
> -
> -	quick_stop(minor);
> -	if (copy_to_user((void *) arg, (void *) &dt3155_status[minor],
> -		     sizeof(dt3155_status_t)))
> -	    return -EFAULT;
> -	return 0;
> -      }
> -    case DT3155_START:
> -      {
> -	if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> -	  return -EBUSY;
> -
> -	dt3155_status[minor].fbuffer.stop_acquire = 0;
> -	dt3155_status[minor].fbuffer.frame_count = 0;
> -
> -	/* Set the MODE in the status -- we default to FRAME */
> -	if (dt3155_status[minor].config.acq_mode == DT3155_MODE_FIELD)
> -	  {
> -	    dt3155_status[minor].state = DT3155_STATE_FLD;
> -	  }
> -	else
> -	  {
> -	    dt3155_status[minor].state = DT3155_STATE_FRAME;
> -	  }
> -
> -	dt3155_init_isr(minor);
> -	if (copy_to_user( (void *) arg, (void *) &dt3155_status[minor],
> -		      sizeof(dt3155_status_t)))
> -	    return -EFAULT;
> -	return 0;
> -      }
> -    default:
> -      {
> -	printk("DT3155: invalid IOCTL(0x%x)\n",cmd);
> -      printk("DT3155: Valid commands (0x%x), (0x%x), (0x%x), (0x%x), (0x%x)\n",
> -	     (unsigned int)DT3155_GET_CONFIG,
> -	     (unsigned int)DT3155_SET_CONFIG,
> -	     DT3155_START, DT3155_STOP, DT3155_FLUSH);
>  	return -ENOSYS;
> -      }
> -    }
> -  return -ENOSYS;
>  }
>  
>  /*****************************************************
> - * mmap()
> - *
> - * only allow the user to mmap the registers and buffer
> - * It is quite possible that this is broken, since the
> - * addition of of the capacity for two cards!!!!!!!!
> - * It *looks* like it should work but since I'm not
> - * sure how to use it, I'm not actually sure. (NJC? ditto by SS)
> - *****************************************************/
> -static int dt3155_mmap (struct file * file, struct vm_area_struct * vma)
> +* mmap()
> +*
> +* only allow the user to mmap the registers and buffer
> +* It is quite possible that this is broken, since the
> +* addition of of the capacity for two cards!!!!!!!!
> +* It *looks* like it should work but since I'm not
> +* sure how to use it, I'm not actually sure. (NJC? ditto by SS)
> +*****************************************************/
> +static int dt3155_mmap(struct file *file, struct vm_area_struct *vma)
>  {
> -  /* which device are we mmapping? */
> -  int				minor = MINOR(file->f_dentry->d_inode->i_rdev);
> -  unsigned long	offset;
> -  offset = vma->vm_pgoff << PAGE_SHIFT;
> -
> -  if (offset >= __pa(high_memory) || (file->f_flags & O_SYNC))
> -    vma->vm_flags |= VM_IO;
> -
> -  /* Don't try to swap out physical pages.. */
> -  vma->vm_flags |= VM_RESERVED;
> -
> -  /* they are mapping the registers or the buffer */
> -  if ((offset == dt3155_status[minor].reg_addr &&
> -       vma->vm_end - vma->vm_start == PCI_PAGE_SIZE) ||
> -      (offset == dt3155_status[minor].mem_addr &&
> -       vma->vm_end - vma->vm_start == dt3155_status[minor].mem_size))
> -    {
> -      if (remap_pfn_range(vma,
> -			vma->vm_start,
> -			offset >> PAGE_SHIFT,
> -			vma->vm_end - vma->vm_start,
> -			vma->vm_page_prot)) {
> -	  printk("DT3155: remap_page_range() failed.\n");
> -	  return -EAGAIN;
> +/* which device are we mmapping? */
> +	int minor = MINOR(file->f_dentry->d_inode->i_rdev);
> +	unsigned long offset;
> +	offset = vma->vm_pgoff << PAGE_SHIFT;
> +
> +	if (offset >= __pa(high_memory) || (file->f_flags & O_SYNC))
> +		vma->vm_flags |= VM_IO;
> +
> +/* Don't try to swap out physical pages.. */
> +	vma->vm_flags |= VM_RESERVED;
> +
> +/* they are mapping the registers or the buffer */
> +	if ((offset == dt3155_status[minor].reg_addr &&
> +		vma->vm_end - vma->vm_start == PCI_PAGE_SIZE) ||
> +		(offset == dt3155_status[minor].mem_addr &&
> +		vma->vm_end - vma->vm_start == dt3155_status[minor].mem_size)) {
> +
> +		if (remap_pfn_range(vma,
> +				    vma->vm_start,
> +				    offset >> PAGE_SHIFT,
> +				    vma->vm_end - vma->vm_start,
> +				    vma->vm_page_prot)) {
> +			printk(KERN_ERR "DT3155: remap_page_range() failed.\n");
> +			return -EAGAIN;
> +		}
> +	} else {
> +		printk(KERN_ERR "DT3155: dt3155_mmap() bad call.\n");
> +		return -ENXIO;
>  	}
> -    }
> -  else
> -    {
> -      printk("DT3155: dt3155_mmap() bad call.\n");
> -      return -ENXIO;
> -    }
> -
> -  return 0;
> -}
>  
> +	return 0;
> +}
>  
>  /*****************************************************
> - * open()
> - *
> - * Our special open code.
> - * MOD_INC_USE_COUNT make sure that the driver memory is not freed
> - * while the device is in use.
> - *****************************************************/
> -static int dt3155_open( struct inode* inode, struct file* filep)
> +* open()
> +*
> +* Our special open code.
> +* MOD_INC_USE_COUNT make sure that the driver memory is not freed
> +* while the device is in use.
> +*****************************************************/
> +static int dt3155_open(struct inode *inode, struct file *filep)
>  {
> -  int minor = MINOR(inode->i_rdev); /* what device are we opening? */
> -  if (dt3155_dev_open[ minor ]) {
> -    printk ("DT3155:  Already opened by another process.\n");
> -    return -EBUSY;
> -  }
> +	int minor = MINOR(inode->i_rdev);	/*what device are we opening?*/
> +	if (dt3155_dev_open[minor]) {
> +		printk(KERN_ERR "DT3155: Already opened by another process.\n");
> +		return -EBUSY;
> +	}
>  
> -  if (dt3155_status[ minor ].device_installed==0)
> -    {
> -      printk("DT3155 Open Error: No such device dt3155 minor number %d\n",
> -	     minor);
> -      return -EIO;
> -    }
> +	if (dt3155_status[minor].device_installed == 0) {
> +		printk(KERN_ERR "DT3155 Open Error: No such device dt3155 "
> +						"minor number %d\n", minor);
> +		return -EIO;
> +	}
>  
> -  if (dt3155_status[ minor ].state != DT3155_STATE_IDLE) {
> -    printk ("DT3155:  Not in idle state (state = %x)\n",
> -	    dt3155_status[ minor ].state);
> -    return -EBUSY;
> -  }
> +	if (dt3155_status[minor].state != DT3155_STATE_IDLE) {
> +		printk(KERN_ERR "DT3155:  Not in idle state (state = %x)\n",
> +		       dt3155_status[minor].state);
> +		return -EBUSY;
> +	}
>  
> -  printk("DT3155: Device opened.\n");
> +	printk(KERN_INFO "DT3155: Device opened.\n");
>  
> -  dt3155_dev_open[ minor ] = 1 ;
> +	dt3155_dev_open[minor] = 1;
>  
> -  dt3155_flush( minor );
> +	dt3155_flush(minor);
>  
> -  /* Disable ALL interrupts */
> -  int_csr_r.reg = 0;
> -  WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg );
> +/* Disable ALL interrupts */
> +	int_csr_r.reg = 0;
> +	WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg);
>  
> -  init_waitqueue_head(&(dt3155_read_wait_queue[minor]));
> +	init_waitqueue_head(&(dt3155_read_wait_queue[minor]));
>  
> -  return 0;
> +	return 0;
>  }
>  
> -
>  /*****************************************************
> - * close()
> - *
> - * Now decrement the use count.
> - *
> - *****************************************************/
> -static int dt3155_close( struct inode *inode, struct file *filep)
> +* close()
> +*
> +* Now decrement the use count.
> +*
> +*****************************************************/
> +static int dt3155_close(struct inode *inode, struct file *filep)
>  {
> -  int minor;
> -
> -  minor = MINOR(inode->i_rdev); /* which device are we closing */
> -  if (!dt3155_dev_open[ minor ])
> -    {
> -      printk("DT3155: attempt to CLOSE a not OPEN device\n");
> -    }
> -  else
> -    {
> -      dt3155_dev_open[ minor ] = 0;
> -
> -      if (dt3155_status[ minor ].state != DT3155_STATE_IDLE)
> -	{
> -	  quick_stop(minor);
> +	int minor;
> +
> +	minor = MINOR(inode->i_rdev);	/* which device are we closing */
> +	if (!dt3155_dev_open[minor]) {
> +		printk(KERN_ERR "DT3155: attempt to CLOSE a not OPEN device\n");
> +	} else {
> +		dt3155_dev_open[minor] = 0;
> +
> +		if (dt3155_status[minor].state != DT3155_STATE_IDLE)
> +			quick_stop(minor);
>  	}
> -    }
> -  return 0;
> +	return 0;
>  }
>  
>  /*****************************************************
> - * read()
> - *
> - *****************************************************/
> +* read()
> +*
> +*****************************************************/
>  static ssize_t dt3155_read(struct file *filep, char __user *buf,
>  			   size_t count, loff_t *ppos)
>  {
> -  /* which device are we reading from? */
> -  int		minor = MINOR(filep->f_dentry->d_inode->i_rdev);
> -  u32		offset;
> -  int		frame_index;
> -  frame_info_t	*frame_info_p;
> -
> -  /* TODO: this should check the error flag and */
> -  /*   return an error on hardware failures */
> -  if (count != sizeof(dt3155_read_t))
> -    {
> -      printk("DT3155 ERROR (NJC): count is not right\n");
> -      return -EINVAL;
> -    }
> -
> -
> -  /* Hack here -- I'm going to allow reading even when idle.
> -   * this is so that the frames can be read after STOP has
> -   * been called.  Leaving it here, commented out, as a reminder
> -   * for a short while to make sure there are no problems.
> -   * Note that if the driver is not opened in non_blocking mode,
> -   * and the device is idle, then it could sit here forever! */
> -
> -  /*  if (dt3155_status[minor].state == DT3155_STATE_IDLE)*/
> -  /*    return -EBUSY;*/
> -
> -  /* non-blocking reads should return if no data */
> -  if (filep->f_flags & O_NDELAY)
> -    {
> -      if ((frame_index = dt3155_get_ready_buffer(minor)) < 0) {
> -	/*printk( "dt3155:  no buffers available (?)\n");*/
> -	/* 		printques(minor); */
> -	return -EAGAIN;
> -      }
> -    }
> -  else
> -    {
> -      /*
> -       * sleep till data arrives , or we get interrupted.
> -       * Note that wait_event_interruptible() does not actually
> -       * sleep/wait if it's condition evaluates to true upon entry.
> -       */
> -      wait_event_interruptible(dt3155_read_wait_queue[minor],
> -			       (frame_index = dt3155_get_ready_buffer(minor))
> -			       >= 0);
> -
> -      if (frame_index < 0)
> -	{
> -	  printk ("DT3155: read: interrupted\n");
> -	  quick_stop (minor);
> -	  printques(minor);
> -	  return -EINTR;
> +/* which device are we reading from? */
> +	int minor = MINOR(filep->f_dentry->d_inode->i_rdev);
> +	u32 offset;
> +	int frame_index;
> +	frame_info_t *frame_info_p;
> +
> +/* TODO: this should check the error flag and */
> +/*   return an error on hardware failures */
> +	if (count != sizeof(dt3155_read_t)) {
> +		printk(KERN_ERR "DT3155 ERROR (NJC): count is not right\n");
> +		return -EINVAL;
> +	}
> +
> +/* Hack here -- I'm going to allow reading even when idle.
> + * this is so that the frames can be read after STOP has
> + * been called.  Leaving it here, commented out, as a reminder
> + * for a short while to make sure there are no problems.
> + * Note that if the driver is not opened in non_blocking mode,
> + * and the device is idle, then it could sit here forever!
> + */
> +
> +/*  if (dt3155_status[minor].state == DT3155_STATE_IDLE)*/
> +/*    return -EBUSY;*/
> +
> +/* non-blocking reads should return if no data */
> +	if (filep->f_flags & O_NDELAY) {
> +		frame_index = dt3155_get_ready_buffer(minor) ;
> +		if (frame_index < 0) {
> +/*printk( "dt3155:  no buffers available (?)\n");*/
> +/*		printques(minor); */
> +			return -EAGAIN;
> +		}
> +	} else {
> +/*
> +* sleep till data arrives , or we get interrupted.
> +* Note that wait_event_interruptible() does not actually
> +* sleep/wait if it's condition evaluates to true upon entry.
> +*/
> +		wait_event_interruptible(dt3155_read_wait_queue[minor],
> +					 (frame_index =
> +					  dt3155_get_ready_buffer(minor))
> +					 >= 0);
> +
> +		if (frame_index < 0) {
> +			printk(KERN_INFO "DT3155: read: interrupted\n");
> +			quick_stop(minor);
> +			printques(minor);
> +			return -EINTR;
> +		}
>  	}
> -    }
>  
> -  frame_info_p = &dt3155_status[minor].fbuffer.frame_info[frame_index];
> +	frame_info_p = &dt3155_status[minor].fbuffer.frame_info[frame_index];
>  
> -  /* make this an offset */
> -  offset = frame_info_p->addr - dt3155_status[minor].mem_addr;
> +/* make this an offset */
> +	offset = frame_info_p->addr - dt3155_status[minor].mem_addr;
>  
> -  put_user(offset, (unsigned int *) buf);
> -  buf += sizeof(u32);
> -  put_user( dt3155_status[minor].fbuffer.frame_count, (unsigned int *) buf);
> -  buf += sizeof(u32);
> -  put_user(dt3155_status[minor].state, (unsigned int *) buf);
> -  buf += sizeof(u32);
> -  if (copy_to_user(buf, frame_info_p, sizeof(frame_info_t)))
> -      return -EFAULT;
> +	put_user(offset, (unsigned int *)buf);
> +	buf += sizeof(u32);
> +	put_user(dt3155_status[minor].fbuffer.frame_count, (unsigned int *)buf);
> +	buf += sizeof(u32);
> +	put_user(dt3155_status[minor].state, (unsigned int *)buf);
> +	buf += sizeof(u32);
> +	if (copy_to_user(buf, frame_info_p, sizeof(frame_info_t)))
> +		return -EFAULT;
>  
> -  return sizeof(dt3155_read_t);
> +	return sizeof(dt3155_read_t);
>  }
>  
> -static unsigned int dt3155_poll (struct file * filp, poll_table *wait)
> +static unsigned int dt3155_poll(struct file *filp, poll_table * wait)
>  {
> -  int minor = MINOR(filp->f_dentry->d_inode->i_rdev);
> +	int minor = MINOR(filp->f_dentry->d_inode->i_rdev);
>  
> -  if (!is_ready_buf_empty(minor))
> -    return POLLIN | POLLRDNORM;
> +	if (!is_ready_buf_empty(minor))
> +		return POLLIN | POLLRDNORM;
>  
> -  poll_wait (filp, &dt3155_read_wait_queue[minor], wait);
> +	poll_wait(filp, &dt3155_read_wait_queue[minor], wait);
>  
> -  return 0;
> +	return 0;
>  }
>  
> -
> -/*****************************************************
> +/*
>   * file operations supported by DT3155 driver
>   *  needed by init_module
>   *  register_chrdev
> - *****************************************************/
> + */
>  static struct file_operations dt3155_fops = {
> -  read:		dt3155_read,
> -  ioctl:		dt3155_ioctl,
> -  mmap:		dt3155_mmap,
> -  poll:           dt3155_poll,
> -  open:		dt3155_open,
> -  release:	dt3155_close
> +read: dt3155_read,
> +ioctl : dt3155_ioctl,
> +mmap : dt3155_mmap,
> +poll : dt3155_poll,
> +open : dt3155_open,
> +release : dt3155_close
>  };
>  
> -
> -/*****************************************************
> +/*
>   * find_PCI();
>   *
>   * PCI has been totally reworked in 2.1..
> - *****************************************************/
> -static int find_PCI (void)
> + */
> +static int find_PCI(void)
>  {
> -  struct pci_dev *pci_dev = NULL;
> -  int error, pci_index = 0;
> -  unsigned short rev_device;
> -  unsigned long base;
> -  unsigned char irq;
> -
> -  while ((pci_dev = pci_get_device
> -	  (DT3155_VENDORID, DT3155_DEVICEID, pci_dev)) != NULL)
> -    {
> -      pci_index ++;
> -
> -      /* Is it really there? */
> -      if ((error =
> -	   pci_read_config_word(pci_dev, PCI_CLASS_DEVICE, &rev_device)))
> -	continue;
> -
> -      /* Found a board */
> -      DT_3155_DEBUG_MSG("DT3155: Device number %d \n", pci_index);
> -
> -      /* Make sure the driver was compiled with enough buffers to handle
> -	 this many boards */
> -      if (pci_index > MAXBOARDS) {
> -	printk("DT3155: ERROR - found %d devices, but driver only configured "
> -	       "for %d devices\n"
> -	       "DT3155: Please change MAXBOARDS in dt3155.h\n",
> -	       pci_index, MAXBOARDS);
> -	goto err;
> -      }
> -
> -      /* Now, just go out and make sure that this/these device(s) is/are
> -	 actually mapped into the kernel address space */
> -      if ((error = pci_read_config_dword( pci_dev, PCI_BASE_ADDRESS_0,
> -					  (u32 *) &base)))
> -	{
> -	  printk("DT3155: Was not able to find device \n");
> -	  goto err;
> -	}
> +	struct pci_dev *pci_dev = NULL;
> +	int error, pci_index = 0;
> +	unsigned short rev_device;
> +	unsigned long base;
> +	unsigned char irq;
>  
> -      DT_3155_DEBUG_MSG("DT3155: Base address 0 for device is %lx \n", base);
> -      dt3155_status[pci_index-1].reg_addr = base;
> +	while ((pci_dev = pci_get_device
> +		(DT3155_VENDORID, DT3155_DEVICEID, pci_dev)) != NULL) {
> +		pci_index++;
>  
> -      /* Remap the base address to a logical address through which we
> -       * can access it. */
> -      dt3155_lbase[ pci_index - 1 ] = ioremap(base,PCI_PAGE_SIZE);
> -      dt3155_status[ pci_index - 1 ].reg_addr = base;
> -      DT_3155_DEBUG_MSG("DT3155: New logical address is %p \n",
> -			dt3155_lbase[pci_index-1]);
> -      if ( !dt3155_lbase[pci_index-1] )
> -	{
> -	  printk("DT3155: Unable to remap control registers\n");
> -	  goto err;
> -	}
> +/* Is it really there? */
> +		error = pci_read_config_word(pci_dev, PCI_CLASS_DEVICE,
> +								&rev_device);
> +		if (error)
> +			continue;
>  
> -      if ( (error = pci_read_config_byte( pci_dev, PCI_INTERRUPT_LINE, &irq)) )
> -	{
> -	  printk("DT3155: Was not able to find device \n");
> -	  goto err;
> -	}
> +/* Found a board */
> +		DT_3155_DEBUG_MSG("DT3155: Device number %d\n", pci_index);
>  
> -      DT_3155_DEBUG_MSG("DT3155: IRQ is %d \n",irq);
> -      dt3155_status[ pci_index-1 ].irq = irq;
> -      /* Set flag: kth device found! */
> -      dt3155_status[ pci_index-1 ].device_installed = 1;
> -      printk("DT3155: Installing device %d w/irq %d and address %p\n",
> -	     pci_index,
> -	     dt3155_status[pci_index-1].irq,
> -	     dt3155_lbase[pci_index-1]);
> +/*
> + *Make sure the driver was compiled with enough buffers to handle
> + *this many boards
> + */
> +		if (pci_index > MAXBOARDS) {
> +			printk(KERN_ERR "DT3155: ERROR - found %d devices, but "
> +				"driver only configured for %d devices\n"
> +				"DT3155: Please change MAXBOARDS in dt3155.h\n",
> +				pci_index, MAXBOARDS);
> +			goto err;
> +		}
> +
> +/*
> + *Now, just go out and make sure that this/these device(s) is/are
> + *actually mapped into the kernel address space
> + */
> +		error = pci_read_config_dword(pci_dev, PCI_BASE_ADDRESS_0,
> +								(u32 *) &base);
> +		if (error) {
> +			printk(KERN_ERR "DT3155: Was not able to find device\n");
> +			goto err;
> +		}
> +
> +		DT_3155_DEBUG_MSG("DT3155: Base address 0 for device is %lx\n",
> +				  base);
> +		dt3155_status[pci_index - 1].reg_addr = base;
> +
> +/* Remap the base address to a logical address through which we
> +* can access it. */
> +		dt3155_lbase[pci_index - 1] = ioremap(base, PCI_PAGE_SIZE);
> +		dt3155_status[pci_index - 1].reg_addr = base;
> +		DT_3155_DEBUG_MSG("DT3155: New logical address is %p\n",
> +				  dt3155_lbase[pci_index - 1]);
> +		if (!dt3155_lbase[pci_index - 1]) {
> +			printk(KERN_INFO "DT3155: Unable to remap control "
> +								"registers\n");
> +			goto err;
> +		}
>  
> -    }
> -  ndevices = pci_index;
> +		error = pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &irq);
> +		if (error) {
> +			printk(KERN_INFO "DT3155: Was not able to "
> +							"find device\n");
> +			goto err;
> +		}
> +
> +		DT_3155_DEBUG_MSG("DT3155: IRQ is %d\n", irq);
> +		dt3155_status[pci_index - 1].irq = irq;
> +/* Set flag: kth device found! */
> +		dt3155_status[pci_index - 1].device_installed = 1;
> +		printk(KERN_INFO "DT3155: Installing device %d w/irq %d and "
> +						"address %p\n", pci_index,
> +					dt3155_status[pci_index - 1].irq,
> +					dt3155_lbase[pci_index - 1]);
>  
> -  return DT_3155_SUCCESS;
> +	}
> +	ndevices = pci_index;
> +
> +	return DT_3155_SUCCESS;
>  
>  err:
> -  pci_dev_put(pci_dev);
> -  return DT_3155_FAILURE;
> +	pci_dev_put(pci_dev);
> +	return DT_3155_FAILURE;
>  }
>  
>  u32 allocatorAddr = 0;
>  
>  /*****************************************************
> - * init_module()
> - *****************************************************/
> +* init_module()
> +*****************************************************/
>  int init_module(void)
>  {
> -  int index;
> -  int rcode = 0;
> -  char *devname[ MAXBOARDS ];
> +	int index;
> +	int rcode = 0;
> +	char *devname[MAXBOARDS];
>  
> -  devname[ 0 ] = "dt3155a";
> +	devname[0] = "dt3155a";
>  #if MAXBOARDS == 2
> -  devname[ 1 ] = "dt3155b";
> +	devname[1] = "dt3155b";
>  #endif
>  
> -  printk("DT3155: Loading module...\n");
> -
> -  /* Register the device driver */
> -  rcode = register_chrdev( dt3155_major, "dt3155", &dt3155_fops );
> -  if( rcode < 0 )
> -    {
> -      printk( KERN_INFO "DT3155: register_chrdev failed \n");
> -      return rcode;
> -    }
> -
> -  if( dt3155_major == 0 )
> -    dt3155_major = rcode; /* dynamic */
> -
> -
> -  /* init the status variables.                     */
> -  /* DMA memory is taken care of in setup_buffers() */
> -  for ( index = 0; index < MAXBOARDS; index++ )
> -    {
> -      dt3155_status[ index ].config.acq_mode   = DT3155_MODE_FRAME;
> -      dt3155_status[ index ].config.continuous = DT3155_ACQ;
> -      dt3155_status[ index ].config.cols       = DT3155_MAX_COLS;
> -      dt3155_status[ index ].config.rows       = DT3155_MAX_ROWS;
> -      dt3155_status[ index ].state = DT3155_STATE_IDLE;
> -
> -      /* find_PCI() will check if devices are installed; */
> -      /* first assume they're not:                       */
> -      dt3155_status[ index ].mem_addr          = 0;
> -      dt3155_status[ index ].mem_size          = 0;
> -      dt3155_status[ index ].state             = DT3155_STATE_IDLE;
> -      dt3155_status[ index ].device_installed  = 0;
> -    }
> -
> -  /* Now let's find the hardware.  find_PCI() will set ndevices to the
> -   * number of cards found in this machine. */
> -    {
> -      if ( (rcode = find_PCI()) !=  DT_3155_SUCCESS )
> -	{
> -	  printk("DT3155 error: find_PCI() failed to find dt3155 board(s)\n");
> -	  unregister_chrdev( dt3155_major, "dt3155" );
> -	  return rcode;
> +	printk(KERN_INFO "DT3155: Loading module...\n");
> +
> +/* Register the device driver */
> +	rcode = register_chrdev(dt3155_major, "dt3155", &dt3155_fops);
> +	if (rcode < 0) {
> +		printk(KERN_INFO "DT3155: register_chrdev failed\n");
> +		return rcode;
>  	}
> -    }
> -
> -  /* Ok, time to setup the frame buffers */
> -  if( (rcode = dt3155_setup_buffers(&allocatorAddr)) < 0 )
> -    {
> -      printk("DT3155: Error: setting up buffer not large enough.");
> -      unregister_chrdev( dt3155_major, "dt3155" );
> -      return rcode;
> -    }
> -
> -  /* If we are this far, then there is enough RAM */
> -  /* for the buffers: Print the configuration.    */
> -  for(  index = 0;  index < ndevices;  index++ )
> -    {
> -      printk("DT3155: Device = %d; acq_mode = %d; "
> -	     "continuous = %d; cols = %d; rows = %d;\n",
> -	     index ,
> -	     dt3155_status[ index ].config.acq_mode,
> -	     dt3155_status[ index ].config.continuous,
> -	     dt3155_status[ index ].config.cols,
> -	     dt3155_status[ index ].config.rows);
> -      printk("DT3155: m_addr = 0x%x; m_size = %ld; "
> -	     "state = %d; device_installed = %d\n",
> -	     dt3155_status[ index ].mem_addr,
> -	     (long int)dt3155_status[ index ].mem_size,
> -	     dt3155_status[ index ].state,
> -	     dt3155_status[ index ].device_installed);
> -    }
> -
> -  /* Disable ALL interrupts */
> -  int_csr_r.reg = 0;
> -  for(  index = 0;  index < ndevices;  index++ )
> -    {
> -      WriteMReg( (dt3155_lbase[ index ] + INT_CSR), int_csr_r.reg );
> -      if( dt3155_status[ index ].device_installed )
> +
> +	if (dt3155_major == 0)
> +		dt3155_major = rcode;	/* dynamic */
> +
> +/* init the status variables.                     */
> +/* DMA memory is taken care of in setup_buffers() */
> +	for (index = 0; index < MAXBOARDS; index++) {
> +		dt3155_status[index].config.acq_mode = DT3155_MODE_FRAME;
> +		dt3155_status[index].config.continuous = DT3155_ACQ;
> +		dt3155_status[index].config.cols = DT3155_MAX_COLS;
> +		dt3155_status[index].config.rows = DT3155_MAX_ROWS;
> +		dt3155_status[index].state = DT3155_STATE_IDLE;
> +
> +/* find_PCI() will check if devices are installed; */
> +/* first assume they're not:                       */
> +		dt3155_status[index].mem_addr = 0;
> +		dt3155_status[index].mem_size = 0;
> +		dt3155_status[index].state = DT3155_STATE_IDLE;
> +		dt3155_status[index].device_installed = 0;
> +	}
> +
> +/* Now let's find the hardware.  find_PCI() will set ndevices to the
> +* number of cards found in this machine. */
>  	{
> -	  /*
> -	   * This driver *looks* like it can handle sharing interrupts,
> -	   * but I can't actually test myself. I've had reports that it
> -	   * DOES work so I'll enable it for now. This comment will remain
> -	   * as a reminder in case any problems arise. (SS)
> -	   */
> -	  /* in older kernels flags are: SA_SHIRQ | SA_INTERRUPT */
> -	  rcode = request_irq( dt3155_status[ index ].irq, (void *)dt3155_isr,
> -			       IRQF_SHARED | IRQF_DISABLED, devname[ index ],
> -			       (void*) &dt3155_status[index]);
> -	  if( rcode < 0 )
> -	    {
> -	      printk("DT3155: minor %d request_irq failed for IRQ %d\n",
> -		     index, dt3155_status[index].irq);
> -	      unregister_chrdev( dt3155_major, "dt3155" );
> -	      return rcode;
> -	    }
> +		rcode = find_PCI() ;
> +		if (rcode != DT_3155_SUCCESS) {
> +			printk(KERN_ERR "DT3155 error: find_PCI() failed to "
> +					"find dt3155 board(s)\n");
> +			unregister_chrdev(dt3155_major, "dt3155");
> +			return rcode;
> +		}
> +	}
> +
> +/* Ok, time to setup the frame buffers */
> +	rcode = dt3155_setup_buffers(&allocatorAddr) ;
> +	if (rcode < 0) {
> +		printk(KERN_ERR "DT3155: Error: setting up buffer not large enough.");
> +		unregister_chrdev(dt3155_major, "dt3155");
> +		return rcode;
> +	}
> +
> +/* If we are this far, then there is enough RAM */
> +/* for the buffers: Print the configuration.    */
> +	for (index = 0; index < ndevices; index++) {
> +		printk("DT3155: Device = %d; acq_mode = %d; "
> +		       "continuous = %d; cols = %d; rows = %d;\n",
> +		       index,
> +		       dt3155_status[index].config.acq_mode,
> +		       dt3155_status[index].config.continuous,
> +		       dt3155_status[index].config.cols,
> +		       dt3155_status[index].config.rows);
> +		printk("DT3155: m_addr = 0x%x; m_size = %ld; "
> +		       "state = %d; device_installed = %d\n",
> +		       dt3155_status[index].mem_addr,
> +		       (long int)dt3155_status[index].mem_size,
> +		       dt3155_status[index].state,
> +		       dt3155_status[index].device_installed);
> +	}
> +
> +/* Disable ALL interrupts */
> +	int_csr_r.reg = 0;
> +	for (index = 0; index < ndevices; index++) {
> +		WriteMReg((dt3155_lbase[index] + INT_CSR), int_csr_r.reg);
> +		if (dt3155_status[index].device_installed) {
> +/*
> + * This driver *looks* like it can handle sharing interrupts,
> + * but I can't actually test myself. I've had reports that it
> + * DOES work so I'll enable it for now. This comment will remain
> + * as a reminder in case any problems arise. (SS)
> + */
> +/* in older kernels flags are: SA_SHIRQ | SA_INTERRUPT */
> +			rcode =
> +			    request_irq(dt3155_status[index].irq,
> +					(void *)dt3155_isr,
> +					IRQF_SHARED | IRQF_DISABLED,
> +					devname[index],
> +					(void *)&dt3155_status[index]);
> +			if (rcode < 0) {
> +				printk("DT3155: minor %d request_irq failed "
> +						"for IRQ %d\n", index,
> +						dt3155_status[index].irq);
> +				unregister_chrdev(dt3155_major, "dt3155");
> +				return rcode;
> +			}
> +		}
>  	}
> -    }
>  
> -  printk("DT3155: finished loading\n");
> +	printk("DT3155: finished loading\n");
>  
> -  return 0;
> +	return 0;
>  }
>  
> -/*****************************************************
> +/*
>   * cleanup_module(void)
> - *
> - *****************************************************/
> + */
>  void cleanup_module(void)
>  {
> -  int index;
> +	int index;
>  
> -  printk("DT3155:  cleanup_module called\n");
> +	printk(KERN_INFO "DT3155:  cleanup_module called\n");
>  
> -  /* removed DMA allocated with the allocator */
> +/* removed DMA allocated with the allocator */
>  #ifdef STANDALONE_ALLOCATOR
> -  if (allocatorAddr != 0)
> -    allocator_free_dma(allocatorAddr);
> +	if (allocatorAddr != 0)
> +		allocator_free_dma(allocatorAddr);
>  #else
> -  allocator_cleanup();
> +	allocator_cleanup();
>  #endif
>  
> -  unregister_chrdev( dt3155_major, "dt3155" );
> +	unregister_chrdev(dt3155_major, "dt3155");
>  
> -  for( index = 0; index < ndevices; index++ )
> -    {
> -      if( dt3155_status[ index ].device_installed == 1 )
> -	{
> -	  printk( "DT3155: Freeing irq %d for device %d\n",
> -		  dt3155_status[ index ].irq, index );
> -	  free_irq( dt3155_status[ index ].irq, (void*)&dt3155_status[index] );
> +	for (index = 0; index < ndevices; index++) {
> +		if (dt3155_status[index].device_installed == 1) {
> +			printk(KERN_INFO "DT3155: Freeing irq %d for device %d\n",
> +			       dt3155_status[index].irq, index);
> +			free_irq(dt3155_status[index].irq,
> +				 (void *)&dt3155_status[index]);
> +		}
>  	}
> -    }
>  }
> -
> -- 
> 1.6.3.3
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux