diff options
Diffstat (limited to 'drivers/staging/panel')
-rw-r--r-- | drivers/staging/panel/Kconfig | 24 | ||||
-rw-r--r-- | drivers/staging/panel/panel.c | 193 |
2 files changed, 13 insertions, 204 deletions
diff --git a/drivers/staging/panel/Kconfig b/drivers/staging/panel/Kconfig index 7cf655757748..c4b30f2a549b 100644 --- a/drivers/staging/panel/Kconfig +++ b/drivers/staging/panel/Kconfig @@ -3,13 +3,12 @@ config PANEL depends on PARPORT ---help--- Say Y here if you have an HD44780 or KS-0074 LCD connected to your - parallel port. This driver also features 4 and 6-key keypads, and a - 'smartcard' reader. The LCD is accessible through the /dev/lcd char - device (10, 156), the keypad through /dev/keypad (10, 185), and the - smartcard through /dev/smartcard (10, 186). Both require misc device - to be enabled. This code can either be compiled as a module, or linked - into the kernel and started at boot. If you don't understand what all - this is about, say N. + parallel port. This driver also features 4 and 6-key keypads. The LCD + is accessible through the /dev/lcd char device (10, 156), and the + keypad through /dev/keypad (10, 185). Both require misc device to be + enabled. This code can either be compiled as a module, or linked into + the kernel and started at boot. If you don't understand what all this + is about, say N. config PANEL_PARPORT int "Default parallel port number (0=LPT1)" @@ -45,17 +44,6 @@ config PANEL_PROFILE wired to the parallel port, and how it works. This is only intended for experts. -config PANEL_SMARTCARD - depends on PANEL && PANEL_PROFILE="0" - bool "Enable smartcard reader (read help!)" - default "n" - ---help--- - This enables the 'smartcard' reader as installed on the server at - 'www.ant-computing.com'. It was not really a smartcard reader, just - a telephone-card reader. It is left here for demonstration and - experimentation. If you enable this driver, it will be accessible - through character device 10,186. - config PANEL_KEYPAD depends on PANEL && PANEL_PROFILE="0" int "Keypad type (0=none, 1=old 6 keys, 2=new 6 keys, 3=Nexcom 4 keys)" diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c index 7f8c1b721162..5ffe269c2382 100644 --- a/drivers/staging/panel/panel.c +++ b/drivers/staging/panel/panel.c @@ -61,18 +61,13 @@ #include <asm/uaccess.h> #include <asm/system.h> -/* smartcard length */ -#define SMARTCARD_BYTES 64 #define LCD_MINOR 156 #define KEYPAD_MINOR 185 -#define SMARTCARD_MINOR 186 #define PANEL_VERSION "0.9.5" #define LCD_MAXBYTES 256 /* max burst write */ -#define SMARTCARD_LOGICAL_DETECTOR "S6" /* D6 wired to SELECT = card inserted */ - #define KEYPAD_BUFFER 64 #define INPUT_POLL_TIME (HZ/50) /* poll the keyboard this every second */ #define KEYPAD_REP_START (10) /* a key starts to repeat after this times INPUT_POLL_TIME */ @@ -120,15 +115,6 @@ #define PIN_SELECP 17 #define PIN_NOT_SET 127 -/* some smartcard-specific signals */ -#define PNL_SC_IO PNL_PD1 /* Warning! inverted output, 0=highZ */ -#define PNL_SC_RST PNL_PD2 -#define PNL_SC_CLK PNL_PD3 -#define PNL_SC_RW PNL_PD4 -#define PNL_SC_ENA PNL_PINITP -#define PNL_SC_IOR PNL_PACK -#define PNL_SC_BITS (PNL_SC_IO | PNL_SC_RST | PNL_SC_CLK | PNL_SC_RW) - #define LCD_FLAG_S 0x0001 #define LCD_FLAG_ID 0x0002 #define LCD_FLAG_B 0x0004 /* blink on */ @@ -209,17 +195,12 @@ static pmask_t phys_curr; /* stabilized phys_read (phys_read|phys_read_prev) */ static pmask_t phys_prev; /* previous phys_curr */ static char inputs_stable; /* 0 means that at least one logical signal needs be computed */ -/* these variables are specific to the smartcard */ -static __u8 smartcard_data[SMARTCARD_BYTES]; -static int smartcard_ptr; /* pointer to half bytes in smartcard_data */ - /* these variables are specific to the keypad */ static char keypad_buffer[KEYPAD_BUFFER]; static int keypad_buflen; static int keypad_start; static char keypressed; static wait_queue_head_t keypad_read_wait; -static wait_queue_head_t smartcard_read_wait; /* lcd-specific variables */ static unsigned long int lcd_flags; /* contains the LCD config state */ @@ -304,7 +285,6 @@ static unsigned char lcd_bits[LCD_PORTS][LCD_BITS][BIT_STATES]; #define DEFAULT_PARPORT 0 #define DEFAULT_LCD LCD_TYPE_OLD #define DEFAULT_KEYPAD KEYPAD_TYPE_OLD -#define DEFAULT_SMARTCARD 0 #define DEFAULT_LCD_WIDTH 40 #define DEFAULT_LCD_BWIDTH 40 #define DEFAULT_LCD_HWIDTH 64 @@ -335,11 +315,6 @@ static unsigned char lcd_bits[LCD_PORTS][LCD_BITS][BIT_STATES]; #define DEFAULT_KEYPAD CONFIG_PANEL_KEYPAD #endif -#ifdef CONFIG_PANEL_SMARTCARD -#undef DEFAULT_SMARTCARD -#define DEFAULT_SMARTCARD 1 -#endif - #ifdef CONFIG_PANEL_LCD #undef DEFAULT_LCD #define DEFAULT_LCD CONFIG_PANEL_LCD @@ -408,14 +383,12 @@ static unsigned char lcd_bits[LCD_PORTS][LCD_BITS][BIT_STATES]; #endif /* DEFAULT_PROFILE == 0 */ /* global variables */ -static int smartcard_open_cnt; /* #times opened */ static int keypad_open_cnt; /* #times opened */ static int lcd_open_cnt; /* #times opened */ static struct pardevice *pprt; static int lcd_initialized; static int keypad_initialized; -static int smartcard_initialized; static int light_tempo; @@ -430,7 +403,7 @@ static void (*lcd_clear_fast) (void); static DEFINE_SPINLOCK(pprt_lock); static struct timer_list scan_timer; -MODULE_DESCRIPTION("Generic parallel port LCD/Keypad/Smartcard driver"); +MODULE_DESCRIPTION("Generic parallel port LCD/Keypad driver"); static int parport = -1; module_param(parport, int, 0000); @@ -478,11 +451,6 @@ module_param(keypad_type, int, 0000); MODULE_PARM_DESC(keypad_type, "Keypad type: 0=none, 1=old 6 keys, 2=new 6+1 keys, 3=nexcom 4 keys"); -static int smartcard_enabled = -1; -module_param(smartcard_enabled, int, 0000); -MODULE_PARM_DESC(smartcard_enabled, - "Smartcard reader: 0=disabled (default), 1=enabled"); - static int profile = DEFAULT_PROFILE; module_param(profile, int, 0000); MODULE_PARM_DESC(profile, @@ -494,7 +462,7 @@ MODULE_PARM_DESC(profile, * (negative) if the signal is negated. -MAXINT is used to indicate that the * pin has not been explicitly specified. * - * WARNING! no check will be performed about collisions with keypad/smartcard ! + * WARNING! no check will be performed about collisions with keypad ! */ static int lcd_e_pin = PIN_NOT_SET; @@ -1799,9 +1767,7 @@ static void panel_process_inputs(void) static void panel_scan_timer(void) { - if ((keypad_enabled && keypad_initialized) - || (smartcard_enabled && smartcard_enabled)) { - + if (keypad_enabled && keypad_initialized) { if (spin_trylock(&pprt_lock)) { phys_scan_contacts(); spin_unlock(&pprt_lock); /* no need for the parport anymore */ @@ -1826,121 +1792,6 @@ static void panel_scan_timer(void) mod_timer(&scan_timer, jiffies + INPUT_POLL_TIME); } -/* send a high / low clock impulse of <duration> microseconds high and low */ -static void smartcard_send_clock(int duration) -{ - int old; - - w_dtr(pprt, (old = r_dtr(pprt)) | PNL_SC_CLK); - udelay(duration); - w_dtr(pprt, (old & ~PNL_SC_CLK)); - udelay(duration); -} - -static void smartcard_insert(int dummy) -{ - int ofs; - - spin_lock(&pprt_lock); - w_dtr(pprt, (r_dtr(pprt) & ~PNL_SC_BITS)); - w_ctr(pprt, (r_ctr(pprt) | PNL_SC_ENA)); - - udelay(30); /* ensure the rst is low at least 30 us */ - - smartcard_send_clock(100); /* reset address counter */ - - w_dtr(pprt, r_dtr(pprt) | PNL_SC_RST); - udelay(30); /* ensure the rst is high at least 30 us */ - - for (ofs = 0; ofs < SMARTCARD_BYTES; ofs++) { - int bit, byte; - byte = 0; - for (bit = 128; bit > 0; bit >>= 1) { - if (!(r_str(pprt) & PNL_SC_IOR)) - byte |= bit; - smartcard_send_clock(15); /* 15 us are enough for data */ - } - smartcard_data[ofs] = byte; - } - - w_dtr(pprt, (r_dtr(pprt) & ~PNL_SC_BITS)); - w_ctr(pprt, (r_ctr(pprt) & ~PNL_SC_ENA)); - - spin_unlock(&pprt_lock); - - printk(KERN_INFO "Panel: smart card inserted : %02x%02x%02x%02x%1x\n", - smartcard_data[2], smartcard_data[3], smartcard_data[4], - smartcard_data[5], smartcard_data[6] >> 4); - keypad_send_key("CardIn\n", 7); -} - -static void smartcard_remove(int dummy) -{ - printk(KERN_INFO "Panel: smart card removed : %02x%02x%02x%02x%1x\n", - smartcard_data[2], smartcard_data[3], smartcard_data[4], - smartcard_data[5], smartcard_data[6] >> 4); - memset(smartcard_data, 0, sizeof(smartcard_data)); - keypad_send_key("CardOut\n", 8); -} - -/* - * These are the file operation function for user access to /dev/smartcard - */ - -static ssize_t smartcard_read(struct file *file, - char *buf, size_t count, loff_t *ppos) -{ - - unsigned i = *ppos; - char *tmp = buf; - - for (; count-- > 0 && (smartcard_ptr < 9); ++i, ++tmp, ++smartcard_ptr) { - if (smartcard_ptr & 1) - put_user('0' + - (smartcard_data[2 + (smartcard_ptr >> 1)] & - 0xF), tmp); - else - put_user('0' + - (smartcard_data[2 + (smartcard_ptr >> 1)] >> - 4), tmp); - } - *ppos = i; - - return tmp - buf; -} - -static int smartcard_open(struct inode *inode, struct file *file) -{ - - if (smartcard_open_cnt) - return -EBUSY; /* open only once at a time */ - - if (file->f_mode & FMODE_WRITE) /* device is read-only */ - return -EPERM; - - smartcard_ptr = 0; /* flush the buffer on opening */ - smartcard_open_cnt++; - return 0; -} - -static int smartcard_release(struct inode *inode, struct file *file) -{ - smartcard_open_cnt--; - return 0; -} - -static struct file_operations smartcard_fops = { - .read = smartcard_read, /* read */ - .open = smartcard_open, /* open */ - .release = smartcard_release, /* close */ -}; - -static struct miscdevice smartcard_dev = { - SMARTCARD_MINOR, - "smartcard", - &smartcard_fops -}; - static void init_scan_timer(void) { if (scan_timer.function != NULL) @@ -2037,6 +1888,7 @@ static struct logical_input *panel_bind_key(char *name, char *press, return key; } +#if 0 /* tries to bind a callback function to the signal name <name>. The function * <press_fct> will be called with the <press_data> arg when the signal is * activated, and so on for <release_fct>/<release_data> @@ -2071,6 +1923,7 @@ static struct logical_input *panel_bind_callback(char *name, list_add(&callback->list, &logical_inputs); return callback; } +#endif static void keypad_init(void) { @@ -2091,16 +1944,6 @@ static void keypad_init(void) keypad_initialized = 1; } -static void smartcard_init(void) -{ - init_waitqueue_head(&smartcard_read_wait); - - panel_bind_callback(SMARTCARD_LOGICAL_DETECTOR, &smartcard_insert, 0, - &smartcard_remove, 0); - init_scan_timer(); - smartcard_enabled = 1; -} - /**************************************************/ /* device initialization */ /**************************************************/ @@ -2168,11 +2011,6 @@ static void panel_attach(struct parport *port) keypad_init(); misc_register(&keypad_dev); } - - if (smartcard_enabled) { - smartcard_init(); - misc_register(&smartcard_dev); - } } static void panel_detach(struct parport *port) @@ -2187,9 +2025,6 @@ static void panel_detach(struct parport *port) return; } - if (smartcard_enabled && smartcard_initialized) - misc_deregister(&smartcard_dev); - if (keypad_enabled && keypad_initialized) misc_deregister(&keypad_dev); @@ -2225,16 +2060,12 @@ int panel_init(void) case PANEL_PROFILE_CUSTOM: /* custom profile */ if (keypad_type < 0) keypad_type = DEFAULT_KEYPAD; - if (smartcard_enabled < 0) - smartcard_enabled = DEFAULT_SMARTCARD; if (lcd_type < 0) lcd_type = DEFAULT_LCD; break; case PANEL_PROFILE_OLD: /* 8 bits, 2*16, old keypad */ if (keypad_type < 0) keypad_type = KEYPAD_TYPE_OLD; - if (smartcard_enabled < 0) - smartcard_enabled = 0; if (lcd_type < 0) lcd_type = LCD_TYPE_OLD; if (lcd_width < 0) @@ -2245,32 +2076,24 @@ int panel_init(void) case PANEL_PROFILE_NEW: /* serial, 2*16, new keypad */ if (keypad_type < 0) keypad_type = KEYPAD_TYPE_NEW; - if (smartcard_enabled < 0) - smartcard_enabled = 1; if (lcd_type < 0) lcd_type = LCD_TYPE_KS0074; break; case PANEL_PROFILE_HANTRONIX: /* 8 bits, 2*16 hantronix-like, no keypad */ if (keypad_type < 0) keypad_type = KEYPAD_TYPE_NONE; - if (smartcard_enabled < 0) - smartcard_enabled = 0; if (lcd_type < 0) lcd_type = LCD_TYPE_HANTRONIX; break; case PANEL_PROFILE_NEXCOM: /* generic 8 bits, 2*16, nexcom keypad, eg. Nexcom. */ if (keypad_type < 0) keypad_type = KEYPAD_TYPE_NEXCOM; - if (smartcard_enabled < 0) - smartcard_enabled = 0; if (lcd_type < 0) lcd_type = LCD_TYPE_NEXCOM; break; case PANEL_PROFILE_LARGE: /* 8 bits, 2*40, old keypad */ if (keypad_type < 0) keypad_type = KEYPAD_TYPE_OLD; - if (smartcard_enabled < 0) - smartcard_enabled = 0; if (lcd_type < 0) lcd_type = LCD_TYPE_OLD; break; @@ -2303,7 +2126,8 @@ int panel_init(void) return -EIO; } - if (!lcd_enabled && !keypad_enabled && !smartcard_enabled) { /* no device enabled, let's release the parport */ + if (!lcd_enabled && !keypad_enabled) { + /* no device enabled, let's release the parport */ if (pprt) { parport_release(pprt); parport_unregister_device(pprt); @@ -2343,9 +2167,6 @@ static void __exit panel_cleanup_module(void) if (keypad_enabled) misc_deregister(&keypad_dev); - if (smartcard_enabled) - misc_deregister(&smartcard_dev); - if (lcd_enabled) { panel_lcd_print("\x0cLCD driver " PANEL_VERSION "\nunloaded.\x1b[Lc\x1b[Lb\x1b[L-"); |