Dmitry Torokhov wrote: > On Wed, Dec 30, 2009 at 10:01:01AM +0100, Johannes Ebke wrote: >> Dmitry Torokhov wrote: >>> On Tue, Dec 29, 2009 at 02:40:21PM -0800, Dmitry Torokhov wrote: >>>> Dec 29, 2009, at 4:46 AM, Johannes Ebke >>>> <johannes.ebke@xxxxxxxxxxxxxxxxxxxxxx> wrote: >>>> >>>>> Dmitry Torokhov wrote: >>>>>> On Sun, Dec 20, 2009 at 11:44:19PM -0800, Dmitry Torokhov wrote: >>>>>>> On Sun, Dec 20, 2009 at 12:36:23AM +0100, Johannes Ebke wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> It seems that the force feedback works well, I have ported >>>>>>>> the force >>>>>>>> feedback for my favorite game to linux now, and it works well. >>>>>>>> >>>>>>>> What does not work is updating effects - there just nothing >>>>>>>> happens, and >>>>>>>> the old event is played. I have circumvented this by >>>>>>>> deleting/re-uploading the effect, but this should probably >>>>>>>> been made to >>>>>>>> work. Does it work well with other hardware? >>>>>>>> >>>>>>>> Thirdly, I have re-discovered one kernel oops that occurs if the >>>>>>>> joystick is unplugged if some process still has the event >>>>>>>> device open. >>>>>>>> Steps to reproduce: >>>>>>>> * plug joystick in >>>>>>>> * fftest /dev/input/eventXX >>>>>>>> * unplug joystick >>>>>>>> >>>>>>>> (kern.log extract attached) >>>>>>>> >>>>>>>> Sometimes this just gives an oops, sometimes it escalates >>>>>>>> into a kernel >>>>>>>> panic. >>>>>>>> >>>>>>> Hmm, it looks like iforce unbinding is completely busted: >>>>>>> >>>>>>> static void iforce_usb_disconnect(struct usb_interface *intf) >>>>>>> { >>>>>>> struct iforce *iforce = usb_get_intfdata(intf); >>>>>>> int open = 0; /* FIXME! iforce->dev.handle->open; */ >>>>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ >>>>>>> >>>>>>> usb_set_intfdata(intf, NULL); >>>>>>> if (iforce) { >>>>>>> iforce->usbdev = NULL; >>>>>>> input_unregister_device(iforce->dev); >>>>>>> >>>>>>> if (!open) { >>>>>>> iforce_delete_device(iforce); >>>>>>> kfree(iforce); >>>>>>> } >>>>>>> } >>>>>>> } >>>>>>> >>>>>>> >>>>>>> Any chance you could fix that FIXME ;) ? >>>>>>> >>>>>> Actually, does the below fixes it for you? >>>>>> >>>>> This fixes the kernel oops - thanks! However it also disables FF, >>>>> unless >>>>> I remove "usb_kill_urb(iforce->out);" from iforce_close. >>>> >From some debug statements I found that iforce_close is called >>>>> twice if >>>>> you just plug in the joystick, so the effect is immediate. >>>> I still believe that usb_kill_urb is needed however we need to wait >>>> for packet disabling FF to complete. >>>> >>> Does the patch below (on top of the unmodofied previous one) fixes the >>> issue for you? >>> >>> Thanks. >>> >> This fixes it completely, both the FF and the clean shutdown on >> unexpected disconnect! Thank you very much! > > Ah, great! > >> Finally, for correct orientation of the rudder axis, I have attached one >> small change to packets - this makes it work for me if i remove the old >> configuration. > > Hmm, that might break some other users though (or does it only kick in > for Cyborg? This is in the part that only kicks in for the Cyborg, or perhaps other devices as well (if(HI(cmd)==6)..) > >> One other question: Since the USB HID driver can actually discover the >> joystick buttons and axis ranges sucessfully, would it not be easier to >> use that for generic input and only add force-feedback in iforce, or is >> that just too much overhead? > > We do prefer to have HID driver handle the devices and have only > non-HID-compliant devices use specialized drivers. Iforce is an older > driver though, working with both USB devices and devices attached to > serial ports. > > Does your joystick works well with HID driver (sans FF)? > Yes, with one grievance: Since the "dead man switch" is not physically present on the cyborg but logically present and "always on", some applications like the flightgear joystick calibration "fgjs" cannot be used. However, I am not sure how the information "this is a dead man switch" can be published to userspace most efficiently, and the application should probably deal with it anyway (stuck key in old joystick, etc...) Cheers, Johannes -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html