Stephen Graf Posted March 24 Posted March 24 @going I have a few questions about the kernel sound configuration: why is the SUN50IW9_CODEC configured in two places? do we need CONFIG_SND_SUN8I_CODEC=y and CONFIG_SND_SUN8I_CODEC_ANALOG=y? # # Allwinner SoC Audio support # CONFIG_SND_SUN4I_CODEC=y CONFIG_SND_SUN50IW9_CODEC=m CONFIG_SND_SUN8I_CODEC=y CONFIG_SND_SUN8I_CODEC_ANALOG=y CONFIG_SND_SUN50I_CODEC_ANALOG=y CONFIG_SND_SUN4I_I2S=m CONFIG_SND_SUN4I_SPDIF=m CONFIG_SND_SUN50I_DMIC=m CONFIG_SND_SUN9I_HDMI_AUDIO=m CONFIG_SND_SUN8I_ADDA_PR_REGMAP=y # end of Allwinner SoC Audio support CONFIG_SND_SOC_SUNXI_MACH=m CONFIG_SND_SOC_SUNXI_AHUB_DAM=m CONFIG_SND_SOC_SUNXI_INTERNALCODEC=m CONFIG_SND_SOC_SUNXI_SUN50IW9_CODEC=m # # Allwinner SoC Audio support V2 # CONFIG_SND_SOC_SUNXI_AAUDIO=m CONFIG_SND_SOC_SUNXI_AHUB=m # end of Allwinner SoC Audio support V2 0 Quote
going Posted March 24 Posted March 24 3 минуты назад, Stephen Graf сказал: I have a few questions about the kernel sound configuration: why is the SUN50IW9_CODEC configured in two places? do we need CONFIG_SND_SUN8I_CODEC=y and CONFIG_SND_SUN8I_CODEC_ANALOG=y? Do we need this one? 4 минуты назад, Stephen Graf сказал: CONFIG_SND_SUN4I_CODEC=y 0 Quote
Nick A Posted March 24 Posted March 24 (edited) I was adding my Transpeed TV Box patches to official Armbian using kernel 6.12.16. I got this error compiling my dts at this line. &ahub_dam_mach { status = "okay"; }; I found this was missing in the sun50i-h616.dtsi. ahub_dam_mach:ahub_dam_mach { compatible = "allwinner,sunxi-snd-mach"; soundcard-mach,name = "ahubdam"; status = "disabled"; soundcard-mach,cpu { sound-dai = <&ahub_dam_plat>; }; soundcard-mach,codec { }; }; Edited March 24 by Nick A 0 Quote
Nick A Posted March 24 Posted March 24 (edited) I found the answer why it was taken out here.. Someone might need it. Edited March 24 by Nick A 0 Quote
robertoj Posted March 31 Posted March 31 (edited) Is anybody having success with ilitek LCD display, or SPI in general? I am trying 6.12 with my orange pi zero 3, but the LCD just remains white. When I switch back to my microSD with Linux 6.11, it works with no problem (ili9488+ads7846) Edited March 31 by robertoj 0 Quote
going Posted March 31 Posted March 31 @robertoj Please check the kernel configuration on the working version. And which modules are present. Then compare with the non-working option. 0 Quote
robertoj Posted March 31 Posted March 31 (edited) Yes. I will try again when I get back home, along with re-including some armbian patches related to SPI Own reference: Spoiler Kernel config instructions: https://docs.armbian.com/Developer-Guide_User-Configurations/ https://forum.armbian.com/topic/15355-user-provided-kernel-config/ Inclusion of armbian patches: https://forum.armbian.com/topic/29794-how-to-install-armbian-in-h618/page/17/#findComment-205773 https://github.com/robertojguerra/orangepi-zero-full-setup/blob/main/README2.md Edited March 31 by robertoj 0 Quote
robertoj Posted April 1 Posted April 1 (edited) Process of using a kernel config from a file Copy the config file from /boot folder to build/userpatches Then rename: $ mv config-6.11.9-edge-sunxi64 linux-sunxi64-edge.config cd .. ./compile.sh I get this compilation error: Spoiler [🐳|🔨] CC [M] drivers/net/wireless/rtl8811cu/platform/platform_ops.o [🐳|🔨] LD [M] drivers/net/wireless/rtl8811cu/8821cu.o [🐳|🔨] AR drivers/net/built-in.a [🐳|🔨] AR drivers/built-in.a [🐳|🔨] AR built-in.a [🐳|🔨] AR vmlinux.a [🐳|🔨] error: the following would cause module name conflict: [🐳|🔨] drivers/mfd/ac200.ko [🐳|🔨] drivers/net/phy/ac200.ko [🐳|🔨] make[2]: *** [Makefile:1875: modules_check] Error 1 [🐳|🔨] make[2]: *** Waiting for unfinished jobs.... [🐳|🔨] make[1]: *** [/armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/Makefile:347: __build_one_by_one] Error 2 [🐳|🔨] make: *** [Makefile:224: __sub-make] Error 2 [🐳|💥] Cleaning up [ please wait for cleanups to finish ] [🐳|🌿] ANSI log file built; inspect it by running: [ less -RS output/logs/log-build-e236f45c-7165-44f5-8304-f47c168b3ca3.log.ans ] It seems that a wifi driver is in 2 folders... I will see which kernel driver I should remove ...first trying removing mfd/ac200 I don't know if has improved anythig... but I see these new build errors: Spoiler 🐳|🌱] Using kernel config provided by user [ userpatches/linux-sunxi64-edge.config ] [🐳|🔨] '/armbian/userpatches/linux-sunxi64-edge.config' -> '/armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/.config' [🐳|🌱] Considering available RAM for BTF build [ 8709 MiB ] [🐳|🌱] Enabling eBPF and BTF info [ for fully BTF & CO-RE enabled kernel ] [🐳|🔨] # [🐳|🔨] # configuration written to .config [🐳|🔨] # [🐳|🌱] Kernel configuration [ linux-sunxi64-edge ] configuration written to .config *** End of the configuration. *** Execute 'make' to start the build or try 'make help'. [🐳|🌱] Exporting new kernel defconfig [ /armbian/output/config/linux-sunxi64-edge.config ] [🐳|🔨] 'defconfig' -> '/armbian/output/config/linux-sunxi64-edge.config' [🐳|🌱] Exporting new kernel config - git commit pending [ /armbian/userpatches/linux-sunxi64-edge.config ] [🐳|🔨] 'defconfig' -> '/armbian/userpatches/linux-sunxi64-edge.config' [🐳|🔨] /armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/.config /armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/.config.armbian.previous differ: byte 105893, line 4195 [🐳|🌱] Kernel configuration changed from previous build [ optimizing for correctness ] [🐳|🌱] Compiling edge kernel [ 6.12.11 ] [🐳|🌱] Building kernel [ sunxi64 linux-sunxi64-edge all Image install install modules_install headers_install dtbs_install ] [🐳|🔨] Statistics zeroed [🐳|🔨] Makefile:219: target 'install' given more than once in the same rule [🐳|🔨] /armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/Makefile:343: target 'install' given more than once in the same rule [🐳|🔨] SYNC include/config/auto.conf.cmd [🐳|🔨] mkdir -p /armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/tools/bpf/resolve_btfids && make O=/armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64 subdir=tools/bpf/resolve_btfids --no-print-directory -C bpf/resolve_btfids [🐳|🔨] FIXUP IMAGE arch/arm64/boot/dts/allwinner/overlay/sun50i-a64-fixup.scr [🐳|🔨] FIXUP IMAGE arch/arm64/boot/dts/allwinner/overlay/sun50i-h5-fixup.scr [🐳|🔨] FIXUP IMAGE arch/arm64/boot/dts/allwinner/overlay/sun50i-h6-fixup.scr [🐳|🔨] Image Name: [🐳|🔨] Created: Thu Jan 23 16:23:05 2025 [🐳|🔨] Image Type: AArch64 Linux Script (uncompressed) [🐳|🔨] Data Size: 4127 Bytes = 4.03 KiB = 0.00 MiB [🐳|🔨] Load Address: 00000000 [🐳|🔨] Entry Point: 00000000 [🐳|🔨] Contents: [🐳|🔨] Image 0: 4119 Bytes = 4.02 KiB = 0.00 MiB [🐳|🔨] Image Name: [🐳|🔨] Created: Thu Jan 23 16:23:05 2025 [🐳|🔨] Image Type: AArch64 Linux Script (uncompressed) [🐳|🔨] Data Size: 4127 Bytes = 4.03 KiB = 0.00 MiB [🐳|🔨] Load Address: 00000000 [🐳|🔨] Entry Point: 00000000 [🐳|🔨] Contents: [🐳|🔨] Image 0: 4119 Bytes = 4.02 KiB = 0.00 MiB [🐳|🔨] Image Name: [🐳|🔨] Created: Thu Jan 23 16:23:05 2025 [🐳|🔨] Image Type: AArch64 Linux Script (uncompressed) [🐳|🔨] Data Size: 3757 Bytes = 3.67 KiB = 0.00 MiB [🐳|🔨] Load Address: 00000000 [🐳|🔨] Entry Point: 00000000 [🐳|🔨] Contents: [🐳|🔨] Image 0: 3749 Bytes = 3.66 KiB = 0.00 MiB [🐳|🔨] INSTALL libsubcmd_headers [🐳|🔨] CALL scripts/checksyscalls.sh [🐳|🔨] UPD kernel/config_data [🐳|🔨] CHK kernel/kheaders_data.tar.xz [🐳|🔨] GZIP kernel/config_data.gz [🐳|🔨] CC kernel/configs.o [🐳|🔨] AR kernel/built-in.a [🐳|🔨] AR built-in.a [🐳|🔨] AR vmlinux.a [🐳|🔨] LD vmlinux.o [🐳|🔨] OBJCOPY modules.builtin.modinfo [🐳|🔨] GEN modules.builtin [🐳|🔨] MODPOST Module.symvers [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_audio_disable" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_set_audio_interface" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_set_channel_status" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_set_channel_count" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_set_channel_allocation" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_set_audio_infoframe" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] ERROR: modpost: "dw_hdmi_qp_audio_enable" [drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp-i2s-audio.ko] undefined! [🐳|🔨] make[3]: *** [scripts/Makefile.modpost:145: Module.symvers] Error 1 [🐳|🔨] make[2]: *** [Makefile:1889: modpost] Error 2 [🐳|🔨] make[1]: *** [/armbian/cache/sources/linux-kernel-worktree/6.12__sunxi64__arm64/Makefile:347: __build_one_by_one] Error 2 [🐳|🔨] make: *** [Makefile:224: __sub-make] Error 2 [🐳|💥] Cleaning up [ please wait for cleanups to finish ] [🐳|🌿] ANSI log file built; inspect it by running: [ less -RS output/logs/log-build-14a8896d-b0c4-484a-9bbd-d5bff44e0b27.log.ans ] [🐳|🌱] Share log manually: [ use one of the commands below (or add SHARE_LOG=yes next time!) ] [🐳|🌿] Share log manually: [ curl --data-binary @output/logs/log-build-14a8896d-b0c4-484a-9bbd-d5bff44e0b27.log.ans https://paste.armbian.com/log ] [🐳|🌿] Share log manually: [ curl --data-binary @output/logs/log-build-14a8896d-b0c4-484a-9bbd-d5bff44e0b27.log.ans https://paste.armbian.de/log ] [🐳|🌿] Share log manually: [ curl --data-binary @output/logs/log-build-14a8896d-b0c4-484a-9bbd-d5bff44e0b27.log.ans https://paste.next.armbian.com/log ] [🐳|🌿] Share log manually: [ curl --data-binary @output/logs/log-build-14a8896d-b0c4-484a-9bbd-d5bff44e0b27.log.ans https://paste.armbian.eu/log ] Edited April 1 by robertoj 0 Quote
robertoj Posted April 1 Posted April 1 Going, I see that you worked on some SPI patches previously ... have you tested SPI in opiz3, under Linux 6.12? I found that the raspberry pi people are using panel-mipi-dbi-spi successfully under 6.12 https://forums.raspberrypi.com/viewtopic.php?p=2290196&hilit=panel+mipi+dbi+spi+6.12#p2290196 0 Quote
robertoj Posted Thursday at 08:31 AM Posted Thursday at 08:31 AM (edited) I keep trying to make my ili9488 SPI LCD with Linux 6.12, from the image in NickA's github... with no success so far Now I have a strong feeling that it is the gpiochip configuration, since I make this test in Linux 6.11 which works with my LCD With Linux 6.11, the device is gpiochip0 Spoiler roberto@orangepizero3:~$ sudo cat /sys/kernel/debug/gpio [sudo] password for roberto: gpiochip0: GPIOs 0-287, parent: platform/300b000.pinctrl, 300b000.pinctrl: gpio-71 ( |dc ) out hi gpio-73 ( |interrupt ) in hi IRQ gpio-74 ( |pendown ) in hi IRQ ACTIVE LOW gpio-76 ( |red:status ) out lo gpio-77 ( |green:power ) out hi gpio-78 ( |reset ) out hi gpio-79 ( |spi1 CS1 ) out hi ACTIVE LOW gpio-80 ( |regulator-usb1-vbus ) out hi gpio-166 ( |cd ) in lo ACTIVE LOW gpio-210 ( |reset ) out hi ACTIVE LOW gpio-226 ( |BLINK EXAMPLE LINES ) out lo gpio-233 ( |spi1 CS0 ) out hi ACTIVE LOW With Linux 6.12, the device is gpiochip1 Spoiler roberto@orangepizero3:~$ sudo cat /sys/kernel/debug/gpio [sudo] password for roberto: gpiochip1: GPIOs 0-287, parent: platform/300b000.pinctrl, 300b000.pinctrl: gpio-73 ( |interrupt ) in hi IRQ gpio-74 ( |pendown ) in hi IRQ ACTIVE LOW gpio-76 ( |red:disk-activity ) out lo gpio-77 ( |green:status ) out lo gpio-79 ( |spi1 CS1 ) out hi ACTIVE LOW gpio-80 ( |regulator-usb1-vbus ) out hi gpio-166 ( |cd ) in lo ACTIVE LOW gpio-210 ( |reset ) out hi ACTIVE LOW gpio-233 ( |spi1 CS0 ) out hi ACTIVE LOW With Linux 6.11, the GPIO lines for reset and command, and the SPI pins, are shown as connected to a function: Spoiler roberto@orangepizero3:~$ sudo cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins Pinmux settings per pin Format: pin (name): mux_owner|gpio_owner (strict) hog? pin 0 (PA0): UNCLAIMED pin 1 (PA1): UNCLAIMED pin 2 (PA2): UNCLAIMED pin 3 (PA3): UNCLAIMED pin 4 (PA4): UNCLAIMED pin 5 (PA5): UNCLAIMED pin 6 (PA6): UNCLAIMED pin 7 (PA7): UNCLAIMED pin 8 (PA8): UNCLAIMED pin 9 (PA9): UNCLAIMED pin 10 (PA10): UNCLAIMED pin 11 (PA11): UNCLAIMED pin 12 (PA12): UNCLAIMED pin 64 (PC0): device 5010000.spi function spi0 group PC0 pin 65 (PC1): UNCLAIMED pin 66 (PC2): device 5010000.spi function spi0 group PC2 pin 67 (PC3): device 5010000.spi function spi0 group PC3 pin 68 (PC4): device 5010000.spi function spi0 group PC4 pin 69 (PC5): UNCLAIMED pin 70 (PC6): UNCLAIMED pin 71 (PC7): GPIO 300b000.pinctrl:71 pin 72 (PC8): UNCLAIMED pin 73 (PC9): UNCLAIMED pin 74 (PC10): GPIO 300b000.pinctrl:74 pin 75 (PC11): UNCLAIMED pin 76 (PC12): GPIO 300b000.pinctrl:76 pin 77 (PC13): GPIO 300b000.pinctrl:77 pin 78 (PC14): GPIO 300b000.pinctrl:78 pin 79 (PC15): GPIO 300b000.pinctrl:79 pin 80 (PC16): GPIO 300b000.pinctrl:80 pin 96 (PD0): UNCLAIMED pin 97 (PD1): UNCLAIMED pin 98 (PD2): UNCLAIMED pin 99 (PD3): UNCLAIMED pin 100 (PD4): UNCLAIMED pin 101 (PD5): UNCLAIMED pin 102 (PD6): UNCLAIMED pin 103 (PD7): UNCLAIMED pin 104 (PD8): UNCLAIMED pin 105 (PD9): UNCLAIMED pin 106 (PD10): UNCLAIMED pin 107 (PD11): UNCLAIMED pin 108 (PD12): UNCLAIMED pin 109 (PD13): UNCLAIMED pin 110 (PD14): UNCLAIMED pin 111 (PD15): UNCLAIMED pin 112 (PD16): UNCLAIMED pin 113 (PD17): UNCLAIMED pin 114 (PD18): UNCLAIMED pin 115 (PD19): UNCLAIMED pin 116 (PD20): UNCLAIMED pin 117 (PD21): UNCLAIMED pin 118 (PD22): UNCLAIMED pin 119 (PD23): UNCLAIMED pin 120 (PD24): UNCLAIMED pin 121 (PD25): UNCLAIMED pin 122 (PD26): UNCLAIMED pin 123 (PD27): UNCLAIMED pin 124 (PD28): UNCLAIMED pin 128 (PE0): UNCLAIMED pin 129 (PE1): UNCLAIMED pin 130 (PE2): UNCLAIMED pin 131 (PE3): UNCLAIMED pin 132 (PE4): UNCLAIMED pin 133 (PE5): UNCLAIMED pin 134 (PE6): UNCLAIMED pin 135 (PE7): UNCLAIMED pin 136 (PE8): UNCLAIMED pin 137 (PE9): UNCLAIMED pin 138 (PE10): UNCLAIMED pin 139 (PE11): UNCLAIMED pin 140 (PE12): UNCLAIMED pin 141 (PE13): UNCLAIMED pin 142 (PE14): UNCLAIMED pin 143 (PE15): UNCLAIMED pin 144 (PE16): UNCLAIMED pin 145 (PE17): UNCLAIMED pin 146 (PE18): UNCLAIMED pin 147 (PE19): UNCLAIMED pin 148 (PE20): UNCLAIMED pin 149 (PE21): UNCLAIMED pin 150 (PE22): UNCLAIMED pin 160 (PF0): device 4020000.mmc function mmc0 group PF0 pin 161 (PF1): device 4020000.mmc function mmc0 group PF1 pin 162 (PF2): device 4020000.mmc function mmc0 group PF2 pin 163 (PF3): device 4020000.mmc function mmc0 group PF3 pin 164 (PF4): device 4020000.mmc function mmc0 group PF4 pin 165 (PF5): device 4020000.mmc function mmc0 group PF5 pin 166 (PF6): GPIO 300b000.pinctrl:166 pin 192 (PG0): device 4021000.mmc function mmc1 group PG0 pin 193 (PG1): device 4021000.mmc function mmc1 group PG1 pin 194 (PG2): device 4021000.mmc function mmc1 group PG2 pin 195 (PG3): device 4021000.mmc function mmc1 group PG3 pin 196 (PG4): device 4021000.mmc function mmc1 group PG4 pin 197 (PG5): device 4021000.mmc function mmc1 group PG5 pin 198 (PG6): UNCLAIMED pin 199 (PG7): UNCLAIMED pin 200 (PG8): UNCLAIMED pin 201 (PG9): UNCLAIMED pin 202 (PG10): UNCLAIMED pin 203 (PG11): UNCLAIMED pin 204 (PG12): UNCLAIMED pin 205 (PG13): UNCLAIMED pin 206 (PG14): UNCLAIMED pin 207 (PG15): UNCLAIMED pin 208 (PG16): UNCLAIMED pin 209 (PG17): UNCLAIMED pin 210 (PG18): GPIO 300b000.pinctrl:210 pin 211 (PG19): UNCLAIMED pin 224 (PH0): device 5000000.serial function uart0 group PH0 pin 225 (PH1): device 5000000.serial function uart0 group PH1 pin 226 (PH2): GPIO 300b000.pinctrl:226 pin 227 (PH3): UNCLAIMED pin 228 (PH4): UNCLAIMED pin 229 (PH5): UNCLAIMED pin 230 (PH6): device 5011000.spi function spi1 group PH6 pin 231 (PH7): device 5011000.spi function spi1 group PH7 pin 232 (PH8): device 5011000.spi function spi1 group PH8 pin 233 (PH9): GPIO 300b000.pinctrl:233 pin 234 (PH10): UNCLAIMED pin 256 (PI0): device 5020000.ethernet function emac0 group PI0 pin 257 (PI1): device 5020000.ethernet function emac0 group PI1 pin 258 (PI2): device 5020000.ethernet function emac0 group PI2 pin 259 (PI3): device 5020000.ethernet function emac0 group PI3 pin 260 (PI4): device 5020000.ethernet function emac0 group PI4 pin 261 (PI5): device 5020000.ethernet function emac0 group PI5 pin 262 (PI6): UNCLAIMED pin 263 (PI7): device 5020000.ethernet function emac0 group PI7 pin 264 (PI8): device 5020000.ethernet function emac0 group PI8 pin 265 (PI9): device 5020000.ethernet function emac0 group PI9 pin 266 (PI10): device 5020000.ethernet function emac0 group PI10 pin 267 (PI11): device 5020000.ethernet function emac0 group PI11 pin 268 (PI12): device 5020000.ethernet function emac0 group PI12 pin 269 (PI13): device 5020000.ethernet function emac0 group PI13 pin 270 (PI14): device 5020000.ethernet function emac0 group PI14 pin 271 (PI15): device 5020000.ethernet function emac0 group PI15 pin 272 (PI16): device 5020000.ethernet function emac0 group PI16 But with Linux 6.12 (from NickA's github): Spoiler roberto@orangepizero3:~$ sudo cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins Pinmux settings per pin Format: pin (name): mux_owner|gpio_owner (strict) hog? pin 0 (PA0): UNCLAIMED pin 1 (PA1): UNCLAIMED pin 2 (PA2): UNCLAIMED pin 3 (PA3): UNCLAIMED pin 4 (PA4): UNCLAIMED pin 5 (PA5): UNCLAIMED pin 6 (PA6): UNCLAIMED pin 7 (PA7): UNCLAIMED pin 8 (PA8): UNCLAIMED pin 9 (PA9): UNCLAIMED pin 10 (PA10): UNCLAIMED pin 11 (PA11): UNCLAIMED pin 12 (PA12): UNCLAIMED pin 64 (PC0): device 5010000.spi function spi0 group PC0 pin 65 (PC1): UNCLAIMED pin 66 (PC2): device 5010000.spi function spi0 group PC2 pin 67 (PC3): device 5010000.spi function spi0 group PC3 pin 68 (PC4): device 5010000.spi function spi0 group PC4 pin 69 (PC5): UNCLAIMED pin 70 (PC6): UNCLAIMED pin 71 (PC7): UNCLAIMED pin 72 (PC8): UNCLAIMED pin 73 (PC9): UNCLAIMED pin 74 (PC10): GPIO 300b000.pinctrl:74 pin 75 (PC11): UNCLAIMED pin 76 (PC12): GPIO 300b000.pinctrl:76 pin 77 (PC13): GPIO 300b000.pinctrl:77 pin 78 (PC14): UNCLAIMED pin 79 (PC15): GPIO 300b000.pinctrl:79 pin 80 (PC16): GPIO 300b000.pinctrl:80 pin 96 (PD0): UNCLAIMED pin 97 (PD1): UNCLAIMED pin 98 (PD2): UNCLAIMED pin 99 (PD3): UNCLAIMED pin 100 (PD4): UNCLAIMED pin 101 (PD5): UNCLAIMED pin 102 (PD6): UNCLAIMED pin 103 (PD7): UNCLAIMED pin 104 (PD8): UNCLAIMED pin 105 (PD9): UNCLAIMED pin 106 (PD10): UNCLAIMED pin 107 (PD11): UNCLAIMED pin 108 (PD12): UNCLAIMED pin 109 (PD13): UNCLAIMED pin 110 (PD14): UNCLAIMED pin 111 (PD15): UNCLAIMED pin 112 (PD16): UNCLAIMED pin 113 (PD17): UNCLAIMED pin 114 (PD18): UNCLAIMED pin 115 (PD19): UNCLAIMED pin 116 (PD20): UNCLAIMED pin 117 (PD21): UNCLAIMED pin 118 (PD22): UNCLAIMED pin 119 (PD23): UNCLAIMED pin 120 (PD24): UNCLAIMED pin 121 (PD25): UNCLAIMED pin 122 (PD26): UNCLAIMED pin 123 (PD27): UNCLAIMED pin 124 (PD28): UNCLAIMED pin 128 (PE0): UNCLAIMED pin 129 (PE1): UNCLAIMED pin 130 (PE2): UNCLAIMED pin 131 (PE3): UNCLAIMED pin 132 (PE4): UNCLAIMED pin 133 (PE5): UNCLAIMED pin 134 (PE6): UNCLAIMED pin 135 (PE7): UNCLAIMED pin 136 (PE8): UNCLAIMED pin 137 (PE9): UNCLAIMED pin 138 (PE10): UNCLAIMED pin 139 (PE11): UNCLAIMED pin 140 (PE12): UNCLAIMED pin 141 (PE13): UNCLAIMED pin 142 (PE14): UNCLAIMED pin 143 (PE15): UNCLAIMED pin 144 (PE16): UNCLAIMED pin 145 (PE17): UNCLAIMED pin 146 (PE18): UNCLAIMED pin 147 (PE19): UNCLAIMED pin 148 (PE20): UNCLAIMED pin 149 (PE21): UNCLAIMED pin 150 (PE22): UNCLAIMED pin 160 (PF0): device 4020000.mmc function mmc0 group PF0 pin 161 (PF1): device 4020000.mmc function mmc0 group PF1 pin 162 (PF2): device 4020000.mmc function mmc0 group PF2 pin 163 (PF3): device 4020000.mmc function mmc0 group PF3 pin 164 (PF4): device 4020000.mmc function mmc0 group PF4 pin 165 (PF5): device 4020000.mmc function mmc0 group PF5 pin 166 (PF6): GPIO 300b000.pinctrl:166 pin 192 (PG0): device 4021000.mmc function mmc1 group PG0 pin 193 (PG1): device 4021000.mmc function mmc1 group PG1 pin 194 (PG2): device 4021000.mmc function mmc1 group PG2 pin 195 (PG3): device 4021000.mmc function mmc1 group PG3 pin 196 (PG4): device 4021000.mmc function mmc1 group PG4 pin 197 (PG5): device 4021000.mmc function mmc1 group PG5 pin 198 (PG6): device 5000400.serial function uart1 group PG6 pin 199 (PG7): device 5000400.serial function uart1 group PG7 pin 200 (PG8): device 5000400.serial function uart1 group PG8 pin 201 (PG9): device 5000400.serial function uart1 group PG9 pin 202 (PG10): device wifi-pwrseq function clock group PG10 pin 203 (PG11): UNCLAIMED pin 204 (PG12): UNCLAIMED pin 205 (PG13): UNCLAIMED pin 206 (PG14): UNCLAIMED pin 207 (PG15): UNCLAIMED pin 208 (PG16): UNCLAIMED pin 209 (PG17): UNCLAIMED pin 210 (PG18): GPIO 300b000.pinctrl:210 pin 211 (PG19): UNCLAIMED pin 224 (PH0): device 5000000.serial function uart0 group PH0 pin 225 (PH1): device 5000000.serial function uart0 group PH1 pin 226 (PH2): UNCLAIMED pin 227 (PH3): UNCLAIMED pin 228 (PH4): device 5093000.spdif function spdif group PH4 pin 229 (PH5): UNCLAIMED pin 230 (PH6): UNCLAIMED pin 231 (PH7): UNCLAIMED pin 232 (PH8): UNCLAIMED pin 233 (PH9): GPIO 300b000.pinctrl:233 pin 234 (PH10): device 7040000.ir function ir_rx group PH10 pin 256 (PI0): device 5020000.ethernet function emac0 group PI0 pin 257 (PI1): device 5020000.ethernet function emac0 group PI1 pin 258 (PI2): device 5020000.ethernet function emac0 group PI2 pin 259 (PI3): device 5020000.ethernet function emac0 group PI3 pin 260 (PI4): device 5020000.ethernet function emac0 group PI4 pin 261 (PI5): device 5020000.ethernet function emac0 group PI5 pin 262 (PI6): UNCLAIMED pin 263 (PI7): device 5020000.ethernet function emac0 group PI7 pin 264 (PI8): device 5020000.ethernet function emac0 group PI8 pin 265 (PI9): device 5020000.ethernet function emac0 group PI9 pin 266 (PI10): device 5020000.ethernet function emac0 group PI10 pin 267 (PI11): device 5020000.ethernet function emac0 group PI11 pin 268 (PI12): device 5020000.ethernet function emac0 group PI12 pin 269 (PI13): device 5020000.ethernet function emac0 group PI13 pin 270 (PI14): device 5020000.ethernet function emac0 group PI14 pin 271 (PI15): device 5020000.ethernet function emac0 group PI15 pin 272 (PI16): device 5020000.ethernet function emac0 group PI16 I had a pending task to check that all the patches for SPI are included in my build... so I check the source code: armbian-nickA-20250306/build/patch/kernel/archive/sunxi-6.12/series.conf And I see that very few patches that are excluded... none of them relate to SPI... I don't know how to make the SPI work in Linux 6.12 as well as it does in Linux 6.12 Am i doing this right? UPDATE: I tried the same DTS, as shown in https://forum.armbian.com/topic/47971-driving-the-ili9488-lcd-40-inch-cheap-chinese-clone/#findComment-208446 with TheGoing build system in his github https://github.com/The-going/armbian-build/tree/main-sunxi-6.12 ... and I still see the SPI pins PH6,7,8 as unclaimed Is anyone able to use the H618 SPI pins in Linux 6.12.x? UPDATE: in this thread, people discuss the gpiochip0 vs gpiochip1 as a sign that the driver is not "occupying" the GPIO, and a DTS change may be needed https://forum.armbian.com/topic/49331-nanopi-neo2-v11-how-to-control-otg-port-power-with-gpio-354/#findComment-210992 Edited Thursday at 05:47 PM by robertoj 0 Quote
going Posted Thursday at 06:24 PM Posted Thursday at 06:24 PM (edited) 9 часов назад, robertoj сказал: UPDATE: I tried the same DTS, as shown in https://forum.armbian.com/topic/47971-driving-the-ili9488-lcd-40-inch-cheap-chinese-clone/#findComment-208446 Try adding this line compatible = "armbian,spi-dev"; /dts-v1/; /plugin/; / { compatible = "allwinner,sun50i-h616"; fragment@0 { target = <&spi1>; __overlay__ { status = "okay"; compatible = "armbian,spi-dev"; cs-gpios = <&pio 7 9 0>,<&pio 2 15 0>; // PH9=CS0 for lcd, PC15=CS1 for touch panel: panel@0 { compatible = "panel-mipi-dbi-spi"; reg = <0>; ................ P.S. I doubt that I am giving you the right advice. Edited Thursday at 06:29 PM by going Add P.S. 0 Quote
robertoj Posted Thursday at 07:11 PM Posted Thursday at 07:11 PM (edited) Thank you. I will try it When I helped someone with an orange pi zero 2w (same h618) there were some slight differences to access the spi… I wonder if i need the same changes for my opiz3 Update: the line compatible="armbian,spi-dev"; didnt work... *The PH6,7,8 still show as unclaimed *the /dev/input/event0 was not created by ads7846 *the /dev/fb0 was not created These device files were created with my original DTS... but it appears the drivers think they have an SPI port for themselves, but not really. UPDATE: here's a difference I saw in the DTS when using Linux 6.11 (spi working) vs Linux 6.12 (spi not working) 6.11: Spoiler # dtc -I fs -O dts /sys/firmware/devicetree/base ... pinctrl@300b000 { vcc-pi-supply = <0x12>; clock-names = "apb\0hosc\0losc"; gpio-controller; interrupts = <0x00 0x33 0x04 0x00 0x34 0x04 0x00 0x35 0x04 0x00 0x2b 0x04 0x00 0x36 0x04 0x00 0x37 0x04 0x00 0x38 0x04 0x00 0x39 0x04>; clocks = <0x02 0x1a 0x11 0x0b 0x00>; compatible = "allwinner,sun50i-h616-pinctrl"; #interrupt-cells = <0x03>; vcc-pc-supply = <0x12>; reg = <0x300b000 0x400>; phandle = <0x15>; #gpio-cells = <0x03>; vcc-pf-supply = <0x12>; vcc-pg-supply = <0x13>; interrupt-controller; vcc-ph-supply = <0x12>; ... spi1-pins { function = "spi1"; pins = "PH6\0PH7\0PH8"; phandle = <0x20>; }; 6.12: Spoiler # dtc -I fs -O dts /sys/firmware/devicetree/base ... pinctrl@300b000 { vcc-pi-supply = <0x11>; clock-names = "apb\0hosc\0losc"; gpio-controller; interrupts = <0x00 0x33 0x04 0x00 0x34 0x04 0x00 0x35 0x04 0x00 0x2b 0x04 0x00 0x36 0x04 0x00 0x37 0x04 0x00 0x38 0x04 0x00 0x39 0x04>; clocks = <0x02 0x1a 0x10 0x0b 0x00>; compatible = "allwinner,sun50i-h616-pinctrl"; #interrupt-cells = <0x03>; vcc-pc-supply = <0x11>; reg = <0x300b000 0x400>; phandle = <0x14>; #gpio-cells = <0x03>; vcc-pf-supply = <0x11>; vcc-pg-supply = <0x12>; interrupt-controller; vcc-ph-supply = <0x11>; ... spi1-pins { function = "spi1"; pins = "PH6\0PH7\0PH8"; phandle = <0x50>; }; I see there's a difference in phandles... but maybe it is meant to be that way... since I see differences in spi0, which works UPDATE: I tried with linux 6.13.7... it still didn't work. UPDATE: when comparing the Device Trees, focusing in the SPI branch: 6.11 (working): Spoiler # dtc -I fs -O dts /sys/firmware/devicetree/base ... spi@5011000 { pinctrl-names = "default"; #address-cells = <0x01>; pinctrl-0 = <0x20>; clock-names = "ahb\0mod"; resets = <0x02 0x1d>; interrupts = <0x00 0x0d 0x04>; clocks = <0x02 0x50 0x02 0x4e>; #size-cells = <0x00>; dma-names = "rx\0tx"; compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi"; status = "okay"; reg = <0x5011000 0x1000>; phandle = <0x6a>; dmas = <0x1b 0x17 0x1b 0x17>; cs-gpios = <0x15 0x07 0x09 0x00 0x15 0x02 0x0f 0x00>; 6.12 (not working) Spoiler # dtc -I fs -O dts /sys/firmware/devicetree/base ... spi@5011000 { #address-cells = <0x01>; clock-names = "ahb\0mod"; resets = <0x02 0x1d>; interrupts = <0x00 0x0d 0x04>; clocks = <0x02 0x50 0x02 0x4e>; #size-cells = <0x00>; dma-names = "rx\0tx"; compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi"; status = "okay"; reg = <0x5011000 0x1000>; phandle = <0x6f>; dmas = <0x1a 0x17 0x1a 0x17>; cs-gpios = <0x14 0x07 0x09 0x00 0x14 0x02 0x0f 0x00>; Notice that in 6.12, the properties pinctrl-names and pinctrl-0 do not exist, but I used the same ili9488-ads7846.dts in both if them... Does anybody know what may be happening? Or what's needed to add what is missing? I added pinctrl-names = "default"; and pinctrl-0 = <0x20>; and I see these properties in my resulting device tree... but I still dont see PH6,7,8 owned, still unclaimed Edited Friday at 10:34 AM by robertoj 0 Quote
going Posted Friday at 01:32 PM Posted Friday at 01:32 PM 18 часов назад, robertoj сказал: Notice that in 6.12, the properties pinctrl-names and pinctrl-0 do not exist, but I used the same ili9488-ads7846.dts in both if them... Does anybody know what may be happening? Or what's needed to add what is missing? This means that the missing pins should be written something like this: 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>; 0 Quote
robertoj Posted Friday at 04:43 PM Posted Friday at 04:43 PM (edited) Thank you for the suggestion At first it didn't work... then I tried: fragment@0 { target = <&spi1>; __overlay__ { status = "okay"; #address-cells = <1>; #size-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&spi1_pins>; cs-gpios = <&pio 7 9 0>,<&pio 2 15 0>; // PH9=CS0 for lcd, PC15=CS1 for touch ... Because I use non default CS pins The ili9488 LCD is now working in linux 6.13 ... the touch screen is also working with the evtest command I will post the whole DTS in my ili9488 thread Edited Friday at 04:48 PM by robertoj 0 Quote
robertoj Posted Sunday at 07:27 PM Posted Sunday at 07:27 PM (edited) Help! My DTS, which used to work with 6.13 and 6.12 from the unofficial repo's from NickA and Going... are not working in the official armbian linux 6.13 This is an issue of not owning the DC and RESET pins, as seen in Spoiler $ sudo cat /sys/kernel/debug/pinctrl/300b000.pinctrl/pinmux-pins ... pin 64 (PC0): device 5010000.spi function spi0 group PC0 pin 65 (PC1): UNCLAIMED pin 66 (PC2): device 5010000.spi function spi0 group PC2 pin 67 (PC3): device 5010000.spi function spi0 group PC3 pin 68 (PC4): device 5010000.spi function spi0 group PC4 pin 69 (PC5): UNCLAIMED pin 70 (PC6): UNCLAIMED pin 71 (PC7): UNCLAIMED pin 72 (PC8): UNCLAIMED pin 73 (PC9): UNCLAIMED pin 74 (PC10): GPIO 300b000.pinctrl:74 pin 75 (PC11): UNCLAIMED pin 76 (PC12): GPIO 300b000.pinctrl:76 pin 77 (PC13): GPIO 300b000.pinctrl:77 pin 78 (PC14): UNCLAIMED pin 79 (PC15): GPIO 300b000.pinctrl:79 pin 80 (PC16): GPIO 300b000.pinctrl:80 PC7 and PC14 need to show this: pin 71 (PC7): GPIO 300b000.pinctrl:71 pin 78 (PC14): GPIO 300b000.pinctrl:78 dmesg shows this error: $ dmesg|grep spi [ 1.911366] sun6i-spi 5010000.spi: Error applying setting, reverse things back [ 1.911650] sun6i-spi 5011000.spi: Error applying setting, reverse things back [ 1.917726] sun6i-spi 5010000.spi: Error applying setting, reverse things back [ 1.918005] sun6i-spi 5011000.spi: Error applying setting, reverse things back ... The DTS I used is: Spoiler /dts-v1/; /plugin/; / { compatible = "allwinner,sun50i-h616"; fragment@0 { target = <&spi1>; __overlay__ { status = "okay"; pinctrl-names = "default"; //new for linux 6.13 pinctrl-0 = <&spi1_pins>; //new for linux 6.13 cs-gpios = <&pio 7 9 0>,<&pio 2 15 0>; // PH9=CS0 for lcd, PC15=CS1 for touch panel: panel@0 { compatible = "panel-mipi-dbi-spi"; reg = <0>; spi-max-frequency = <40000000>; width-mm=<84>; height-mm=<56>; reset-gpios = <&pio 2 14 0>; // PC14 dc-gpios = <&pio 2 7 0>; // PC7 write-only; format = "b6x2g6x2r6x2"; panel-timing { hactive = <480>; vactive = <320>; hback-porch = <0>; vback-porch = <0>; clock-frequency = <0>; hfront-porch = <0>; hsync-len = <0>; vfront-porch = <0>; vsync-len = <0>; }; }; ads7846: ads7846@1 { compatible = "ti,ads7846"; reg = <1>; pinctrl-names = "default"; spi-max-frequency = <1000000>; interrupt-parent = <&pio>; interrupts = <2 10 2>; /* PC10 - IRQ */ pendown-gpio = <&pio 2 10 1>; /* PC10 */ /* OPTIONS */ ti,x-min = /bits/ 16 <0>; ti,y-min = /bits/ 16 <0>; ti,x-max = /bits/ 16 <0xFFF>; ti,y-max = /bits/ 16 <0xFFF>; ti,pressure-min = /bits/ 16 <0>; ti,pressure-max = /bits/ 16 <0xFFF>; ti,x-plate-ohms = /bits/ 16 <400>; ti,swap-xy = <1>; }; }; }; }; I think anyone with Linux 6.13 (armbian official) can try this DTS without an LCD connected to the orange pi zero 3... at this time, I only need that the PC7 and PC14 are owned by the SPI driver. Edited Sunday at 07:28 PM by robertoj 0 Quote
robertoj Posted yesterday at 12:07 AM Posted yesterday at 12:07 AM (edited) When I start from scratch with TheGoing repo, linux 6.13.7, I apply my DTS, copy my firmware, and I get this DT (snipped in the area that counts) Spoiler $ dtc -I fs -O dts /sys/firmware/devicetree/base ... spi@5011000 { pinctrl-names = "default"; #address-cells = <0x01>; pinctrl-0 = <0x57>; clock-names = "ahb\0mod"; resets = <0x02 0x1d>; interrupts = <0x00 0x0d 0x04>; clocks = <0x02 0x50 0x02 0x4e>; #size-cells = <0x00>; dma-names = "rx\0tx"; compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi"; status = "okay"; reg = <0x5011000 0x1000>; phandle = <0x76>; dmas = <0x1c 0x17 0x1c 0x17>; cs-gpios = <0x16 0x07 0x09 0x00 0x16 0x02 0x0f 0x00>; panel@0 { format = "b6x2g6x2r6x2"; width-mm = <0x54>; spi-max-frequency = <0x2625a00>; reset-gpios = <0x16 0x02 0x0e 0x00>; compatible = "panel-mipi-dbi-spi"; dc-gpios = <0x16 0x02 0x07 0x00>; write-only; reg = <0x00>; phandle = <0xa3>; height-mm = <0x38>; panel-timing { vfront-porch = <0x00>; vback-porch = <0x00>; hsync-len = <0x00>; vactive = <0x140>; clock-frequency = <0x00>; hactive = <0x1e0>; vsync-len = <0x00>; hback-porch = <0x00>; hfront-porch = <0x00>; }; }; ads7846@1 { ti,pressure-min = [00 00]; ti,y-max = [0f ff]; pinctrl-names = "default"; ti,pressure-max = [0f ff]; interrupts = <0x02 0x0a 0x02>; spi-max-frequency = <0xf4240>; interrupt-parent = <0x16>; ti,x-min = [00 00]; compatible = "ti,ads7846"; pendown-gpio = <0x16 0x02 0x0a 0x01>; ti,x-plate-ohms = [01 90]; reg = <0x01>; ti,x-max = [0f ff]; phandle = <0xa4>; ti,y-min = [00 00]; ti,swap-xy = <0x01>; }; }; And the LCD works. And when I start from scratch from the Armbian repo, linux 6.13.11, I apply my DTS, copy my firmware, and get this Device Tree: Spoiler ... spi@5011000 { pinctrl-names = "default"; #address-cells = <0x01>; pinctrl-0 = <0x62>; clock-names = "ahb\0mod"; resets = <0x02 0x1d>; interrupts = <0x00 0x0d 0x04>; clocks = <0x02 0x50 0x02 0x4e>; #size-cells = <0x00>; dma-names = "rx\0tx"; compatible = "allwinner,sun50i-h616-spi\0allwinner,sun8i-h3-spi"; status = "okay"; reg = <0x5011000 0x1000>; phandle = <0x81>; dmas = <0x22 0x17 0x22 0x17>; cs-gpios = <0x1c 0x07 0x09 0x00 0x1c 0x02 0x0f 0x00>; panel@0 { format = "b6x2g6x2r6x2"; width-mm = <0x54>; spi-max-frequency = <0x2625a00>; reset-gpios = <0x1c 0x02 0x0e 0x00>; compatible = "panel-mipi-dbi-spi"; dc-gpios = <0x1c 0x02 0x07 0x00>; write-only; reg = <0x00>; phandle = <0xae>; height-mm = <0x38>; panel-timing { vfront-porch = <0x00>; vback-porch = <0x00>; hsync-len = <0x00>; vactive = <0x140>; clock-frequency = <0x00>; hactive = <0x1e0>; vsync-len = <0x00>; hback-porch = <0x00>; hfront-porch = <0x00>; }; }; ads7846@1 { ti,pressure-min = [00 00]; ti,y-max = [0f ff]; pinctrl-names = "default"; ti,pressure-max = [0f ff]; interrupts = <0x02 0x0a 0x02>; spi-max-frequency = <0xf4240>; interrupt-parent = <0x1c>; ti,x-min = [00 00]; compatible = "ti,ads7846"; pendown-gpio = <0x1c 0x02 0x0a 0x01>; ti,x-plate-ohms = [01 90]; reg = <0x01>; ti,x-max = [0f ff]; phandle = <0xaf>; ti,y-min = [00 00]; ti,swap-xy = <0x01>; }; }; But the GPIO pins PC7 and PC14 appear unclaimed (as seen in previous post), and the LCD remains white. The linux build configs are practically the same (side in 6.13.11 has the error in SPI configuration) Spoiler $ diff config-6.13.7-going config-6.13.11-official 3c3 < # Linux/arm64 6.13.7 Kernel Configuration --- > # Linux/arm64 6.13.11 Kernel Configuration 20a21 > CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y 3012a3014 > CONFIG_RTL8189FS=m 5806d5807 < CONFIG_SND_SUN50IW9_CODEC=m 5820d5820 < CONFIG_SND_SOC_SUNXI_SUN50IW9_CODEC=m I found that the TheGoing repo has a two less patches applied... the zero 2w seems more relevant Spoiler roberto@linux:~/armbian-theGoing/armbian-build/patch/kernel/archive/sunxi-6.13$ diff series.armbian ~/armbian-apr2025/build/patch/kernel/archive/sunxi-6.13/series.armbian 156c156 < - patches.armbian/enable-TV-Output-on-OrangePi-Zero-LTE.patch --- > patches.armbian/enable-TV-Output-on-OrangePi-Zero-LTE.patch 168,169c168,170 < patches.armbian/arm64-dts-h616-8-Add-overlays-i2c-234-ph-pg-uart-25-ph-pg.patch < - patches.armbian/arm64-dts-sun50i-h618-orangepi-zero2w-Add-missing-nodes.patch --- > patches.armbian/arm64-dts-sun50i-h616-add-pwm-nodes-support.patch > patches.armbian/arm64-dts-h616-8-Add-overlays-i2c-pwm-uart.patch > patches.armbian/arm64-dts-sun50i-h618-orangepi-zero2w-Add-missing-nodes.patch IMPORTANT: I just added "-" before "patches.armbian/arm64-dts-sun50i-h618-orangepi-zero2w-Add-missing-nodes.patch" in the: build/patch/kernel/archive/sunxi-6.13/series.conf file, and I finally have the ili9488 LCD working with my ili9488-ads7846 DTS My SBC is the OrangePiZero 3, and I select that specific SBC in the menuconfigs after starting "./compile.sh" Edited yesterday at 03:38 AM by robertoj 0 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.