Driver implementer's API guide¶
The kernel offers a wide variety of interfaces to support the development of device drivers. This document is an only somewhat organized collection of some of those interfaces — it will hopefully get better over time! The available subsections can be seen below.
Table of contents
- Driver Model
 - Driver Basics
 - Device drivers infrastructure
 - ioctl based interfaces
 - Early Userspace
 - CPU and Device Power Management
 - The Common Clk Framework
 - Bus-Independent Device Accesses
 - Buffer Sharing and Synchronization (dma-buf)
 - Device links
 - Component Helper for Aggregate Drivers
 - Message-based devices
 - InfiniBand and Remote DMA (RDMA) Interfaces
 - Managing Ownership of the Framebuffer Aperture
 - Frame Buffer Library
 - Voltage and current regulator API
 - Reset controller API
 - Industrial I/O
 - Input Subsystem
 - Linux USB API
- The Linux-USB Host Side API
 - USB Gadget API for Linux
 - USB Anchors
 - USB bulk streams
 - USB core callbacks
 - USB DMA
 - USB Request Block (URB)
 - Power Management for USB
 - USB hotplugging
 - USB device persistence during system suspend
 - USB Error codes
 - Writing USB Device Drivers
 - Synopsys DesignWare Core SuperSpeed USB 3.0 Controller
 - Writing a MUSB Glue Layer
 - USB Type-C connector class
 - API for USB Type-C Alternate Mode drivers
 - USB3 debug port
 
 - Firewire (IEEE 1394) driver Interface Guide
 - The Linux PCI driver implementer's API guide
 - Compute Express Link
 - Serial Peripheral Interface (SPI)
 - I2C and SMBus Subsystem
 - IPMB Driver for a Satellite MC
 - The Linux IPMI Driver
 - I3C subsystem
 - Generic System Interconnect Subsystem
 - Device Frequency Scaling
 - High Speed Synchronous Serial Interface (HSI)
 - Error Detection And Correction (EDAC) Devices
 - SCSI Interfaces Guide
 - libATA Developer's Guide
 - target and iSCSI Interfaces Guide
 - The Common Mailbox Framework
 - MTD NAND Driver Programming Interface
 - Parallel Port Devices
 - 16x50 UART Driver
 - Pulse-Width Modulation (PWM)
 - Intel(R) Management Engine Interface (Intel(R) MEI)
 - Memory Technology Device (MTD)
 - MMC/SD/SDIO card support
 - Non-Volatile Memory Device (NVDIMM)
 - W1: Dallas' 1-wire bus
 - The Linux RapidIO Subsystem
 - Writing s390 channel device drivers
 - VME Device Drivers
 - Linux 802.11 Driver Developer's Guide
 - The Userspace I/O HOWTO
 - Linux Firmware API
 - PINCTRL (PIN CONTROL) subsystem
- Top-level interface
 - Pin groups
 - Pin configuration
 - Interaction with the GPIO subsystem
 - PINMUX interfaces
 - What is pinmuxing?
 - Pinmux conventions
 - Pinmux drivers
 - Pin control interaction with the GPIO subsystem
 - GPIO mode pitfalls
 - Board/machine configuration
 - Complex mappings
 - Pin control requests from drivers
 - Drivers needing both pin control and GPIOs
 - System pin control hogging
 - Runtime pinmuxing
 - Debugfs files
 
 - General Purpose Input/Output (GPIO)
- Introduction
 - Using GPIO Lines in Linux
 - GPIO Driver Interface
 - GPIO Descriptor Consumer Interface
 - GPIO Mappings
 - Subsystem drivers using GPIO
 - Legacy GPIO Interfaces
 - A driver for a selfmade cheap BT8xx based PCI GPIO-card (bt8xxgpio)
 - Core
 - ACPI support
 - Device tree support
 - Device-managed API
 - sysfs helpers
 
 - RAID
 - Media subsystem kernel internal API
 - Miscellaneous Devices
 - Near Field Communication
 - DMAEngine documentation
 - Linux kernel SLIMbus support
 - SoundWire Documentation
 - Thermal
 - FPGA Subsystem
 - ACPI Support
 - Auxiliary Bus
 - Kernel driver lp855x
 - Kernel Connector
 - Console Drivers
 - Dell Systems Management Base Driver
 - EISA bus support
 - ISA Drivers
 - ISA Plug & Play support by Jaroslav Kysela <perex@suse.cz>
 - The io_mapping functions
 - Ordering I/O writes to memory-mapped addresses
 - Generic Counter Interface
 - Memory Controller drivers
 - MEN Chameleon Bus
 - NTB Drivers
 - NVMEM Subsystem
 - PARPORT interface documentation
 - PPS - Pulse Per Second
 - PTP hardware clock infrastructure for Linux
 - Generic PHY Framework
 - Pulse Width Modulation (PWM) interface
 - PLDM Firmware Flash Update Library
 - Overview of the 
pldmfwlibrary - rfkill - RF kill switch support
 - Support for Serial devices
 - SM501 Driver
 - Surface System Aggregator Module (SSAM)
 - Linux Switchtec Support
 - Sync File API Guide
 - TTY
 - VFIO Mediated devices
 - VFIO - "Virtual Function I/O"
 - Acceptance criteria for vfio-pci device specific driver variants
 - Virtio
 - Xilinx FPGA
 - Xillybus driver for generic FPGA interface
 - Writing Device Drivers for Zorro Devices
 - The Linux Hardware Timestamping Engine (HTE)
 - WMI Driver API
 - The Linux kernel dpll subsystem
- DPLL
 - Subsystem
 - Device object
 - Pin object
 - Pin selection
 - Shared pins
 - MUX-type pins
 - Pin priority
 - Phase offset measurement and adjustment
 - Configuration commands group
 - List of netlink commands with possible attributes
 - Netlink dump requests
 - SET commands format
 - Configuration pre-defined enums
 - Notifications
 - Device driver implementation
 - SyncE enablement