.. _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 (https://www.xfree86.org/) and/or X.Org
(https://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 :ref:`Documentation/process/submitting-patches.rst <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 https://www.lanana.org/. This
also deals with allocating numbers for devices that are not going to
be submitted to the mainstream kernel.
See :ref:`Documentation/admin-guide/devices.rst <admin_devices>`
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. If you wish the driver to be
		useful to other communities such as BSD you may release
		under multiple licenses. If you choose to release under
		licenses other than the GPL, you should include your
		rationale for your license choices in your cover letter.
		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.rst and for a relatively
		complete overview of the power management issues related to
		drivers see :ref:`Documentation/driver-api/pm/devices.rst <driverapi_pm_devices>`.

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.

	https://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):
	https://lwn.net/Kernel/LDD3/  (free version)

LWN.net:
	Weekly summary of kernel development activity - https://lwn.net/

	2.6 API changes:

		https://lwn.net/Articles/2.6-kernel-api/

	Porting drivers from prior kernels to 2.6:

		https://lwn.net/Articles/driver-porting/

KernelNewbies:
	Documentation and assistance for new kernel programmers

		https://kernelnewbies.org/

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

How to NOT write kernel driver by Arjan van de Ven:
	https://landley.net/kdocs/ols/2002/ols2002-pages-545-555.pdf

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

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