.. _submittingdrivers:

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.

.. note::

   This document is old and has seen little maintenance in recent years; it
   should probably be updated or, perhaps better, just deleted.  Most of
   what is here can be found in the other development documents anyway.

   Oh, and we don't really recommend submitting changes to XFree86 :)

Also read the Documentation/process/submitting-patches.rst 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/admin-guide/devices.rst 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 and upper:
	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 :ref:`Documentation/process/coding-style.rst <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/driver-api/pm/devices.rst.

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.\ *country_code*\ .kernel.org:/pub/linux/kernel/...

	where *country_code* == 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/

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/
