Submitting Drivers For The Linux Kernel
---------------------------------------

This document is intended to explain how to submit device drivers to the
various kernel trees. Note that if you are interested in video card drivers
you should probably talk to XFree86 (http://www.xfree86.org/) and/or X.Org
(http://x.org/) instead.

Also read the Documentation/SubmittingPatches document.


Allocating Device Numbers
-------------------------

Major and minor numbers for block and character devices are allocated
by the Linux assigned name and number authority (currently this is
Torben Mathiasen). The site is http://www.lanana.org/. This
also deals with allocating numbers for devices that are not going to
be submitted to the mainstream kernel.
See Documentation/devices.txt for more information on this.

If you don't use assigned numbers then when your device is submitted it will
be given an assigned number even if that is different from values you may
have shipped to customers before.

Who To Submit Drivers To
------------------------

Linux 2.0:
	No new drivers are accepted for this kernel tree.

Linux 2.2:
	No new drivers are accepted for this kernel tree.

Linux 2.4:
	If the code area has a general maintainer then please submit it to
	the maintainer listed in MAINTAINERS in the kernel file. If the
	maintainer does not respond or you cannot find the appropriate
	maintainer then please contact Willy Tarreau <w@1wt.eu>.

Linux 2.6:
	The same rules apply as 2.4 except that you should follow linux-kernel
	to track changes in API's. The final contact point for Linux 2.6
	submissions is Andrew Morton.

What Criteria Determine Acceptance
----------------------------------

Licensing:	The code must be released to us under the
		GNU General Public License. We don't insist on any kind
		of exclusive GPL licensing, and if you wish the driver
		to be useful to other communities such as BSD you may well
		wish to release under multiple licenses.
		See accepted licenses at include/linux/module.h

Copyright:	The copyright owner must agree to use of GPL.
		It's best if the submitter and copyright owner
		are the same person/entity. If not, the name of
		the person/entity authorizing use of GPL should be
		listed in case it's necessary to verify the will of
		the copyright owner.

Interfaces:	If your driver uses existing interfaces and behaves like
		other drivers in the same class it will be much more likely
		to be accepted than if it invents gratuitous new ones.
		If you need to implement a common API over Linux and NT
		drivers do it in userspace.

Code:		Please use the Linux style of code formatting as documented
		in Documentation/CodingStyle. If you have sections of code
		that need to be in other formats, for example because they
		are shared with a windows driver kit and you want to
		maintain them just once separate them out nicely and note
		this fact.

Portability:	Pointers are not always 32bits, not all computers are little
		endian, people do not all have floating point and you
		shouldn't use inline x86 assembler in your driver without
		careful thought. Pure x86 drivers generally are not popular.
		If you only have x86 hardware it is hard to test portability
		but it is easy to make sure the code can easily be made
		portable.

Clarity:	It helps if anyone can see how to fix the driver. It helps
		you because you get patches not bug reports. If you submit a
		driver that intentionally obfuscates how the hardware works
		it will go in the bitbucket.

PM support:	Since Linux is used on many portable and desktop systems, your
		driver is likely to be used on such a system and therefore it
		should support basic power management by implementing, if
		necessary, the .suspend and .resume methods used during the
		system-wide suspend and resume transitions.  You should verify
		that your driver correctly handles the suspend and resume, but
		if you are unable to ensure that, please at least define the
		.suspend method returning the -ENOSYS ("Function not
		implemented") error.  You should also try to make sure that your
		driver uses as little power as possible when it's not doing
		anything.  For the driver testing instructions see
		Documentation/power/drivers-testing.txt and for a relatively
		complete overview of the power management issues related to
		drivers see Documentation/power/devices.txt .

Control:	In general if there is active maintenance of a driver by
		the author then patches will be redirected to them unless
		they are totally obvious and without need of checking.
		If you want to be the contact and update point for the
		driver it is a good idea to state this in the comments,
		and include an entry in MAINTAINERS for your driver.

What Criteria Do Not Determine Acceptance
-----------------------------------------

Vendor:		Being the hardware vendor and maintaining the driver is
		often a good thing. If there is a stable working driver from
		other people already in the tree don't expect 'we are the
		vendor' to get your driver chosen. Ideally work with the
		existing driver author to build a single perfect driver.

Author:		It doesn't matter if a large Linux company wrote the driver,
		or you did. Nobody has any special access to the kernel
		tree. Anyone who tells you otherwise isn't telling the
		whole story.


Resources
---------

Linux kernel master tree:
	ftp.??.kernel.org:/pub/linux/kernel/...
	?? == your country code, such as "us", "uk", "fr", etc.

	http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git

Linux kernel mailing list:
	linux-kernel@vger.kernel.org
	[mail majordomo@vger.kernel.org to subscribe]

Linux Device Drivers, Third Edition (covers 2.6.10):
	http://lwn.net/Kernel/LDD3/  (free version)

LWN.net:
	Weekly summary of kernel development activity - http://lwn.net/
	2.6 API changes:
		http://lwn.net/Articles/2.6-kernel-api/
	Porting drivers from prior kernels to 2.6:
		http://lwn.net/Articles/driver-porting/

KernelTrap:
	Occasional Linux kernel articles and developer interviews
	http://kerneltrap.org/

KernelNewbies:
	Documentation and assistance for new kernel programmers
	http://kernelnewbies.org/

Linux USB project:
	http://www.linux-usb.org/

How to NOT write kernel driver by Arjan van de Ven:
	http://www.fenrus.org/how-to-not-write-a-device-driver-paper.pdf

Kernel Janitor:
	http://kernelnewbies.org/KernelJanitors

GIT, Fast Version Control System:
	http://git-scm.com/
