| 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;
        ;
    ;
;