Instead of having two drivers, one for v4l1 and another for v4l2, and both missing support for lots of webcams, use libv4l.
Libv4l is mainained together with upstream drivers. Every time a new webcam is added with some weird proprietary format, a decoder is added at libv4l. Due to that, _all_ V4L webcams are supported via libv4l. Also, it provides backport support to the old V4L1 API.
So, just remove v4l1.c driver and convert v4l2.c driver to use libv4l.
Tested here with several webcams supported by the latest gspca driver found at my upstream tree: