| Block | Driver Type | Notes |
|-------|-------------|-------|
| CPU/PM | cpuidle, cpufreq, PSCI | Using qcom-cpufreq-hw or cpufreq-dt |
| Interrupts | GIC-400 | ARM GIC v3 (often v2 compatible) |
| Timers | ARM arch timer | armv8-timer |
| UART | QUPv3 UART | msm_serial_hs |
| I2C/SPI | QUPv3 | i2c-msm-v2, spi-qup |
| GPIO/pinctrl | TLMM | pinctrl-msm |
| DMA | BAM DMA | qcom_bam_dma |
| Storage | SDHC/eMMC | sdhci-msm |
| USB | DWC3 | dwc3-msm |
| GPU | Adreno 506 | msm DRM driver (out-of-tree) |
| Display | DSI, HDMI | drm/msm |
| Audio | SLIMbus, I2S | snd-soc-msm8996 (compatible) |
| Sensors | SPMI, I2C | qcom-spmi, iio |
To ensure high quality, compile from a clean CAF source:
Unlike mainline Linux kernels, Qualcomm’s MSM kernel tree includes proprietary subsystems. A high-quality driver must integrate seamlessly with these existing frameworks rather than "reinventing the wheel."
&tlmm
hs_pins: hs_pinmux
mux
pins = "gpio32", "gpio33";
function = "hsif";
;
config
pins = "gpio32", "gpio33";
drive-strength = <8>; // mA
bias-pull-up;
input-enable;
;
;
;