The Linux 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 Basics
 - Device drivers infrastructure
 - Device Power Management
 - The Common Clk Framework
 - Bus-Independent Device Accesses
 - Device connections
 - Buffer Sharing and Synchronization
 - Device links
 - Message-based devices
 - Sound Devices
 - Frame Buffer Library
 - Voltage and current regulator 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
 - USB3 debug port
 
 - PCI Support Library
 - PCI Hotplug Support Library
 - Serial Peripheral Interface (SPI)
 - I2C and SMBus Subsystem
 - High Speed Synchronous Serial Interface (HSI)
 - Error Detection And Correction (EDAC) Devices
 - SCSI Interfaces Guide
 - libATA Developer’s Guide
 - target and iSCSI Interfaces Guide
 - MTD NAND Driver Programming Interface
 - Parallel Port Devices
 - 16x50 UART Driver
 - Pulse-Width Modulation (PWM)
 - W1: Dallas’ 1-wire bus
 - RapidIO Subsystem Guide
 - 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
 
 - General Purpose Input/Output (GPIO)
 - Miscellaneous Devices
 - DMAEngine documentation
 - Linux kernel SLIMbus support
 - SoundWire Documentation
 - FPGA Subsystem