]> pilppa.org Git - familiar-h63xx-build.git/blob - org.handhelds.familiar/packages/linux/openzaurus-pxa27x-2.4.20-rmk2-embedix20050602/P07-C3000-KBDDEV_041206.patch
OE tree imported from monotone branch org.openembedded.oz354fam083 at revision 8b12e3...
[familiar-h63xx-build.git] / org.handhelds.familiar / packages / linux / openzaurus-pxa27x-2.4.20-rmk2-embedix20050602 / P07-C3000-KBDDEV_041206.patch
1 diff -Nur c3000_pre/linux/drivers/char/Config.in c3000_work/linux/drivers/char/Config.in
2 --- c3000_pre/linux/drivers/char/Config.in      2004-12-06 17:24:32.000000000 +0900
3 +++ c3000_work/linux/drivers/char/Config.in     2004-12-06 17:25:51.000000000 +0900
4 @@ -171,6 +171,7 @@
5        bool '   SL-series Bluetooth support' CONFIG_BLUETOOTH_SL
6     fi
7  fi
8 +bool 'Use Keyboard device file (EXPERIMENTAL)' CONFIG_KBD_DEV_FILE
9  if [ "$CONFIG_ARCH_DBMX1" = "y" ]; then
10     tristate 'DragonBall MX1 serial port support' CONFIG_SERIAL_DBMX1
11     if [ "$CONFIG_SERIAL_DBMX1" = "y" ]; then
12 diff -Nur c3000_pre/linux/drivers/char/keyboard.c c3000_work/linux/drivers/char/keyboard.c
13 --- c3000_pre/linux/drivers/char/keyboard.c     2004-08-21 09:48:25.000000000 +0900
14 +++ c3000_work/linux/drivers/char/keyboard.c    2004-12-06 17:32:08.000000000 +0900
15 @@ -35,6 +35,7 @@
16  
17  #include <asm/keyboard.h>
18  #include <asm/bitops.h>
19 +#include <asm/uaccess.h>
20  
21  #include <linux/kbd_kern.h>
22  #include <linux/kbd_diacr.h>
23 @@ -921,12 +922,35 @@
24  
25  pm_callback pm_kbd_request_override = NULL;
26  
27 +#if defined(CONFIG_KBD_DEV_FILE)
28 +#define        KBD_MAJOR       241
29 +struct fasync_struct *fasync_kbd;
30 +
31 +static int kbd_open(struct inode *, struct file *);
32 +static int kbd_release(struct inode *, struct file *);
33 +static int kbd_fasync(int fd, struct file *filp, int on);
34 +static ssize_t kbd_read(struct file *, char *, size_t, loff_t *);
35 +static ssize_t kbd_write(struct file *, const char *, size_t, loff_t *);
36 +
37 +struct file_operations kbd_fops = {
38 +       open:           kbd_open,
39 +       release:        kbd_release,
40 +       fasync:         kbd_fasync,
41 +       read:           kbd_read,
42 +       write:          kbd_write,
43 +};
44 +#endif
45 +
46  int __init kbd_init(void)
47  {
48         int i;
49         struct kbd_struct kbd0;
50         extern struct tty_driver console_driver;
51  
52 +#if defined(CONFIG_KBD_DEV_FILE)
53 +       if ( register_chrdev(KBD_MAJOR,"kbd",&kbd_fops) )
54 +               printk("unable to get major %d for keyboard\n", KBD_MAJOR);
55 +#endif
56         kbd0.ledflagstate = kbd0.default_ledflagstate = KBD_DEFLEDS;
57         kbd0.ledmode = LED_SHOW_FLAGS;
58         kbd0.lockstate = KBD_DEFLOCK;
59 @@ -948,3 +972,56 @@
60  
61         return 0;
62  }
63 +
64 +#if defined(CONFIG_KBD_DEV_FILE)
65 +static int kbd_open(struct inode *inode, struct file *file)
66 +{
67 +       kdev_t dev = inode->i_rdev;
68 +
69 +       return 0;
70 +}
71 +
72 +
73 +static int kbd_release(struct inode *inode, struct file *file)
74 +{
75 +       kbd_fasync(-1, file, 0);
76 +       return 0;
77 +}
78 +
79 +static int kbd_fasync(int fd, struct file *filp, int on)
80 +{
81 +       int retval;
82 +
83 +       retval = fasync_helper(fd, filp, on, &fasync_kbd);
84 +       if (retval < 0)
85 +               return retval;
86 +       return 0;
87 +}
88 +
89 +static ssize_t kbd_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
90 +{
91 +//    printk("kbd read\n");
92 +       return 0;
93 +}
94 +
95 +static ssize_t kbd_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
96 +{
97 +       char tmp[50];
98 +       int len;
99 +       int kbd_scancode,kbd_down;
100 +
101 +       len=49;
102 +
103 +       if(len>count) len=count;
104 +       copy_from_user(tmp,buffer,len);
105 +       tmp[len]='\0';
106 +
107 +       if (sscanf(tmp,"%d %d",&kbd_scancode, &kbd_down) == 2) {
108 +//         printk("kbd write %02x %02x\n",kbd_scancode,kbd_down);
109 +               handle_scancode(kbd_scancode,kbd_down);
110 +       }
111 +
112 +//    printk("kbd write\n");
113 +       return count;
114 +}
115 +#endif