From 31d5158388973074ea81a1853462f93b6fef5aaa Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Tue, 1 Nov 2022 16:24:15 +0800 Subject: [PATCH 1/2] Rename bsp f133 to d1s --- bsp/allwinner/{f133 => d1s}/.config | 73 ++- bsp/allwinner/{f133 => d1s}/.gitignore | 0 bsp/allwinner/{f133 => d1s}/Kconfig | 0 bsp/allwinner/{f133 => d1s}/README.md | 0 bsp/allwinner/{f133 => d1s}/SConscript | 0 bsp/allwinner/{f133 => d1s}/SConstruct | 0 .../{f133 => d1s}/applications/SConscript | 0 .../{f133 => d1s}/applications/main.c | 0 .../{f133 => d1s}/applications/mnt.c | 0 bsp/allwinner/{f133 => d1s}/board/SConscript | 0 bsp/allwinner/{f133 => d1s}/board/board.c | 0 bsp/allwinner/{f133 => d1s}/board/board.h | 0 bsp/allwinner/{f133 => d1s}/figures/board.png | Bin .../{f133 => d1s}/figures/ddr_partition.png | Bin .../{f133 => d1s}/figures/emmc_partition.png | Bin .../{f133 => d1s}/figures/error_name.png | Bin .../{f133 => d1s}/figures/fel_driver.png | Bin bsp/allwinner/{f133 => d1s}/figures/lwip.png | Bin .../{f133 => d1s}/figures/mobaxterm.png | Bin bsp/allwinner/{f133 => d1s}/figures/mount.png | Bin .../{f133 => d1s}/figures/user_app.png | Bin bsp/allwinner/{f133 => d1s}/link.lds | 0 .../{f133 => d1s}/link_stacksize.lds | 0 bsp/allwinner/{f133 => d1s}/mkimage | Bin bsp/allwinner/{f133 => d1s}/mksdimg.sh | 2 +- bsp/allwinner/{f133 => d1s}/ports/SConscript | 0 .../{f133 => d1s}/ports/fal/SConscript | 0 .../{f133 => d1s}/ports/fal/fal_cfg.h | 0 .../{f133 => d1s}/ports/fal/fal_init.c | 0 .../ports/fal/fal_norflash_sfud_port.c | 0 .../ports/fal/fal_sd_sfud_port.c | 0 .../{f133 => d1s}/ports/wifi/SConscript | 0 .../{f133 => d1s}/ports/wifi/rw007_pin_port.c | 0 bsp/allwinner/{f133 => d1s}/rtconfig.h | 2 - bsp/allwinner/{f133 => d1s}/rtconfig.py | 0 bsp/allwinner/{f133 => d1s}/toc1.cfg | 0 bsp/allwinner/{f133 => d1s}/u-boot.dtb | Bin bsp/allwinner/libraries/drivers/Kconfig | 5 - bsp/allwinner/libraries/drivers/lcd_cfg.c | 451 +----------------- 39 files changed, 70 insertions(+), 463 deletions(-) rename bsp/allwinner/{f133 => d1s}/.config (93%) rename bsp/allwinner/{f133 => d1s}/.gitignore (100%) rename bsp/allwinner/{f133 => d1s}/Kconfig (100%) rename bsp/allwinner/{f133 => d1s}/README.md (100%) rename bsp/allwinner/{f133 => d1s}/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/SConstruct (100%) rename bsp/allwinner/{f133 => d1s}/applications/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/applications/main.c (100%) rename bsp/allwinner/{f133 => d1s}/applications/mnt.c (100%) rename bsp/allwinner/{f133 => d1s}/board/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/board/board.c (100%) rename bsp/allwinner/{f133 => d1s}/board/board.h (100%) rename bsp/allwinner/{f133 => d1s}/figures/board.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/ddr_partition.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/emmc_partition.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/error_name.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/fel_driver.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/lwip.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/mobaxterm.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/mount.png (100%) rename bsp/allwinner/{f133 => d1s}/figures/user_app.png (100%) rename bsp/allwinner/{f133 => d1s}/link.lds (100%) rename bsp/allwinner/{f133 => d1s}/link_stacksize.lds (100%) rename bsp/allwinner/{f133 => d1s}/mkimage (100%) mode change 100755 => 100644 rename bsp/allwinner/{f133 => d1s}/mksdimg.sh (65%) mode change 100755 => 100644 rename bsp/allwinner/{f133 => d1s}/ports/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/ports/fal/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/ports/fal/fal_cfg.h (100%) rename bsp/allwinner/{f133 => d1s}/ports/fal/fal_init.c (100%) rename bsp/allwinner/{f133 => d1s}/ports/fal/fal_norflash_sfud_port.c (100%) rename bsp/allwinner/{f133 => d1s}/ports/fal/fal_sd_sfud_port.c (100%) rename bsp/allwinner/{f133 => d1s}/ports/wifi/SConscript (100%) rename bsp/allwinner/{f133 => d1s}/ports/wifi/rw007_pin_port.c (100%) rename bsp/allwinner/{f133 => d1s}/rtconfig.h (99%) rename bsp/allwinner/{f133 => d1s}/rtconfig.py (100%) rename bsp/allwinner/{f133 => d1s}/toc1.cfg (100%) rename bsp/allwinner/{f133 => d1s}/u-boot.dtb (100%) diff --git a/bsp/allwinner/f133/.config b/bsp/allwinner/d1s/.config similarity index 93% rename from bsp/allwinner/f133/.config rename to bsp/allwinner/d1s/.config index f65eadfe04..1d1717007a 100644 --- a/bsp/allwinner/f133/.config +++ b/bsp/allwinner/d1s/.config @@ -93,22 +93,19 @@ CONFIG_RT_MAIN_THREAD_PRIORITY=10 # C++ features # # CONFIG_RT_USING_CPLUSPLUS is not set - -# -# Command shell -# -CONFIG_RT_USING_FINSH=y CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y CONFIG_FINSH_USING_MSH=y CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=8192 CONFIG_FINSH_USING_HISTORY=y CONFIG_FINSH_HISTORY_LINES=5 CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y CONFIG_FINSH_USING_DESCRIPTION=y # CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set -CONFIG_FINSH_THREAD_PRIORITY=20 -CONFIG_FINSH_THREAD_STACK_SIZE=8192 -CONFIG_FINSH_CMD_SIZE=80 # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_ARG_MAX=10 @@ -142,6 +139,7 @@ CONFIG_RT_USING_DFS_DEVFS=y # CONFIG_RT_USING_DFS_ROMFS is not set # CONFIG_RT_USING_DFS_CROMFS is not set # CONFIG_RT_USING_DFS_RAMFS is not set +# CONFIG_RT_USING_DFS_TMPFS is not set # CONFIG_RT_USING_DFS_UFFS is not set # CONFIG_RT_USING_DFS_JFFS2 is not set # CONFIG_RT_USING_DFS_NFS is not set @@ -156,8 +154,9 @@ CONFIG_RT_USING_SYSTEM_WORKQUEUE=y CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=4096 CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23 CONFIG_RT_USING_SERIAL=y +# CONFIG_RT_USING_SERIAL_V1 is not set +CONFIG_RT_USING_SERIAL_V2=y # CONFIG_RT_SERIAL_USING_DMA is not set -CONFIG_RT_SERIAL_RB_BUFSZ=64 CONFIG_RT_USING_TTY=y # CONFIG_RT_TTY_DEBUG is not set # CONFIG_RT_USING_CAN is not set @@ -195,6 +194,7 @@ CONFIG_RT_AUDIO_REPLAY_MP_BLOCK_COUNT=2 CONFIG_RT_AUDIO_RECORD_PIPE_SIZE=2048 # CONFIG_RT_USING_SENSOR is not set CONFIG_RT_USING_TOUCH=y +CONFIG_RT_TOUCH_PIN_IRQ=y # CONFIG_RT_USING_LCD is not set # CONFIG_RT_USING_HWCRYPTO is not set # CONFIG_RT_USING_PULSE_ENCODER is not set @@ -233,6 +233,11 @@ CONFIG_RT_WLAN_WORKQUEUE_THREAD_PRIO=15 # # CONFIG_RT_USING_USB_HOST is not set # CONFIG_RT_USING_USB_DEVICE is not set +CONFIG_RT_USING_FAL=y +CONFIG_FAL_DEBUG_CONFIG=y +CONFIG_FAL_DEBUG=1 +CONFIG_FAL_PART_HAS_TABLE_CFG=y +# CONFIG_FAL_USING_SFUD_PORT is not set # # POSIX layer and C standard library @@ -406,7 +411,18 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # Wiced WiFi # # CONFIG_PKG_USING_WLAN_WICED is not set -# CONFIG_PKG_USING_RW007 is not set +CONFIG_PKG_USING_RW007=y +CONFIG_PKG_RW007_PATH="/packages/iot/WiFi/rw007" +CONFIG_PKG_USING_RW007_V201=y +# CONFIG_PKG_USING_RW007_V200 is not set +# CONFIG_PKG_USING_RW007_V111 is not set +# CONFIG_PKG_USING_RW007_V110 is not set +# CONFIG_PKG_USING_RW007_V100 is not set +# CONFIG_PKG_USING_RW007_LATEST_VERSION is not set +CONFIG_PKG_RW007_VER="v2.0.1" +CONFIG_RW007_NOT_USE_EXAMPLE_DRIVERS=y +# CONFIG_RW007_USING_STM32_DRIVERS is not set +CONFIG_RW007_SPI_MAX_HZ=25000000 # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set @@ -494,12 +510,10 @@ CONFIG_RT_LWP_SHM_MAX_NR=64 # XML: Extensible Markup Language # # CONFIG_PKG_USING_SIMPLE_XML is not set -CONFIG_PKG_USING_EZXML=y -CONFIG_PKG_EZXML_PATH="/packages/language/XML/ezXML" -CONFIG_PKG_USING_EZXML_LATEST_VERSION=y +# CONFIG_PKG_USING_EZXML is not set +# CONFIG_PKG_USING_EZXML_LATEST_VERSION is not set # CONFIG_PKG_USING_EZXML_V0681 is not set # CONFIG_PKG_USING_EZXML_V068 is not set -CONFIG_PKG_EZXML_VER="latest" # CONFIG_PKG_USING_LUATOS_SOC is not set # CONFIG_PKG_USING_LUA is not set # CONFIG_PKG_USING_JERRYSCRIPT is not set @@ -638,8 +652,6 @@ CONFIG_PKG_USING_PARTITION=y CONFIG_PKG_PARTITION_PATH="/packages/system/partition" CONFIG_PKG_PARTITION_VER="v1.0.1" # CONFIG_PKG_USING_PERF_COUNTER is not set -CONFIG_FAL_DEBUG_CONFIG=y -CONFIG_FAL_PART_HAS_TABLE_CFG=y # CONFIG_PKG_USING_FLASHDB is not set # CONFIG_PKG_USING_SQLITE is not set # CONFIG_PKG_USING_RTI is not set @@ -665,7 +677,33 @@ CONFIG_FAL_PART_HAS_TABLE_CFG=y # CONFIG_PKG_USING_ARM_2D is not set # CONFIG_PKG_USING_MCUBOOT is not set # CONFIG_PKG_USING_TINYUSB is not set -# CONFIG_PKG_USING_CHERRYUSB is not set +CONFIG_PKG_USING_CHERRYUSB=y +CONFIG_PKG_CHERRYUSB_DEVICE=y +# CONFIG_PKG_CHERRYUSB_DEVICE_FS is not set +CONFIG_PKG_CHERRYUSB_DEVICE_HS=y +# CONFIG_PKG_CHERRYUSB_DEVICE_BL is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_CH32 is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_FSDEV is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_DWC2 is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_MM32 is not set +CONFIG_PKG_CHERRYUSB_DEVICE_MUSB=y +# CONFIG_PKG_CHERRYUSB_DEVICE_NUVOTON is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_IMXRT is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_MUSB_MSP432 is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_MUSB_ES32F3 is not set +CONFIG_PKG_CHERRYUSB_DEVICE_MUSB_SUNXI=y +# CONFIG_PKG_CHERRYUSB_DEVICE_CDC is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_HID is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_MSC is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_AUDIO is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_VIDEO is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_RNDIS is not set +# CONFIG_PKG_CHERRYUSB_DEVICE_DFU is not set +# CONFIG_PKG_CHERRYUSB_DEVIEC_HUB is not set +# CONFIG_PKG_CHERRYUSB_HOST is not set +CONFIG_PKG_CHERRYUSB_PATH="/packages/system/CherryUSB" +CONFIG_PKG_USING_CHERRYUSB_LATEST_VERSION=y +CONFIG_PKG_CHERRYUSB_VER="latest" # CONFIG_PKG_USING_KMULTI_RTIMER is not set # CONFIG_PKG_USING_TFDB is not set # CONFIG_PKG_USING_QPC is not set @@ -899,7 +937,6 @@ CONFIG_UART0_RX_USING_GPIOE3=y CONFIG_BSP_USING_SDMMC=y CONFIG_SD_CARD_CHECK=y CONFIG_BSP_USING_FS=y -# CONFIG_BSP_USING_G2D is not set # CONFIG_BSP_USING_LCD is not set # diff --git a/bsp/allwinner/f133/.gitignore b/bsp/allwinner/d1s/.gitignore similarity index 100% rename from bsp/allwinner/f133/.gitignore rename to bsp/allwinner/d1s/.gitignore diff --git a/bsp/allwinner/f133/Kconfig b/bsp/allwinner/d1s/Kconfig similarity index 100% rename from bsp/allwinner/f133/Kconfig rename to bsp/allwinner/d1s/Kconfig diff --git a/bsp/allwinner/f133/README.md b/bsp/allwinner/d1s/README.md similarity index 100% rename from bsp/allwinner/f133/README.md rename to bsp/allwinner/d1s/README.md diff --git a/bsp/allwinner/f133/SConscript b/bsp/allwinner/d1s/SConscript similarity index 100% rename from bsp/allwinner/f133/SConscript rename to bsp/allwinner/d1s/SConscript diff --git a/bsp/allwinner/f133/SConstruct b/bsp/allwinner/d1s/SConstruct similarity index 100% rename from bsp/allwinner/f133/SConstruct rename to bsp/allwinner/d1s/SConstruct diff --git a/bsp/allwinner/f133/applications/SConscript b/bsp/allwinner/d1s/applications/SConscript similarity index 100% rename from bsp/allwinner/f133/applications/SConscript rename to bsp/allwinner/d1s/applications/SConscript diff --git a/bsp/allwinner/f133/applications/main.c b/bsp/allwinner/d1s/applications/main.c similarity index 100% rename from bsp/allwinner/f133/applications/main.c rename to bsp/allwinner/d1s/applications/main.c diff --git a/bsp/allwinner/f133/applications/mnt.c b/bsp/allwinner/d1s/applications/mnt.c similarity index 100% rename from bsp/allwinner/f133/applications/mnt.c rename to bsp/allwinner/d1s/applications/mnt.c diff --git a/bsp/allwinner/f133/board/SConscript b/bsp/allwinner/d1s/board/SConscript similarity index 100% rename from bsp/allwinner/f133/board/SConscript rename to bsp/allwinner/d1s/board/SConscript diff --git a/bsp/allwinner/f133/board/board.c b/bsp/allwinner/d1s/board/board.c similarity index 100% rename from bsp/allwinner/f133/board/board.c rename to bsp/allwinner/d1s/board/board.c diff --git a/bsp/allwinner/f133/board/board.h b/bsp/allwinner/d1s/board/board.h similarity index 100% rename from bsp/allwinner/f133/board/board.h rename to bsp/allwinner/d1s/board/board.h diff --git a/bsp/allwinner/f133/figures/board.png b/bsp/allwinner/d1s/figures/board.png similarity index 100% rename from bsp/allwinner/f133/figures/board.png rename to bsp/allwinner/d1s/figures/board.png diff --git a/bsp/allwinner/f133/figures/ddr_partition.png b/bsp/allwinner/d1s/figures/ddr_partition.png similarity index 100% rename from bsp/allwinner/f133/figures/ddr_partition.png rename to bsp/allwinner/d1s/figures/ddr_partition.png diff --git a/bsp/allwinner/f133/figures/emmc_partition.png b/bsp/allwinner/d1s/figures/emmc_partition.png similarity index 100% rename from bsp/allwinner/f133/figures/emmc_partition.png rename to bsp/allwinner/d1s/figures/emmc_partition.png diff --git a/bsp/allwinner/f133/figures/error_name.png b/bsp/allwinner/d1s/figures/error_name.png similarity index 100% rename from bsp/allwinner/f133/figures/error_name.png rename to bsp/allwinner/d1s/figures/error_name.png diff --git a/bsp/allwinner/f133/figures/fel_driver.png b/bsp/allwinner/d1s/figures/fel_driver.png similarity index 100% rename from bsp/allwinner/f133/figures/fel_driver.png rename to bsp/allwinner/d1s/figures/fel_driver.png diff --git a/bsp/allwinner/f133/figures/lwip.png b/bsp/allwinner/d1s/figures/lwip.png similarity index 100% rename from bsp/allwinner/f133/figures/lwip.png rename to bsp/allwinner/d1s/figures/lwip.png diff --git a/bsp/allwinner/f133/figures/mobaxterm.png b/bsp/allwinner/d1s/figures/mobaxterm.png similarity index 100% rename from bsp/allwinner/f133/figures/mobaxterm.png rename to bsp/allwinner/d1s/figures/mobaxterm.png diff --git a/bsp/allwinner/f133/figures/mount.png b/bsp/allwinner/d1s/figures/mount.png similarity index 100% rename from bsp/allwinner/f133/figures/mount.png rename to bsp/allwinner/d1s/figures/mount.png diff --git a/bsp/allwinner/f133/figures/user_app.png b/bsp/allwinner/d1s/figures/user_app.png similarity index 100% rename from bsp/allwinner/f133/figures/user_app.png rename to bsp/allwinner/d1s/figures/user_app.png diff --git a/bsp/allwinner/f133/link.lds b/bsp/allwinner/d1s/link.lds similarity index 100% rename from bsp/allwinner/f133/link.lds rename to bsp/allwinner/d1s/link.lds diff --git a/bsp/allwinner/f133/link_stacksize.lds b/bsp/allwinner/d1s/link_stacksize.lds similarity index 100% rename from bsp/allwinner/f133/link_stacksize.lds rename to bsp/allwinner/d1s/link_stacksize.lds diff --git a/bsp/allwinner/f133/mkimage b/bsp/allwinner/d1s/mkimage old mode 100755 new mode 100644 similarity index 100% rename from bsp/allwinner/f133/mkimage rename to bsp/allwinner/d1s/mkimage diff --git a/bsp/allwinner/f133/mksdimg.sh b/bsp/allwinner/d1s/mksdimg.sh old mode 100755 new mode 100644 similarity index 65% rename from bsp/allwinner/f133/mksdimg.sh rename to bsp/allwinner/d1s/mksdimg.sh index 259bac7360..e8fdc0adc3 --- a/bsp/allwinner/f133/mksdimg.sh +++ b/bsp/allwinner/d1s/mksdimg.sh @@ -1,5 +1,5 @@ #/bin/sh ./mkimage -T sunxi_toc1 -d toc1.cfg sd.bin # offset: 8K of spl,+48K of toc1 -#sudo dd if=boot0_sdcard_sun20iw1p1.bin of=/dev/sdb bs=1024 seek=8 +#sudo dd if=boot0_sdcard_sun20iw1p1_d1s.bin of=/dev/sdb bs=1024 seek=8 #sudo dd if=sd.bin of=/dev/sdb bs=1024 seek=56 diff --git a/bsp/allwinner/f133/ports/SConscript b/bsp/allwinner/d1s/ports/SConscript similarity index 100% rename from bsp/allwinner/f133/ports/SConscript rename to bsp/allwinner/d1s/ports/SConscript diff --git a/bsp/allwinner/f133/ports/fal/SConscript b/bsp/allwinner/d1s/ports/fal/SConscript similarity index 100% rename from bsp/allwinner/f133/ports/fal/SConscript rename to bsp/allwinner/d1s/ports/fal/SConscript diff --git a/bsp/allwinner/f133/ports/fal/fal_cfg.h b/bsp/allwinner/d1s/ports/fal/fal_cfg.h similarity index 100% rename from bsp/allwinner/f133/ports/fal/fal_cfg.h rename to bsp/allwinner/d1s/ports/fal/fal_cfg.h diff --git a/bsp/allwinner/f133/ports/fal/fal_init.c b/bsp/allwinner/d1s/ports/fal/fal_init.c similarity index 100% rename from bsp/allwinner/f133/ports/fal/fal_init.c rename to bsp/allwinner/d1s/ports/fal/fal_init.c diff --git a/bsp/allwinner/f133/ports/fal/fal_norflash_sfud_port.c b/bsp/allwinner/d1s/ports/fal/fal_norflash_sfud_port.c similarity index 100% rename from bsp/allwinner/f133/ports/fal/fal_norflash_sfud_port.c rename to bsp/allwinner/d1s/ports/fal/fal_norflash_sfud_port.c diff --git a/bsp/allwinner/f133/ports/fal/fal_sd_sfud_port.c b/bsp/allwinner/d1s/ports/fal/fal_sd_sfud_port.c similarity index 100% rename from bsp/allwinner/f133/ports/fal/fal_sd_sfud_port.c rename to bsp/allwinner/d1s/ports/fal/fal_sd_sfud_port.c diff --git a/bsp/allwinner/f133/ports/wifi/SConscript b/bsp/allwinner/d1s/ports/wifi/SConscript similarity index 100% rename from bsp/allwinner/f133/ports/wifi/SConscript rename to bsp/allwinner/d1s/ports/wifi/SConscript diff --git a/bsp/allwinner/f133/ports/wifi/rw007_pin_port.c b/bsp/allwinner/d1s/ports/wifi/rw007_pin_port.c similarity index 100% rename from bsp/allwinner/f133/ports/wifi/rw007_pin_port.c rename to bsp/allwinner/d1s/ports/wifi/rw007_pin_port.c diff --git a/bsp/allwinner/f133/rtconfig.h b/bsp/allwinner/d1s/rtconfig.h similarity index 99% rename from bsp/allwinner/f133/rtconfig.h rename to bsp/allwinner/d1s/rtconfig.h index 99fe9f3e7d..f309245c7c 100644 --- a/bsp/allwinner/f133/rtconfig.h +++ b/bsp/allwinner/d1s/rtconfig.h @@ -273,8 +273,6 @@ /* XML: Extensible Markup Language */ -#define PKG_USING_EZXML -#define PKG_USING_EZXML_LATEST_VERSION /* multimedia packages */ diff --git a/bsp/allwinner/f133/rtconfig.py b/bsp/allwinner/d1s/rtconfig.py similarity index 100% rename from bsp/allwinner/f133/rtconfig.py rename to bsp/allwinner/d1s/rtconfig.py diff --git a/bsp/allwinner/f133/toc1.cfg b/bsp/allwinner/d1s/toc1.cfg similarity index 100% rename from bsp/allwinner/f133/toc1.cfg rename to bsp/allwinner/d1s/toc1.cfg diff --git a/bsp/allwinner/f133/u-boot.dtb b/bsp/allwinner/d1s/u-boot.dtb similarity index 100% rename from bsp/allwinner/f133/u-boot.dtb rename to bsp/allwinner/d1s/u-boot.dtb diff --git a/bsp/allwinner/libraries/drivers/Kconfig b/bsp/allwinner/libraries/drivers/Kconfig index 59153ca1b4..46e5e963de 100644 --- a/bsp/allwinner/libraries/drivers/Kconfig +++ b/bsp/allwinner/libraries/drivers/Kconfig @@ -266,13 +266,8 @@ menuconfig BSP_USING_FS select FAL_PART_HAS_TABLE_CFG default y -config BSP_USING_G2D - bool "Enable G2D" - default n - menuconfig BSP_USING_LCD bool "Enable LCD" - select BSP_USING_G2D select BSP_USING_PWM default n diff --git a/bsp/allwinner/libraries/drivers/lcd_cfg.c b/bsp/allwinner/libraries/drivers/lcd_cfg.c index 31272e3489..023b98d066 100644 --- a/bsp/allwinner/libraries/drivers/lcd_cfg.c +++ b/bsp/allwinner/libraries/drivers/lcd_cfg.c @@ -8,13 +8,11 @@ #include "disp_board_config.h" #include -#include "ezxml.h" #include "lcd_cfg.h" struct property_t *g_lcd0_config = NULL; static struct lcd_cfg_panel_info _panel_info = DEFAULT_LCD_CONFIG; -// struct property_t *cur = NULL; struct property_t g_lcd0_config_rgb[] = { { @@ -30,12 +28,12 @@ struct property_t g_lcd0_config_rgb[] = { { .name = "lcd_if", .type = PROPERTY_INTGER, - .v.value = 0, /* LCD_IF_HV */ + .v.value = 0, /* LCD_IF_HV */ }, { .name = "lcd_hv_if", .type = PROPERTY_INTGER, - .v.value = 0, /* LCD_HV_IF_PRGB_1CYC */ + .v.value = 0, /* LCD_HV_IF_PRGB_1CYC */ }, { .name = "lcd_x", @@ -189,7 +187,7 @@ struct property_t g_lcd0_config_rgb[] = { .data = 1, }, }, - //gpio + // gpio { .name = "LCD0_D2", .type = PROPERTY_PIN, @@ -409,8 +407,7 @@ struct property_t g_lcd0_config_rgb[] = { .pull = 0, .drv_level = 3, }, - } -}; + }}; struct property_t g_lcd0_config_mipi[] = { { @@ -441,7 +438,7 @@ struct property_t g_lcd0_config_mipi[] = { { .name = "lcd_y", .type = PROPERTY_INTGER, - .v.value = 960,//1280 + .v.value = 960, // 1280 }, { .name = "lcd_width", @@ -584,7 +581,6 @@ struct property_t g_lcd0_config_mipi[] = { .v.value = 1000, }, - // backlight enable /* { @@ -611,7 +607,7 @@ struct property_t g_lcd0_config_mipi[] = { // .data = 1, // }, // }, - //gpio + // gpio { .name = "LCD0_D0", .type = PROPERTY_PIN, @@ -712,129 +708,6 @@ struct property_t g_lcd0_config_mipi[] = { .drv_level = 3, }, }, - -#if 0 - { - .name = "LCD0_D10", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(10), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D11", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(11), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D12", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(12), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D13", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(13), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D14", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(14), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D15", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(15), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D16", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(16), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_D17", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(17), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_CLK", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(18), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_DE", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(19), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_HSYNC", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(20), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, - { - .name = "LCD0_VSYNC", - .type = PROPERTY_PIN, - .v.gpio_list = { - .gpio = GPIOD(21), - .mul_sel = 2, - .pull = 0, - .drv_level = 3, - }, - }, -#endif }; struct property_t g_lcd0_config_lvds[] = { @@ -881,7 +754,7 @@ struct property_t g_lcd0_config_lvds[] = { { .name = "lcd_dclk_freq", .type = PROPERTY_INTGER, - .v.value = 71*2, // dual lvds, freq=single*2. + .v.value = 71 * 2, // dual lvds, freq=single*2. }, { .name = "lcd_rb_swap", @@ -916,12 +789,12 @@ struct property_t g_lcd0_config_lvds[] = { { .name = "lcd_hbp", .type = PROPERTY_INTGER, - .v.value = 90,// P19: Tblk(h) period 74-90-140 + .v.value = 90, // P19: Tblk(h) period 74-90-140 }, { .name = "lcd_ht", .type = PROPERTY_INTGER, - .v.value = (960+90)*2,// x+hbp P19: Th period 1034-1050-1100 + .v.value = (960 + 90) * 2, // x+hbp P19: Th period 1034-1050-1100 }, { .name = "lcd_hspw", @@ -936,7 +809,7 @@ struct property_t g_lcd0_config_lvds[] = { { .name = "lcd_vt", .type = PROPERTY_INTGER, - .v.value = (1080+50)+50, // y+vbp P19: Tv period 1092-1130-1818 + .v.value = (1080 + 50) + 50, // y+vbp P19: Tv period 1092-1130-1818 }, { .name = "lcd_vspw", @@ -1009,8 +882,7 @@ struct property_t g_lcd0_config_lvds[] = { .v.value = 90, }, - -//gpio + // gpio { .name = "LCD0_D0", .type = PROPERTY_PIN, @@ -1212,26 +1084,6 @@ struct property_t g_lcd0_config_lvds[] = { .drv_level = 3, }, }, - // { - // .name = "LCD0_HSYNC", - // .type = PROPERTY_PIN, - // .v.gpio_list = { - // .gpio = GPIOD(20), - // .mul_sel = 2, - // .pull = 0, - // .drv_level = 3, - // }, - // }, - // { - // .name = "LCD0_VSYNC", - // .type = PROPERTY_PIN, - // .v.gpio_list = { - // .gpio = GPIOD(21), - // .mul_sel = 2, - // .pull = 0, - // .drv_level = 3, - // }, - // }, #endif }; @@ -1253,12 +1105,12 @@ struct property_t g_disp_config[] = { { .name = "disp_mode", .type = PROPERTY_INTGER, - .v.value = 0, /* DISP_INIT_MODE_SCREEN0 */ + .v.value = 0, /* DISP_INIT_MODE_SCREEN0 */ }, { .name = "screen0_output_type", .type = PROPERTY_INTGER, - .v.value = 1, /* DISP_OUTPUT_TYPE_LCD */ + .v.value = 1, /* DISP_OUTPUT_TYPE_LCD */ }, { .name = "screen0_output_mode", @@ -1311,34 +1163,6 @@ u32 g_lcd0_config_len = sizeof(g_lcd0_config_rgb) / sizeof(struct property_t); u32 g_lcd1_config_len = sizeof(g_lcd1_config) / sizeof(struct property_t); u32 g_disp_config_len = sizeof(g_disp_config) / sizeof(struct property_t); - - -// #define LCD_CONFIG_XML_1V1MAP -#ifdef LCD_CONFIG_XML_1V1MAP - -static void _load_xml_attr(ezxml_t xml, struct property_t *_config, const u32 config_len) -{ - const char *p_str; - u32 i; - - for (i = 0; i < config_len; i++) - { - if (_config[i].type != PROPERTY_INTGER) - { - continue; - } - - p_str = ezxml_attr(xml, _config[i].name); - if (p_str != NULL) - { - _config[i].v.value = atoi(p_str); - rt_kprintf("lcd config '%s':%u\n", _config[i].name, _config[i].v.value); - } - } -} - -#else - static struct property_t *_lcd_property_find(const char *name, struct property_t *_config, const u32 config_len) { u32 i; @@ -1359,218 +1183,16 @@ static struct property_t *_lcd_property_find(const char *name, struct property_t return NULL; } -static void _get_xml_attr_type(ezxml_t xml) -{ - const char *p_str; - p_str = ezxml_attr(xml,"type"); - if (p_str != RT_NULL) strcpy(_panel_info.type, p_str); -} - -static void _load_xml_attr(ezxml_t xml, struct property_t *_config, const u32 config_len) -{ -#if defined(RT_USING_DFS) && defined(PKG_USING_EZXML) - { - const char *p_str; - struct property_t *_config_item; - const char *_attr_table[][2] = { - {"x", "lcd_x"}, - {"y", "lcd_y"}, - {"dclk_freq", "lcd_dclk_freq"}, - {"hbp", "lcd_hbp"}, - {"vbp", "lcd_vbp"}, - {"hspw", "lcd_hspw"}, - {"vspw", "lcd_vspw"}, - }; - size_t i; - int hv_pol = 0; - int clk_pha = 0; - - for (i = 0; i < sizeof(_attr_table) / sizeof(_attr_table[0]); i++) - { - p_str = ezxml_attr(xml, _attr_table[i][0]); - if (p_str != RT_NULL) - { - _config_item = _lcd_property_find(_attr_table[i][1], _config, config_len); - if (_config_item) - { - _config_item->v.value = atoi(p_str); - } - } - } - - /* lcd_ht = lcd_x + lcd_hspw + lcd_hbp + lcd_hfp */ - p_str = ezxml_attr(xml, "hfp"); - if (p_str != RT_NULL) - { - struct property_t *lcd_ht; - struct property_t *lcd_x; - struct property_t *lcd_hspw; - struct property_t *lcd_hbp; - - lcd_ht = _lcd_property_find("lcd_ht", _config, config_len); - lcd_x = _lcd_property_find("lcd_x", _config, config_len); - lcd_hspw = _lcd_property_find("lcd_hspw", _config, config_len); - lcd_hbp = _lcd_property_find("lcd_hbp", _config, config_len); - - if (lcd_ht && lcd_x && lcd_hspw && lcd_hbp) - { - int hfp; - - hfp = atoi(p_str); - - lcd_ht->v.value = lcd_x->v.value + lcd_hspw->v.value + lcd_hbp->v.value + hfp; - } - } - - /* lcd_vt = lcd_y + lcd_vspw + lcd_vbp + lcd_vfp */ - p_str = ezxml_attr(xml, "vfp"); - if (p_str != RT_NULL) - { - struct property_t *lcd_vt; - struct property_t *lcd_y; - struct property_t *lcd_vspw; - struct property_t *lcd_vbp; - - lcd_vt = _lcd_property_find("lcd_vt", _config, config_len); - lcd_y = _lcd_property_find("lcd_y", _config, config_len); - lcd_vspw = _lcd_property_find("lcd_vspw", _config, config_len); - lcd_vbp = _lcd_property_find("lcd_vbp", _config, config_len); - - if (lcd_vt && lcd_y && lcd_vspw && lcd_vbp) - { - int vfp; - - vfp = atoi(p_str); - - lcd_vt->v.value = lcd_y->v.value + lcd_vspw->v.value + lcd_vbp->v.value + vfp; - } - } - - p_str = ezxml_attr(xml, "ht"); - if (p_str != RT_NULL) - { - struct property_t *lcd_ht; - - lcd_ht = _lcd_property_find("lcd_ht", _config, config_len); - if (lcd_ht) - { - lcd_ht->v.value = atoi(p_str); - } - } - - p_str = ezxml_attr(xml, "vt"); - if (p_str != RT_NULL) - { - struct property_t *lcd_vt; - - lcd_vt = _lcd_property_find("lcd_vt", _config, config_len); - if (lcd_vt) - { - lcd_vt->v.value = atoi(p_str); - } - } - - p_str = ezxml_attr(xml, "h_sync_active"); - if (p_str != RT_NULL) - { - hv_pol |= 1; - } - - p_str = ezxml_attr(xml, "v_sync_active"); - if (p_str != RT_NULL) - { - hv_pol |= 2; - } - - if (hv_pol != 0) - { - struct property_t *lcd_hv_sync_polarity; - - lcd_hv_sync_polarity = _lcd_property_find("lcd_hv_sync_polarity", _config, config_len); - - if (lcd_hv_sync_polarity) - { - lcd_hv_sync_polarity->v.value = hv_pol; - } - } - - p_str = ezxml_attr(xml, "den_active"); - if (p_str != RT_NULL) - { - struct property_t *lcd_de_polarity; - - lcd_de_polarity = _lcd_property_find("lcd_de_polarity", _config, config_len); - - if (lcd_de_polarity) - { - lcd_de_polarity->v.value = atoi(p_str); - } - } - - p_str = ezxml_attr(xml, "clk_active"); - if (p_str != RT_NULL) - { - clk_pha |= 2; - } - - if (clk_pha != 0) - { - struct property_t *lcd_de_polarity; - - lcd_de_polarity = _lcd_property_find("lcd_hv_clk_phase", _config, config_len); - - if (lcd_de_polarity) - { - lcd_de_polarity->v.value = clk_pha; - } - } - - p_str = ezxml_attr(xml,"x"); - if (p_str != RT_NULL) _panel_info.width = atoi(p_str); - p_str = ezxml_attr(xml,"y"); - if (p_str != RT_NULL) _panel_info.height = atoi(p_str); - p_str = ezxml_attr(xml,"lane"); - if (p_str != RT_NULL) _panel_info.lane = atoi(p_str); - p_str = ezxml_attr(xml,"swap_flag"); - if (p_str != RT_NULL) _panel_info.swap_flag = atoi(p_str); - p_str = ezxml_attr(xml,"ctp_flag"); - if (p_str != RT_NULL) _panel_info.ctp_flag = atoi(p_str); - p_str = ezxml_attr(xml,"bl_mode"); - if (p_str != RT_NULL) _panel_info.bl_mode = atoi(p_str); - p_str = ezxml_attr(xml,"bl_gpio_pin"); - if (p_str != RT_NULL) _panel_info.bl_gpio_pin = atoi(p_str); - p_str = ezxml_attr(xml,"bl_gpio_level"); - if (p_str != RT_NULL) _panel_info.bl_gpio_level = atoi(p_str); - p_str = ezxml_attr(xml,"bl_pwm_name"); - if (p_str != RT_NULL) strcpy(_panel_info.bl_pwm_name, p_str); - p_str = ezxml_attr(xml,"bl_pwm_hz"); - if (p_str != RT_NULL) _panel_info.bl_pwm_hz = atoi(p_str); - p_str = ezxml_attr(xml,"bl_pwm_val"); - if (p_str != RT_NULL) _panel_info.bl_pwm_val = atoi(p_str); - p_str = ezxml_attr(xml,"bl_pin"); - if (p_str != RT_NULL) _panel_info.bl_pin = atoi(p_str); - p_str = ezxml_attr(xml,"bl_level"); - if (p_str != RT_NULL) _panel_info.bl_level = atoi(p_str); - p_str = ezxml_attr(xml,"pwr_pin"); - if (p_str != RT_NULL) _panel_info.pwr_pin = atoi(p_str); - p_str = ezxml_attr(xml,"pwr_level"); - if (p_str != RT_NULL) _panel_info.pwr_level = atoi(p_str); - } -#endif /* RT_USING_DFS && PKG_USING_EZXML */ -} -#endif /* LCD_CONFIG_XML_1V1MAP */ - #ifndef LCD_XML_CONFIG_FILE #define LCD_CONFIG_FILE "/etc/lcd_config.xml" #else #define LCD_CONFIG_FILE LCD_XML_CONFIG_FILE #endif -const struct lcd_cfg_panel_info* load_lcd_config_from_xml(void) +const struct lcd_cfg_panel_info *load_lcd_config_from_xml(void) { struct property_t *_config_item; static rt_uint8_t init_state = 0; - rt_enter_critical(); if (init_state == 0) { @@ -1590,51 +1212,6 @@ const struct lcd_cfg_panel_info* load_lcd_config_from_xml(void) g_lcd0_config = g_lcd0_config_rgb; g_lcd0_config_len = sizeof(g_lcd0_config_rgb) / sizeof(struct property_t); - -#if defined(RT_USING_DFS) && defined(PKG_USING_EZXML) - { - ezxml_t xml; - const char *p_str; - int i; - - if (access(LCD_CONFIG_FILE,0) != 0) - { - rt_kprintf("Can not found %s\r\nLCD setting the default configuration\r\n", LCD_CONFIG_FILE); - goto _RET; - } - xml = ezxml_parse_file(LCD_CONFIG_FILE); - if (xml == RT_NULL) - { - rt_kprintf("parse failed %s\r\nLCD setting the default configuration\r\n", LCD_CONFIG_FILE); - goto _RET; - } - - _get_xml_attr_type(xml); - - if(strstr(_panel_info.type, "rgb")) - { - - } - else if(strstr(_panel_info.type, "lvds")) - { - g_lcd0_config = g_lcd0_config_lvds; - g_lcd0_config_len = sizeof(g_lcd0_config_lvds) / sizeof(struct property_t); - } - else if(strstr(_panel_info.type, "mipi")) - { - g_lcd0_config = g_lcd0_config_mipi; - g_lcd0_config_len = sizeof(g_lcd0_config_mipi) / sizeof(struct property_t); - } - - _load_xml_attr(xml, g_lcd0_config, g_lcd0_config_len); -#ifdef LCD_CONFIG_XML_1V1MAP - _load_xml_attr(xml, g_lcd1_config, g_lcd1_config_len); - _load_xml_attr(xml, g_disp_config, g_disp_config_len); -#endif - - } -#endif - _RET: init_state = 2; -- Gitee From cd93e56b45f54b6036f13f24c181ef8c3dfabdac Mon Sep 17 00:00:00 2001 From: Rbb666 Date: Tue, 1 Nov 2022 16:24:48 +0800 Subject: [PATCH 2/2] add boot0_sdcard_sun20iw1p1_d1s.bin --- .../d1s/tools/boot0_sdcard_sun20iw1p1_d1s.bin | Bin 0 -> 49152 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bsp/allwinner/d1s/tools/boot0_sdcard_sun20iw1p1_d1s.bin diff --git a/bsp/allwinner/d1s/tools/boot0_sdcard_sun20iw1p1_d1s.bin b/bsp/allwinner/d1s/tools/boot0_sdcard_sun20iw1p1_d1s.bin new file mode 100644 index 0000000000000000000000000000000000000000..47e9fc278c0439c7c98e5dad884cea8ca235a71e GIT binary patch literal 49152 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 literal 0 HcmV?d00001 -- Gitee