~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/drivers/char/atarimouse.c

Version: ~ [ 2.2.5 ] ~ [ 2.4.1 ] ~ [ 2.4.9 ] ~ [ 2.6.17.10 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Atari Mouse Driver for Linux
  3  * by Robert de Vries (robert@and.nl) 19Jul93
  4  *
  5  * 16 Nov 1994 Andreas Schwab
  6  * Compatibility with busmouse
  7  * Support for three button mouse (shamelessly stolen from MiNT)
  8  * third button wired to one of the joystick directions on joystick 1
  9  *
 10  * 1996/02/11 Andreas Schwab
 11  * Module support
 12  * Allow multiple open's
 13  *
 14  * Converted to use new generic busmouse code.  5 Apr 1998
 15  *   Russell King <rmk@arm.uk.linux.org>
 16  */
 17 
 18 #include <linux/module.h>
 19 
 20 #include <linux/sched.h>
 21 #include <linux/errno.h>
 22 #include <linux/miscdevice.h>
 23 #include <linux/mm.h>
 24 #include <linux/random.h>
 25 #include <linux/poll.h>
 26 #include <linux/init.h>
 27 #include <linux/logibusmouse.h>
 28 
 29 #include <asm/setup.h>
 30 #include <asm/atarikb.h>
 31 #include <asm/uaccess.h>
 32 
 33 #include "busmouse.h"
 34 
 35 static int msedev;
 36 static int mouse_threshold[2] = {2,2};
 37 MODULE_PARM(mouse_threshold, "2i");
 38 extern int atari_mouse_buttons;
 39 
 40 static void atari_mouse_interrupt(char *buf)
 41 {
 42         int buttons;
 43 
 44 /*      ikbd_mouse_disable(); */
 45 
 46         buttons = ((buf[0] & 1)
 47                | ((buf[0] & 2) << 1)
 48                | (atari_mouse_buttons & 2));
 49         atari_mouse_buttons = buttons;
 50 
 51         busmouse_add_movementbuttons(msedev, buf[1], -buf[2], buttons ^ 7);
 52 /*      ikbd_mouse_rel_pos(); */
 53 }
 54 
 55 static int release_mouse(struct inode *inode, struct file *file)
 56 {
 57         ikbd_mouse_disable();
 58         atari_mouse_interrupt_hook = NULL;
 59         return 0;
 60 }
 61 
 62 static int open_mouse(struct inode *inode, struct file *file)
 63 {
 64         atari_mouse_buttons = 0;
 65         ikbd_mouse_y0_top ();
 66         ikbd_mouse_thresh (mouse_threshold[0], mouse_threshold[1]);
 67         ikbd_mouse_rel_pos();
 68         atari_mouse_interrupt_hook = atari_mouse_interrupt;
 69         return 0;
 70 }
 71 
 72 static struct busmouse atarimouse = {
 73         ATARIMOUSE_MINOR, "atarimouse", THIS_MODULE, open_mouse, release_mouse, 0
 74 };
 75 
 76 static int __init atari_mouse_init(void)
 77 {
 78         if (!MACH_IS_ATARI)
 79                 return -ENODEV;
 80         msedev = register_busmouse(&atarimouse);
 81         if (msedev < 0)
 82                 printk(KERN_WARNING "Unable to register Atari mouse driver.\n");
 83         else
 84                 printk(KERN_INFO "Atari mouse installed.\n");
 85         return msedev < 0 ? msedev : 0;
 86 }
 87 
 88 
 89 #ifndef MODULE
 90 
 91 #define MIN_THRESHOLD 1
 92 #define MAX_THRESHOLD 20        /* more seems not reasonable... */
 93 
 94 static int __init atari_mouse_setup( char *str )
 95 {
 96     int ints[8];
 97 
 98     str = get_options(str, ARRAY_SIZE(ints), ints);
 99 
100     if (ints[0] < 1) {
101         printk(KERN_ERR "atari_mouse_setup: no arguments!\n" );
102         return 0;
103     }
104     else if (ints[0] > 2) {
105         printk(KERN_WARNING "atari_mouse_setup: too many arguments\n" );
106     }
107 
108     if (ints[1] < MIN_THRESHOLD || ints[1] > MAX_THRESHOLD)
109         printk(KERN_WARNING "atari_mouse_setup: bad threshold value (ignored)\n" );
110     else {
111         mouse_threshold[0] = ints[1];
112         mouse_threshold[1] = ints[1];
113         if (ints[0] > 1) {
114             if (ints[2] < MIN_THRESHOLD || ints[2] > MAX_THRESHOLD)
115                 printk(KERN_WARNING "atari_mouse_setup: bad threshold value (ignored)\n" );
116             else
117                 mouse_threshold[1] = ints[2];
118         }
119     }
120 
121     return 1;
122 }
123 
124 __setup("atarimouse=",atari_mouse_setup);
125 
126 #endif /* !MODULE */
127 
128 static void __exit atari_mouse_cleanup (void)
129 {
130         unregister_busmouse(msedev);
131 }
132 
133 module_init(atari_mouse_init);
134 module_exit(atari_mouse_cleanup);
135 
136 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.