[cset] Add the EVIOCSABS ioctl for X people.

From: Vojtech Pavlik (vojtech@suse.cz)
Date: Thu Jul 25 2002 - 09:38:16 EST


Hi!

You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.
'bk pull http://linux-input.bkbits.net:8080/linux-input' should also
work.

===================================================================

ChangeSet@1.448, 2002-07-25 16:36:05+02:00, vojtech@twilight.ucw.cz
  Add EVIOCSABS() ioctl to change the abs* informative
  values on input devices. This is something the X peoople
  really wanted.
  Rename input_devinfo to input_id, it's shorter and more
  to the point.
  Remove superfluous printks in uinput.c
  Clean up return values in evdev.c ioctl.

===================================================================

 drivers/input/evdev.c | 53 ++++++++++++++++++++++++++++-------------------
 drivers/input/uinput.c | 12 ----------
 include/linux/gameport.h | 2 -
 include/linux/input.h | 9 ++++---
 include/linux/uinput.h | 2 -
 5 files changed, 40 insertions(+), 38 deletions(-)

diff -Nru a/drivers/input/evdev.c b/drivers/input/evdev.c
--- a/drivers/input/evdev.c Thu Jul 25 16:36:22 2002
+++ b/drivers/input/evdev.c Thu Jul 25 16:36:22 2002
@@ -233,7 +233,7 @@
         struct evdev_list *list = file->private_data;
         struct evdev *evdev = list->evdev;
         struct input_dev *dev = evdev->handle.dev;
- int retval, t, u;
+ int t, u;
 
         if (!evdev->exist) return -ENODEV;
 
@@ -243,20 +243,20 @@
                         return put_user(EV_VERSION, (int *) arg);
 
                 case EVIOCGID:
- return copy_to_user((void *) arg, &dev->id, sizeof(struct input_devinfo));
+ return copy_to_user((void *) arg, &dev->id, sizeof(struct input_id));
                 
                 case EVIOCGREP:
- if ((retval = put_user(dev->rep[0], ((int *) arg) + 0))) return retval;
- if ((retval = put_user(dev->rep[1], ((int *) arg) + 1))) return retval;
+ if (put_user(dev->rep[0], ((int *) arg) + 0)) return -EFAULT;
+ if (put_user(dev->rep[1], ((int *) arg) + 1)) return -EFAULT;
                         return 0;
 
                 case EVIOCSREP:
- if ((retval = get_user(dev->rep[0], ((int *) arg) + 0))) return retval;
- if ((retval = get_user(dev->rep[1], ((int *) arg) + 1))) return retval;
+ if (get_user(dev->rep[0], ((int *) arg) + 0)) return -EFAULT;
+ if (get_user(dev->rep[1], ((int *) arg) + 1)) return -EFAULT;
                         return 0;
 
                 case EVIOCGKEYCODE:
- if ((retval = get_user(t, ((int *) arg) + 0))) return retval;
+ if (get_user(t, ((int *) arg) + 0)) return -EFAULT;
                         if (t < 0 || t > dev->keycodemax) return -EINVAL;
                         switch (dev->keycodesize) {
                                 case 1: u = *(u8*)(dev->keycode + t); break;
@@ -264,13 +264,13 @@
                                 case 4: u = *(u32*)(dev->keycode + t * 4); break;
                                 default: return -EINVAL;
                         }
- if ((retval = put_user(u, ((int *) arg) + 1))) return retval;
+ if (put_user(u, ((int *) arg) + 1)) return -EFAULT;
                         return 0;
 
                 case EVIOCSKEYCODE:
- if ((retval = get_user(t, ((int *) arg) + 0))) return retval;
+ if (get_user(t, ((int *) arg) + 0)) return -EFAULT;
                         if (t < 0 || t > dev->keycodemax) return -EINVAL;
- if ((retval = get_user(u, ((int *) arg) + 1))) return retval;
+ if (get_user(u, ((int *) arg) + 1)) return -EFAULT;
                         switch (dev->keycodesize) {
                                 case 1: *(u8*)(dev->keycode + t) = u; break;
                                 case 2: *(u16*)(dev->keycode + t * 2) = u; break;
@@ -284,13 +284,11 @@
                                 struct ff_effect effect;
                                 int err;
 
- if (copy_from_user((void*)(&effect), (void*)arg, sizeof(effect))) {
+ if (copy_from_user((void*)(&effect), (void*)arg, sizeof(effect)))
                                         return -EFAULT;
- }
                                 err = dev->upload_effect(dev, &effect);
- if (put_user(effect.id, &(((struct ff_effect*)arg)->id))) {
+ if (put_user(effect.id, &(((struct ff_effect*)arg)->id)))
                                         return -EFAULT;
- }
                                 return err;
                         }
                         else return -ENOSYS;
@@ -302,8 +300,8 @@
                         else return -ENOSYS;
 
                 case EVIOCGEFFECTS:
- if ((retval = put_user(dev->ff_effects_max, (int*) arg)))
- return retval;
+ if (put_user(dev->ff_effects_max, (int*) arg))
+ return -EFAULT;
                         return 0;
 
                 default:
@@ -380,11 +378,24 @@
 
                                 int t = _IOC_NR(cmd) & ABS_MAX;
 
- if ((retval = put_user(dev->abs[t], ((int *) arg) + 0))) return retval;
- if ((retval = put_user(dev->absmin[t], ((int *) arg) + 1))) return retval;
- if ((retval = put_user(dev->absmax[t], ((int *) arg) + 2))) return retval;
- if ((retval = put_user(dev->absfuzz[t], ((int *) arg) + 3))) return retval;
- if ((retval = put_user(dev->absflat[t], ((int *) arg) + 4))) return retval;
+ if (put_user(dev->abs[t], ((int *) arg) + 0)) return -EFAULT;
+ if (put_user(dev->absmin[t], ((int *) arg) + 1)) return -EFAULT;
+ if (put_user(dev->absmax[t], ((int *) arg) + 2)) return -EFAULT;
+ if (put_user(dev->absfuzz[t], ((int *) arg) + 3)) return -EFAULT;
+ if (put_user(dev->absflat[t], ((int *) arg) + 4)) return -EFAULT;
+
+ return 0;
+ }
+
+ if ((_IOC_NR(cmd) & ~ABS_MAX) == _IOC_NR(EVIOCSABS(0))) {
+
+ int t = _IOC_NR(cmd) & ABS_MAX;
+
+ if (get_user(dev->abs[t], ((int *) arg) + 0)) return -EFAULT;
+ if (get_user(dev->absmin[t], ((int *) arg) + 1)) return -EFAULT;
+ if (get_user(dev->absmax[t], ((int *) arg) + 2)) return -EFAULT;
+ if (get_user(dev->absfuzz[t], ((int *) arg) + 3)) return -EFAULT;
+ if (get_user(dev->absflat[t], ((int *) arg) + 4)) return -EFAULT;
 
                                 return 0;
                         }
diff -Nru a/drivers/input/uinput.c b/drivers/input/uinput.c
--- a/drivers/input/uinput.c Thu Jul 25 16:36:22 2002
+++ b/drivers/input/uinput.c Thu Jul 25 16:36:22 2002
@@ -357,7 +357,6 @@
         .read = uinput_read,
         .write = uinput_write,
         .poll = uinput_poll,
-// fasync: uinput_fasync,
         .ioctl = uinput_ioctl,
 };
 
@@ -369,16 +368,7 @@
 
 static int __init uinput_init(void)
 {
- int retval;
-
- retval = misc_register(&uinput_misc);
-
- if (!retval) {
- printk(KERN_INFO "%s: User level driver support for input subsystem loaded\n", UINPUT_NAME);
- printk(KERN_INFO "%s: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>\n", UINPUT_NAME);
- }
-
- return retval;
+ return misc_register(&uinput_misc);
 }
 
 static void __exit uinput_exit(void)
diff -Nru a/include/linux/gameport.h b/include/linux/gameport.h
--- a/include/linux/gameport.h Thu Jul 25 16:36:22 2002
+++ b/include/linux/gameport.h Thu Jul 25 16:36:22 2002
@@ -39,7 +39,7 @@
         char *name;
         char *phys;
 
- struct input_devinfo id;
+ struct input_id id;
 
         int io;
         int speed;
diff -Nru a/include/linux/input.h b/include/linux/input.h
--- a/include/linux/input.h Thu Jul 25 16:36:22 2002
+++ b/include/linux/input.h Thu Jul 25 16:36:22 2002
@@ -56,7 +56,7 @@
  * IOCTLs (0x00 - 0x7f)
  */
 
-struct input_devinfo {
+struct input_id {
         __u16 bustype;
         __u16 vendor;
         __u16 product;
@@ -64,7 +64,7 @@
 };
 
 #define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */
-#define EVIOCGID _IOR('E', 0x02, struct input_devinfo) /* get device ID */
+#define EVIOCGID _IOR('E', 0x02, struct input_id) /* get device ID */
 #define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */
 #define EVIOCSREP _IOW('E', 0x03, int[2]) /* get repeat settings */
 #define EVIOCGKEYCODE _IOR('E', 0x04, int[2]) /* get keycode */
@@ -80,6 +80,7 @@
 
 #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */
 #define EVIOCGABS(abs) _IOR('E', 0x40 + abs, int[5]) /* get abs value/limits */
+#define EVIOCSABS(abs) _IOW('E', 0xc0 + abs, int[5]) /* set abs value/limits */
 
 #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect)) /* send a force effect to a force feedback device */
 #define EVIOCRMFF _IOW('E', 0x81, int) /* Erase a force effect */
@@ -754,7 +755,7 @@
         char *name;
         char *phys;
         char *uniq;
- struct input_devinfo id;
+ struct input_id id;
 
         unsigned long evbit[NBITS(EV_MAX)];
         unsigned long keybit[NBITS(KEY_MAX)];
@@ -829,7 +830,7 @@
 
         unsigned long flags;
 
- struct input_devinfo id;
+ struct input_id id;
 
         unsigned long evbit[NBITS(EV_MAX)];
         unsigned long keybit[NBITS(KEY_MAX)];
diff -Nru a/include/linux/uinput.h b/include/linux/uinput.h
--- a/include/linux/uinput.h Thu Jul 25 16:36:22 2002
+++ b/include/linux/uinput.h Thu Jul 25 16:36:22 2002
@@ -64,7 +64,7 @@
 #define UINPUT_MAX_NAME_SIZE 80
 struct uinput_user_dev {
         char name[UINPUT_MAX_NAME_SIZE];
- struct input_devinfo id;
+ struct input_id id;
         int ff_effects_max;
         int absmax[ABS_MAX + 1];
         int absmin[ABS_MAX + 1];

===================================================================

This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##

begin 664 bkpatch23969
M'XL(`.8,0#T``\V8?6_;-A#&_[8^Q0$%4BN-;9)Z3Y&B69QUP;JU2-NM0%<8
MBD3%6FW)D"@G3;U]]AU)V7'\EMA=ACF!!9#R3\>[1X^.>@(?2EX<-L;YGX)'
M?>,)_)27XK`AKM)!>MD7[2JZ:D<W.'Z>YSC>Z>=#WJG/[EQ\Z:39J!(&SK\-
M1=2',2_*PP9M6[,1\77$#QOGIZ\^O#X^-XRC(SCIA]DE?\<%'!T9(B_&X2`N
M7X:B/\BSMBC"K!QR$;:C?#B9G3IAA##\<ZAG$<>=4)?8WB2B,:6A37E,F.V[
MME$']G(A_$6.QQQJ$Q\Y#K-<Q^@";=NV#X1UB-=A#E#WT'(/B?.,L$-"8`T6
MGCG0(L8/\.\NXL2(X#B.X?2WLS<G[XY_>-<T(<TC,<#K0*1@(/H<PHMR'](L
MR8MA*-(QQY]A%!4O(<]`U05B/DXC7K;A?3\M`?]++)_HI]FE(GR$$<_ST4#^
MM.#A8/`5KL),\+B-`^<\"X=<@WH2A%>2$>B!-#Z`5#Q%8C\O!"\@S&(8Y@4'
M_"F>)?&C/,V$1@WS,8>R&O$B&51Y5<*HP+DO&%,&E2*V(SSQ9,!#'!AA-*(J
MLNEZ\"0^QA#:D4Y$&XR?`4OG>,;;6SD9K2T_AD%"8KRXIWQI%@VJF'<&:59=
M:[VW^_.E#&PZ<6V;^I/$8A<^*LI-..$A\=<)9Q-3:=-R"9L0Q_?<>\.+BU3>
M=!K2J=,T%YZ-AXF+87H3'O@)#2+[(HY"VPN2M>%M8-Z&1UG@R.P];(W5W452
MBU*;HOH1Z#H3)V:!F]@QC3B/*5M[QVV&SD)SF&-O6]A+%/L(I;Q86WM"\#;%
MF_7B(F%.$/C<IS8GZY.W&3N7/\LC[H;\W2W"]":YFS]W8F$2K4D<.@XE8>!%
MH>LRA^\&O56>2_#6DEZ]4@GW^_9WB'*MA]\C2D:H$TBF396?4WO)SME]=FXQ
M:#'Z^(8.Z-E0<B&D$>^CC]=&UYY:(#J@=OP[/MA&U]-WW1MH%5?J'UWL[>HJ
M[6"'7?0NH,:9/C30H4$<0/4<)VP]H0Z-1J..*\I'7WLB[U781#2;XSR-8=^$
ML+@\@#T,HO5"/B;*](;G2;,4116)V>/#-!4V`(98A^`!L6D"33FM>`I0\-$G
M\OD`FDT9C8:;\`R(:4Z3TSK]\?C#Z_?/UP/H"@!=`>BB;^AXG-MX+OEWQK,,
MV"*>0*5='19QXF%1=)GK*8@Z+.:H>F@D'E40==@Y$L_2$&L%Y,&1^'HY?KT<
M15%"3(I\."?%?;.YQY.$1\)$M!Y1TJP%6<^9IF3*!'=9H!<9T#GT+%7Z_+:4
M]%ZS.=5SDO3TA(*;4O(:&<A%=M$7I*(LXJY3^`Q0]H;A-4:*.:A38*H@EC)@
M^18XR)09\)?C5%0TE4\"928_#]3J:LHPS33H(<593PFO5U/8-I2DNKE1F$6*
MM15E$(J5%'L%Y8_Y$A!%_4L/2G:SAX[>^_6\&0UC$_;@;S3WWB_''TU\1,)T
M[K:/Q\2;\*UF*G>%V]-J1$V87GG90':M[!)EI\HN4W:I[!)EI\HN4[:IK&QO
MUO5J]W<XW]<\KFUR[FL>;21[Q)]0&UL+U><$V[<Y%%J/T^346\8[3_JYG>-"
M!Z#:&=4$+[0SZY*P2T=C,^GHZKNQ<'U(XU4JJ/<4VTI@JXWA`^N_M+VACLM0
M4XS83#>Y=/OJ.]"R_X,65V_4Y3Y=[F(W5KA>YB[EU?V1^EZL[C>CJQL?]?TD
MYDF:<1W@J[-NHX&^>]Y\>OKT`,@U80>+ZC0;G7U`AZG?H<!9%_8[QIG/%F'*
MV=%\3(7\?8J,"/H.#A\@47QR/N,T`K'IAUF_C\L?IJ*4W*[GJ%CU8:52N[ZE
MM*P/:\6\>H<GU?P8&\W=H&ACENU1.F&H':WD'79KTL8>R\?4^RI^C:CIFRHI
M9;4MWKCWFKW+VD'+N/56':.']26RO5-=:/W8&J9EU"OX95H*?.#MZ>OTY*BY
MRL2J.1=[C!<TNT%GCR_'(KZNN_7_>WRM?>.IW$R]6MIH9]5W^-F<8ZV^PZ>O
9U:,^C[Z4U?"(!8Z;1`$U_@$GS:7VRQ<`````
`
end

-- 
Vojtech Pavlik
SuSE Labs
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Jul 30 2002 - 14:00:20 EST