shkhln, I apologize if I sound like I'm whining. But I have met with a lot of frustration regarding this functionality. I appreciate you offering a patch, but what does your patch do? As I mentioned above, I can already use gamepads on some specific applications -- typically SDL-based applications -- like PCSXR or SNES9x via UHID support.
I did contact the author of webcamd, and he did clarify that /dev/input/js0 is the old Linux joystick API, but that /dev/input/eventx was also created by webcamd to provide an evdev interface for the joystick/gamepad. Indeed I have a /dev/input/event4 device when using webcamd to set up a controller. According to the webcamd author, this evdev device is generic and should "just work". However, the reality is different. /var/log/Xorg.0.log shows that the X server is recognizing two of my tested controllers as mice (Logitech Dual Action, and an iNNEXT USB SNES pad). A third controller, a PDP brand Xbox One controller isn't detected by Xorg at all without manual configuration, and even then it is detected as a mouse. I'm not surprised that the PDP controller is behaving diffeently. It has a quirk and doesn't behave the same as a Microsoft Xbox One controller and doesn't even work as a UHID device on FreeBSD either (even on Linux it needed a special driver to deal with its odd behavior). As for the Logitech and the iNNEXT controller, Xorg seems to completely ignore any attempts at manual configuration, even if I use lower-numbered conf files than the default ones supplied in /usr/local/share/X11/xorg.conf.d/. In any case, game controllers which have been configured as evdev devices by webcamd are being identified and treated by Xorg as mice, and the only functionality they provide is moving the mouse cursor with the left analog stick or D-pad. I discussed this with the webcamd author, and he did not have an explanation for the behavior. So I don't know if webcamd itself has a problem, if it's a problem with with FreeBSD's evdev support, or something else. The Xorg.0.log indicates that it is treating the device as a mouse because udev tagged it as a mouse.