From 25ff95075e6f399f2e5d776fb6af28e9302d9823 Mon Sep 17 00:00:00 2001 From: The-going <48602507+The-going@users.noreply.github.com> Date: Sat, 20 Sep 2025 23:39:44 +0300 Subject: [PATCH] sunxi-6.16: add armbian patches --- ...nanopiduo2-Use-key-0-as-power-button.patch | 31 + ...dts-sun8i-nanopiduo2-enable-ethernet.patch | 31 + ...0i-h616-BigTreeTech-CB1-Enable-EMAC1.patch | 42 + ...50i-h616-BigTreeTech-CB1-Enable-HDMI.patch | 57 + .../ASoC-AC200-Initial-driver.patch | 842 +++ .../Add-BananaPi-BPI-M4-Zero-overlays.patch | 377 ++ .../Add-BananaPi-BPI-M4-Zero-pinctrl.patch | 43 + .../Add-FB_TFT-ST7796S-driver.patch | 154 + ...o-1-and-2-by-including-HDMI-and-DE-n.patch | 56 + ...ino-3-by-including-HDMI-and-DE-nodes.patch | 56 + ...d-dump_reg-and-sunxi-sysinfo-drivers.patch | 1548 +++++ ...to-fix-uwe5622-bluetooth-MAC-address.patch | 609 ++ .../Add-wifi-nodes-for-Inovato-Quadra.patch | 88 + ...ws2812-RGB-driver-for-allwinner-H616.patch | 273 + ...o-mode-adjustment-and-ws2812-rgb_val.patch | 58 + .../Compile-the-pwm-overlay.patch | 24 + ...ce-number-as-referenced-in-the-Allwi.patch | 29 + ...ding-for-DWC3-controller-on-Allwinne.patch | 63 + ...Allwinner-A10-EMAC-which-already-exi.patch | 26 + .../Enable-creation-of-__symbols__-node.patch | 29 + ...-ghost-touches-on-tsc2007-tft-screen.patch | 211 + .../Fix-include-uapi-spi-spidev-module.patch | 26 + ...p20x-pek-allow-wakeup-after-shutdown.patch | 48 + ...us_heartbeat-arch-arm64-boot-dts-all.patch | 39 + ...FIG_SHELL-fix-for-builddeb-packaging.patch | 27 + ...i-h6-pwm-settings-to-its-own-overlay.patch | 70 + ...C2007-touchscreen-add-polling-method.patch | 195 + ...sun4i-hdmi-switch-to-struct-drm_edid.patch | 49 + .../Sound-for-H616-H618-Allwinner-SOCs.patch | 4239 ++++++++++++++ ...-boot-dts-allwinner-sun50i-a64-pinep.patch | 53 + .../add-dtb-overlay-for-zero2w.patch | 135 + ...dd-initial-support-for-orangepi3-lts.patch | 431 ++ ...i-info-sunxi-addr-and-sunxi-dump-reg.patch | 73 + ...rm-arm64-dts-Add-leds-axp20x-charger.patch | 79 + ...-Add-sun8i-h2-plus-nanopi-duo-device.patch | 196 + ...Add-sun8i-h2-plus-sunvell-r69-device.patch | 257 + ...ubietruck-green-LED-mmc0-default-tri.patch | 38 + ...-orangepi-and-mini-fix-phy-mode-hdmi.patch | 86 + ...3-nanopi-neo-Add-regulator-leds-mmc2.patch | 80 + ...dd-regulator-camera-wifi-bluetooth-o.patch | 196 + ...-h3-orangepi-2-Add-regulator-vdd-cpu.patch | 59 + ...m-dts-overlay-Add-Overlays-for-sunxi.patch | 4964 +++++++++++++++++ ...lay-sun8i-h3-cpu-clock-add-overclock.patch | 209 + ...-Add-panel-lcd-olinuxino-4.3-needed-.patch | 133 + ...no-micro-add-panel-lcd-olinuxino-4.3.patch | 106 + ...OB-IRQ-for-brcm-wifi-on-Cubietruck-a.patch | 99 + ...-a20-bananapro-add-AXP209-regulators.patch | 72 + ...-a20-bananapro-add-hdmi-connector-de.patch | 78 + ...sun7i-a20-cubietruck-add-alias-uart2.patch | 24 + ...m-204-evb-olinuxino-micro-decrease-d.patch | 55 + ...0-olinuxino-lime2-enable-audio-codec.patch | 27 + ...linuxino-lime2-enable-ldo3-always-on.patch | 28 + ...-olinuxino-micro-emmc-Add-vqmmc-node.patch | 24 + ...us-orangepi-zero-fix-usb_otg-dr_mode.patch | 25 + ...s-orangepi-zero-fix-xradio-interrupt.patch | 35 + .../arm-dts-sun8i-h3-add-thermal-zones.patch | 104 + ...-h3-bananapi-m2-plus-add-wifi_pwrseq.patch | 25 + ...ts-sun8i-h3-nanopi-add-leds-pio-pins.patch | 60 + ...-h3-orangepi-pc-plus-add-wifi_pwrseq.patch | 33 + ...-microvolt-to-prevent-not-supported-.patch | 48 + ...-r40-add-clk_out_a-fix-bananam2ultra.patch | 40 + ...0-bananapi-m2-ultra-add-codec-analog.patch | 63 + ...i-v3s-s3-pinecube-enable-sound-codec.patch | 63 + ...arm-dts-sun9i-a80-add-thermal-sensor.patch | 41 + .../arm-dts-sun9i-a80-add-thermal-zone.patch | 54 + ...-sunxi-h3-h5.dtsi-add-i2s0-i2s1-pins.patch | 33 + ...unxi-h3-h5.dtsi-force-mmc0-bus-width.patch | 24 + ...e-ASAP-after-writing-new-instruction.patch | 63 + ...un50i-h618-bananapi-m4-berry-support.patch | 353 ++ ...-Add-sun50i-h5-nanopi-k1-plus-device.patch | 429 ++ ...Add-sun50i-h5-nanopi-m1-plus2-device.patch | 272 + ...dd-sun50i-h5-nanopi-neo-core2-device.patch | 242 + ...dd-sun50i-h5-nanopi-neo2-v1.1-device.patch | 212 + ...64-olinuxino-add-regulator-audio-mmc.patch | 99 + ...64-dts-add-sun50i-h618-cpu-dvfs.dtsi.patch | 260 + ...arm64-dts-allwinner-Add-axp313a.dtsi.patch | 83 + ...ts-allwinner-h6-Add-AC200-EPHY-nodes.patch | 144 + ...s-allwinner-h6-add-AC200-codec-nodes.patch | 87 + ...-dts-allwinner-h6-enable-AC200-codec.patch | 142 + ...s-allwinner-h6-tanix-enable-Ethernet.patch | 97 + ...angepi-zero2-Enable-expansion-board-.patch | 48 + ...ner-overlay-Add-Overlays-for-sunxi64.patch | 2471 ++++++++ ...-dts-allwinner-sun50i-h6-Fix-H6-emmc.patch | 26 + ...s-allwinner-sun50i-h616-Add-VPU-node.patch | 55 + ...dts-h616-8-Add-overlays-i2c-pwm-uart.patch | 653 +++ ...add-hdmi-support-for-zero2-and-zero3.patch | 339 ++ ...pport-for-orange-pi-zero-2-and-zero3.patch | 68 + ...i-a64-set-right-phy-mode-to-rgmii-id.patch | 29 + ...-overlay-sun50i-a64-pine64-7inch-lcd.patch | 144 + ...n50i-h5-add-gpio-regulator-overclock.patch | 220 + ...-dts-sun50i-a64-force-mmc0-bus-width.patch | 24 + ...ino-1Ge16GW-Disable-clock-phase-and-.patch | 28 + ...4-olinuxino-1Ge16GW-enable-bluetooth.patch | 41 + ...-dts-sun50i-a64-olinuxino-add-boards.patch | 603 ++ ...-a64-olinuxino-emmc-enable-bluetooth.patch | 38 + ...64-orangepi-win-add-aliase-ethernet1.patch | 24 + ...arm64-dts-sun50i-a64-pine64-add-spi0.patch | 49 + ...s-sun50i-a64-pine64-enable-wifi-mmc1.patch | 47 + ...64-sopine-baseboard-enable-Bluetooth.patch | 40 + ...64-sopine-baseboard-mmc1-status-okay.patch | 25 + ...-a64.dtsi-adjust-thermal-trip-points.patch | 42 + .../arm64-dts-sun50i-h313-x96q-lpddr3.patch | 441 ++ ...arm64-dts-sun50i-h5-add-cpu-opp-refs.patch | 122 + ...arm64-dts-sun50i-h5-add-termal-zones.patch | 102 + ...able-power-button-for-orangepi-prime.patch | 27 + ...nanopi-neo2-add-regulator-led-triger.patch | 65 + ...h5-nanopi-r1s-h5-add-rtl8153-support.patch | 40 + ...sun50i-h5-orangepi-pc2-add-spi-flash.patch | 51 + ...n50i-h5-orangepi-prime-add-regulator.patch | 92 + ...n50i-h5-orangepi-prime-add-rtl8723cs.patch | 35 + ...-h5-orangepi-zero-plus-add-regulator.patch | 67 + ...ts-sun50i-h6-Add-r_uart-uart2-3-pins.patch | 119 + ...n50i-h6-orangepi-3-add-r_uart-aliase.patch | 24 + ...un50i-h6-orangepi-3-delete-node-spi0.patch | 25 + ...-sun50i-h6-orangepi-add-cpu-opp-refs.patch | 35 + ...i-enable-higher-clock-regulator-max-.patch | 26 + ...ngepi-lite2-spi0-usb3phy-dwc3-enable.patch | 60 + ...-sun50i-h6-pine-h64-add-dwc3-usb3phy.patch | 36 + ...un50i-h6-pine-h64-add-wifi-rtl8723cs.patch | 82 + ...50i-h6.dtsi-add-pinctrl-pins-for-spi.patch | 34 + ...-dts-sun50i-h6.dtsi-improve-thermals.patch | 111 + ...ts-sun50i-h616-add-pwm-nodes-support.patch | 133 + ...-sun50i-h616-bigtreetech-cb1-sd-emmc.patch | 491 ++ ...-h616-orangepi-zero2-Enable-GPU-mali.patch | 25 + ...angepi-zero2-reg_usb1_vbus-status-ok.patch | 24 + ...i-h616-x96-mate-T95-eth-sd-card-hack.patch | 103 + ...64-dts-sun50i-h616-x96-mate-add-hdmi.patch | 64 + ...6.dtsi-reserved-memory-512K-for-BL31.patch | 31 + ...18-orangepi-zero2w-Add-missing-nodes.patch | 324 ++ ...-h618-orangepi-zero3-Enable-GPU-mali.patch | 24 + ...50i-h616-Add-i2c-2-3-4-uart-2-5-pins.patch | 143 + .../patches.armbian/cb1-overlay.patch | 491 ++ ...e-add-support-for-regmap-based-gates.patch | 251 + .../driver-allwinner-h618-emac.patch | 4514 +++++++++++++++ ...q-sun8i-a33-mbus-disable-autorefresh.patch | 27 + ...dd-pwm-sunxi-enhance-driver-for-h616.patch | 1315 +++++ ...urce-arm_arch_timer-fix-a64-timejump.patch | 48 + ...gem-dma-Export-with-handle-allocator.patch | 51 + ...simple-Add-compability-olinuxino-lcd.patch | 169 + .../drv-gpu-drm-sun4i-Add-GEM-allocator.patch | 103 + ...4i-Add-HDMI-audio-sun4i-hdmi-encoder.patch | 633 +++ ...rm-sun4i-sun8i_mixer.c-add-h3-mixer1.patch | 42 + ...rm64-dts-axp803-hwmon-enable-thermal.patch | 184 + ...-touchscreen-sun4i-ts-Enable-parsing.patch | 63 + ...dvb-frontends-si2168-fix-cmd-timeout.patch | 28 + .../drv-mfd-axp20x-add-sysfs-interface.patch | 658 +++ ...ble-DDR52-mode-on-all-A20-based-boar.patch | 27 + ...ost-sunxi-mmc-add-h5-emmc-compatible.patch | 38 + ...-nand_ids.c-add-H27UBG8T2BTR-BC-nand.patch | 27 + ...mac-sun8i-second-EMAC-clock-register.patch | 63 + ...-nvmem-sunxi_sid-Support-SID-on-H616.patch | 41 + ...vice-Tree-Overlay-ConfigFS-interface.patch | 343 ++ ...4i-usb-Allow-reset-line-to-be-shared.patch | 36 + ...nctrl-sun50i-a64-disable_strict_mode.patch | 30 + ...sun50i-h6.c-GPIO-disable_strict_mode.patch | 24 + ...sunxi-sram-Add-SRAM-C1-H616-handling.patch | 41 + ...v-spi-spi-sun4i.c-spi-bug-low-on-sck.patch | 35 + ...pidev-Add-armbian-spi-dev-compatible.patch | 37 + ...-media-sunxi-cedrus-add-H616-variant.patch | 44 + .../drv-staging-rtl8723bs-AP-bugfix.patch | 25 + ...name-gadget-serial-console-manufactu.patch | 27 + ...nable-TV-Output-on-OrangePi-Zero-LTE.patch | 647 +++ .../fix-cpu-opp-table-sun8i-a83t.patch | 115 + .../patches.armbian/h616-add-keys.patch | 101 + ...fourcc-add-ARM-tiled-format-modifier.patch | 35 + ...pport-for-X-Powers-AC200-EPHY-syscon.patch | 373 ++ .../mfd-Add-support-for-X-Powers-AC200.patch | 266 + .../mmc-host-sunxi-mmc-Fix-H6-emmc.patch | 43 + .../net-phy-Add-support-for-AC200-EPHY.patch | 143 + ...-r8152-add-LED-configuration-from-OF.patch | 79 + ...unxi_get_soc_chipid-sunxi_get_serial.patch | 58 + ...ipts-add-overlay-compilation-support.patch | 81 + ...the-early-load-of-sun8i-codec-analog.patch | 27 + ...4i-codec-adcis-select-capture-source.patch | 120 + ...unxi-sun8i-codec-analog-enable-sound.patch | 31 + ...6-Add-the-missing-digital-audio-node.patch | 59 + .../kernel/archive/sunxi-6.16/series.armbian | 181 + patch/kernel/archive/sunxi-6.16/series.conf | 182 + 178 files changed, 39899 insertions(+) create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-Use-key-0-as-power-button.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-enable-ethernet.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-EMAC1.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-HDMI.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/ASoC-AC200-Initial-driver.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-overlays.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-pinctrl.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-FB_TFT-ST7796S-driver.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-HDMI-support-for-pcDuino-1-and-2-by-including-HDMI-and-DE-n.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-HDMI-support-for-pcDuino-3-by-including-HDMI-and-DE-nodes.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-dump_reg-and-sunxi-sysinfo-drivers.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-sunxi-addr-driver-Used-to-fix-uwe5622-bluetooth-MAC-address.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-wifi-nodes-for-Inovato-Quadra.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Add-ws2812-RGB-driver-for-allwinner-H616.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/BigTreeTech-CB1-dts-i2c-gpio-mode-adjustment-and-ws2812-rgb_val.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Compile-the-pwm-overlay.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Correct-perf-interrupt-source-number-as-referenced-in-the-Allwi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Doc-dt-bindings-usb-add-binding-for-DWC3-controller-on-Allwinne.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Enable-DMA-support-for-the-Allwinner-A10-EMAC-which-already-exi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Enable-creation-of-__symbols__-node.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Fix-ghost-touches-on-tsc2007-tft-screen.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Fix-include-uapi-spi-spidev-module.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Input-axp20x-pek-allow-wakeup-after-shutdown.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/LED-green_power_on-red_status_heartbeat-arch-arm64-boot-dts-all.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Makefile-CONFIG_SHELL-fix-for-builddeb-packaging.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Move-sun50i-h6-pwm-settings-to-its-own-overlay.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Optimize-TSC2007-touchscreen-add-polling-method.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Revert-drm-sun4i-hdmi-switch-to-struct-drm_edid.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Sound-for-H616-H618-Allwinner-SOCs.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/Temp_fix-mailbox-arch-arm64-boot-dts-allwinner-sun50i-a64-pinep.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/add-dtb-overlay-for-zero2w.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/add-initial-support-for-orangepi3-lts.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/add-nodes-for-sunxi-info-sunxi-addr-and-sunxi-dump-reg.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-arm64-dts-Add-leds-axp20x-charger.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-Add-sun8i-h2-plus-nanopi-duo-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-Add-sun8i-h2-plus-sunvell-r69-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-a10-cubiebord-a20-cubietruck-green-LED-mmc0-default-tri.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-a20-orangepi-and-mini-fix-phy-mode-hdmi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-h3-nanopi-neo-Add-regulator-leds-mmc2.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-h3-nanopi-neo-air-Add-regulator-camera-wifi-bluetooth-o.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-h3-orangepi-2-Add-regulator-vdd-cpu.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-overlay-Add-Overlays-for-sunxi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-overlay-sun8i-h3-cpu-clock-add-overclock.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun5i-a13-olinuxino-Add-panel-lcd-olinuxino-4.3-needed-.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun5i-a13-olinuxino-micro-add-panel-lcd-olinuxino-4.3.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-Disable-OOB-IRQ-for-brcm-wifi-on-Cubietruck-a.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-bananapro-add-AXP209-regulators.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-bananapro-add-hdmi-connector-de.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-cubietruck-add-alias-uart2.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-olimex-som-204-evb-olinuxino-micro-decrease-d.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-olinuxino-lime2-enable-audio-codec.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-olinuxino-lime2-enable-ldo3-always-on.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun7i-a20-olinuxino-micro-emmc-Add-vqmmc-node.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h2-plus-orangepi-zero-fix-usb_otg-dr_mode.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h2-plus-orangepi-zero-fix-xradio-interrupt.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h3-add-thermal-zones.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h3-bananapi-m2-plus-add-wifi_pwrseq.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h3-nanopi-add-leds-pio-pins.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h3-orangepi-pc-plus-add-wifi_pwrseq.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-h3-reduce-opp-microvolt-to-prevent-not-supported-.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-r40-add-clk_out_a-fix-bananam2ultra.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-r40-bananapi-m2-ultra-add-codec-analog.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun8i-v3s-s3-pinecube-enable-sound-codec.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun9i-a80-add-thermal-sensor.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sun9i-a80-add-thermal-zone.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sunxi-h3-h5.dtsi-add-i2s0-i2s1-pins.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-dts-sunxi-h3-h5.dtsi-force-mmc0-bus-width.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm-patch-call-flush_icache-ASAP-after-writing-new-instruction.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-allwinner-Add-sun50i-h618-bananapi-m4-berry-support.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-Add-sun50i-h5-nanopi-k1-plus-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-Add-sun50i-h5-nanopi-m1-plus2-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-Add-sun50i-h5-nanopi-neo-core2-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-Add-sun50i-h5-nanopi-neo2-v1.1-device.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-FIXME-a64-olinuxino-add-regulator-audio-mmc.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-add-sun50i-h618-cpu-dvfs.dtsi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-Add-axp313a.dtsi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-h6-Add-AC200-EPHY-nodes.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-h6-add-AC200-codec-nodes.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-h6-enable-AC200-codec.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-h6-tanix-enable-Ethernet.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-h616-orangepi-zero2-Enable-expansion-board-.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-overlay-Add-Overlays-for-sunxi64.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-sun50i-h6-Fix-H6-emmc.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-allwinner-sun50i-h616-Add-VPU-node.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-h616-8-Add-overlays-i2c-pwm-uart.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-h616-add-hdmi-support-for-zero2-and-zero3.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-h616-add-wifi-support-for-orange-pi-zero-2-and-zero3.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-nanopi-a64-set-right-phy-mode-to-rgmii-id.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-overlay-sun50i-a64-pine64-7inch-lcd.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-overlay-sun50i-h5-add-gpio-regulator-overclock.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-force-mmc0-bus-width.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-olinuxino-1Ge16GW-Disable-clock-phase-and-.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-olinuxino-1Ge16GW-enable-bluetooth.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-olinuxino-add-boards.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-olinuxino-emmc-enable-bluetooth.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-orangepi-win-add-aliase-ethernet1.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-pine64-add-spi0.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-pine64-enable-wifi-mmc1.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-sopine-baseboard-enable-Bluetooth.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64-sopine-baseboard-mmc1-status-okay.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-a64.dtsi-adjust-thermal-trip-points.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h313-x96q-lpddr3.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-add-cpu-opp-refs.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-add-termal-zones.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-enable-power-button-for-orangepi-prime.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-nanopi-neo2-add-regulator-led-triger.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-nanopi-r1s-h5-add-rtl8153-support.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-orangepi-pc2-add-spi-flash.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-orangepi-prime-add-regulator.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-orangepi-prime-add-rtl8723cs.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h5-orangepi-zero-plus-add-regulator.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-Add-r_uart-uart2-3-pins.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-orangepi-3-add-r_uart-aliase.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-orangepi-3-delete-node-spi0.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-orangepi-add-cpu-opp-refs.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-orangepi-enable-higher-clock-regulator-max-.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-orangepi-lite2-spi0-usb3phy-dwc3-enable.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-pine-h64-add-dwc3-usb3phy.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6-pine-h64-add-wifi-rtl8723cs.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6.dtsi-add-pinctrl-pins-for-spi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h6.dtsi-improve-thermals.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-add-pwm-nodes-support.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-bigtreetech-cb1-sd-emmc.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-orangepi-zero2-Enable-GPU-mali.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-orangepi-zero2-reg_usb1_vbus-status-ok.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-x96-mate-T95-eth-sd-card-hack.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616-x96-mate-add-hdmi.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h616.dtsi-reserved-memory-512K-for-BL31.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h618-orangepi-zero2w-Add-missing-nodes.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-dts-sun50i-h618-orangepi-zero3-Enable-GPU-mali.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/arm64-sun50i-h616-Add-i2c-2-3-4-uart-2-5-pins.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/cb1-overlay.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/clk-gate-add-support-for-regmap-based-gates.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/driver-allwinner-h618-emac.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drivers-devfreq-sun8i-a33-mbus-disable-autorefresh.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drivers-pwm-Add-pwm-sunxi-enhance-driver-for-h616.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-clocksource-arm_arch_timer-fix-a64-timejump.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-gpu-drm-gem-dma-Export-with-handle-allocator.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-gpu-drm-panel-simple-Add-compability-olinuxino-lcd.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-gpu-drm-sun4i-Add-GEM-allocator.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-gpu-drm-sun4i-Add-HDMI-audio-sun4i-hdmi-encoder.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-gpu-drm-sun4i-sun8i_mixer.c-add-h3-mixer1.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-iio-adc-axp20x_adc-arm64-dts-axp803-hwmon-enable-thermal.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-input-touchscreen-sun4i-ts-Enable-parsing.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-media-dvb-frontends-si2168-fix-cmd-timeout.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-mfd-axp20x-add-sysfs-interface.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-mmc-host-sunxi-mmc-Disable-DDR52-mode-on-all-A20-based-boar.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-mmc-host-sunxi-mmc-add-h5-emmc-compatible.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-mtd-nand-raw-nand_ids.c-add-H27UBG8T2BTR-BC-nand.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-net-stmmac-dwmac-sun8i-second-EMAC-clock-register.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-nvmem-sunxi_sid-Support-SID-on-H616.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-of-Device-Tree-Overlay-ConfigFS-interface.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-phy-sun4i-usb-Allow-reset-line-to-be-shared.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-pinctrl-pinctrl-sun50i-a64-disable_strict_mode.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-pinctrl-sunxi-pinctrl-sun50i-h6.c-GPIO-disable_strict_mode.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-soc-sunxi-sram-Add-SRAM-C1-H616-handling.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-spi-spi-sun4i.c-spi-bug-low-on-sck.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-spi-spidev-Add-armbian-spi-dev-compatible.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-staging-media-sunxi-cedrus-add-H616-variant.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-staging-rtl8723bs-AP-bugfix.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/drv-usb-gadget-composite-rename-gadget-serial-console-manufactu.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/enable-TV-Output-on-OrangePi-Zero-LTE.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/fix-cpu-opp-table-sun8i-a83t.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/h616-add-keys.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/include-uapi-drm_fourcc-add-ARM-tiled-format-modifier.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/mfd-Add-support-for-X-Powers-AC200-EPHY-syscon.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/mfd-Add-support-for-X-Powers-AC200.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/mmc-host-sunxi-mmc-Fix-H6-emmc.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/net-phy-Add-support-for-AC200-EPHY.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/net-usb-r8152-add-LED-configuration-from-OF.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/nvmem-sunxi_sid-add-sunxi_get_soc_chipid-sunxi_get_serial.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/scripts-add-overlay-compilation-support.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/sound-soc-sunxi-Provoke-the-early-load-of-sun8i-codec-analog.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/sound-soc-sunxi-sun4i-codec-adcis-select-capture-source.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/sound-soc-sunxi-sun8i-codec-analog-enable-sound.patch create mode 100644 patch/kernel/archive/sunxi-6.16/patches.armbian/sun50i-h616-Add-the-missing-digital-audio-node.patch create mode 100644 patch/kernel/archive/sunxi-6.16/series.armbian diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-Use-key-0-as-power-button.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-Use-key-0-as-power-button.patch new file mode 100644 index 000000000..efa313c94 --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-Use-key-0-as-power-button.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Gunjan Gupta +Date: Mon, 26 Jun 2023 13:29:46 +0000 +Subject: ARM: dts: sun8i: nanopiduo2: Use key-0 as power button + +The onboard button key-0 was not marked as power button. This meant +that once the board was suspended, there was no way to bring it back +to life. Mark key-0 as power button so that it can be used to bring +the board back to life +--- + arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts b/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts +index 111111111111..222222222222 100644 +--- a/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts ++++ b/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts +@@ -42,8 +42,9 @@ gpio-keys { + + key-0 { + label = "k1"; +- linux,code = ; ++ linux,code = ; + gpios = <&r_pio 0 3 GPIO_ACTIVE_LOW>; /* PL3 */ ++ wakeup-source; + }; + }; + +-- +Armbian + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-enable-ethernet.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-enable-ethernet.patch new file mode 100644 index 000000000..c60ef86c0 --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM-dts-sun8i-nanopiduo2-enable-ethernet.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Gunjan Gupta +Date: Mon, 26 Jun 2023 13:53:14 +0000 +Subject: ARM: dts: sun8i: nanopiduo2: enable ethernet + +NanoPi Duo2 has pinout for ethernet. Lets enable the same in dts +--- + arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts b/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts +index 111111111111..222222222222 100644 +--- a/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts ++++ b/arch/arm/boot/dts/allwinner/sun8i-h3-nanopi-duo2.dts +@@ -105,6 +105,13 @@ &ehci0 { + status = "okay"; + }; + ++&emac { ++ phy-handle = <&int_mii_phy>; ++ phy-mode = "mii"; ++ allwinner,leds-active-low; ++ status = "okay"; ++}; ++ + &mmc0 { + bus-width = <4>; + cd-gpios = <&pio 5 6 GPIO_ACTIVE_LOW>; /* PF6 */ +-- +Armbian + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-EMAC1.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-EMAC1.patch new file mode 100644 index 000000000..e4454c595 --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-EMAC1.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: JohnTheCoolingFan +Date: Thu, 13 Jun 2024 11:50:55 +0000 +Subject: ARM64: dts: sun50i-h616: BigTreeTech CB1: Enable EMAC1 + +Signed-off-by: JohnTheCoolingFan +--- + arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi | 18 ++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi +index e7af3a976b6c..dbf43ff63b8e 100644 +--- a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi ++++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi +@@ -154,6 +154,24 @@ &gpu { + status = "okay"; + }; + ++&emac1 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rmii_pins>; ++ phy-mode = "rmii"; ++ phy-handle = <&rmii_phy>; ++ phy-supply = <®_dldo1>; ++ allwinner,rx-delay-ps = <3100>; ++ allwinner,tx-delay-ps = <700>; ++ status = "okay"; ++}; ++ ++&mdio1 { ++ rmii_phy: ethernet-phy@1 { ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <1>; ++ }; ++}; ++ + &mmc0 { + vmmc-supply = <®_dldo1>; + broken-cd; +-- +Armbian + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-HDMI.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-HDMI.patch new file mode 100644 index 000000000..b83ff6b5e --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/ARM64-dts-sun50i-h616-BigTreeTech-CB1-Enable-HDMI.patch @@ -0,0 +1,57 @@ +From f3157390fffbb9dcc634e99d1d0e6728997d789b Mon Sep 17 00:00:00 2001 +From: JohnTheCoolingFan +Date: Thu, 13 Jun 2024 11:07:35 +0000 +Subject: ARM64: dts: sun50i-h616: BigTreeTech CB1: Enable HDMI + +Signed-off-by: JohnTheCoolingFan +--- + .../sun50i-h616-bigtreetech-cb1.dtsi | 26 +++++++++++++++++++ + 1 file changed, 26 insertions(+) + +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi +index 0168ff3d9972..e7af3a976b6c 100644 +--- a/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi ++++ b/arch/arm64/boot/dts/allwinner/sun50i-h616-bigtreetech-cb1.dtsi +@@ -26,6 +26,17 @@ chosen { + stdout-path = "serial0:115200n8"; + }; + ++ connector { ++ compatible = "hdmi-connector"; ++ type = "d"; ++ ++ port { ++ hdmi_con_in: endpoint { ++ remote-endpoint = <&hdmi_out_con>; ++ }; ++ }; ++ }; ++ + leds { + compatible = "gpio-leds"; + +@@ -267,6 +278,21 @@ reg_dldo1: dldo1 { + }; + }; + ++&de { ++ status = "okay"; ++}; ++ ++&hdmi { ++ hvcc-supply = <®_aldo1>; ++ status = "okay"; ++}; ++ ++&hdmi_out { ++ hdmi_out_con: endpoint { ++ remote-endpoint = <&hdmi_con_in>; ++ }; ++}; ++ + &cpu0 { + cpu-supply = <®_dcdc2>; + status = "okay"; +-- +2.51.0 + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/ASoC-AC200-Initial-driver.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/ASoC-AC200-Initial-driver.patch new file mode 100644 index 000000000..3676862eb --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/ASoC-AC200-Initial-driver.patch @@ -0,0 +1,842 @@ +From c1601a5d5088a43c4a92fcb3ea1f4529de6a584c Mon Sep 17 00:00:00 2001 +From: Jernej Skrabec +Date: Thu, 1 Sep 2022 17:36:53 +0200 +Subject: ASoC: AC200: Initial driver + +Signed-off-by: Jernej Skrabec +--- + sound/soc/codecs/Kconfig | 10 + + sound/soc/codecs/Makefile | 2 + + sound/soc/codecs/ac200.c | 772 ++++++++++++++++++++++++++++++++++++++ + 3 files changed, 784 insertions(+) + create mode 100644 sound/soc/codecs/ac200.c + +diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig +index 28ec636f5a7b..57b3d80cbf02 100644 +--- a/sound/soc/codecs/Kconfig ++++ b/sound/soc/codecs/Kconfig +@@ -16,6 +16,7 @@ config SND_SOC_ALL_CODECS + depends on COMPILE_TEST + imply SND_SOC_88PM860X + imply SND_SOC_AB8500_CODEC ++ imply SND_SOC_AC200_CODEC + imply SND_SOC_AC97_CODEC + imply SND_SOC_AD1836 + imply SND_SOC_AD193X_SPI +@@ -425,6 +426,15 @@ config SND_SOC_AB8500_CODEC + tristate + depends on ABX500_CORE + ++config SND_SOC_AC200_CODEC ++ tristate "AC200 Codec" ++ depends on MFD_AC200 ++ help ++ Enable support for X-Powers AC200 analog audio codec. ++ ++ To compile this driver as a module, choose M here: the module ++ will be called snd-soc-ac200. ++ + config SND_SOC_AC97_CODEC + tristate "Build generic ASoC AC97 CODEC driver" + select SND_AC97_CODEC +diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile +index e1923e1d283f..031ab53e43d1 100644 +--- a/sound/soc/codecs/Makefile ++++ b/sound/soc/codecs/Makefile +@@ -1,6 +1,7 @@ + # SPDX-License-Identifier: GPL-2.0 + snd-soc-88pm860x-y := 88pm860x-codec.o + snd-soc-ab8500-codec-y := ab8500-codec.o ++snd-soc-ac200-y := ac200.o + snd-soc-ac97-y := ac97.o + snd-soc-ad1836-y := ad1836.o + snd-soc-ad193x-y := ad193x.o +@@ -425,6 +426,7 @@ snd-soc-simple-mux-y := simple-mux.o + + obj-$(CONFIG_SND_SOC_88PM860X) += snd-soc-88pm860x.o + obj-$(CONFIG_SND_SOC_AB8500_CODEC) += snd-soc-ab8500-codec.o ++obj-$(CONFIG_SND_SOC_AC200_CODEC) += snd-soc-ac200.o + obj-$(CONFIG_SND_SOC_AC97_CODEC) += snd-soc-ac97.o + obj-$(CONFIG_SND_SOC_AD1836) += snd-soc-ad1836.o + obj-$(CONFIG_SND_SOC_AD193X) += snd-soc-ad193x.o +diff --git a/sound/soc/codecs/ac200.c b/sound/soc/codecs/ac200.c +new file mode 100644 +index 000000000000..662de230dc83 +--- /dev/null ++++ b/sound/soc/codecs/ac200.c +@@ -0,0 +1,772 @@ ++// SPDX-License-Identifier: GPL-2.0-or-later ++/* ++ * X-Powers AC200 Codec Driver ++ * ++ * Copyright (C) 2022 Jernej Skrabec ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define AC200_CODEC_RATES (SNDRV_PCM_RATE_8000 | \ ++ SNDRV_PCM_RATE_11025 | \ ++ SNDRV_PCM_RATE_16000 | \ ++ SNDRV_PCM_RATE_22050 | \ ++ SNDRV_PCM_RATE_32000 | \ ++ SNDRV_PCM_RATE_44100 | \ ++ SNDRV_PCM_RATE_48000 | \ ++ SNDRV_PCM_RATE_96000 | \ ++ SNDRV_PCM_RATE_192000 | \ ++ SNDRV_PCM_RATE_KNOT) ++ ++#define AC200_CODEC_FORMATS (SNDRV_PCM_FMTBIT_S8 | \ ++ SNDRV_PCM_FMTBIT_S16_LE | \ ++ SNDRV_PCM_FMTBIT_S20_LE | \ ++ SNDRV_PCM_FMTBIT_S24_LE | \ ++ SNDRV_PCM_FMTBIT_S32_LE) ++ ++#define AC200_SYS_AUDIO_CTL0 0x0010 ++#define AC200_SYS_AUDIO_CTL0_MCLK_GATING BIT(1) ++#define AC200_SYS_AUDIO_CTL0_RST_INVALID BIT(0) ++#define AC200_SYS_AUDIO_CTL1 0x0012 ++#define AC200_SYS_AUDIO_CTL1_I2S_IO_EN BIT(0) ++ ++#define AC200_SYS_CLK_CTL 0x2000 ++#define AC200_SYS_CLK_CTL_I2S 15 ++#define AC200_SYS_CLK_CTL_ADC 3 ++#define AC200_SYS_CLK_CTL_DAC 2 ++#define AC200_SYS_MOD_RST 0x2002 ++#define AC200_SYS_MOD_RST_I2S 15 ++#define AC200_SYS_MOD_RST_ADC 3 ++#define AC200_SYS_MOD_RST_DAC 2 ++#define AC200_SYS_SR_CTL 0x2004 ++#define AC200_SYS_SR_CTL_SR_MASK GENMASK(3, 0) ++#define AC200_SYS_SR_CTL_SR(x) (x) ++#define AC200_I2S_CTL 0x2100 ++#define AC200_I2S_CTL_SDO_EN 3 ++#define AC200_I2S_CTL_TX_EN 2 ++#define AC200_I2S_CTL_RX_EN 1 ++#define AC200_I2S_CTL_GEN 0 ++#define AC200_I2S_CLK 0x2102 ++#define AC200_I2S_CLK_BCLK_OUT BIT(15) ++#define AC200_I2S_CLK_LRCK_OUT BIT(14) ++#define AC200_I2S_CLK_BCLKDIV_MASK GENMASK(13, 10) ++#define AC200_I2S_CLK_BCLKDIV(x) ((x) << 10) ++#define AC200_I2S_CLK_LRCK_MASK GENMASK(9, 0) ++#define AC200_I2S_CLK_LRCK(x) ((x) - 1) ++#define AC200_I2S_FMT0 0x2104 ++#define AC200_I2S_FMT0_MODE_MASK GENMASK(15, 14) ++#define AC200_I2S_FMT0_MODE(x) ((x) << 14) ++#define AC200_I2S_FMT0_MODE_PCM 0 ++#define AC200_I2S_FMT0_MODE_LEFT 1 ++#define AC200_I2S_FMT0_MODE_RIGHT 2 ++#define AC200_I2S_FMT0_TX_OFFSET_MASK GENMASK(11, 10) ++#define AC200_I2S_FMT0_TX_OFFSET(x) ((x) << 10) ++#define AC200_I2S_FMT0_RX_OFFSET_MASK GENMASK(9, 8) ++#define AC200_I2S_FMT0_RX_OFFSET(x) ((x) << 8) ++#define AC200_I2S_FMT0_SR_MASK GENMASK(6, 4) ++#define AC200_I2S_FMT0_SR(x) ((x) << 4) ++#define AC200_I2S_FMT0_SW_MASK GENMASK(3, 1) ++#define AC200_I2S_FMT0_SW(x) ((x) << 1) ++#define AC200_I2S_FMT1 0x2108 ++#define AC200_I2S_FMT1_BCLK_POL_INVERT BIT(15) ++#define AC200_I2S_FMT1_LRCK_POL_INVERT BIT(14) ++#define AC200_I2S_MIX_SRC 0x2114 ++#define AC200_I2S_MIX_SRC_LMIX_DAC 13 ++#define AC200_I2S_MIX_SRC_LMIX_ADC 12 ++#define AC200_I2S_MIX_SRC_RMIX_DAC 9 ++#define AC200_I2S_MIX_SRC_RMIX_ADC 8 ++#define AC200_I2S_MIX_GAIN 0x2116 ++#define AC200_I2S_MIX_GAIN_LMIX_DAC 13 ++#define AC200_I2S_MIX_GAIN_LMIX_ADC 12 ++#define AC200_I2S_MIX_GAIN_RMIX_DAC 9 ++#define AC200_I2S_MIX_GAIN_RMIX_ADC 8 ++#define AC200_I2S_DAC_VOL 0x2118 ++#define AC200_I2S_DAC_VOL_LEFT 8 ++#define AC200_I2S_DAC_VOL_RIGHT 0 ++#define AC200_I2S_ADC_VOL 0x211A ++#define AC200_I2S_ADC_VOL_LEFT 8 ++#define AC200_I2S_ADC_VOL_RIGHT 0 ++#define AC200_DAC_CTL 0x2200 ++#define AC200_DAC_CTL_DAC_EN 15 ++#define AC200_DAC_MIX_SRC 0x2202 ++#define AC200_DAC_MIX_SRC_LMIX_DAC 13 ++#define AC200_DAC_MIX_SRC_LMIX_ADC 12 ++#define AC200_DAC_MIX_SRC_RMIX_DAC 9 ++#define AC200_DAC_MIX_SRC_RMIX_ADC 8 ++#define AC200_DAC_MIX_GAIN 0x2204 ++#define AC200_DAC_MIX_GAIN_LMIX_DAC 13 ++#define AC200_DAC_MIX_GAIN_LMIX_ADC 12 ++#define AC200_DAC_MIX_GAIN_RMIX_DAC 9 ++#define AC200_DAC_MIX_GAIN_RMIX_ADC 8 ++#define AC200_OUT_MIX_CTL 0x2220 ++#define AC200_OUT_MIX_CTL_RDAC_EN 15 ++#define AC200_OUT_MIX_CTL_LDAC_EN 14 ++#define AC200_OUT_MIX_CTL_RMIX_EN 13 ++#define AC200_OUT_MIX_CTL_LMIX_EN 12 ++#define AC200_OUT_MIX_CTL_MIC1_VOL 4 ++#define AC200_OUT_MIX_CTL_MIC2_VOL 0 ++#define AC200_OUT_MIX_SRC 0x2222 ++#define AC200_OUT_MIX_SRC_RMIX_MIC1 14 ++#define AC200_OUT_MIX_SRC_RMIX_MIC2 13 ++#define AC200_OUT_MIX_SRC_RMIX_RDAC 9 ++#define AC200_OUT_MIX_SRC_RMIX_LDAC 8 ++#define AC200_OUT_MIX_SRC_LMIX_MIC1 6 ++#define AC200_OUT_MIX_SRC_LMIX_MIC2 5 ++#define AC200_OUT_MIX_SRC_LMIX_RDAC 1 ++#define AC200_OUT_MIX_SRC_LMIX_LDAC 0 ++#define AC200_LINEOUT_CTL 0x2224 ++#define AC200_LINEOUT_CTL_EN 15 ++#define AC200_LINEOUT_CTL_LEN 14 ++#define AC200_LINEOUT_CTL_REN 13 ++#define AC200_LINEOUT_CTL_LMONO 12 ++#define AC200_LINEOUT_CTL_RMONO 11 ++#define AC200_LINEOUT_CTL_VOL 0 ++#define AC200_ADC_CTL 0x2300 ++#define AC200_ADC_CTL_ADC_EN 15 ++#define AC200_MBIAS_CTL 0x2310 ++#define AC200_MBIAS_CTL_MBIAS_EN 15 ++#define AC200_MBIAS_CTL_ADDA_BIAS_EN 3 ++#define AC200_ADC_MIC_CTL 0x2320 ++#define AC200_ADC_MIC_CTL_RADC_EN 15 ++#define AC200_ADC_MIC_CTL_LADC_EN 14 ++#define AC200_ADC_MIC_CTL_ADC_VOL 8 ++#define AC200_ADC_MIC_CTL_MIC1_GAIN_EN 7 ++#define AC200_ADC_MIC_CTL_MIC1_BOOST 4 ++#define AC200_ADC_MIC_CTL_MIC2_GAIN_EN 3 ++#define AC200_ADC_MIC_CTL_MIC2_BOOST 0 ++#define AC200_ADC_MIX_SRC 0x2322 ++#define AC200_ADC_MIX_SRC_RMIX_MIC1 14 ++#define AC200_ADC_MIX_SRC_RMIX_MIC2 13 ++#define AC200_ADC_MIX_SRC_RMIX_RMIX 9 ++#define AC200_ADC_MIX_SRC_RMIX_LMIX 8 ++#define AC200_ADC_MIX_SRC_LMIX_MIC1 6 ++#define AC200_ADC_MIX_SRC_LMIX_MIC2 5 ++#define AC200_ADC_MIX_SRC_LMIX_LMIX 1 ++#define AC200_ADC_MIX_SRC_LMIX_RMIX 0 ++ ++struct ac200_codec { ++ struct regmap *regmap; ++ unsigned int format; ++}; ++ ++struct ac200_map { ++ int match; ++ int value; ++}; ++ ++static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(mixer_scale, -600, 600, 0); ++static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(gain_scale, -450, 150, 0); ++static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(lineout_scale, -4650, 150, 1); ++static const SNDRV_CTL_TLVD_DECLARE_DB_SCALE(codec_scale, -12000, 75, 1); ++static const unsigned int mic_scale[] = { ++ TLV_DB_RANGE_HEAD(2), ++ 0, 0, TLV_DB_SCALE_ITEM(0, 0, 0), ++ 1, 7, TLV_DB_SCALE_ITEM(2400, 300, 0), ++}; ++ ++static const struct snd_kcontrol_new ac200_codec_controls[] = { ++ SOC_DOUBLE_TLV("Master Playback Volume", AC200_I2S_DAC_VOL, ++ AC200_I2S_DAC_VOL_LEFT, AC200_I2S_DAC_VOL_RIGHT, ++ 0xff, 0, codec_scale), ++ SOC_DOUBLE_TLV("Master Capture Volume", AC200_I2S_ADC_VOL, ++ AC200_I2S_ADC_VOL_LEFT, AC200_I2S_ADC_VOL_RIGHT, ++ 0xff, 0, codec_scale), ++ SOC_DOUBLE_TLV("I2S ADC Capture Volume", AC200_I2S_MIX_GAIN, ++ AC200_I2S_MIX_GAIN_LMIX_ADC, AC200_I2S_MIX_GAIN_RMIX_ADC, ++ 0x1, 1, mixer_scale), ++ SOC_DOUBLE_TLV("I2S DAC Capture Volume", AC200_I2S_MIX_GAIN, ++ AC200_I2S_MIX_GAIN_LMIX_DAC, AC200_I2S_MIX_GAIN_RMIX_DAC, ++ 0x1, 1, mixer_scale), ++ SOC_DOUBLE_TLV("DAC I2S Playback Volume", AC200_DAC_MIX_GAIN, ++ AC200_DAC_MIX_GAIN_LMIX_DAC, AC200_DAC_MIX_GAIN_RMIX_DAC, ++ 0x1, 1, mixer_scale), ++ SOC_DOUBLE_TLV("ADC Playback Volume", AC200_DAC_MIX_GAIN, ++ AC200_DAC_MIX_GAIN_LMIX_ADC, AC200_DAC_MIX_GAIN_RMIX_ADC, ++ 0x1, 1, mixer_scale), ++ SOC_SINGLE_TLV("MIC1 Playback Volume", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_MIC1_VOL, 0x7, 0, gain_scale), ++ SOC_SINGLE_TLV("MIC2 Playback Volume", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_MIC2_VOL, 0x7, 0, gain_scale), ++ SOC_SINGLE_TLV("ADC Volume", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_ADC_VOL, 0x07, 0, gain_scale), ++ SOC_SINGLE_TLV("Line Out Playback Volume", AC200_LINEOUT_CTL, ++ AC200_LINEOUT_CTL_VOL, 0x1f, 0, lineout_scale), ++ SOC_SINGLE_TLV("MIC1 Boost Volume", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_MIC1_BOOST, 0x07, 0, mic_scale), ++ SOC_SINGLE_TLV("MIC2 Boost Volume", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_MIC2_BOOST, 0x07, 0, mic_scale), ++ SOC_DOUBLE("Line Out Playback Switch", AC200_LINEOUT_CTL, ++ AC200_LINEOUT_CTL_LEN, AC200_LINEOUT_CTL_REN, 1, 0), ++}; ++ ++static const struct snd_kcontrol_new i2s_mixer[] = { ++ SOC_DAPM_DOUBLE("I2S DAC Capture Switch", AC200_I2S_MIX_SRC, ++ AC200_I2S_MIX_SRC_LMIX_DAC, ++ AC200_I2S_MIX_SRC_RMIX_DAC, 1, 0), ++ SOC_DAPM_DOUBLE("I2S ADC Capture Switch", AC200_I2S_MIX_SRC, ++ AC200_I2S_MIX_SRC_LMIX_ADC, ++ AC200_I2S_MIX_SRC_RMIX_ADC, 1, 0), ++}; ++ ++static const struct snd_kcontrol_new dac_mixer[] = { ++ SOC_DAPM_DOUBLE("DAC I2S Playback Switch", AC200_DAC_MIX_SRC, ++ AC200_DAC_MIX_SRC_LMIX_DAC, ++ AC200_DAC_MIX_SRC_RMIX_DAC, 1, 0), ++ SOC_DAPM_DOUBLE("ADC Playback Switch", AC200_DAC_MIX_SRC, ++ AC200_DAC_MIX_SRC_LMIX_ADC, ++ AC200_DAC_MIX_SRC_RMIX_ADC, 1, 0), ++}; ++ ++static const struct snd_kcontrol_new output_mixer[] = { ++ SOC_DAPM_DOUBLE("MIC1 Playback Switch", AC200_OUT_MIX_SRC, ++ AC200_OUT_MIX_SRC_LMIX_MIC1, ++ AC200_OUT_MIX_SRC_RMIX_MIC1, 1, 0), ++ SOC_DAPM_DOUBLE("MIC2 Playback Switch", AC200_OUT_MIX_SRC, ++ AC200_OUT_MIX_SRC_LMIX_MIC2, ++ AC200_OUT_MIX_SRC_RMIX_MIC2, 1, 0), ++ SOC_DAPM_DOUBLE("DAC Playback Switch", AC200_OUT_MIX_SRC, ++ AC200_OUT_MIX_SRC_LMIX_LDAC, ++ AC200_OUT_MIX_SRC_RMIX_RDAC, 1, 0), ++ SOC_DAPM_DOUBLE("DAC Reversed Playback Switch", AC200_OUT_MIX_SRC, ++ AC200_OUT_MIX_SRC_LMIX_RDAC, ++ AC200_OUT_MIX_SRC_RMIX_LDAC, 1, 0), ++}; ++ ++static const struct snd_kcontrol_new input_mixer[] = { ++ SOC_DAPM_DOUBLE("MIC1 Capture Switch", AC200_ADC_MIX_SRC, ++ AC200_ADC_MIX_SRC_LMIX_MIC1, ++ AC200_ADC_MIX_SRC_RMIX_MIC1, 1, 0), ++ SOC_DAPM_DOUBLE("MIC2 Capture Switch", AC200_ADC_MIX_SRC, ++ AC200_ADC_MIX_SRC_LMIX_MIC2, ++ AC200_ADC_MIX_SRC_RMIX_MIC2, 1, 0), ++ SOC_DAPM_DOUBLE("Output Mixer Capture Switch", AC200_ADC_MIX_SRC, ++ AC200_ADC_MIX_SRC_LMIX_LMIX, ++ AC200_ADC_MIX_SRC_RMIX_RMIX, 1, 0), ++ SOC_DAPM_DOUBLE("Output Mixer Reverse Capture Switch", ++ AC200_ADC_MIX_SRC, ++ AC200_ADC_MIX_SRC_LMIX_RMIX, ++ AC200_ADC_MIX_SRC_RMIX_LMIX, 1, 0), ++}; ++ ++const char * const lineout_mux_enum_text[] = { ++ "Stereo", "Mono", ++}; ++ ++static SOC_ENUM_DOUBLE_DECL(lineout_mux_enum, AC200_LINEOUT_CTL, ++ AC200_LINEOUT_CTL_LMONO, AC200_LINEOUT_CTL_RMONO, ++ lineout_mux_enum_text); ++ ++static const struct snd_kcontrol_new lineout_mux = ++ SOC_DAPM_ENUM("Line Out Source Playback Route", lineout_mux_enum); ++ ++static const struct snd_soc_dapm_widget ac200_codec_dapm_widgets[] = { ++ /* Regulator */ ++ SND_SOC_DAPM_REGULATOR_SUPPLY("avcc", 0, 0), ++ ++ /* System clocks */ ++ SND_SOC_DAPM_SUPPLY("CLK SYS I2S", AC200_SYS_CLK_CTL, ++ AC200_SYS_CLK_CTL_I2S, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("CLK SYS DAC", AC200_SYS_CLK_CTL, ++ AC200_SYS_CLK_CTL_DAC, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("CLK SYS ADC", AC200_SYS_CLK_CTL, ++ AC200_SYS_CLK_CTL_ADC, 0, NULL, 0), ++ ++ /* Module resets */ ++ SND_SOC_DAPM_SUPPLY("RST SYS I2S", AC200_SYS_MOD_RST, ++ AC200_SYS_MOD_RST_I2S, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("RST SYS DAC", AC200_SYS_MOD_RST, ++ AC200_SYS_MOD_RST_DAC, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("RST SYS ADC", AC200_SYS_MOD_RST, ++ AC200_SYS_MOD_RST_DAC, 0, NULL, 0), ++ ++ /* I2S gates */ ++ SND_SOC_DAPM_SUPPLY("CLK I2S GEN", AC200_I2S_CTL, ++ AC200_I2S_CTL_GEN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("CLK I2S SDO", AC200_I2S_CTL, ++ AC200_I2S_CTL_SDO_EN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("CLK I2S TX", AC200_I2S_CTL, ++ AC200_I2S_CTL_TX_EN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("CLK I2S RX", AC200_I2S_CTL, ++ AC200_I2S_CTL_RX_EN, 0, NULL, 0), ++ ++ /* Module supplies */ ++ SND_SOC_DAPM_SUPPLY("ADC Enable", AC200_ADC_CTL, ++ AC200_ADC_CTL_ADC_EN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("DAC Enable", AC200_DAC_CTL, ++ AC200_DAC_CTL_DAC_EN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("Line Out Enable", AC200_LINEOUT_CTL, ++ AC200_LINEOUT_CTL_EN, 0, NULL, 0), ++ ++ /* Bias */ ++ SND_SOC_DAPM_SUPPLY("MIC Bias", AC200_MBIAS_CTL, ++ AC200_MBIAS_CTL_MBIAS_EN, 0, NULL, 0), ++ SND_SOC_DAPM_SUPPLY("ADDA Bias", AC200_MBIAS_CTL, ++ AC200_MBIAS_CTL_ADDA_BIAS_EN, 0, NULL, 0), ++ ++ /* DAC */ ++ SND_SOC_DAPM_DAC("Left DAC", "Playback", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_LDAC_EN, 0), ++ SND_SOC_DAPM_DAC("Right DAC", "Playback", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_RDAC_EN, 0), ++ ++ /* ADC */ ++ SND_SOC_DAPM_ADC("Left ADC", "Capture", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_LADC_EN, 0), ++ SND_SOC_DAPM_ADC("Right ADC", "Capture", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_RADC_EN, 0), ++ ++ /* Mixers */ ++ SND_SOC_DAPM_MIXER("Left Output Mixer", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_LMIX_EN, 0, ++ output_mixer, ARRAY_SIZE(output_mixer)), ++ SND_SOC_DAPM_MIXER("Right Output Mixer", AC200_OUT_MIX_CTL, ++ AC200_OUT_MIX_CTL_RMIX_EN, 0, ++ output_mixer, ARRAY_SIZE(output_mixer)), ++ ++ SND_SOC_DAPM_MIXER("Left Input Mixer", SND_SOC_NOPM, 0, 0, ++ input_mixer, ARRAY_SIZE(input_mixer)), ++ SND_SOC_DAPM_MIXER("Right Input Mixer", SND_SOC_NOPM, 0, 0, ++ input_mixer, ARRAY_SIZE(input_mixer)), ++ ++ SND_SOC_DAPM_MIXER("Left DAC Mixer", SND_SOC_NOPM, 0, 0, ++ dac_mixer, ARRAY_SIZE(dac_mixer)), ++ SND_SOC_DAPM_MIXER("Right DAC Mixer", SND_SOC_NOPM, 0, 0, ++ dac_mixer, ARRAY_SIZE(dac_mixer)), ++ ++ SND_SOC_DAPM_MIXER("Left I2S Mixer", SND_SOC_NOPM, 0, 0, ++ i2s_mixer, ARRAY_SIZE(i2s_mixer)), ++ SND_SOC_DAPM_MIXER("Right I2S Mixer", SND_SOC_NOPM, 0, 0, ++ i2s_mixer, ARRAY_SIZE(i2s_mixer)), ++ ++ /* Muxes */ ++ SND_SOC_DAPM_MUX("Line Out Source Playback Route", ++ SND_SOC_NOPM, 0, 0, &lineout_mux), ++ ++ /* Gain/attenuation */ ++ SND_SOC_DAPM_PGA("MIC1 Amplifier", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_MIC1_GAIN_EN, 0, NULL, 0), ++ SND_SOC_DAPM_PGA("MIC2 Amplifier", AC200_ADC_MIC_CTL, ++ AC200_ADC_MIC_CTL_MIC2_GAIN_EN, 0, NULL, 0), ++ ++ /* Inputs */ ++ SND_SOC_DAPM_INPUT("MIC1"), ++ SND_SOC_DAPM_INPUT("MIC2"), ++ ++ /* Outputs */ ++ SND_SOC_DAPM_OUTPUT("LINEOUT"), ++}; ++ ++static const struct snd_soc_dapm_route ac200_codec_dapm_routes[] = { ++ { "RST SYS I2S", NULL, "CLK SYS I2S" }, ++ { "RST SYS ADC", NULL, "CLK SYS ADC" }, ++ { "RST SYS DAC", NULL, "CLK SYS DAC" }, ++ ++ { "CLK I2S GEN", NULL, "RST SYS I2S" }, ++ { "CLK I2S SDO", NULL, "CLK I2S GEN" }, ++ { "CLK I2S TX", NULL, "CLK I2S SDO" }, ++ { "CLK I2S RX", NULL, "CLK I2S SDO" }, ++ ++ { "ADC Enable", NULL, "RST SYS ADC" }, ++ { "ADC Enable", NULL, "ADDA Bias" }, ++ { "ADC Enable", NULL, "avcc" }, ++ { "DAC Enable", NULL, "RST SYS DAC" }, ++ { "DAC Enable", NULL, "ADDA Bias" }, ++ { "DAC Enable", NULL, "avcc" }, ++ ++ { "Left DAC", NULL, "DAC Enable" }, ++ { "Left DAC", NULL, "CLK I2S RX" }, ++ { "Right DAC", NULL, "DAC Enable" }, ++ { "Right DAC", NULL, "CLK I2S RX" }, ++ ++ { "Left ADC", NULL, "ADC Enable" }, ++ { "Left ADC", NULL, "CLK I2S TX" }, ++ { "Right ADC", NULL, "ADC Enable" }, ++ { "Right ADC", NULL, "CLK I2S TX" }, ++ ++ { "Left Output Mixer", "MIC1 Playback Switch", "MIC1 Amplifier" }, ++ { "Left Output Mixer", "MIC2 Playback Switch", "MIC2 Amplifier" }, ++ { "Left Output Mixer", "DAC Playback Switch", "Left DAC Mixer" }, ++ { "Left Output Mixer", "DAC Reversed Playback Switch", "Right DAC Mixer" }, ++ ++ { "Right Output Mixer", "MIC1 Playback Switch", "MIC1 Amplifier" }, ++ { "Right Output Mixer", "MIC2 Playback Switch", "MIC2 Amplifier" }, ++ { "Right Output Mixer", "DAC Playback Switch", "Right DAC Mixer" }, ++ { "Right Output Mixer", "DAC Reversed Playback Switch", "Left DAC Mixer" }, ++ ++ { "Left Input Mixer", "MIC1 Capture Switch", "MIC1 Amplifier" }, ++ { "Left Input Mixer", "MIC2 Capture Switch", "MIC2 Amplifier" }, ++ { "Left Input Mixer", "Output Mixer Capture Switch", "Left Output Mixer" }, ++ { "Left Input Mixer", "Output Mixer Reverse Capture Switch", "Right Output Mixer" }, ++ ++ { "Right Input Mixer", "MIC1 Capture Switch", "MIC1 Amplifier" }, ++ { "Right Input Mixer", "MIC2 Capture Switch", "MIC2 Amplifier" }, ++ { "Right Input Mixer", "Output Mixer Capture Switch", "Right Output Mixer" }, ++ { "Right Input Mixer", "Output Mixer Reverse Capture Switch", "Left Output Mixer" }, ++ ++ { "Left I2S Mixer", "I2S DAC Capture Switch", "Left DAC" }, ++ { "Left I2S Mixer", "I2S ADC Capture Switch", "Left Input Mixer" }, ++ { "Right I2S Mixer", "I2S DAC Capture Switch", "Right DAC" }, ++ { "Right I2S Mixer", "I2S ADC Capture Switch", "Right Input Mixer" }, ++ ++ { "Left DAC Mixer", "DAC I2S Playback Switch", "Left DAC" }, ++ { "Left DAC Mixer", "ADC Playback Switch", "Left Input Mixer" }, ++ { "Right DAC Mixer", "DAC I2S Playback Switch", "Right DAC" }, ++ { "Right DAC Mixer", "ADC Playback Switch", "Right Input Mixer" }, ++ ++ { "Line Out Source Playback Route", "Stereo", "Left Output Mixer" }, ++ { "Line Out Source Playback Route", "Stereo", "Right Output Mixer" }, ++ { "Line Out Source Playback Route", "Mono", "Right Output Mixer" }, ++ { "Line Out Source Playback Route", "Mono", "Left Output Mixer" }, ++ ++ { "Left ADC", NULL, "Left I2S Mixer" }, ++ { "Right ADC", NULL, "Right I2S Mixer" }, ++ ++ { "LINEOUT", NULL, "Line Out Enable", }, ++ { "LINEOUT", NULL, "Line Out Source Playback Route" }, ++ ++ { "MIC1", NULL, "MIC Bias" }, ++ { "MIC2", NULL, "MIC Bias" }, ++ { "MIC1 Amplifier", NULL, "MIC1" }, ++ { "MIC2 Amplifier", NULL, "MIC2" }, ++}; ++ ++static int ac200_get_sr_sw(unsigned int width) ++{ ++ switch (width) { ++ case 8: ++ return 1; ++ case 12: ++ return 2; ++ case 16: ++ return 3; ++ case 20: ++ return 4; ++ case 24: ++ return 5; ++ case 28: ++ return 6; ++ case 32: ++ return 7; ++ } ++ ++ return -EINVAL; ++} ++ ++static const struct ac200_map ac200_bclk_div_map[] = { ++ { .match = 1, .value = 1 }, ++ { .match = 2, .value = 2 }, ++ { .match = 4, .value = 3 }, ++ { .match = 6, .value = 4 }, ++ { .match = 8, .value = 5 }, ++ { .match = 12, .value = 6 }, ++ { .match = 16, .value = 7 }, ++ { .match = 24, .value = 8 }, ++ { .match = 32, .value = 9 }, ++ { .match = 48, .value = 10 }, ++ { .match = 64, .value = 11 }, ++ { .match = 96, .value = 12 }, ++ { .match = 128, .value = 13 }, ++ { .match = 176, .value = 14 }, ++ { .match = 192, .value = 15 }, ++}; ++ ++static int ac200_get_bclk_div(unsigned int sample_rate, unsigned int period) ++{ ++ unsigned int sysclk_rate = (sample_rate % 4000) ? 22579200 : 24576000; ++ unsigned int div = sysclk_rate / sample_rate / period; ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(ac200_bclk_div_map); i++) { ++ const struct ac200_map *bdiv = &ac200_bclk_div_map[i]; ++ ++ if (bdiv->match == div) ++ return bdiv->value; ++ } ++ ++ return -EINVAL; ++} ++ ++static const struct ac200_map ac200_ssr_map[] = { ++ { .match = 8000, .value = 0 }, ++ { .match = 11025, .value = 1 }, ++ { .match = 12000, .value = 2 }, ++ { .match = 16000, .value = 3 }, ++ { .match = 22050, .value = 4 }, ++ { .match = 24000, .value = 5 }, ++ { .match = 32000, .value = 6 }, ++ { .match = 44100, .value = 7 }, ++ { .match = 48000, .value = 8 }, ++ { .match = 96000, .value = 9 }, ++ { .match = 192000, .value = 10 }, ++}; ++ ++static int ac200_get_ssr(unsigned int sample_rate) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(ac200_ssr_map); i++) { ++ const struct ac200_map *ssr = &ac200_ssr_map[i]; ++ ++ if (ssr->match == sample_rate) ++ return ssr->value; ++ } ++ ++ return -EINVAL; ++} ++ ++static int ac200_codec_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params, ++ struct snd_soc_dai *dai) ++{ ++ struct ac200_codec *priv = snd_soc_dai_get_drvdata(dai); ++ unsigned int slot_width = params_physical_width(params); ++ unsigned int sample_rate = params_rate(params); ++ int sr, period, sw, bclkdiv, ssr; ++ ++ sr = ac200_get_sr_sw(params_width(params)); ++ if (sr < 0) ++ return sr; ++ ++ sw = ac200_get_sr_sw(slot_width); ++ if (sw < 0) ++ return sw; ++ ++ regmap_update_bits(priv->regmap, AC200_I2S_FMT0, ++ AC200_I2S_FMT0_SR_MASK | ++ AC200_I2S_FMT0_SW_MASK, ++ AC200_I2S_FMT0_SR(sr) | ++ AC200_I2S_FMT0_SW(sw)); ++ ++ switch (priv->format & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_I2S: ++ case SND_SOC_DAIFMT_RIGHT_J: ++ case SND_SOC_DAIFMT_LEFT_J: ++ period = slot_width; ++ break; ++ case SND_SOC_DAIFMT_DSP_A: ++ case SND_SOC_DAIFMT_DSP_B: ++ period = slot_width * 2; ++ break; ++ } ++ ++ bclkdiv = ac200_get_bclk_div(sample_rate, period); ++ if (bclkdiv < 0) ++ return bclkdiv; ++ ++ regmap_update_bits(priv->regmap, AC200_I2S_CLK, ++ AC200_I2S_CLK_LRCK_MASK | ++ AC200_I2S_CLK_BCLKDIV_MASK, ++ AC200_I2S_CLK_LRCK(period) | ++ AC200_I2S_CLK_BCLKDIV(bclkdiv)); ++ ++ ssr = ac200_get_ssr(sample_rate); ++ if (ssr < 0) ++ return ssr; ++ ++ regmap_update_bits(priv->regmap, AC200_SYS_SR_CTL, ++ AC200_SYS_SR_CTL_SR_MASK, ++ AC200_SYS_SR_CTL_SR(ssr)); ++ ++ return 0; ++} ++ ++static int ac200_codec_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) ++{ ++ struct ac200_codec *priv = snd_soc_dai_get_drvdata(dai); ++ unsigned long offset, mode, value; ++ ++ priv->format = fmt; ++ ++ switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) { ++ case SND_SOC_DAIFMT_CBP_CFP: ++ value = AC200_I2S_CLK_BCLK_OUT | AC200_I2S_CLK_LRCK_OUT; ++ break; ++ case SND_SOC_DAIFMT_CBC_CFP: ++ value = AC200_I2S_CLK_LRCK_OUT; ++ break; ++ case SND_SOC_DAIFMT_CBP_CFC: ++ value = AC200_I2S_CLK_BCLK_OUT; ++ break; ++ case SND_SOC_DAIFMT_CBC_CFC: ++ value = 0; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ regmap_update_bits(priv->regmap, AC200_I2S_CLK, ++ AC200_I2S_CLK_BCLK_OUT | ++ AC200_I2S_CLK_LRCK_OUT, value); ++ ++ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { ++ case SND_SOC_DAIFMT_I2S: ++ mode = AC200_I2S_FMT0_MODE_LEFT; ++ offset = 1; ++ break; ++ case SND_SOC_DAIFMT_RIGHT_J: ++ mode = AC200_I2S_FMT0_MODE_RIGHT; ++ offset = 0; ++ break; ++ case SND_SOC_DAIFMT_LEFT_J: ++ mode = AC200_I2S_FMT0_MODE_LEFT; ++ offset = 0; ++ break; ++ case SND_SOC_DAIFMT_DSP_A: ++ mode = AC200_I2S_FMT0_MODE_PCM; ++ offset = 1; ++ break; ++ case SND_SOC_DAIFMT_DSP_B: ++ mode = AC200_I2S_FMT0_MODE_PCM; ++ offset = 0; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ regmap_update_bits(priv->regmap, AC200_I2S_FMT0, ++ AC200_I2S_FMT0_MODE_MASK | ++ AC200_I2S_FMT0_TX_OFFSET_MASK | ++ AC200_I2S_FMT0_RX_OFFSET_MASK, ++ AC200_I2S_FMT0_MODE(mode) | ++ AC200_I2S_FMT0_TX_OFFSET(offset) | ++ AC200_I2S_FMT0_RX_OFFSET(offset)); ++ ++ switch (fmt & SND_SOC_DAIFMT_INV_MASK) { ++ case SND_SOC_DAIFMT_NB_NF: ++ value = 0; ++ break; ++ case SND_SOC_DAIFMT_NB_IF: ++ value = AC200_I2S_FMT1_LRCK_POL_INVERT; ++ break; ++ case SND_SOC_DAIFMT_IB_NF: ++ value = AC200_I2S_FMT1_BCLK_POL_INVERT; ++ break; ++ case SND_SOC_DAIFMT_IB_IF: ++ value = AC200_I2S_FMT1_BCLK_POL_INVERT | ++ AC200_I2S_FMT1_LRCK_POL_INVERT; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ regmap_update_bits(priv->regmap, AC200_I2S_FMT1, ++ AC200_I2S_FMT1_BCLK_POL_INVERT | ++ AC200_I2S_FMT1_LRCK_POL_INVERT, value); ++ ++ ++ return 0; ++} ++ ++static const struct snd_soc_dai_ops ac200_codec_dai_ops = { ++ .hw_params = ac200_codec_hw_params, ++ .set_fmt = ac200_codec_set_fmt, ++}; ++ ++static struct snd_soc_dai_driver ac200_codec_dai = { ++ .name = "ac200-dai", ++ .playback = { ++ .stream_name = "Playback", ++ .channels_min = 2, ++ .channels_max = 2, ++ .rates = AC200_CODEC_RATES, ++ .formats = AC200_CODEC_FORMATS, ++ }, ++ .capture = { ++ .stream_name = "Capture", ++ .channels_min = 1, ++ .channels_max = 2, ++ .rates = AC200_CODEC_RATES, ++ .formats = AC200_CODEC_FORMATS, ++ }, ++ .ops = &ac200_codec_dai_ops, ++ .symmetric_rate = 1, ++ .symmetric_sample_bits = 1, ++}; ++ ++static int ac200_codec_component_probe(struct snd_soc_component *component) ++{ ++ struct ac200_codec *priv = snd_soc_component_get_drvdata(component); ++ ++ snd_soc_component_init_regmap(component, priv->regmap); ++ ++ return 0; ++} ++ ++static struct snd_soc_component_driver ac200_soc_component = { ++ .controls = ac200_codec_controls, ++ .num_controls = ARRAY_SIZE(ac200_codec_controls), ++ .dapm_widgets = ac200_codec_dapm_widgets, ++ .num_dapm_widgets = ARRAY_SIZE(ac200_codec_dapm_widgets), ++ .dapm_routes = ac200_codec_dapm_routes, ++ .num_dapm_routes = ARRAY_SIZE(ac200_codec_dapm_routes), ++ .probe = ac200_codec_component_probe, ++}; ++ ++static int ac200_codec_probe(struct platform_device *pdev) ++{ ++ struct ac200_codec *priv; ++ int ret; ++ ++ priv = devm_kzalloc(&pdev->dev, sizeof(struct ac200_codec), GFP_KERNEL); ++ if (!priv) ++ return -ENOMEM; ++ ++ priv->regmap = dev_get_regmap(pdev->dev.parent, NULL); ++ if (!priv->regmap) ++ return -EPROBE_DEFER; ++ ++ platform_set_drvdata(pdev, priv); ++ ++ ret = regmap_write(priv->regmap, AC200_SYS_AUDIO_CTL0, ++ AC200_SYS_AUDIO_CTL0_RST_INVALID | ++ AC200_SYS_AUDIO_CTL0_MCLK_GATING); ++ if (ret) ++ return ret; ++ ++ ret = regmap_write(priv->regmap, AC200_SYS_AUDIO_CTL1, ++ AC200_SYS_AUDIO_CTL1_I2S_IO_EN); ++ if (ret) ++ return ret; ++ ++ ret = devm_snd_soc_register_component(&pdev->dev, &ac200_soc_component, ++ &ac200_codec_dai, 1); ++ ++ if (ret) ++ dev_err(&pdev->dev, "Failed to register codec: %d\n", ret); ++ ++ return ret; ++} ++ ++static void ac200_codec_remove(struct platform_device *pdev) ++{ ++ struct ac200_codec *priv = dev_get_drvdata(&pdev->dev); ++ ++ regmap_write(priv->regmap, AC200_SYS_AUDIO_CTL0, 0); ++ regmap_write(priv->regmap, AC200_SYS_AUDIO_CTL1, 0); ++} ++ ++static const struct of_device_id ac200_codec_match[] = { ++ { .compatible = "x-powers,ac200-codec" }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, ac200_codec_match); ++ ++static struct platform_driver ac200_codec_driver = { ++ .driver = { ++ .name = "ac200-codec", ++ .of_match_table = ac200_codec_match, ++ }, ++ .probe = ac200_codec_probe, ++ .remove = ac200_codec_remove, ++}; ++module_platform_driver(ac200_codec_driver); ++ ++MODULE_DESCRIPTION("X-Powers AC200 Codec Driver"); ++MODULE_AUTHOR("Jernej Skrabec "); ++MODULE_LICENSE("GPL"); +-- +2.51.0 + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-overlays.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-overlays.patch new file mode 100644 index 000000000..00642052e --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-overlays.patch @@ -0,0 +1,377 @@ +From 43a7177563683a1e7d192138f65073d687ed068b Mon Sep 17 00:00:00 2001 +From: Patrick Yavitz +Date: Tue, 7 Jan 2025 06:39:30 -0500 +Subject: Add BananaPi BPI-M4-Zero overlays + +Signed-off-by: Patrick Yavitz +--- + .../arm64/boot/dts/allwinner/overlay/Makefile | 13 ++++++ + ...sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtso | 13 ++++++ + ...sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtso | 13 ++++++ + .../sun50i-h616-bananapi-m4-pg-6-7-uart1.dtso | 13 ++++++ + ...h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtso | 16 +++++++ + .../sun50i-h616-bananapi-m4-ph-2-3-uart5.dtso | 13 ++++++ + ...un50i-h616-bananapi-m4-pi-13-14-uart4.dtso | 13 ++++++ + ...16-bananapi-m4-pi-15-16-rts-cts-uart4.dtso | 16 +++++++ + .../sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtso | 13 ++++++ + .../sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtso | 13 ++++++ + .../sun50i-h616-bananapi-m4-sdio-wifi-bt.dtso | 44 +++++++++++++++++++ + ...-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtso | 32 ++++++++++++++ + ...n50i-h616-bananapi-m4-spi1-cs0-spidev.dtso | 24 ++++++++++ + ...n50i-h616-bananapi-m4-spi1-cs1-spidev.dtso | 13 ++++++ + 14 files changed, 249 insertions(+) + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-6-7-uart1.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-ph-2-3-uart5.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-13-14-uart4.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-15-16-rts-cts-uart4.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-sdio-wifi-bt.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-spidev.dtso + create mode 100644 arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs1-spidev.dtso + +diff --git a/arch/arm64/boot/dts/allwinner/overlay/Makefile b/arch/arm64/boot/dts/allwinner/overlay/Makefile +index ccb89b5bf495..3e87d21c9d14 100644 +--- a/arch/arm64/boot/dts/allwinner/overlay/Makefile ++++ b/arch/arm64/boot/dts/allwinner/overlay/Makefile +@@ -49,6 +49,19 @@ dtb-$(CONFIG_ARCH_SUNXI) += \ + sun50i-h6-uart2.dtbo \ + sun50i-h6-uart3.dtbo \ + sun50i-h6-w1-gpio.dtbo \ ++ sun50i-h616-bananapi-m4-pg-6-7-uart1.dtbo \ ++ sun50i-h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtbo \ ++ sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtbo \ ++ sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtbo \ ++ sun50i-h616-bananapi-m4-ph-2-3-uart5.dtbo \ ++ sun50i-h616-bananapi-m4-pi-13-14-uart4.dtbo \ ++ sun50i-h616-bananapi-m4-pi-15-16-rts-cts-uart4.dtbo \ ++ sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtbo \ ++ sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtbo \ ++ sun50i-h616-bananapi-m4-sdio-wifi-bt.dtbo \ ++ sun50i-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtbo \ ++ sun50i-h616-bananapi-m4-spi1-cs0-spidev.dtbo \ ++ sun50i-h616-bananapi-m4-spi1-cs1-spidev.dtbo \ + sun50i-h616-gpu.dtbo \ + sun50i-h616-i2c0-pi.dtbo \ + sun50i-h616-i2c1-pi.dtbo \ +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtso +new file mode 100644 +index 000000000000..4e78aa8f1f27 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-15-16-i2c4.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&i2c4>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtso +new file mode 100644 +index 000000000000..3419eee0b70b +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-17-18-i2c3.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&i2c3>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-6-7-uart1.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-6-7-uart1.dtso +new file mode 100644 +index 000000000000..7001781f42d2 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-6-7-uart1.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&uart1>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtso +new file mode 100644 +index 000000000000..1317a9b3b52f +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pg-8-9-rts-cts-uart1.dtso +@@ -0,0 +1,16 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&uart1>; ++ __overlay__ { ++ status = "okay"; ++ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; ++ pinctrl-names = "default"; ++ uart-has-rtscts; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-ph-2-3-uart5.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-ph-2-3-uart5.dtso +new file mode 100644 +index 000000000000..aaa96e46d708 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-ph-2-3-uart5.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&uart5>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-13-14-uart4.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-13-14-uart4.dtso +new file mode 100644 +index 000000000000..0373f7d25449 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-13-14-uart4.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&uart4>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-15-16-rts-cts-uart4.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-15-16-rts-cts-uart4.dtso +new file mode 100644 +index 000000000000..ef9394c8519c +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-15-16-rts-cts-uart4.dtso +@@ -0,0 +1,16 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&uart4>; ++ __overlay__ { ++ status = "okay"; ++ pinctrl-0 = <&uart4_pi_pins>, <&uart4_pi_rts_cts_pins>; ++ pinctrl-names = "default"; ++ uart-has-rtscts; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtso +new file mode 100644 +index 000000000000..60c75e4d61b5 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-5-6-i2c0.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&i2c0>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtso +new file mode 100644 +index 000000000000..99c7e2b8c5f6 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-pi-7-8-i2c1.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&i2c1>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-sdio-wifi-bt.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-sdio-wifi-bt.dtso +new file mode 100644 +index 000000000000..307f6e5e921c +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-sdio-wifi-bt.dtso +@@ -0,0 +1,44 @@ ++/dts-v1/; ++/plugin/; ++ ++#include ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target-path = "/"; ++ __overlay__ { ++ model = "BananaPi BPI-M4-Zero v2"; ++ }; ++ }; ++ ++ /* SDIO WIFI */ ++ fragment@1 { ++ target = <&mmc1>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++ ++ /* BLUETOOTH */ ++ fragment@2 { ++ target = <&uart1>; ++ __overlay__ { ++ status = "okay"; ++ pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; ++ pinctrl-names = "default"; ++ uart-has-rtscts; ++ ++ bluetooth { ++ compatible = "brcm,bcm43540-bt"; ++ host-wakeup-gpios = <&pio 6 16 GPIO_ACTIVE_HIGH>; ++ device-wakeup-gpios = <&pio 6 17 GPIO_ACTIVE_HIGH>; ++ shutdown-gpios = <&pio 6 19 GPIO_ACTIVE_HIGH>; ++ max-speed = <1500000>; ++ vbat-supply = <®_vcc3v3>; ++ vddio-supply = <®_vcc1v8>; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtso +new file mode 100644 +index 000000000000..7fa3b94bcc8d +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-cs1-spidev.dtso +@@ -0,0 +1,32 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&spi1>; ++ __overlay__ { ++ status = "okay"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi1_pins>, <&spi1_cs0_pin>, <&spi1_cs1_pin>; ++ ++ spidev@0 { ++ compatible = "rohm,dh2228fv"; ++ status = "okay"; ++ reg = <0>; ++ spi-max-frequency = <50000000>; ++ }; ++ ++ spidev@1 { ++ compatible = "rohm,dh2228fv"; ++ status = "okay"; ++ reg = <1>; ++ spi-max-frequency = <50000000>; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-spidev.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-spidev.dtso +new file mode 100644 +index 000000000000..fef73f1afa52 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs0-spidev.dtso +@@ -0,0 +1,24 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&spi1>; ++ __overlay__ { ++ status = "okay"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi1_pins>, <&spi1_cs0_pin>; ++ spidev@0 { ++ compatible = "rohm,dh2228fv"; ++ status = "okay"; ++ reg = <0>; ++ spi-max-frequency = <1000000>; ++ }; ++ }; ++ }; ++}; +diff --git a/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs1-spidev.dtso b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs1-spidev.dtso +new file mode 100644 +index 000000000000..840357f2e9e0 +--- /dev/null ++++ b/arch/arm64/boot/dts/allwinner/overlay/sun50i-h616-bananapi-m4-spi1-cs1-spidev.dtso +@@ -0,0 +1,13 @@ ++/dts-v1/; ++/plugin/; ++ ++/ { ++ compatible = "sinovoip,bpi-m4-zero", "allwinner,sun50i-h616", "allwinner,sun50i-h618"; ++ ++ fragment@0 { ++ target = <&spi1>; ++ __overlay__ { ++ status = "okay"; ++ }; ++ }; ++}; +-- +2.35.3 + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-pinctrl.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-pinctrl.patch new file mode 100644 index 000000000..66bd300de --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-BananaPi-BPI-M4-Zero-pinctrl.patch @@ -0,0 +1,43 @@ +From 074c33f4b2b60ea6d76968099f8210c61bbad7e1 Mon Sep 17 00:00:00 2001 +From: Patrick Yavitz +Date: Thu, 12 Dec 2024 06:49:59 -0500 +Subject: Add BananaPi BPI-M4-Zero pinctrl + +Signed-off-by: Patrick Yavitz +--- + arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi +index 8de963bee2ac..2e418ffdfcdb 100644 +--- a/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi ++++ b/arch/arm64/boot/dts/allwinner/sun50i-h616.dtsi +@@ -409,6 +409,12 @@ i2c0_pins: i2c0-pins { + function = "i2c0"; + }; + ++ /omit-if-no-ref/ ++ i2c1_pi_pins: i2c1-pi-pins { ++ pins = "PI7", "PI8"; ++ function = "i2c1"; ++ }; ++ + /omit-if-no-ref/ + i2c2_ph_pins: i2c2-ph-pins { + pins = "PH2", "PH3"; +@@ -571,6 +577,12 @@ spi1_cs0_pin: spi1-cs0-pin { + function = "spi1"; + }; + ++ /omit-if-no-ref/ ++ spi1_cs1_pin: spi1-cs1-pin { ++ pins = "PH9"; ++ function = "spi1"; ++ }; ++ + spdif_tx_pin: spdif-tx-pin { + pins = "PH4"; + function = "spdif"; +-- +2.35.3 + diff --git a/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-FB_TFT-ST7796S-driver.patch b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-FB_TFT-ST7796S-driver.patch new file mode 100644 index 000000000..43ef6b05c --- /dev/null +++ b/patch/kernel/archive/sunxi-6.16/patches.armbian/Add-FB_TFT-ST7796S-driver.patch @@ -0,0 +1,154 @@ +From 0987e0158d63711b01a2435fa515d80a5b540422 Mon Sep 17 00:00:00 2001 +From: Alan +Date: Sat, 20 May 2023 14:33:52 +0800 +Subject: Add: FB_TFT ST7796S driver + +--- + drivers/staging/fbtft/Kconfig | 10 +++ + drivers/staging/fbtft/Makefile | 1 + + drivers/staging/fbtft/fb_st7796s.c | 100 +++++++++++++++++++++++++++++ + 3 files changed, 111 insertions(+) + create mode 100644 drivers/staging/fbtft/fb_st7796s.c + +diff --git a/drivers/staging/fbtft/Kconfig b/drivers/staging/fbtft/Kconfig +index c2655768209a..c72954ea0e19 100644 +--- a/drivers/staging/fbtft/Kconfig ++++ b/drivers/staging/fbtft/Kconfig +@@ -145,6 +145,16 @@ config FB_TFT_ST7789V + + Say Y if you have such a display that utilizes this controller. + ++config FB_TFT_ST7796S ++ tristate "FB driver for the ST7796S LCD Controller" ++ depends on FB_TFT ++ help ++ This enables generic framebuffer support for the Sitronix ST7796S ++ display controller. The controller is intended for small color ++ displays with a resolution of up to 480x320 pixels. ++ ++ Say Y if you have such a display that utilizes this controller. ++ + config FB_TFT_TINYLCD + tristate "FB driver for tinylcd.com display" + help +diff --git a/drivers/staging/fbtft/Makefile b/drivers/staging/fbtft/Makefile +index e9cdf0f0a7da..7b2098b8a1bd 100644 +--- a/drivers/staging/fbtft/Makefile ++++ b/drivers/staging/fbtft/Makefile +@@ -31,6 +31,7 @@ obj-$(CONFIG_FB_TFT_SSD1331) += fb_ssd1331.o + obj-$(CONFIG_FB_TFT_SSD1351) += fb_ssd1351.o + obj-$(CONFIG_FB_TFT_ST7735R) += fb_st7735r.o + obj-$(CONFIG_FB_TFT_ST7789V) += fb_st7789v.o ++obj-$(CONFIG_FB_TFT_ST7796S) += fb_st7796s.o + obj-$(CONFIG_FB_TFT_TINYLCD) += fb_tinylcd.o + obj-$(CONFIG_FB_TFT_TLS8204) += fb_tls8204.o + obj-$(CONFIG_FB_TFT_UC1611) += fb_uc1611.o +diff --git a/drivers/staging/fbtft/fb_st7796s.c b/drivers/staging/fbtft/fb_st7796s.c +new file mode 100644 +index 000000000000..cad489cef595 +--- /dev/null ++++ b/drivers/staging/fbtft/fb_st7796s.c +@@ -0,0 +1,100 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++/* ++ * FB driver for the ST7796S LCD Controller ++ * ++ * Copyright (c) 2023 Alan Ma ++ * Copyright (c) 2014 Petr Olivka ++ * Copyright (c) 2013 Noralf Tronnes ++ */ ++ ++#include ++#include ++#include ++#include ++#include