@Heiroglyph
The "system libraries" provision in GPL is not symmetrical. You can have a GPL application use non-GPL-compatible system library, but you cannot have a GPL plugin into a non-GPL-compatible system library (driver is essentially a plugin).
http://www.gnu.org/licenses/gpl-faq.en.html#GPLPluginsInNFThe linked text says that you add an exception to GPL license to allow using your GPL plugin with non-GPL-compatible program. This is allowed of course as long as you are the author of the code. This will not work if you take GPL code from Linux, because you are not the author and you cannot alter the original GPL license of Linux codes.
Cases 1) and 2) work because of system library provision. Case 3) works because Linux kernel uses a modified version of GPL where it states that doing a system call to kernel is not considered derived work:
NOTE! This copyright does *not* cover user programs that use kernel
services by normal system calls - this is merely considered normal use
of the kernel, and does *not* fall under the heading of "derived work".
Also note that the GPL below is copyrighted by the Free Software
Foundation, but the instance of code that it refers to (the linux
kernel) is copyrighted by me and others who actually wrote it.
If you decide to you GPL for the driver, you will be in essence violating your own license. GPL was designed to spread GPL and it was done so by people who know what they were doing. I doubt you will find holes in it. As I'm not really into forcing people into certain mind set, I prefer licenses that guarantee that extensions to my code base need to be made available, but usage of my code base does not. At the end of the day, it does not pay for a developer to maintain a fork of my codes and continuously integrate his changes with my latest version, so it makes total sense for him to contribute his changes to my code base.