diff options
author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-02 18:11:34 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-02 18:11:34 -0700 |
commit | 8c310573fe4fdaedd8963890b2da39f39c01ab34 (patch) | |
tree | b08b0ee832bd1dff87105bb7b2587b2e0034b431 /drivers/staging | |
parent | 084f70ee096d385e363bd5d309cc7ff24fb98c53 (diff) |
Staging: dt3155: remove the driver
There is now a proper V4L driver for this device in the tree,
so remove this one.
Cc: Scott Smedley <ss@aao.gov.au>
Cc: H Hartley Sweeten <hartleys@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging')
-rw-r--r-- | drivers/staging/Kconfig | 2 | ||||
-rw-r--r-- | drivers/staging/Makefile | 1 | ||||
-rw-r--r-- | drivers/staging/dt3155/Kconfig | 4 | ||||
-rw-r--r-- | drivers/staging/dt3155/Makefile | 6 | ||||
-rw-r--r-- | drivers/staging/dt3155/TODO | 10 | ||||
-rw-r--r-- | drivers/staging/dt3155/allocator.README | 98 | ||||
-rw-r--r-- | drivers/staging/dt3155/allocator.c | 294 | ||||
-rw-r--r-- | drivers/staging/dt3155/allocator.h | 28 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155.h | 161 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155.sysvinit | 60 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_drv.c | 1092 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_drv.h | 39 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_io.c | 128 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_io.h | 304 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_isr.c | 461 | ||||
-rw-r--r-- | drivers/staging/dt3155/dt3155_isr.h | 83 |
16 files changed, 0 insertions, 2771 deletions
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 6796265fd08..a5e097461c6 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -131,8 +131,6 @@ source "drivers/staging/samsung-laptop/Kconfig" source "drivers/staging/sm7xx/Kconfig" -source "drivers/staging/dt3155/Kconfig" - source "drivers/staging/dt3155v4l/Kconfig" source "drivers/staging/crystalhd/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 6cba01e806c..4dcccf14b44 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -46,7 +46,6 @@ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_BATMAN_ADV) += batman-adv/ obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop/ obj-$(CONFIG_FB_SM7XX) += sm7xx/ -obj-$(CONFIG_DT3155) += dt3155/ obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ diff --git a/drivers/staging/dt3155/Kconfig b/drivers/staging/dt3155/Kconfig deleted file mode 100644 index 4a3293c721b..00000000000 --- a/drivers/staging/dt3155/Kconfig +++ /dev/null @@ -1,4 +0,0 @@ -config DT3155 - tristate "DT3155 Digitizer support" - depends on PCI - diff --git a/drivers/staging/dt3155/Makefile b/drivers/staging/dt3155/Makefile deleted file mode 100644 index 136f21fdbbe..00000000000 --- a/drivers/staging/dt3155/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -obj-$(CONFIG_DT3155) += dt3155.o -dt3155-objs := \ - dt3155_drv.o \ - dt3155_isr.o \ - dt3155_io.o \ - allocator.o diff --git a/drivers/staging/dt3155/TODO b/drivers/staging/dt3155/TODO deleted file mode 100644 index 3baa3b6294c..00000000000 --- a/drivers/staging/dt3155/TODO +++ /dev/null @@ -1,10 +0,0 @@ -TODO: - - fix checkpatch.pl issues - - remove old kernel support, it is not needed - - convert to proper PCI device API - - fix sparse warnings - - audit for correct subsystem interaction - - review review review! - -Please send patches to Greg Kroah-Hartman <greg@kroah.com> -and Scott Smedley <ss@aao.gov.au> diff --git a/drivers/staging/dt3155/allocator.README b/drivers/staging/dt3155/allocator.README deleted file mode 100644 index 05700b6c926..00000000000 --- a/drivers/staging/dt3155/allocator.README +++ /dev/null @@ -1,98 +0,0 @@ - -The allocator shown here exploits high memory. This document explains -how a user can deal with drivers uses this allocator and how a -programmer can link in the module. - -The module is being used by my pxc and pxdrv device drivers (as well as -other ones), available from ftp.systemy.it/pub/develop and -ftp.linux.it/pub/People/Rubini - - User's manual - ============= - - -One of the most compelling problems with any DMA-capable device is the -allocation of a suitable memory buffer. The "allocator" module tries -to deal with the problem in a clean way. The module is able to use -high memory (above the one used in normal operation) for DMA -allocation. - -To prevent the kernel for using high memory, so that it remains -available for DMA, you should pass a command line argument to the -kernel. Command line arguments can be passed to Lilo, to Loadlin or -to whichever loader you are using (unless it's very poor in design). -For Lilo, either use "append=" in /etc/lilo.conf or add commandline -arguments to the interactive prompt. For example, I have a 32MB box -and reserve two megs for DMA: - -In lilo.conf: - image = /zImage - label = linux - append = "mem=30M" - -Or, interactively: - LILO: linux mem=30M - -Once the kernel is booted with the right command-line argument, any -driver linked with the allocator module will be able to get -DMA-capable memory without much trouble (unless the various drivers -need more memory than available). - -The module implements an alloc/free mechanism, so that it can serve -multiple drivers at the same time. Note however that the allocator -uses all of high memory and assumes to be the only piece of software -using such memory. - - - Programmer's manual - =================== - -The allocator, as released, is designed to be linked to a device -driver. In this case, the driver must call allocator_init() before -using the allocator and must call allocator_cleanup() before -unloading. This is usually done from within init_module() and -cleanup_module(). If the allocator is linked to a driver, it won't be -possible for several drivers to allocate high DMA memory, as explained -above. - -It is possible, on the other hand, to compile the module as a standalone -module, so that several modules can rely on the allocator for they DMA -buffers. To compile the allocator as a standalone module, do the -following in this directory (or provide a suitable Makefile, or edit -the source code): - - make allocator.o CC="gcc -Dallocator_init=init_module -Dallocator_cleanup=cleanup_module -include /usr/include/linux/module.h" - -The previous commandline tells to include <linux/module.h> in the -first place, and to rename the init and cleanup function to the ones -needed for module loading and unloading. Drivers using a standalone -allocator won't need to call allocator_init() nor allocator_cleanup(). - -The allocator exports the following functions (declared in allocator.h): - - unsigned long allocator_allocate_dma (unsigned long kilobytes, - int priority); - - This function returns a physical address, over high_memory, - which corresponds to an area of at least "kilobytes" kilobytes. - The area will be owned by the module calling the function. - The returned address can be passed to device boards, to instruct - their DMA controllers, via phys_to_bus(). The address can be used - by C code after vremap()/ioremap(). The "priority" argument should - be GFP_KERNEL or GFP_ATOMIC, according to the context of the - caller; it is used to call kmalloc(), as the allocator must keep - track of any region it gives away. In case of error the function - returns 0, and the caller is expected to issue a -ENOMEM error. - - - void allocator_free_dma (unsigned long address); - - This function is the reverse of the previous one. If a driver - doesn't free the DMA memory it allocated, the allocator will - consider such memory as busy. Note, however, that - allocator_cleanup() calls kfree() on every region it reclaimed, - so that a driver with the allocator linked in can avoid calling - allocator_free_dma() at unload time. - - - diff --git a/drivers/staging/dt3155/allocator.c b/drivers/staging/dt3155/allocator.c deleted file mode 100644 index d33947b0378..00000000000 --- a/drivers/staging/dt3155/allocator.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * allocator.c -- allocate after high_memory, if available - * - * NOTE: this is different from my previous allocator, the one that - * assembles pages, which revealed itself both slow and unreliable. - * - * Copyright (C) 1998 rubini@linux.it (Alessandro Rubini) - * - * 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. - * - --- Changes -- - - Date Programmer Description of changes made - ------------------------------------------------------------------- - 02-Aug-2002 NJC allocator now steps in 1MB increments, rather - than doubling its size each time. - Also, allocator_init(u32 *) now returns - (in the first arg) the size of the free - space. This is no longer consistent with - using the allocator as a module, and some changes - may be necessary for that purpose. This was - designed to work with the DT3155 driver, in - stand alone mode only!!! - 26-Oct-2009 SS Port to 2.6.30 kernel. - */ - - -#ifndef __KERNEL__ -# define __KERNEL__ -#endif -#ifndef MODULE -# define MODULE -#endif - - -#include <linux/sched.h> -#include <linux/kernel.h> -#include <linux/fs.h> -#include <linux/proc_fs.h> -#include <linux/errno.h> -#include <linux/types.h> -#include <linux/mm.h> /* PAGE_ALIGN() */ -#include <linux/io.h> -#include <linux/slab.h> - -#include <asm/page.h> - -#include "allocator.h" - -/*#define ALL_DEBUG*/ -#define ALL_MSG "allocator: " - -#undef PDEBUG /* undef it, just in case */ -#ifdef ALL_DEBUG -# define __static -# define DUMP_LIST() dump_list() -# ifdef __KERNEL__ - /* This one if debugging is on, and kernel space */ -# define PDEBUG(fmt, args...) printk(KERN_DEBUG ALL_MSG fmt, ## args) -# else - /* This one for user space */ -# define PDEBUG(fmt, args...) fprintf(stderr, fmt, ## args) -# endif -#else -# define PDEBUG(fmt, args...) /* not debugging: nothing */ -# define DUMP_LIST() -# define __static static -#endif - -#undef PDEBUGG -#define PDEBUGG(fmt, args...) -/*#define PDEBUGG(fmt, args...) printk( KERN_DEBUG ALL_MSG fmt, ## args)*/ - - -static int allocator_himem = 1; /* 0 = probe, pos. = megs, neg. = disable */ -static int allocator_step = 1; /* This is the step size in MB */ -static int allocator_probe = 1; /* This is a flag -- 1=probe, 0=don't probe */ - -static unsigned long allocator_buffer; /* physical address */ -static unsigned long allocator_buffer_size; /* kilobytes */ - -/* - * The allocator keeps a list of DMA areas, so multiple devices - * can coexist. The list is kept sorted by address - */ - -struct allocator_struct { - unsigned long address; - unsigned long size; - struct allocator_struct *next; -}; - -static struct allocator_struct *allocator_list; - -#ifdef ALL_DEBUG -static int dump_list(void) -{ - struct allocator_struct *ptr; - - PDEBUG("Current list:\n"); - for (ptr = allocator_list; ptr; ptr = ptr->next) - PDEBUG("0x%08lx (size %likB)\n", ptr->address, ptr->size>>10); - return 0; -} -#endif - -/* ======================================================================== - * This function is the actual allocator. - * - * If space is available in high memory (as detected at load time), that - * one is returned. The return value is a physical address (i.e., it can - * be used straight ahead for DMA, but needs remapping for program use). - */ - -unsigned long allocator_allocate_dma(unsigned long kilobytes, gfp_t flags) -{ - struct allocator_struct *ptr = allocator_list, *newptr; - unsigned long bytes = kilobytes << 10; - - /* check if high memory is available */ - if (!allocator_buffer) - return 0; - - /* Round it to a multiple of the pagesize */ - bytes = PAGE_ALIGN(bytes); - PDEBUG("request for %li bytes\n", bytes); - - while (ptr && ptr->next) { - if (ptr->next->address - (ptr->address + ptr->size) >= bytes) - break; /* enough space */ - ptr = ptr->next; - } - if (!ptr->next) { - DUMP_LIST(); - PDEBUG("alloc failed\n"); - return 0; /* end of list */ - } - newptr = kmalloc(sizeof(struct allocator_struct), flags); - if (!newptr) - return 0; - - /* ok, now stick it after ptr */ - newptr->address = ptr->address + ptr->size; - newptr->size = bytes; - newptr->next = ptr->next; - ptr->next = newptr; - - DUMP_LIST(); - PDEBUG("returning 0x%08lx\n", newptr->address); - return newptr->address; -} - -int allocator_free_dma(unsigned long address) -{ - struct allocator_struct *ptr = allocator_list, *prev; - - while (ptr && ptr->next) { - if (ptr->next->address == address) - break; - ptr = ptr->next; - } - /* the one being freed is ptr->next */ - prev = ptr; ptr = ptr->next; - - if (!ptr) { - pr_err(ALL_MSG "free_dma but add. not allocated\n"); - return -EINVAL; - } - PDEBUGG("freeing: %08lx (%li) next %08lx\n", ptr->address, ptr->size, - ptr->next->address); - prev->next = ptr->next; - kfree(ptr); - - /* dump_list(); */ - return 0; -} - -/* ======================================================================== - * Init and cleanup - * - * On cleanup everything is released. If the list is not empty, that a - * problem of our clients - */ -int allocator_init(u32 *allocator_max) -{ - /* check how much free memory is there */ - void *remapped; - unsigned long max; - unsigned long trial_size = allocator_himem<<20; - unsigned long last_trial = 0; - unsigned long step = allocator_step<<20; - unsigned long i = 0; - struct allocator_struct *head, *tail; - char test_string[] = "0123456789abcde"; /* 16 bytes */ - - PDEBUGG("himem = %i\n", allocator_himem); - if (allocator_himem < 0) /* don't even try */ - return -EINVAL; - - if (!trial_size) - trial_size = 1<<20; /* not specified: try one meg */ - - while (1) { - remapped = ioremap(__pa(high_memory), trial_size); - if (!remapped) { - PDEBUGG("%li megs failed!\n", trial_size>>20); - break; - } - PDEBUGG("Trying %li megs (at %p, %p)\n", trial_size>>20, - (void *)__pa(high_memory), remapped); - for (i = last_trial; i < trial_size; i += 16) { - strcpy((char *)(remapped)+i, test_string); - if (strcmp((char *)(remapped)+i, test_string)) - break; - } - iounmap((void *)remapped); - schedule(); - last_trial = trial_size; - if (i == trial_size) - trial_size += step; /* increment, if all went well */ - else { - PDEBUGG("%li megs copy test failed!\n", trial_size>>20); - break; - } - if (!allocator_probe) - break; - } - PDEBUG("%li megs (%li k, %li b)\n", i>>20, i>>10, i); - allocator_buffer_size = i>>10; /* kilobytes */ - allocator_buffer = __pa(high_memory); - if (!allocator_buffer_size) { - printk(KERN_WARNING ALL_MSG "no free high memory to use\n"); - return -ENOMEM; - } - - /* - * to simplify things, always have two cells in the list: - * the first and the last. This avoids some conditionals and - * extra code when allocating and deallocating: we only play - * in the middle of the list - */ - head = kmalloc(sizeof(struct allocator_struct), GFP_KERNEL); - if (!head) - return -ENOMEM; - tail = kmalloc(sizeof(struct allocator_struct), GFP_KERNEL); - if (!tail) { - kfree(head); - return -ENOMEM; - } - - max = allocator_buffer_size<<10; - - head->size = tail->size = 0; - head->address = allocator_buffer; - tail->address = allocator_buffer + max; - head->next = tail; - tail->next = NULL; - allocator_list = head; - - /* Back to the user code, in KB */ - *allocator_max = allocator_buffer_size; - - return 0; /* ok, ready */ -} - -void allocator_cleanup(void) -{ - struct allocator_struct *ptr, *next; - - for (ptr = allocator_list; ptr; ptr = next) { - next = ptr->next; - PDEBUG("freeing list: 0x%08lx\n", ptr->address); - kfree(ptr); - } - - allocator_buffer = 0; - allocator_buffer_size = 0; - allocator_list = NULL; -} - - diff --git a/drivers/staging/dt3155/allocator.h b/drivers/staging/dt3155/allocator.h deleted file mode 100644 index 425b70fcd50..00000000000 --- a/drivers/staging/dt3155/allocator.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * allocator.h -- prototypes for allocating high memory - * - * NOTE: this is different from my previous allocator, the one that - * assembles pages, which revealed itself both slow and unreliable. - * - * Copyright (C) 1998 rubini@linux.it (Alessandro Rubini) - * - * 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. - * - */ - -int allocator_free_dma(unsigned long address); -unsigned long allocator_allocate_dma(unsigned long kilobytes, gfp_t flags); -int allocator_init(u32 *); -void allocator_cleanup(void); diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h deleted file mode 100644 index 793e2fcf446..00000000000 --- a/drivers/staging/dt3155/dt3155.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - -Copyright 1996,2002,2005 Gregory D. Hager, Alfred A. Rizzi, Noah J. Cowan, - Jason Lapenta, Scott Smedley - -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. - 24-Jul-2002 SS remove unused code & added GPL licence. - 05-Aug-2005 SS port to 2.6 kernel; make CCIR mode default. - -*/ - -#ifndef _DT3155_INC -#define _DT3155_INC - -#include <linux/types.h> -#include <linux/time.h> /* struct timeval */ - - -/* Uncomment this for 50Hz CCIR */ -#define CCIR 1 - -/* Can be 1 or 2 */ -#define MAXBOARDS 1 - -#define BOARD_MAX_BUFFS 3 -#define MAXBUFFERS (BOARD_MAX_BUFFS*MAXBOARDS) - -#define PCI_PAGE_SIZE (1 << 12) - -#ifdef CCIR -#define DT3155_MAX_ROWS 576 -#define DT3155_MAX_COLS 768 -#define FORMAT50HZ 1 -#else -#define DT3155_MAX_ROWS 480 -#define DT3155_MAX_COLS 640 -#define FORMAT50HZ 0 -#endif - -/* Configuration structure */ -struct dt3155_config { - u32 acq_mode; - u32 cols, rows; - u32 continuous; -}; - - -/* hold data for each frame */ -struct frame_info { - u32 addr; /* address of the buffer with the frame */ - u32 tag; /* unique number for the frame */ - struct timeval time; /* time that capture took place */ -}; - -/* - * Structure for interrupt and buffer handling. - * This is the setup for 1 card - */ -struct dt3155_fbuffer { - int nbuffers; - - struct frame_info frame_info[BOARD_MAX_BUFFS]; - - int empty_buffers[BOARD_MAX_BUFFS]; /* indexes empty frames */ - int empty_len; /* Number of empty buffers */ - /* Zero means empty */ - - int active_buf; /* Where data is currently dma'ing */ - int locked_buf; /* Buffers used by user */ - - int ready_que[BOARD_MAX_BUFFS]; - u32 ready_head; /* The most recent buffer located here */ - u32 ready_len; /* The number of ready buffers */ - - int even_happened; - int even_stopped; - - int stop_acquire; /* Flag to stop interrupts */ - u32 frame_count; /* Counter for frames acquired by this card */ -}; - - - -#define DT3155_MODE_FRAME 1 -#define DT3155_MODE_FIELD 2 - -#define DT3155_SNAP 1 -#define DT3155_ACQ 2 - -/* There is one status structure for each card. */ -struct dt3155_status { - int fixed_mode; /* if 1, we are in fixed frame mode */ - u32 reg_addr; /* Register address for a single card */ - u32 mem_addr; /* Buffer start addr for this card */ - u32 mem_size; /* This is the amount of mem available */ - u32 irq; /* this card's irq */ - struct dt3155_config config; /* configuration struct */ - struct dt3155_fbuffer fbuffer; /* frame buffer state struct */ - u32 state; /* this card's state */ - u32 device_installed; /* Flag if installed. 1=installed */ -}; - -/* Reference to global status structure */ -extern struct dt3155_status dt3155_status[MAXBOARDS]; - -#define DT3155_STATE_IDLE 0x00 -#define DT3155_STATE_FRAME 0x01 -#define DT3155_STATE_FLD 0x02 -#define DT3155_STATE_STOP 0x100 -#define DT3155_STATE_ERROR 0x200 -#define DT3155_STATE_MODE 0x0ff - -#define DT3155_IOC_MAGIC '!' - -#define DT3155_SET_CONFIG _IOW(DT3155_IOC_MAGIC, 1, struct dt3155_config) -#define DT3155_GET_CONFIG _IOR(DT3155_IOC_MAGIC, 2, struct dt3155_status) -#define DT3155_STOP _IO(DT3155_IOC_MAGIC, 3) -#define DT3155_START _IO(DT3155_IOC_MAGIC, 4) -#define DT3155_FLUSH _IO(DT3155_IOC_MAGIC, 5) -#define DT3155_IOC_MAXNR 5 - -/* Error codes */ - -#define DT_ERR_NO_BUFFERS 0x10000 /* not used but it might be one day */ -#define DT_ERR_CORRUPT 0x20000 -#define DT_ERR_OVERRUN 0x30000 -#define DT_ERR_I2C_TIMEOUT 0x40000 -#define DT_ERR_MASK 0xff0000/* not used but it might be one day */ - -/* User code will probably want to declare one of these for each card */ -struct dt3155_read { - u32 offset; - u32 frame_seq; - u32 state; - - struct frame_info frame_info; -}; - -#endif /* _DT3155_inc */ diff --git a/drivers/staging/dt3155/dt3155.sysvinit b/drivers/staging/dt3155/dt3155.sysvinit deleted file mode 100644 index 92ec0939cb7..00000000000 --- a/drivers/staging/dt3155/dt3155.sysvinit +++ /dev/null @@ -1,60 +0,0 @@ -#! /bin/sh -# -# Module load/unload script for use with SysV-style /etc/init.d/ systems. -# On a Debian system, copy this to /etc/init.d/dt3155 and then run -# /usr/sbin/update-rc.d dt3155 defaults 55 -# to create the appropriate /etc/rc?.d/[SK]55dt3155 start/stop links. -# (The "55" is arbitrary but is what I use to load this rather late.) -# -# Andy Dougherty Feb 22 2000 doughera@lafayette.edu -# Dept. of Physics -# Lafayette College, Easton PA 18042 -# - -PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin - -# Edit to point to your local copy. -FILE=/usr/local/lib/modules/dt3155/dt3155.o -NAME="dt3155" -DESC="dt3155 Frame Grabber module" -DEV="dt3155" - -if test ! -f $FILE; then - echo "Unable to locate $FILE" - exit 0 -fi - -set -e - -case "$1" in - start) - echo -n "Loading $DESC " - if /sbin/insmod -v -f $FILE; then - major=`grep $DEV /proc/devices | awk "{print \\$1}"` - rm -f /dev/dt3155? - mknod /dev/dt3155a c $major 0 - mknod /dev/dt3155b c $major 1 - chmod go+rw /dev/dt3155? - echo - else - echo "$FILE not loaded." - fi - ;; - stop) - echo -n "Unloading $DESC: " - if /sbin/rmmod $NAME ; then - echo - else - echo "$DEV not removed" - exit 0 - fi - rm -f /dev/dt3155? - ;; - *) - echo "Usage: /etc/init.d/$NAME {start|stop}" - exit 1 - ;; -esac - -exit 0 - diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c deleted file mode 100644 index 73169968a1f..00000000000 --- a/drivers/staging/dt3155/dt3155_drv.c +++ /dev/null @@ -1,1092 +0,0 @@ -/* - -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@cfa.harvard.edu) - to make work with multiple boards. - 02-Jul-2002 SS Merged James Rose's chages (rosejr@purdue.edu) 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 dt3155_exit 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) - -*/ - -#include <linux/module.h> -#include <linux/interrupt.h> -#include <linux/mutex.h> -#include <linux/pci.h> -#include <linux/types.h> -#include <linux/poll.h> -#include <linux/sched.h> -#include <linux/smp_lock.h> -#include <linux/io.h> - -#include <linux/uaccess.h> - -#include "dt3155.h" -#include "dt3155_drv.h" -#include "dt3155_isr.h" -#include "dt3155_io.h" -#include "allocator.h" - - -MODULE_LICENSE("GPL"); - -/* Error variable. Zero means no error. */ -static DEFINE_MUTEX(dt3155_mutex); -int dt3155_errno = 0; - -#ifndef PCI_DEVICE_ID_INTEL_7116 -#define PCI_DEVICE_ID_INTEL_7116 0x1223 -#endif - -#define DT3155_VENDORID PCI_VENDOR_ID_INTEL -#define DT3155_DEVICEID PCI_DEVICE_ID_INTEL_7116 -#define MAXPCI 16 - -#ifdef DT_DEBUG -#define DT_3155_DEBUG_MSG(x,y) printk(x,y) -#else -#define DT_3155_DEBUG_MSG(x,y) -#endif - -/* wait queue for interrupts */ -wait_queue_head_t dt3155_read_wait_queue[MAXBOARDS]; - -/* 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 - */ - -/* Global structures and variables */ - -/* Status of each device */ -struct dt3155_status dt3155_status[MAXBOARDS]; - -/* kernel logical address of the board */ -static void __iomem *dt3155_lbase[MAXBOARDS] = { NULL -#if MAXBOARDS == 2 - , NULL -#endif -}; - -u32 dt3155_dev_open[MAXBOARDS] = {0 -#if MAXBOARDS == 2 - , 0 -#endif -}; - -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) -{ - struct dt3155_status *dts = &dt3155_status[minor]; - struct dt3155_fbuffer *fb = &dts->fbuffer; - - // TODO: scott was here -#if 1 - INT_CSR_R int_csr_r; - - int_csr_r.reg = readl(dt3155_lbase[minor] + INT_CSR); - /* disable interrupts */ - int_csr_r.fld.FLD_END_EVE_EN = 0; - int_csr_r.fld.FLD_END_ODD_EN = 0; - writel(int_csr_r.reg, dt3155_lbase[minor] + INT_CSR); - - dts->state &= ~(DT3155_STATE_STOP|0xff); - /* mark the system stopped: */ - dts->state |= DT3155_STATE_IDLE; - fb->stop_acquire = 0; - fb->even_stopped = 0; -#else - dts->state |= DT3155_STATE_STOP; - fb->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 dt3155_init() - *****************************************************/ -static void dt3155_isr(int irq, void *dev_id, struct pt_regs *regs) -{ - int minor = -1; - int index; - unsigned long flags; - u32 buffer_addr; - void __iomem *mmio; - struct dt3155_status *dts; - struct dt3155_fbuffer *fb; - INT_CSR_R int_csr_r; - CSR1_R csr1_r; - I2C_EVEN_CSR i2c_even_csr; - I2C_ODD_CSR i2c_odd_csr; - - /* 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; - } - - mmio = dt3155_lbase[minor]; - dts = &dt3155_status[minor]; - fb = &dts->fbuffer; - - /* Check for corruption and set a flag if so */ - csr1_r.reg = readl(mmio + CSR1); - - 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; - } - - int_csr_r.reg = readl(mmio + INT_CSR); - - /* Handle the even field ... */ - if (int_csr_r.fld.FLD_END_EVE) - { - if ((dts->state & DT3155_STATE_MODE) == DT3155_STATE_FLD) - { - fb->frame_count++; - } - - ReadI2C(mmio, EVEN_CSR, &i2c_even_csr.reg); - - /* Clear the interrupt? */ - int_csr_r.fld.FL |