diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 10b1cb152491e608e41279a088c3c46943886376..09cdac786ab84cce055cd08580b9de5a534be2c5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -291,11 +291,11 @@ build rpi3-zero2: when: manual variables: ARCH: 'rpi3' -#build rg353x: -# <<: *build_definition -# when: manual -# variables: -# ARCH: 'rg353x' +build rg353x: + <<: *build_definition + when: manual + variables: + ARCH: 'rg353x' build rpi5_64: <<: *build_definition when: manual diff --git a/Config.in b/Config.in index af559bc07ff0f7491832405264bff5bc48cf944c..48cba4fdf3d4ab031d2d28e331596ed331906100 100644 --- a/Config.in +++ b/Config.in @@ -31,7 +31,6 @@ menu "Recalbox" menu "u-boot" source "$BR2_EXTERNAL_RECALBOX_PATH/package/uboot-xu4/Config.in" source "$BR2_EXTERNAL_RECALBOX_PATH/package/uboot-odroidgo2/Config.in" - source "$BR2_EXTERNAL_RECALBOX_PATH/package/uboot-rg353x/Config.in" endmenu endmenu menu "Video" diff --git a/board/recalbox/anbernic/rg353x/genimage.cfg b/board/recalbox/anbernic/rg353x/genimage.cfg index 5d933b11ba4bdfe117482adae450020c01ec306f..f7d729edf1bda3d6a69fa0769af1d23bec225641 100644 --- a/board/recalbox/anbernic/rg353x/genimage.cfg +++ b/board/recalbox/anbernic/rg353x/genimage.cfg @@ -32,19 +32,20 @@ image recalbox.img { partition idbloader { in-partition-table = "no" - image = "idbloader.img" + image = "u-boot-rockchip-idbloader.bin" offset = 32K + size = 8355840 } partition uboot { in-partition-table = "yes" - image = "uboot.img" + image = "u-boot-rockchip-uboot.bin" offset = 8M + size = 4M } partition resource { in-partition-table = "yes" - image = "resource.img" offset = 12M size = 4M } diff --git a/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig-fragment.config b/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig-fragment.config new file mode 100644 index 0000000000000000000000000000000000000000..a3bb773b1618f2eb065a1c56f7d509146178c552 --- /dev/null +++ b/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig-fragment.config @@ -0,0 +1,34 @@ +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +CONFIG_USB_HID=m +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_DECOMP_MULTI=y +CONFIG_OVERLAY_FS=y + +# add some joystick support +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_PXRC=m +CONFIG_HID_ICADE=m +CONFIG_HID_MAYFLASH=m +CONFIG_HID_RETRODE=m +CONFIG_HID_SAITEK=m +CONFIG_HID_STEELSERIES=m + +# enable force feedback +CONFIG_HID_ACRUX_FF=y +CONFIG_DRAGONRISE_FF=y +CONFIG_HOLTEK_FF=y +CONFIG_PANTHERLORD_FF=y +CONFIG_GREENASIA_FF=y +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_THRUSTMASTER_FF=y +CONFIG_ZEROPLUS_FF=y + +# disable module compression +CONFIG_MODULE_COMPRESS_NONE=y + +# ported drivers +CONFIG_JOYSTICK_SINGLEADCJOY=y diff --git a/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig.config b/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig.config new file mode 100644 index 0000000000000000000000000000000000000000..519dff387554662e8b563799193342901662fd31 --- /dev/null +++ b/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig.config @@ -0,0 +1,945 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_DEFAULT_HOSTNAME="@DEVICENAME@" +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_WATCH_QUEUE=y +# CONFIG_CROSS_MEMORY_ATTACH is not set +CONFIG_USELIB=y +CONFIG_NO_HZ_IDLE=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT=y +CONFIG_BPF_JIT_ALWAYS_ON=y +# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=18 +CONFIG_MEMCG=y +CONFIG_BLK_CGROUP=y +CONFIG_CFS_BANDWIDTH=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CGROUP_PIDS=y +CONFIG_CGROUP_RDMA=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_DEVICE=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y +CONFIG_NAMESPACES=y +CONFIG_SCHED_AUTOGROUP=y +CONFIG_RELAY=y +CONFIG_BOOT_CONFIG=y +CONFIG_EXPERT=y +CONFIG_SGETMASK_SYSCALL=y +CONFIG_KALLSYMS_ALL=y +CONFIG_PROFILING=y +CONFIG_ARCH_ROCKCHIP=y +CONFIG_ARM64_ERRATUM_2441007=y +CONFIG_ARM64_ERRATUM_1286807=y +CONFIG_ARM64_ERRATUM_1542419=y +CONFIG_ARM64_ERRATUM_2441009=y +# CONFIG_CAVIUM_ERRATUM_22375 is not set +# CONFIG_CAVIUM_ERRATUM_23154 is not set +# CONFIG_CAVIUM_ERRATUM_27456 is not set +# CONFIG_CAVIUM_ERRATUM_30115 is not set +# CONFIG_CAVIUM_TX2_ERRATUM_219 is not set +# CONFIG_FUJITSU_ERRATUM_010001 is not set +# CONFIG_HISILICON_ERRATUM_161600802 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set +# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set +# CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set +# CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set +# CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set +CONFIG_ARM64_VA_BITS_39=y +CONFIG_SCHED_MC=y +CONFIG_SCHED_SMT=y +CONFIG_NR_CPUS=4 +CONFIG_ARM64_SW_TTBR0_PAN=y +CONFIG_COMPAT=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_ARM64_PMEM=y +# CONFIG_ARM64_BTI is not set +# CONFIG_ARM64_SME is not set +CONFIG_RANDOMIZE_BASE=y +# CONFIG_EFI is not set +CONFIG_SUSPEND_SKIP_SYNC=y +CONFIG_PM_AUTOSLEEP=y +CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y +CONFIG_ENERGY_MODEL=y +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_GOV_LADDER=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_STAT=y +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_CPUFREQ_DT=y +CONFIG_ARM_SCMI_CPUFREQ=y +# CONFIG_GCC_PLUGINS is not set +CONFIG_MODULES=y +CONFIG_MODULE_FORCE_LOAD=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_BLK_DEV_BSGLIB=y +CONFIG_PARTITION_ADVANCED=y +CONFIG_MAC_PARTITION=y +# CONFIG_MQ_IOSCHED_KYBER is not set +# CONFIG_IOSCHED_BFQ is not set +CONFIG_BINFMT_MISC=y +# CONFIG_SLAB_MERGE_DEFAULT is not set +# CONFIG_SLUB_CPU_PARTIAL is not set +# CONFIG_COMPAT_BRK is not set +# CONFIG_COMPACTION is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 +# CONFIG_VM_EVENT_COUNTERS is not set +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_UNIX_DIAG=m +CONFIG_XFRM_USER=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE_DEMUX=m +CONFIG_NET_IPGRE=m +CONFIG_IP_MROUTE=y +CONFIG_IP_MROUTE_MULTIPLE_TABLES=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +# CONFIG_INET_DIAG is not set +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_CUBIC=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_SCALABLE=m +CONFIG_TCP_CONG_LP=m +CONFIG_TCP_CONG_VENO=m +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +CONFIG_TCP_CONG_DCTCP=m +CONFIG_TCP_CONG_CDG=m +CONFIG_TCP_MD5SIG=y +CONFIG_NET_NSH=m +CONFIG_NET_L3_MASTER_DEV=y +CONFIG_CGROUP_NET_PRIO=y +CONFIG_CGROUP_NET_CLASSID=y +CONFIG_BT=m +CONFIG_BT_RFCOMM=y +CONFIG_BT_HIDP=m +CONFIG_BT_HCIBTUSB=m +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_RTL=y +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_CFG80211=m +# CONFIG_CFG80211_DEFAULT_PS is not set +# CONFIG_CFG80211_CRDA_SUPPORT is not set +CONFIG_MAC80211=m +CONFIG_MAC80211_MESH=y +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=y +CONFIG_RFKILL_GPIO=m +CONFIG_CEPH_LIB=m +# CONFIG_ETHTOOL_NETLINK is not set +CONFIG_UEVENT_HELPER=y +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +CONFIG_DEVTMPFS_SAFE=y +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +# CONFIG_ALLOW_DEV_COREDUMP is not set +CONFIG_DEBUG_DEVRES=y +CONFIG_CONNECTOR=y +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCMI_POWER_CONTROL=y +CONFIG_ARM_SCPI_PROTOCOL=y +CONFIG_ARM_FFA_TRANSPORT=y +CONFIG_MTD=y +CONFIG_MTD_BLOCK=y +CONFIG_MTD_SPI_NOR=y +CONFIG_OF_OVERLAY=y +CONFIG_ZRAM=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=1 +CONFIG_SRAM=y +CONFIG_EEPROM_93CX6=y +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_BLK_DEV_SR=y +CONFIG_SCSI_SCAN_ASYNC=y +CONFIG_SCSI_SPI_ATTRS=y +CONFIG_NETDEVICES=y +CONFIG_WIREGUARD=m +CONFIG_TUN=m +CONFIG_VETH=y +# CONFIG_NET_VENDOR_ALACRITECH is not set +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AMD is not set +# CONFIG_NET_VENDOR_AQUANTIA is not set +# CONFIG_NET_VENDOR_ARC is not set +# CONFIG_NET_VENDOR_ASIX is not set +# CONFIG_NET_VENDOR_BROADCOM is not set +# CONFIG_NET_VENDOR_CADENCE is not set +# CONFIG_NET_VENDOR_CAVIUM is not set +# CONFIG_NET_VENDOR_CORTINA is not set +# CONFIG_NET_VENDOR_DAVICOM is not set +# CONFIG_NET_VENDOR_ENGLEDER is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_FUNGIBLE is not set +# CONFIG_NET_VENDOR_GOOGLE is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_HUAWEI is not set +# CONFIG_NET_VENDOR_INTEL is not set +# CONFIG_NET_VENDOR_ADI is not set +# CONFIG_NET_VENDOR_LITEX is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_MICREL is not set +# CONFIG_NET_VENDOR_MICROCHIP is not set +# CONFIG_NET_VENDOR_MICROSEMI is not set +# CONFIG_NET_VENDOR_MICROSOFT is not set +# CONFIG_NET_VENDOR_NI is not set +# CONFIG_NET_VENDOR_NATSEMI is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +# CONFIG_NET_VENDOR_PENSANDO is not set +# CONFIG_NET_VENDOR_QUALCOMM is not set +# CONFIG_NET_VENDOR_RENESAS is not set +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SAMSUNG is not set +# CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SOLARFLARE is not set +# CONFIG_NET_VENDOR_SMSC is not set +# CONFIG_NET_VENDOR_SOCIONEXT is not set +# CONFIG_NET_VENDOR_STMICRO is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +# CONFIG_NET_VENDOR_VERTEXCOM is not set +# CONFIG_NET_VENDOR_VIA is not set +# CONFIG_NET_VENDOR_WANGXUN is not set +# CONFIG_NET_VENDOR_WIZNET is not set +# CONFIG_NET_VENDOR_XILINX is not set +CONFIG_ROCKCHIP_PHY=y +CONFIG_PPP=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPPOE=m +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_USB_RTL8150=y +CONFIG_USB_RTL8152=y +CONFIG_USB_USBNET=y +CONFIG_USB_NET_CDC_MBIM=y +# CONFIG_USB_NET_NET1080 is not set +CONFIG_USB_NET_RNDIS_HOST=y +# CONFIG_USB_NET_CDC_SUBSET is not set +# CONFIG_USB_NET_ZAURUS is not set +CONFIG_USB_NET_QMI_WWAN=y +CONFIG_ATH9K=m +CONFIG_ATH6KL=m +CONFIG_ATH6KL_USB=m +CONFIG_AR5523=m +CONFIG_ATH10K=m +CONFIG_WCN36XX=m +CONFIG_AT76C50X_USB=m +# CONFIG_WLAN_VENDOR_BROADCOM is not set +# CONFIG_WLAN_VENDOR_INTEL is not set +# CONFIG_WLAN_VENDOR_INTERSIL is not set +# CONFIG_WLAN_VENDOR_MARVELL is not set +# CONFIG_WLAN_VENDOR_MEDIATEK is not set +# CONFIG_WLAN_VENDOR_MICROCHIP is not set +# CONFIG_WLAN_VENDOR_PURELIFI is not set +CONFIG_RT2X00=m +CONFIG_RT2500USB=m +CONFIG_RT73USB=m +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT3573=y +CONFIG_RT2800USB_RT53XX=y +CONFIG_RT2800USB_RT55XX=y +CONFIG_RT2800USB_UNKNOWN=y +CONFIG_RTL8187=m +CONFIG_RTL8XXXU=m +CONFIG_RTW88=m +CONFIG_RTW88_8822BS=m +CONFIG_RTW88_8822BU=m +CONFIG_RTW88_8822CS=m +CONFIG_RTW88_8822CU=m +CONFIG_RTW88_8723DS=m +CONFIG_RTW88_8723CS=m +CONFIG_RTW88_8723DU=m +CONFIG_RTW88_8821CS=m +CONFIG_RTW88_8821CU=m +CONFIG_RTW89=m +# CONFIG_WLAN_VENDOR_RSI is not set +# CONFIG_WLAN_VENDOR_SILABS is not set +# CONFIG_WLAN_VENDOR_ST is not set +# CONFIG_WLAN_VENDOR_TI is not set +CONFIG_ZD1211RW=m +# CONFIG_WLAN_VENDOR_QUANTENNA is not set +CONFIG_INPUT_MATRIXKMAP=y +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_ADC=y +# CONFIG_KEYBOARD_ATKBD is not set +CONFIG_KEYBOARD_GPIO=y +CONFIG_KEYBOARD_GPIO_POLLED=y +# CONFIG_MOUSE_PS2 is not set +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ADC=y +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_JOYSTICK_SINGLEADCJOY=y +CONFIG_INPUT_TABLET=y +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ATMEL_MXT=y +CONFIG_TOUCHSCREEN_GOODIX=y +CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX=y +CONFIG_TOUCHSCREEN_USB_COMPOSITE=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_UINPUT=y +CONFIG_INPUT_PWM_VIBRA=y +CONFIG_INPUT_RK805_PWRKEY=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_LIBPS2=y +CONFIG_GAMEPORT=y +# CONFIG_LEGACY_PTYS is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=5 +CONFIG_SERIAL_8250_RUNTIME_UARTS=5 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y +CONFIG_SERIAL_8250_DW=y +CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +CONFIG_SERIAL_DEV_BUS=y +CONFIG_HW_RANDOM=y +CONFIG_TCG_TPM=y +# CONFIG_I2C_COMPAT is not set +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y +CONFIG_I2C_RK3X=y +CONFIG_SPI=y +CONFIG_SPI_GPIO=y +CONFIG_SPI_ROCKCHIP=y +CONFIG_SPI_ROCKCHIP_SFC=y +CONFIG_SPI_MUX=y +CONFIG_SPI_SPIDEV=y +CONFIG_PINCTRL_RK805=y +CONFIG_PINCTRL_SINGLE=y +CONFIG_GPIO_SYSFS=y +CONFIG_GPIO_GENERIC_PLATFORM=y +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +CONFIG_SYSCON_REBOOT_MODE=y +CONFIG_BATTERY_CW2015=y +CONFIG_CHARGER_GPIO=y +CONFIG_CHARGER_BQ24735=y +CONFIG_CHARGER_RK817=y +CONFIG_SENSORS_PWM_FAN=y +CONFIG_THERMAL=y +CONFIG_THERMAL_GOV_FAIR_SHARE=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_ROCKCHIP_THERMAL=y +CONFIG_WATCHDOG=y +CONFIG_DW_WATCHDOG=y +CONFIG_MFD_RK8XX_I2C=y +CONFIG_MFD_TPS6586X=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_DEBUG=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_VIRTUAL_CONSUMER=y +CONFIG_REGULATOR_USERSPACE_CONSUMER=y +CONFIG_REGULATOR_ACT8865=y +CONFIG_REGULATOR_ARM_SCMI=y +CONFIG_REGULATOR_FAN53555=y +CONFIG_REGULATOR_GPIO=y +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_TPS6586X=y +CONFIG_REGULATOR_VCTRL=y +CONFIG_MEDIA_CEC_SUPPORT=y +CONFIG_USB_PULSE8_CEC=m +CONFIG_USB_RAINSHADOW_CEC=m +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_SUPPORT_FILTER=y +# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set +CONFIG_MEDIA_CAMERA_SUPPORT=y +CONFIG_MEDIA_ANALOG_TV_SUPPORT=y +CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y +CONFIG_MEDIA_RADIO_SUPPORT=y +CONFIG_MEDIA_SDR_SUPPORT=y +CONFIG_MEDIA_PLATFORM_SUPPORT=y +CONFIG_MEDIA_TEST_SUPPORT=y +CONFIG_MEDIA_CONTROLLER_DVB=y +CONFIG_DVB_MAX_ADAPTERS=8 +# CONFIG_DVB_DYNAMIC_MINORS is not set +# CONFIG_RADIO_ADAPTERS is not set +CONFIG_V4L_PLATFORM_DRIVERS=y +CONFIG_V4L_MEM2MEM_DRIVERS=y +CONFIG_VIDEO_ROCKCHIP_RGA=y +CONFIG_VIDEO_HANTRO=m +# CONFIG_VIDEO_CAMERA_SENSOR is not set +# CONFIG_CXD2880_SPI_DRV is not set +# CONFIG_MEDIA_TUNER_E4000 is not set +# CONFIG_MEDIA_TUNER_FC0011 is not set +# CONFIG_MEDIA_TUNER_FC0012 is not set +# CONFIG_MEDIA_TUNER_FC0013 is not set +# CONFIG_MEDIA_TUNER_FC2580 is not set +# CONFIG_MEDIA_TUNER_IT913X is not set +# CONFIG_MEDIA_TUNER_M88RS6000T is not set +# CONFIG_MEDIA_TUNER_MAX2165 is not set +# CONFIG_MEDIA_TUNER_MC44S803 is not set +# CONFIG_MEDIA_TUNER_MSI001 is not set +# CONFIG_MEDIA_TUNER_MT2060 is not set +# CONFIG_MEDIA_TUNER_MT2063 is not set +# CONFIG_MEDIA_TUNER_MT20XX is not set +# CONFIG_MEDIA_TUNER_MT2131 is not set +# CONFIG_MEDIA_TUNER_MT2266 is not set +# CONFIG_MEDIA_TUNER_MXL301RF is not set +# CONFIG_MEDIA_TUNER_MXL5005S is not set +# CONFIG_MEDIA_TUNER_MXL5007T is not set +# CONFIG_MEDIA_TUNER_QM1D1B0004 is not set +# CONFIG_MEDIA_TUNER_QM1D1C0042 is not set +# CONFIG_MEDIA_TUNER_QT1010 is not set +# CONFIG_MEDIA_TUNER_R820T is not set +# CONFIG_MEDIA_TUNER_SI2157 is not set +# CONFIG_MEDIA_TUNER_SIMPLE is not set +# CONFIG_MEDIA_TUNER_TDA18212 is not set +# CONFIG_MEDIA_TUNER_TDA18218 is not set +# CONFIG_MEDIA_TUNER_TDA18250 is not set +# CONFIG_MEDIA_TUNER_TDA18271 is not set +# CONFIG_MEDIA_TUNER_TDA827X is not set +# CONFIG_MEDIA_TUNER_TDA8290 is not set +# CONFIG_MEDIA_TUNER_TDA9887 is not set +# CONFIG_MEDIA_TUNER_TEA5761 is not set +# CONFIG_MEDIA_TUNER_TEA5767 is not set +# CONFIG_MEDIA_TUNER_TUA9001 is not set +# CONFIG_MEDIA_TUNER_XC2028 is not set +# CONFIG_MEDIA_TUNER_XC4000 is not set +# CONFIG_MEDIA_TUNER_XC5000 is not set +# CONFIG_DVB_M88DS3103 is not set +# CONFIG_DVB_MXL5XX is not set +# CONFIG_DVB_STB0899 is not set +# CONFIG_DVB_STB6100 is not set +# CONFIG_DVB_STV090x is not set +# CONFIG_DVB_STV0910 is not set +# CONFIG_DVB_STV6110x is not set +# CONFIG_DVB_STV6111 is not set +# CONFIG_DVB_DRXK is not set +# CONFIG_DVB_MN88472 is not set +# CONFIG_DVB_MN88473 is not set +# CONFIG_DVB_SI2165 is not set +# CONFIG_DVB_TDA18271C2DD is not set +# CONFIG_DVB_CX24110 is not set +# CONFIG_DVB_CX24116 is not set +# CONFIG_DVB_CX24117 is not set +# CONFIG_DVB_CX24120 is not set +# CONFIG_DVB_CX24123 is not set +# CONFIG_DVB_DS3000 is not set +# CONFIG_DVB_MB86A16 is not set +# CONFIG_DVB_MT312 is not set +# CONFIG_DVB_S5H1420 is not set +# CONFIG_DVB_SI21XX is not set +# CONFIG_DVB_STB6000 is not set +# CONFIG_DVB_STV0288 is not set +# CONFIG_DVB_STV0299 is not set +# CONFIG_DVB_STV0900 is not set +# CONFIG_DVB_STV6110 is not set +# CONFIG_DVB_TDA10071 is not set +# CONFIG_DVB_TDA10086 is not set +# CONFIG_DVB_TDA8083 is not set +# CONFIG_DVB_TDA8261 is not set +# CONFIG_DVB_TDA826X is not set +# CONFIG_DVB_TS2020 is not set +# CONFIG_DVB_TUA6100 is not set +# CONFIG_DVB_TUNER_CX24113 is not set +# CONFIG_DVB_TUNER_ITD1000 is not set +# CONFIG_DVB_VES1X93 is not set +# CONFIG_DVB_ZL10036 is not set +# CONFIG_DVB_ZL10039 is not set +# CONFIG_DVB_AF9013 is not set +# CONFIG_DVB_CX22700 is not set +# CONFIG_DVB_CX22702 is not set +# CONFIG_DVB_CXD2820R is not set +# CONFIG_DVB_CXD2841ER is not set +# CONFIG_DVB_DIB3000MB is not set +# CONFIG_DVB_DIB3000MC is not set +# CONFIG_DVB_DIB7000M is not set +# CONFIG_DVB_DIB7000P is not set +# CONFIG_DVB_DIB9000 is not set +# CONFIG_DVB_DRXD is not set +# CONFIG_DVB_EC100 is not set +# CONFIG_DVB_L64781 is not set +# CONFIG_DVB_MT352 is not set +# CONFIG_DVB_NXT6000 is not set +# CONFIG_DVB_RTL2830 is not set +# CONFIG_DVB_RTL2832 is not set +# CONFIG_DVB_RTL2832_SDR is not set +# CONFIG_DVB_S5H1432 is not set +# CONFIG_DVB_SI2168 is not set +# CONFIG_DVB_SP887X is not set +# CONFIG_DVB_STV0367 is not set +# CONFIG_DVB_TDA10048 is not set +# CONFIG_DVB_TDA1004X is not set +# CONFIG_DVB_ZD1301_DEMOD is not set +# CONFIG_DVB_ZL10353 is not set +# CONFIG_DVB_CXD2880 is not set +# CONFIG_DVB_STV0297 is not set +# CONFIG_DVB_TDA10021 is not set +# CONFIG_DVB_TDA10023 is not set +# CONFIG_DVB_VES1820 is not set +# CONFIG_DVB_AU8522_DTV is not set +# CONFIG_DVB_AU8522_V4L is not set +# CONFIG_DVB_BCM3510 is not set +# CONFIG_DVB_LG2160 is not set +# CONFIG_DVB_LGDT3305 is not set +# CONFIG_DVB_LGDT3306A is not set +# CONFIG_DVB_LGDT330X is not set +# CONFIG_DVB_MXL692 is not set +# CONFIG_DVB_NXT200X is not set +# CONFIG_DVB_OR51132 is not set +# CONFIG_DVB_OR51211 is not set +# CONFIG_DVB_S5H1409 is not set +# CONFIG_DVB_S5H1411 is not set +# CONFIG_DVB_DIB8000 is not set +# CONFIG_DVB_MB86A20S is not set +# CONFIG_DVB_S921 is not set +# CONFIG_DVB_MN88443X is not set +# CONFIG_DVB_TC90522 is not set +# CONFIG_DVB_PLL is not set +# CONFIG_DVB_TUNER_DIB0070 is not set +# CONFIG_DVB_TUNER_DIB0090 is not set +# CONFIG_DVB_A8293 is not set +# CONFIG_DVB_AF9033 is not set +# CONFIG_DVB_ASCOT2E is not set +# CONFIG_DVB_ATBM8830 is not set +# CONFIG_DVB_HELENE is not set +# CONFIG_DVB_HORUS3A is not set +# CONFIG_DVB_ISL6405 is not set +# CONFIG_DVB_ISL6421 is not set +# CONFIG_DVB_ISL6423 is not set +# CONFIG_DVB_IX2505V is not set +# CONFIG_DVB_LGS8GL5 is not set +# CONFIG_DVB_LGS8GXX is not set +# CONFIG_DVB_LNBH25 is not set +# CONFIG_DVB_LNBH29 is not set +# CONFIG_DVB_LNBP21 is not set +# CONFIG_DVB_LNBP22 is not set +# CONFIG_DVB_M88RS2000 is not set +# CONFIG_DVB_TDA665x is not set +# CONFIG_DVB_DRX39XYJ is not set +# CONFIG_DVB_CXD2099 is not set +# CONFIG_DVB_SP2 is not set +CONFIG_DRM=y +CONFIG_DRM_LOAD_EDID_FIRMWARE=y +CONFIG_DRM_MALI_DISPLAY=y +CONFIG_DRM_ROCKCHIP=y +CONFIG_ROCKCHIP_VOP2=y +CONFIG_ROCKCHIP_DW_HDMI=y +CONFIG_ROCKCHIP_DW_MIPI_DSI=y +CONFIG_DRM_PANEL_ELIDA_KD35T133=y +CONFIG_DRM_PANEL_HIMAX_HX8394=y +CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966=y +CONFIG_DRM_PANEL_NEWVISION_NV3051D=y +CONFIG_DRM_PANEL_SITRONIX_ST7701=y +CONFIG_DRM_PANEL_SITRONIX_ST7703=y +CONFIG_DRM_DISPLAY_CONNECTOR=y +CONFIG_DRM_DW_HDMI_CEC=y +CONFIG_DRM_PANEL_MIPI_DBI=y +CONFIG_DRM_PANFROST=m +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_MODE_HELPERS=y +CONFIG_BACKLIGHT_PWM=y +CONFIG_BACKLIGHT_LED=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_HRTIMER=y +CONFIG_SND_DYNAMIC_MINORS=y +# CONFIG_SND_SUPPORT_OLD_API is not set +# CONFIG_SND_VERBOSE_PROCFS is not set +CONFIG_SND_VERBOSE_PRINTK=y +CONFIG_SND_SEQUENCER=y +CONFIG_SND_SEQ_DUMMY=y +# CONFIG_SND_DRIVERS is not set +# CONFIG_SND_SPI is not set +CONFIG_SND_USB_AUDIO=y +CONFIG_SND_SOC=y +CONFIG_SND_SOC_FSL_SAI=y +CONFIG_SND_SOC_ROCKCHIP=y +CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=y +CONFIG_SND_SOC_ROCKCHIP_PDM=y +CONFIG_SND_SOC_ROCKCHIP_SPDIF=y +CONFIG_SND_SOC_RK3288_HDMI_ANALOG=y +CONFIG_SND_SOC_ES8316=y +CONFIG_SND_SOC_MAX98090=y +CONFIG_SND_SOC_RK817=y +CONFIG_SND_SOC_SIMPLE_AMPLIFIER=y +CONFIG_SND_SOC_SPDIF=y +CONFIG_SND_SOC_TS3A227E=y +CONFIG_SND_SIMPLE_CARD=y +CONFIG_SND_AUDIO_GRAPH_CARD=y +CONFIG_SND_AUDIO_GRAPH_CARD2=y +CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=y +CONFIG_SND_TEST_COMPONENT=y +CONFIG_HID_BATTERY_STRENGTH=y +CONFIG_HIDRAW=y +CONFIG_UHID=y +CONFIG_HID_A4TECH=y +CONFIG_HID_ACRUX=y +CONFIG_HID_ACRUX_FF=y +CONFIG_HID_BELKIN=y +CONFIG_HID_BETOP_FF=m +CONFIG_HID_CHERRY=y +CONFIG_HID_CHICONY=m +CONFIG_HID_CORSAIR=m +CONFIG_HID_PRODIKEYS=m +CONFIG_HID_CP2112=m +CONFIG_HID_CYPRESS=y +CONFIG_HID_DRAGONRISE=y +CONFIG_DRAGONRISE_FF=y +CONFIG_HID_EMS_FF=y +CONFIG_HID_ELO=m +CONFIG_HID_GEMBIRD=y +CONFIG_HID_KEYTOUCH=y +CONFIG_HID_KYE=y +CONFIG_HID_UCLOGIC=m +CONFIG_HID_WALTOP=y +CONFIG_HID_GYRATION=y +CONFIG_HID_ICADE=m +CONFIG_HID_TWINHAN=y +CONFIG_HID_KENSINGTON=y +CONFIG_HID_LCPOWER=y +CONFIG_HID_LOGITECH=m +CONFIG_HID_LOGITECH_DJ=m +CONFIG_LOGITECH_FF=y +CONFIG_LOGIRUMBLEPAD2_FF=y +CONFIG_LOGIG940_FF=y +CONFIG_HID_MAYFLASH=m +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MONTEREY=y +CONFIG_HID_MULTITOUCH=y +CONFIG_HID_NINTENDO=m +CONFIG_NINTENDO_FF=y +CONFIG_HID_ORTEK=y +CONFIG_HID_PANTHERLORD=y +CONFIG_PANTHERLORD_FF=y +CONFIG_HID_PENMOUNT=m +CONFIG_HID_PETALYNX=y +CONFIG_HID_PLANTRONICS=y +CONFIG_HID_PRIMAX=y +CONFIG_HID_RETRODE=m +CONFIG_HID_ROCCAT=m +CONFIG_HID_SAITEK=m +CONFIG_HID_SAMSUNG=m +CONFIG_HID_SONY=m +CONFIG_SONY_FF=y +CONFIG_HID_SPEEDLINK=y +CONFIG_HID_STEELSERIES=m +CONFIG_HID_SUNPLUS=y +CONFIG_HID_RMI=y +CONFIG_HID_GREENASIA=y +CONFIG_GREENASIA_FF=y +CONFIG_HID_SMARTJOYPLUS=y +CONFIG_SMARTJOYPLUS_FF=y +CONFIG_HID_TIVO=y +CONFIG_HID_TOPSEED=y +CONFIG_HID_THINGM=y +CONFIG_HID_THRUSTMASTER=m +CONFIG_THRUSTMASTER_FF=y +CONFIG_HID_WIIMOTE=y +CONFIG_HID_XINMO=y +CONFIG_HID_ZEROPLUS=y +CONFIG_ZEROPLUS_FF=y +CONFIG_HID_ZYDACRON=y +CONFIG_HID_SENSOR_HUB=y +CONFIG_HID_SENSOR_CUSTOM_SENSOR=y +CONFIG_USB_HID=m +CONFIG_USB_HIDDEV=y +CONFIG_I2C_HID_OF_GOODIX=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +# CONFIG_USB_DEFAULT_PERSIST is not set +CONFIG_USB_OTG=y +CONFIG_USB_OTG_PRODUCTLIST=y +CONFIG_USB_OTG_FSM=y +CONFIG_USB_LEDS_TRIGGER_USBPORT=y +CONFIG_USB_MON=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +CONFIG_USB_ACM=y +CONFIG_USB_STORAGE=y +CONFIG_USB_STORAGE_REALTEK=y +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +CONFIG_USB_STORAGE_ALAUDA=y +CONFIG_USB_STORAGE_ONETOUCH=y +CONFIG_USB_STORAGE_KARMA=y +CONFIG_USB_STORAGE_ENE_UB6250=y +CONFIG_USB_UAS=y +CONFIG_USB_DWC3=y +CONFIG_USB_DWC2=y +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +CONFIG_USB_SERIAL_CH341=m +CONFIG_USB_SERIAL_CP210X=m +CONFIG_USB_SERIAL_FTDI_SIO=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_QUALCOMM=m +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_DEBUG_FILES=y +CONFIG_USB_GADGET_VBUS_DRAW=500 +CONFIG_USB_CONFIGFS=m +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_ECM=y +CONFIG_USB_CONFIGFS_RNDIS=y +CONFIG_USB_CONFIGFS_EEM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_GADGETFS=m +CONFIG_USB_FUNCTIONFS=m +CONFIG_USB_MASS_STORAGE=m +CONFIG_USB_G_SERIAL=m +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_TEST=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_DWCMSHC=y +CONFIG_MMC_DW=y +CONFIG_MMC_DW_ROCKCHIP=y +CONFIG_MMC_HSQ=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=y +CONFIG_LEDS_CLASS_MULTICOLOR=y +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_IS31FL32XX=y +CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_RTC_CLASS=y +# CONFIG_RTC_SYSTOHC is not set +# CONFIG_RTC_INTF_PROC is not set +# CONFIG_RTC_INTF_DEV is not set +CONFIG_RTC_DRV_HYM8563=y +CONFIG_RTC_DRV_RK808=y +CONFIG_DMADEVICES=y +CONFIG_PL330_DMA=y +CONFIG_UDMABUF=y +CONFIG_DMABUF_HEAPS=y +CONFIG_DMABUF_HEAPS_SYSTEM=y +# CONFIG_VIRTIO_MENU is not set +# CONFIG_VHOST_MENU is not set +CONFIG_STAGING=y +CONFIG_RTL8723BS=m +CONFIG_R8712U=m +CONFIG_STAGING_MEDIA=y +CONFIG_VIDEO_ROCKCHIP_VDEC=y +# CONFIG_SURFACE_PLATFORMS is not set +CONFIG_COMMON_CLK_RK808=y +CONFIG_COMMON_CLK_SCMI=y +CONFIG_COMMON_CLK_SCPI=y +CONFIG_COMMON_CLK_PWM=y +CONFIG_COMMON_CLK_FIXED_MMIO=y +# CONFIG_CLK_PX30 is not set +# CONFIG_CLK_RK3308 is not set +# CONFIG_CLK_RK3328 is not set +# CONFIG_CLK_RK3368 is not set +# CONFIG_CLK_RK3399 is not set +# CONFIG_CLK_RK3588 is not set +# CONFIG_FSL_ERRATUM_A008585 is not set +# CONFIG_HISILICON_ERRATUM_161010101 is not set +# CONFIG_ARM64_ERRATUM_858921 is not set +CONFIG_MAILBOX=y +CONFIG_ARM_MHU=y +CONFIG_PLATFORM_MHU=y +CONFIG_ROCKCHIP_MBOX=y +CONFIG_ROCKCHIP_IOMMU=y +CONFIG_ARM_SMMU=y +CONFIG_ARM_SMMU_V3=y +CONFIG_ROCKCHIP_IODOMAIN=y +CONFIG_ROCKCHIP_PM_DOMAINS=y +CONFIG_DEVFREQ_GOV_PERFORMANCE=y +CONFIG_DEVFREQ_GOV_POWERSAVE=y +CONFIG_ARM_RK3399_DMC_DEVFREQ=y +CONFIG_MEMORY=y +CONFIG_IIO=y +CONFIG_IIO_BUFFER_HW_CONSUMER=y +CONFIG_IIO_SW_DEVICE=y +CONFIG_IIO_SW_TRIGGER=y +CONFIG_IIO_TRIGGERED_EVENT=y +CONFIG_ROCKCHIP_SARADC=y +CONFIG_SENSORS_ISL29018=y +CONFIG_SENSORS_TSL2563=y +CONFIG_TSL2583=y +CONFIG_IIO_MUX=y +CONFIG_IIO_HRTIMER_TRIGGER=y +CONFIG_IIO_SYSFS_TRIGGER=y +CONFIG_PWM=y +CONFIG_PWM_ROCKCHIP=y +CONFIG_PHY_ROCKCHIP_DP=y +CONFIG_PHY_ROCKCHIP_DPHY_RX0=y +CONFIG_PHY_ROCKCHIP_EMMC=y +CONFIG_PHY_ROCKCHIP_INNO_HDMI=y +CONFIG_PHY_ROCKCHIP_INNO_USB2=y +CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y +CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y +CONFIG_PHY_ROCKCHIP_NANENG_COMBO_PHY=y +CONFIG_PHY_ROCKCHIP_PCIE=y +CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y +CONFIG_PHY_ROCKCHIP_USB=y +CONFIG_ARM_SMMU_V3_PMU=y +CONFIG_RAS=y +CONFIG_NVMEM_ROCKCHIP_OTP=y +CONFIG_MUX_GPIO=y +CONFIG_MUX_MMIO=y +CONFIG_EXT4_FS=y +# CONFIG_EXT4_USE_FOR_EXT2 is not set +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_XFS_FS=y +CONFIG_BTRFS_FS=m +# CONFIG_DNOTIFY is not set +CONFIG_AUTOFS_FS=y +CONFIG_FUSE_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_IOCHARSET="ascii" +CONFIG_EXFAT_FS=y +CONFIG_NTFS_FS=m +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_DIRECT=y +CONFIG_SQUASHFS_LZ4=y +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +CONFIG_SQUASHFS_ZSTD=y +CONFIG_PSTORE=y +CONFIG_NFS_FS=y +CONFIG_CIFS=y +CONFIG_NLS_DEFAULT="utf-8" +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ASCII=y +CONFIG_NLS_ISO8859_1=y +CONFIG_NLS_UTF8=y +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +CONFIG_HARDENED_USERCOPY=y +CONFIG_STATIC_USERMODEHELPER=y +CONFIG_LSM="selinux,integrity" +CONFIG_INIT_STACK_NONE=y +CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y +CONFIG_INIT_ON_FREE_DEFAULT_ON=y +CONFIG_CRYPTO_USER=y +CONFIG_CRYPTO_PCRYPT=y +CONFIG_CRYPTO_CRYPTD=y +CONFIG_CRYPTO_ECDH=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_ARC4=y +CONFIG_CRYPTO_CTS=y +CONFIG_CRYPTO_XTS=y +CONFIG_CRYPTO_CHACHA20POLY1305=y +CONFIG_CRYPTO_ESSIV=y +CONFIG_CRYPTO_XCBC=y +CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_LZO=y +CONFIG_CRYPTO_LZ4=y +CONFIG_CRYPTO_LZ4HC=y +CONFIG_CRYPTO_ZSTD=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_USER_API_HASH=y +CONFIG_CRYPTO_USER_API_SKCIPHER=y +CONFIG_CRYPTO_USER_API_RNG=y +CONFIG_CRYPTO_USER_API_AEAD=y +CONFIG_CRYPTO_NHPOLY1305_NEON=y +CONFIG_CRYPTO_CHACHA20_NEON=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_POLY1305_NEON=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_SHA512_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64=y +CONFIG_CRYPTO_AES_ARM64_BS=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_DEV_ROCKCHIP=y +CONFIG_CORDIC=y +CONFIG_CRYPTO_LIB_CURVE25519=y +CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y +CONFIG_CRC_CCITT=y +CONFIG_CRC_T10DIF=y +CONFIG_CRC_ITU_T=y +CONFIG_CRC64=m +CONFIG_CRC7=y +# CONFIG_XZ_DEC_X86 is not set +# CONFIG_XZ_DEC_POWERPC is not set +# CONFIG_XZ_DEC_SPARC is not set +CONFIG_IRQ_POLL=y +CONFIG_PRINTK_TIME=y +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=7 +CONFIG_DYNAMIC_DEBUG=y +# CONFIG_SYMBOLIC_ERRNAME is not set +# CONFIG_DEBUG_MISC is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0 +CONFIG_DEBUG_FS=y +# CONFIG_SLUB_DEBUG is not set +CONFIG_PANIC_TIMEOUT=1 +CONFIG_DETECT_HUNG_TASK=y +CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y +# CONFIG_SCHED_DEBUG is not set +CONFIG_SCHEDSTATS=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_STACKTRACE=y +CONFIG_RCU_CPU_STALL_TIMEOUT=60 +CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=20 +# CONFIG_RCU_TRACE is not set +# CONFIG_FTRACE is not set +# CONFIG_STRICT_DEVMEM is not set +# CONFIG_RUNTIME_TESTING_MENU is not set diff --git a/board/recalbox/anbernic/rg353x/kernel_patches/0001-add-singleadc-joy.patch b/board/recalbox/anbernic/rg353x/kernel_patches/0001-add-singleadc-joy.patch new file mode 100644 index 0000000000000000000000000000000000000000..624a200213513e04f272c608b26acee6e9e2f1bf --- /dev/null +++ b/board/recalbox/anbernic/rg353x/kernel_patches/0001-add-singleadc-joy.patch @@ -0,0 +1,1403 @@ +From fa2996f558a2766abbdc4ef4becdd28b8505479f Mon Sep 17 00:00:00 2001 +From: David Barbion +Date: Mon, 4 Nov 2024 23:19:29 +0100 +Subject: [PATCH 1/3] add singleadc joy + +--- + .../dts/rockchip/rk3566-anbernic-rg353x.dtsi | 5 +- + .../dts/rockchip/rk3566-anbernic-rgxx3.dtsi | 160 ++- + drivers/input/joystick/Kconfig | 5 + + drivers/input/joystick/Makefile | 1 + + drivers/input/joystick/singleadcjoy.c | 1134 +++++++++++++++++ + 5 files changed, 1303 insertions(+), 2 deletions(-) + create mode 100644 drivers/input/joystick/singleadcjoy.c + +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +index 63a18ff36cea..69b55ebc4d28 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353x.dtsi +@@ -8,7 +8,8 @@ + #include "rk3566-anbernic-rgxx3.dtsi" + + / { +- adc-joystick { ++ adc_joystick: adc-joystick { ++ status = "disabled"; + compatible = "adc-joystick"; + io-channels = <&adc_mux 0>, + <&adc_mux 1>, +@@ -61,6 +62,7 @@ adc_mux: adc-mux { + io-channel-names = "parent"; + mux-controls = <&gpio_mux>; + settle-time-us = <100>; ++ status = "disabled"; + }; + + backlight: backlight { +@@ -74,6 +76,7 @@ gpio_mux: mux-controller { + mux-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>, + <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; + #mux-control-cells = <0>; ++ status = "disabled"; + }; + }; + +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +index 233eade30f21..b76fe7faf50e 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +@@ -17,6 +17,7 @@ chosen: chosen { + }; + + adc_keys: adc-keys { ++ status = "disabled"; + compatible = "adc-keys"; + io-channels = <&saradc 0>; + io-channel-names = "buttons"; +@@ -34,7 +35,163 @@ button-mode { + }; + }; + ++ joypad: singleadc-joypad { ++ compatible = "singleadc-joypad"; ++ hw_info = <0x01>; ++ ++ joypad-name = "retrogame_joypad"; ++ joypad-product = <0x1101>; ++ joypad-revision = <0x0100>; ++ ++ status = "okay"; ++ ++ /* gpio pincontrol setup */ ++ pinctrl-names = "default"; ++ pinctrl-0 = <&btn_pins_ctrl>; ++ ++ /* Analog mux define */ ++ io-channel-names = "amux_adc", "f_button"; ++ io-channels = <&saradc 3>, <&saradc 0>; ++ ++ /* adc mux channel count */ ++ amux-count = <4>; ++ /* adc mux select(a,b) gpio */ ++ amux-a-gpios = <&gpio0 RK_PB6 GPIO_ACTIVE_LOW>; ++ amux-b-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_LOW>; ++ /* adc mux enable gpio */ ++ amux-en-gpios = <&gpio0 RK_PB5 GPIO_ACTIVE_LOW>; ++ ++ /* adc calculate scale */ ++ button-adc-scale = <2>; ++ ++ /* adc deadzone range */ ++ button-adc-deadzone = <64>; ++ ++ /* ++ specifies fuzz value that is used to filter noise from ++ the event stream. ++ */ ++ button-adc-fuzz = <32>; ++ button-adc-flat = <32>; ++ ++ /* ++ Analog Stick data tuning value(precent) ++ p = positive direction, n = negative direction ++ report value = (real_adc_data * tuning_value) / 100 ++ */ ++ abs_x-p-tuning = <245>; ++ abs_x-n-tuning = <245>; ++ ++ abs_y-p-tuning = <245>; ++ abs_y-n-tuning = <245>; ++ ++ abs_rx-p-tuning = <245>; ++ abs_rx-n-tuning = <245>; ++ ++ abs_ry-p-tuning = <245>; ++ abs_ry-n-tuning = <245>; ++ ++ /* poll device interval (ms), adc read interval */ ++ poll-interval = <10>; ++ ++ /* f key raw value threshold ++ */ ++ f-key-threshold = <700>; ++ ++ /* gpio button auto repeat set value : default disable */ ++ /* ++ autorepeat; ++ */ ++ ++ sw1 { ++ gpios = <&gpio3 RK_PA3 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-UP"; ++ linux,code = ; ++ }; ++ sw2 { ++ gpios = <&gpio3 RK_PA4 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-DOWN"; ++ linux,code = ; ++ }; ++ sw3 { ++ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-LEFT"; ++ linux,code = ; ++ }; ++ sw4 { ++ gpios = <&gpio3 RK_PA5 GPIO_ACTIVE_LOW>; ++ label = "GPIO DPAD-RIGHT"; ++ linux,code = ; ++ }; ++ sw5 { ++ gpios = <&gpio3 RK_PC3 GPIO_ACTIVE_LOW>; ++ label = "GPIO KEY BTN-A"; ++ linux,code = ; ++ }; ++ sw6 { ++ gpios = <&gpio3 RK_PC2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-B"; ++ linux,code = ; ++ }; ++ sw7 { ++ gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-X"; ++ linux,code = ; ++ }; ++ sw8 { ++ gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN-Y"; ++ linux,code = ; ++ }; ++ sw9 { ++ gpios = <&gpio3 RK_PB6 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_SELECT"; ++ linux,code = ; ++ }; ++ sw10 { ++ gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_START"; ++ linux,code = ; ++ }; ++ sw11 { // really used ? ++ gpios = <&gpio3 RK_PB7 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_F"; ++ linux,code = ; ++ }; ++ sw12 { ++ gpios = <&gpio3 RK_PB1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL"; ++ linux,code = ; ++ }; ++ sw13 { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR"; ++ linux,code = ; ++ }; ++ sw14 { ++ gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TL2"; ++ linux,code = ; ++ }; ++ sw15 { ++ gpios = <&gpio3 RK_PB3 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_TR2"; ++ linux,code = ; ++ }; ++ sw16 { ++ gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBL"; ++ linux,code = ; ++ }; ++ sw17 { ++ gpios = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>; ++ label = "GPIO BTN_THUMBR"; ++ linux,code = ; ++ }; ++ }; ++ + gpio_keys_control: gpio-keys-control { ++ status = "disabled"; + compatible = "gpio-keys"; + pinctrl-0 = <&btn_pins_ctrl>; + pinctrl-names = "default"; +@@ -509,6 +666,7 @@ btn_pins_ctrl: btn-pins-ctrl { + <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>, + <3 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>, + <3 RK_PB6 RK_FUNC_GPIO &pcfg_pull_up>, ++ <3 RK_PB7 RK_FUNC_GPIO &pcfg_pull_up>, + <3 RK_PC0 RK_FUNC_GPIO &pcfg_pull_up>, + <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_up>, + <3 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>, +@@ -525,7 +683,7 @@ btn_pins_vol: btn-pins-vol { + joy-mux { + joy_mux_en: joy-mux-en { + rockchip,pins = +- <0 RK_PB5 RK_FUNC_GPIO &pcfg_output_low>; ++ <0 RK_PB5 RK_FUNC_GPIO &pcfg_pull_up>; + }; + }; + +diff --git a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig +index 7755e5b454d2..76a6729db95d 100644 +--- a/drivers/input/joystick/Kconfig ++++ b/drivers/input/joystick/Kconfig +@@ -422,4 +422,9 @@ config JOYSTICK_SEESAW + To compile this driver as a module, choose M here: the module will be + called adafruit-seesaw. + ++config JOYSTICK_SINGLEADCJOY ++ tristate "Single SARADC dual-joystick gamepad driver" ++ help ++ The 1-in 4-out SARADC joypad driver. ++ + endif +diff --git a/drivers/input/joystick/Makefile b/drivers/input/joystick/Makefile +index 9976f596a920..237aec2076dd 100644 +--- a/drivers/input/joystick/Makefile ++++ b/drivers/input/joystick/Makefile +@@ -41,3 +41,4 @@ obj-$(CONFIG_JOYSTICK_WARRIOR) += warrior.o + obj-$(CONFIG_JOYSTICK_WALKERA0701) += walkera0701.o + obj-$(CONFIG_JOYSTICK_XPAD) += xpad.o + obj-$(CONFIG_JOYSTICK_ZHENHUA) += zhenhua.o ++obj-$(CONFIG_JOYSTICK_SINGLEADCJOY) += singleadcjoy.o +diff --git a/drivers/input/joystick/singleadcjoy.c b/drivers/input/joystick/singleadcjoy.c +new file mode 100644 +index 000000000000..f79af578bba5 +--- /dev/null ++++ b/drivers/input/joystick/singleadcjoy.c +@@ -0,0 +1,1134 @@ ++/*----------------------------------------------------------------------------*/ ++ ++/* ++ * Copyright (c) 2008-2021 Anbernic ++ * Copyright (c) 2024 davidb2111 for Recalbox ++ */ ++ ++/* ++ * Single SARADC dual-joystick gamepad driver ++ */ ++ ++/*----------------------------------------------------------------------------*/ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/*----------------------------------------------------------------------------*/ ++#define DRV_NAME "retrogame_joypad" ++#define __LEFT_JOYSTICK_INVERT__ ++/*----------------------------------------------------------------------------*/ ++#define ADC_MAX_VOLTAGE 1800 ++#define ADC_DATA_TUNING(x, p) ((x * p) / 100) ++#define ADC_TUNING_DEFAULT 180 ++ ++struct bt_adc { ++ /* report value (mV) */ ++ int value; ++ /* report type */ ++ int report_type; ++ /* input device init value (mV) */ ++ int max, min; ++ /* calibrated adc value */ ++ int cal; ++ /* adc scale value */ ++ int scale; ++ /* invert report */ ++ bool invert; ++ /* amux channel */ ++ int amux_ch; ++ /* adc data tuning value([percent), p = positive, n = negative */ ++ int tuning_p, tuning_n; ++}; ++ ++struct analog_mux { ++ /* IIO ADC Channel : amux connect channel */ ++ struct iio_channel *iio_ch; ++ /* analog mux select(a,b) gpio */ ++ struct gpio_desc *sel_a_gpio; ++ struct gpio_desc *sel_b_gpio; ++ /* analog mux enable gpio */ ++ struct gpio_desc * en_gpio; ++}; ++ ++struct bt_gpio { ++ /* GPIO Request label */ ++ const char *label; ++ /* GPIO Number */ ++ int num; ++ struct gpio_desc * desc; ++ /* report type */ ++ int report_type; ++ /* report linux code */ ++ int linux_code; ++ /* prev button value */ ++ bool old_value; ++}; ++ ++struct joypad { ++ struct device *dev; ++ struct input_dev *input; ++ int poll_interval; ++ ++ /* report enable/disable */ ++ bool enable; ++ ++ /* analog mux & joystick control */ ++ struct analog_mux *amux; ++ /* analog mux max count */ ++ int amux_count; ++ /* analog button */ ++ struct bt_adc *adcs; ++ ++ /* report interval (ms) */ ++ int bt_gpio_count; ++ struct bt_gpio *gpios; ++ ++ /* button auto repeat */ ++ int auto_repeat; ++ ++ /* report threshold (mV) */ ++ int bt_adc_fuzz, bt_adc_flat; ++ /* adc read value scale */ ++ int bt_adc_scale; ++ /* joystick deadzone control */ ++ int bt_adc_deadzone; ++ ++ /* F key is an adc button */ ++ struct iio_channel *iio_ch_fkey; ++ int fkey_threshold; ++ int fkey_fired; ++ ++ struct mutex mutex; ++ ++ /* amux debug channel */ ++ int debug_ch; ++}; ++ ++/*----------------------------------------------------------------------------*/ ++// ++// set to the value in the boot.ini file. (if exist) ++// ++/*----------------------------------------------------------------------------*/ ++static unsigned int g_button_adc_fuzz = 0; ++static unsigned int g_button_adc_flat = 0; ++static unsigned int g_button_adc_scale = 0; ++static unsigned int g_button_adc_deadzone = 0; ++ ++static int button_adc_fuzz(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ g_button_adc_fuzz = simple_strtoul(str, NULL, 10); ++ return 0; ++} ++__setup("button-adc-fuzz=", button_adc_fuzz); ++ ++static int button_adc_flat(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ g_button_adc_flat = simple_strtoul(str, NULL, 10); ++ return 0; ++} ++__setup("button-adc-flat=", button_adc_flat); ++ ++static int button_adc_scale(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ g_button_adc_scale = simple_strtoul(str, NULL, 10); ++ return 0; ++} ++__setup("button-adc-scale=", button_adc_scale); ++ ++static int button_adc_deadzone(char *str) ++{ ++ if (!str) ++ return -EINVAL; ++ g_button_adc_deadzone = simple_strtoul(str, NULL, 10); ++ return 0; ++} ++__setup("button-adc-deadzone=", button_adc_deadzone); ++ ++/*----------------------------------------------------------------------------*/ ++/*----------------------------------------------------------------------------*/ ++static int joypad_amux_select(struct analog_mux *amux, int channel) ++{ ++ /* select mux channel */ ++ gpiod_set_value(amux->en_gpio, 1); ++ ++ switch(channel) { ++ case 0: /* EVENT (ABS_RY) */ ++ gpiod_set_value(amux->sel_a_gpio, 1); ++ gpiod_set_value(amux->sel_b_gpio, 1); ++ break; ++ case 1: /* EVENT (ABS_RX) */ ++ gpiod_set_value(amux->sel_a_gpio, 1); ++ gpiod_set_value(amux->sel_b_gpio, 0); ++ break; ++ case 2: /* EVENT (ABS_Y) */ ++ gpiod_set_value(amux->sel_a_gpio, 0); ++ gpiod_set_value(amux->sel_b_gpio, 1); ++ break; ++ case 3: /* EVENT (ABS_X) */ ++ gpiod_set_value(amux->sel_a_gpio, 0); ++ gpiod_set_value(amux->sel_b_gpio, 0); ++ break; ++ default: ++ /* amux disable */ ++ gpiod_set_value(amux->en_gpio, 0); ++ return -1; ++ } ++ /* mux swtiching speed : 35ns(on) / 9ns(off) */ ++ usleep_range(10, 20); ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_adc_read(struct analog_mux *amux, struct bt_adc *adc) ++{ ++ int value; ++ ++ ++ if (joypad_amux_select(amux, adc->amux_ch)) ++ return 0; ++ ++ iio_read_channel_raw(amux->iio_ch, &value); ++ ++ value *= adc->scale; ++#ifdef __LEFT_JOYSTICK_INVERT__ ++ return value; ++#else ++ return (adc->invert ? (adc->max - value) : value); ++#endif ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_adckey_read(struct iio_channel *channel) ++{ ++ int value; ++ ++ iio_read_channel_raw(channel, &value); ++ ++ return value; ++} ++ ++/*----------------------------------------------------------------------------*/ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/poll_interval [rw] ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_store_poll_interval(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, ++ size_t count) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ mutex_lock(&joypad->mutex); ++ joypad->poll_interval = simple_strtoul(buf, NULL, 10); ++ mutex_unlock(&joypad->mutex); ++ ++ return count; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_poll_interval(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ return sprintf(buf, "%d\n", joypad->poll_interval); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(poll_interval, S_IWUSR | S_IRUGO, ++ joypad_show_poll_interval, ++ joypad_store_poll_interval); ++ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/adc_fuzz [r] ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_adc_fuzz(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ return sprintf(buf, "%d\n", joypad->bt_adc_fuzz); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(adc_fuzz, S_IWUSR | S_IRUGO, ++ joypad_show_adc_fuzz, ++ NULL); ++ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/adc_flat [r] ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_adc_flat(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ return sprintf(buf, "%d\n", joypad->bt_adc_flat); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(adc_flat, S_IWUSR | S_IRUGO, ++ joypad_show_adc_flat, ++ NULL); ++ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/enable [rw] ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_store_enable(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, ++ size_t count) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ mutex_lock(&joypad->mutex); ++ joypad->enable = simple_strtoul(buf, NULL, 10); ++ mutex_unlock(&joypad->mutex); ++ ++ return count; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_enable(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ return sprintf(buf, "%d\n", joypad->enable); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(enable, S_IWUSR | S_IRUGO, ++ joypad_show_enable, ++ joypad_store_enable); ++ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/adc_cal [rw] ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_store_adc_cal(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, ++ size_t count) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ bool calibration; ++ ++ calibration = simple_strtoul(buf, NULL, 10); ++ ++ if (calibration) { ++ int nbtn; ++ ++ mutex_lock(&joypad->mutex); ++ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { ++ struct bt_adc *adc = &joypad->adcs[nbtn]; ++ ++ adc->value = joypad_adc_read(joypad->amux, adc); ++ if (!adc->value) { ++ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", ++ __func__, nbtn); ++ continue; ++ } ++ adc->cal = adc->value; ++ } ++ mutex_unlock(&joypad->mutex); ++ } ++ return count; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_adc_cal(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ int nbtn; ++ ssize_t pos; ++ ++ for (nbtn = 0, pos = 0; nbtn < joypad->amux_count; nbtn++) { ++ struct bt_adc *adc = &joypad->adcs[nbtn]; ++ pos += sprintf(&buf[pos], "adc[%d]->cal = %d\n", ++ nbtn, adc->cal); ++ } ++ pos += sprintf(&buf[pos], "adc scale = %d\n", joypad->bt_adc_scale); ++ return pos; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(adc_cal, S_IWUSR | S_IRUGO, ++ joypad_show_adc_cal, ++ joypad_store_adc_cal); ++ ++/*----------------------------------------------------------------------------*/ ++/* ++ * ATTRIBUTES: ++ * ++ * /sys/devices/platform/retrogame_joypad/amux_debug [rw] ++ * ++ * echo [debug channel] > amux_debug ++ * cat amux_debug : debug channel mux set & adc read ++ */ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_store_amux_debug(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, ++ size_t count) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ ++ joypad->debug_ch = simple_strtoul(buf, NULL, 10); ++ ++ /* if error than default setting(debug_ch = 0) */ ++ if (joypad->debug_ch > joypad->amux_count) ++ joypad->debug_ch = 0; ++ ++ return count; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static ssize_t joypad_show_amux_debug(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ struct analog_mux *amux = joypad->amux; ++ ssize_t pos; ++ int value; ++ ++ mutex_lock(&joypad->mutex); ++ ++ /* disable poll driver */ ++ if (joypad->enable) ++ joypad->enable = false; ++ ++ if (joypad_amux_select(amux, joypad->debug_ch)) ++ goto err_out; ++ ++ if (iio_read_channel_processed(amux->iio_ch, &value)) ++ goto err_out; ++ ++ pos = sprintf(buf, "amux ch[%d], adc scale = %d, adc value = %d\n", ++ joypad->debug_ch, joypad->bt_adc_scale, ++ value * joypad->bt_adc_scale); ++ goto out; ++ ++err_out: ++ pos = sprintf(buf, "error : amux setup & adc read!\n"); ++out: ++ mutex_unlock(&joypad->mutex); ++ return pos; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static DEVICE_ATTR(amux_debug, S_IWUSR | S_IRUGO, ++ joypad_show_amux_debug, ++ joypad_store_amux_debug); ++ ++/*----------------------------------------------------------------------------*/ ++static struct attribute *joypad_attrs[] = { ++ &dev_attr_poll_interval.attr, ++ &dev_attr_adc_fuzz.attr, ++ &dev_attr_adc_flat.attr, ++ &dev_attr_enable.attr, ++ &dev_attr_adc_cal.attr, ++ &dev_attr_amux_debug.attr, ++ NULL, ++}; ++ ++static struct attribute_group joypad_attr_group = { ++ .attrs = joypad_attrs, ++}; ++ ++/*----------------------------------------------------------------------------*/ ++/*----------------------------------------------------------------------------*/ ++static void joypad_gpio_check(struct input_dev *input) ++{ ++ struct joypad *joypad = input_get_drvdata(input); ++ int nbtn, value; ++ ++ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { ++ struct bt_gpio *gpio = &joypad->gpios[nbtn]; ++ ++ value = gpiod_get_value_cansleep(gpio->desc); ++ if(value < 0) { ++ dev_err(joypad->dev, "Failed to get GPIO state for button %s\n", gpio->label); ++ continue; ++ } ++ if (value != gpio->old_value) { ++ input_event(input, ++ gpio->report_type, ++ gpio->linux_code, ++ value); ++ gpio->old_value = value; ++ } ++ } ++ input_sync(input); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void joypad_adc_check(struct input_dev *input) ++{ ++ struct joypad *joypad = input_get_drvdata(input); ++ int nbtn; ++ int mag; ++ ++ /* Assumes an even number of axes and that joystick axis pairs are sequential */ ++ /* e.g. left stick Y immediately follows left stick X */ ++ for (nbtn = 0; nbtn < joypad->amux_count; nbtn+=2) { ++ struct bt_adc *adcx = &joypad->adcs[nbtn]; ++ struct bt_adc *adcy = &joypad->adcs[nbtn + 1]; ++ ++ /* Read first joystick axis */ ++ adcx->value = joypad_adc_read(joypad->amux, adcx); ++ if (!adcx->value) { ++ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); ++ continue; ++ } ++ adcx->value = adcx->value - adcx->cal; ++ ++ /* Read second joystick axis */ ++ adcy->value = joypad_adc_read(joypad->amux, adcy); ++ if (!adcy->value) { ++ //dev_err(joypad->dev, "%s : saradc channels[%d]! adc->value : %d\n",__func__, nbtn, adc->value); ++ continue; ++ } ++ adcy->value = adcy->value - adcy->cal; ++ ++ /* Joystick Deadzone check */ ++ mag = int_sqrt((adcx->value * adcx->value) + (adcy->value * adcy->value)); ++ if (joypad->bt_adc_deadzone) { ++ if (mag <= joypad->bt_adc_deadzone) { ++ adcx->value = 0; ++ adcy->value = 0; ++ } ++ else { ++ /* Assumes adcx->max == -adcx->min == adcy->max == -adcy->min */ ++ /* Order of operations is critical to avoid integer overflow */ ++ adcx->value = (((adcx->max * adcx->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcx->max - joypad->bt_adc_deadzone); ++ adcy->value = (((adcy->max * adcy->value) / mag) * (mag - joypad->bt_adc_deadzone)) / (adcy->max - joypad->bt_adc_deadzone); ++ } ++ } ++ ++ /* adc data tuning */ ++ if (adcx->tuning_n && adcx->value < 0) ++ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_n); ++ if (adcx->tuning_p && adcx->value > 0) ++ adcx->value = ADC_DATA_TUNING(adcx->value, adcx->tuning_p); ++ if (adcy->tuning_n && adcy->value < 0) ++ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_n); ++ if (adcy->tuning_p && adcy->value > 0) ++ adcy->value = ADC_DATA_TUNING(adcy->value, adcy->tuning_p); ++ ++ /* Clamp to [min, max] */ ++ adcx->value = adcx->value > adcx->max ? adcx->max : adcx->value; ++ adcx->value = adcx->value < adcx->min ? adcx->min : adcx->value; ++ adcy->value = adcy->value > adcy->max ? adcy->max : adcy->value; ++ adcy->value = adcy->value < adcy->min ? adcy->min : adcy->value; ++ ++ input_report_abs(input, ++ adcx->report_type, ++ adcx->invert ? adcx->value * (-1) : adcx->value); ++ input_report_abs(input, ++ adcy->report_type, ++ adcy->invert ? adcy->value * (-1) : adcy->value); ++ } ++ ++ /* check for adc keys (f key for instance) */ ++ if (joypad_adckey_read(joypad->iio_ch_fkey) < joypad->fkey_threshold && !joypad->fkey_fired) { ++ joypad->fkey_fired = 1; ++ input_report_key(input, BTN_MODE, 1); ++ } ++ if (joypad_adckey_read(joypad->iio_ch_fkey) >= joypad->fkey_threshold && joypad->fkey_fired) { ++ joypad->fkey_fired = 0; ++ input_report_key(input, BTN_MODE, 0); ++ } ++ ++ input_sync(input); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void joypad_poll(struct input_dev *input) ++{ ++ struct joypad *joypad = input_get_drvdata(input); ++ ++ if (joypad->enable) { ++ joypad_adc_check(input); ++ joypad_gpio_check(input); ++ } ++ if (input_get_poll_interval(input) != joypad->poll_interval) { ++ input_set_poll_interval(input, joypad->poll_interval); ++ } ++ ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_open(struct input_dev *input) ++{ ++ struct joypad *joypad = input_get_drvdata(input); ++ int nbtn; ++ ++ for (nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { ++ struct bt_gpio *gpio = &joypad->gpios[nbtn]; ++ gpio->old_value = 0; ++ } ++ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { ++ struct bt_adc *adc = &joypad->adcs[nbtn]; ++ ++ adc->value = joypad_adc_read(joypad->amux, adc); ++ if (!adc->value) { ++ dev_err(joypad->dev, "%s : saradc channels[%d]!\n", ++ __func__, nbtn); ++ continue; ++ } ++ adc->cal = adc->value; ++ dev_info(joypad->dev, "%s : adc[%d] adc->cal = %d\n", ++ __func__, nbtn, adc->cal); ++ } ++ /* buttons status sync */ ++ joypad_adc_check(input); ++ joypad_gpio_check(input); ++ ++ /* button report enable */ ++ mutex_lock(&joypad->mutex); ++ joypad->enable = true; ++ mutex_unlock(&joypad->mutex); ++ ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void joypad_close(struct input_dev *input) ++{ ++ struct joypad *joypad = input_get_drvdata(input); ++ ++ /* button report disable */ ++ mutex_lock(&joypad->mutex); ++ joypad->enable = false; ++ mutex_unlock(&joypad->mutex); ++ ++} ++ ++ ++static int joypad_fkey_setup(struct device *dev, struct joypad *joypad) ++{ ++ ++ enum iio_chan_type type; ++ ++ joypad->iio_ch_fkey = devm_iio_channel_get(dev, "f_button"); ++ if (PTR_ERR(joypad->iio_ch_fkey) == -EPROBE_DEFER) ++ return -EPROBE_DEFER; ++ if (IS_ERR(joypad->iio_ch_fkey)) { ++ dev_err(dev, "iio channel get error\n"); ++ return -EINVAL; ++ } ++ if (!joypad->iio_ch_fkey->indio_dev) ++ return -ENXIO; ++ ++ if (iio_get_channel_type(joypad->iio_ch_fkey, &type)) ++ return -EINVAL; ++ ++ if (type != IIO_VOLTAGE) { ++ dev_err(dev, "Incompatible channel type %d\n", type); ++ return -EINVAL; ++ } ++ return 0; ++} ++/*----------------------------------------------------------------------------*/ ++static int joypad_amux_setup(struct device *dev, struct joypad *joypad) ++{ ++ struct analog_mux *amux; ++ enum iio_chan_type type; ++ int ret; ++ ++ /* analog mux control struct init */ ++ joypad->amux = devm_kzalloc(dev, sizeof(struct analog_mux), ++ GFP_KERNEL); ++ if (!joypad->amux) { ++ dev_err(dev, "%s amux devm_kzmalloc error!", __func__); ++ return -ENOMEM; ++ } ++ amux = joypad->amux; ++ amux->iio_ch = devm_iio_channel_get(dev, "amux_adc"); ++ if (PTR_ERR(amux->iio_ch) == -EPROBE_DEFER) ++ return -EPROBE_DEFER; ++ if (IS_ERR(amux->iio_ch)) { ++ dev_err(dev, "iio channel get error\n"); ++ return -EINVAL; ++ } ++ if (!amux->iio_ch->indio_dev) ++ return -ENXIO; ++ ++ if (iio_get_channel_type(amux->iio_ch, &type)) ++ return -EINVAL; ++ ++ if (type != IIO_VOLTAGE) { ++ dev_err(dev, "Incompatible channel type %d\n", type); ++ return -EINVAL; ++ } ++ ++ amux->sel_a_gpio = devm_gpiod_get(dev, "amux-a", GPIOD_OUT_LOW); ++ if (IS_ERR(amux->sel_a_gpio)) { ++ ret = PTR_ERR(amux->sel_a_gpio); ++ dev_err(dev, "%s: failed to get amux-a-gpios GPIO (%d)\n", __func__, ret); ++ goto err_out; ++ } ++ ++ amux->sel_b_gpio = devm_gpiod_get(dev, "amux-b", GPIOD_OUT_LOW); ++ if (IS_ERR(amux->sel_b_gpio)) { ++ ret = PTR_ERR(amux->sel_b_gpio); ++ dev_err(dev, "%s: failed to get amux-b-gpios GPIO (%d)\n", __func__, ret); ++ goto err_out; ++ } ++ ++ amux->en_gpio = devm_gpiod_get(dev, "amux-en", GPIOD_OUT_LOW); ++ if (IS_ERR(amux->en_gpio)) { ++ ret = PTR_ERR(amux->en_gpio); ++ dev_err(dev, "%s: failed to get amux-en-gpios GPIO (%d)\n", __func__, ret); ++ goto err_out; ++ } ++ ++ return 0; ++err_out: ++ return ret; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_adc_setup(struct device *dev, struct joypad *joypad) ++{ ++ int nbtn; ++ ++ /* adc button struct init */ ++ joypad->adcs = devm_kzalloc(dev, joypad->amux_count * ++ sizeof(struct bt_adc), GFP_KERNEL); ++ if (!joypad->adcs) { ++ dev_err(dev, "%s devm_kzmalloc error!", __func__); ++ return -ENOMEM; ++ } ++ ++ for (nbtn = 0; nbtn < joypad->amux_count; nbtn++) { ++ struct bt_adc *adc = &joypad->adcs[nbtn]; ++ ++ adc->scale = joypad->bt_adc_scale; ++ ++ adc->max = (ADC_MAX_VOLTAGE / 2); ++ adc->min = (ADC_MAX_VOLTAGE / 2) * (-1); ++ if (adc->scale) { ++ adc->max *= adc->scale; ++ adc->min *= adc->scale; ++ } ++ adc->amux_ch = nbtn; ++ adc->invert = false; ++ ++ switch (nbtn) { ++ case 0: ++ adc->report_type = ABS_RY; ++ if (device_property_read_u32(dev, ++ "abs_ry-p-tuning", ++ &adc->tuning_p)) ++ adc->tuning_p = ADC_TUNING_DEFAULT; ++ if (device_property_read_u32(dev, ++ "abs_ry-n-tuning", ++ &adc->tuning_n)) ++ adc->tuning_n = ADC_TUNING_DEFAULT; ++ break; ++ case 1: ++ adc->report_type = ABS_RX; ++ if (device_property_read_u32(dev, ++ "abs_rx-p-tuning", ++ &adc->tuning_p)) ++ adc->tuning_p = ADC_TUNING_DEFAULT; ++ if (device_property_read_u32(dev, ++ "abs_rx-n-tuning", ++ &adc->tuning_n)) ++ adc->tuning_n = ADC_TUNING_DEFAULT; ++ break; ++ case 2: ++ #ifdef __LEFT_JOYSTICK_INVERT__ ++ adc->invert = true; ++ #endif ++ adc->report_type = ABS_Y; ++ if (device_property_read_u32(dev, ++ "abs_y-p-tuning", ++ &adc->tuning_p)) ++ adc->tuning_p = ADC_TUNING_DEFAULT; ++ if (device_property_read_u32(dev, ++ "abs_y-n-tuning", ++ &adc->tuning_n)) ++ adc->tuning_n = ADC_TUNING_DEFAULT; ++ break; ++ case 3: ++ #ifdef __LEFT_JOYSTICK_INVERT__ ++ adc->invert = true; ++ #endif ++ adc->report_type = ABS_X; ++ if (device_property_read_u32(dev, ++ "abs_x-p-tuning", ++ &adc->tuning_p)) ++ adc->tuning_p = ADC_TUNING_DEFAULT; ++ if (device_property_read_u32(dev, ++ "abs_x-n-tuning", ++ &adc->tuning_n)) ++ adc->tuning_n = ADC_TUNING_DEFAULT; ++ break; ++ default : ++ dev_err(dev, "%s amux count(%d) error!", ++ __func__, nbtn); ++ return -EINVAL; ++ } ++ } ++ ++ // fkey property setup ++ if (device_property_read_u32(dev, "f-key-threshold", &joypad->fkey_threshold)) ++ joypad->fkey_threshold = 500; ++ ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_gpio_setup(struct device *dev, struct joypad *joypad) ++{ ++ struct fwnode_handle * child_dev; ++ int nbtn; ++ ++ joypad->gpios = devm_kzalloc(dev, joypad->bt_gpio_count * ++ sizeof(struct bt_gpio), GFP_KERNEL); ++ ++ if (!joypad->gpios) { ++ dev_err(dev, "%s devm_kzmalloc error!", __func__); ++ return -ENOMEM; ++ } ++ ++ nbtn = 0; ++ device_for_each_child_node(dev, child_dev) { ++ struct bt_gpio *gpio = &joypad->gpios[nbtn++]; ++ int error; ++ gpio->desc = devm_fwnode_gpiod_get(dev, child_dev, NULL, GPIOD_IN, "gpio_button"); ++ if (IS_ERR(gpio->desc)) { ++ error = PTR_ERR(gpio->desc); ++ dev_err(dev, "GPIO get error: %d\n", error); ++ return -EINVAL; ++ } ++ ++ ++ if (fwnode_property_read_u32(child_dev, "linux,code", ++ &gpio->linux_code)) { ++ dev_err(dev, "Button without keycode\n"); ++ fwnode_handle_put(child_dev); ++ return -EINVAL; ++ } ++ ++ fwnode_property_read_string(child_dev, "label", &gpio->label); ++ ++ /* gpio active level(key press level) */ ++ if (fwnode_property_read_u32(child_dev, "linux,code", &gpio->linux_code)) { ++ dev_err(dev, "Button without keycode: %s\n", ++ gpio->label); ++ return -EINVAL; ++ } ++ if (fwnode_property_read_u32(child_dev, "linux,input-type", ++ &gpio->report_type)) ++ gpio->report_type = EV_KEY; ++ } ++ if (nbtn == 0) { ++ dev_err(dev, "No button configured"); ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++ ++static int joypad_input_setup(struct device *dev, struct joypad *joypad) ++{ ++ struct input_dev *input; ++ int nbtn, error; ++ u32 joypad_revision = 0; ++ u32 joypad_product = 0; ++ ++ input = devm_input_allocate_device(dev); ++ if (!input) { ++ dev_err(dev, "Unable to allocate input device\n"); ++ return -ENOMEM; ++ } ++ ++ device_property_read_string(dev, "joypad-name", &input->name); ++ input->phys = DRV_NAME"/input0"; ++ ++ device_property_read_u32(dev, "joypad-revision", &joypad_revision); ++ device_property_read_u32(dev, "joypad-product", &joypad_product); ++ input->id.bustype = BUS_HOST; ++ input->id.vendor = 0x484B; ++ input->id.product = (u16)joypad_product; ++ input->id.version = (u16)joypad_revision; ++ input->open = joypad_open; ++ input->close = joypad_close; ++ input_set_drvdata(input, joypad); ++ ++ /* IIO ADC key setup (0 mv ~ 1800 mv) * adc->scale */ ++ __set_bit(EV_ABS, input->evbit); ++ for(nbtn = 0; nbtn < joypad->amux_count; nbtn++) { ++ struct bt_adc *adc = &joypad->adcs[nbtn]; ++ input_set_abs_params(input, adc->report_type, ++ adc->min, adc->max, ++ joypad->bt_adc_fuzz, ++ joypad->bt_adc_flat); ++ dev_info(dev, ++ "%s : SCALE = %d, ABS min = %d, max = %d," ++ " fuzz = %d, flat = %d, deadzone = %d\n", ++ __func__, adc->scale, adc->min, adc->max, ++ joypad->bt_adc_fuzz, joypad->bt_adc_flat, ++ joypad->bt_adc_deadzone); ++ dev_info(dev, ++ "%s : adc tuning_p = %d, adc_tuning_n = %d\n\n", ++ __func__, adc->tuning_p, adc->tuning_n); ++ } ++ ++ /* GPIO key setup */ ++ __set_bit(EV_KEY, input->evbit); ++ for(nbtn = 0; nbtn < joypad->bt_gpio_count; nbtn++) { ++ struct bt_gpio *gpio = &joypad->gpios[nbtn]; ++ input_set_capability(input, gpio->report_type, ++ gpio->linux_code); ++ } ++ ++ /* F key setup */ ++ input_set_capability(input, EV_KEY, BTN_MODE); ++ ++ if (joypad->auto_repeat) ++ __set_bit(EV_REP, input->evbit); ++ ++ joypad->dev = dev; ++ joypad->input = input; ++ ++ input_setup_polling(input, joypad_poll); ++ input_set_poll_interval(input, joypad->poll_interval); ++ ++ error = input_register_device(input); ++ if (error) { ++ dev_err(dev, "unable to register input device, err=%d\n", ++ error); ++ return error; ++ } ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void joypad_setup_value_check(struct device *dev, struct joypad *joypad) ++{ ++ /* ++ fuzz: specifies fuzz value that is used to filter noise from ++ the event stream. ++ */ ++ if (g_button_adc_fuzz) ++ joypad->bt_adc_fuzz = g_button_adc_fuzz; ++ else ++ device_property_read_u32(dev, "button-adc-fuzz", ++ &joypad->bt_adc_fuzz); ++ /* ++ flat: values that are within this value will be discarded by ++ joydev interface and reported as 0 instead. ++ */ ++ if (g_button_adc_flat) ++ joypad->bt_adc_flat = g_button_adc_flat; ++ else ++ device_property_read_u32(dev, "button-adc-flat", ++ &joypad->bt_adc_flat); ++ ++ /* Joystick report value control */ ++ if (g_button_adc_scale) ++ joypad->bt_adc_scale = g_button_adc_scale; ++ else ++ device_property_read_u32(dev, "button-adc-scale", ++ &joypad->bt_adc_scale); ++ ++ /* Joystick deadzone value control */ ++ if (g_button_adc_deadzone) ++ joypad->bt_adc_deadzone = g_button_adc_deadzone; ++ else ++ device_property_read_u32(dev, "button-adc-deadzone", ++ &joypad->bt_adc_deadzone); ++ ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_dt_parse(struct device *dev, struct joypad *joypad) ++{ ++ int error = 0; ++ ++ /* initialize value check from boot.ini */ ++ joypad_setup_value_check(dev, joypad); ++ ++ device_property_read_u32(dev, "amux-count", ++ &joypad->amux_count); ++ ++ device_property_read_u32(dev, "poll-interval", ++ &joypad->poll_interval); ++ ++ joypad->auto_repeat = device_property_present(dev, "autorepeat"); ++ ++ joypad->bt_gpio_count = device_get_child_node_count(dev); ++ ++ if ((joypad->amux_count == 0) || (joypad->bt_gpio_count == 0)) { ++ dev_err(dev, "adc key = %d, gpio key = %d error!", ++ joypad->amux_count, joypad->bt_gpio_count); ++ return -EINVAL; ++ } ++ ++ error = joypad_adc_setup(dev, joypad); ++ if (error) ++ return error; ++ ++ error = joypad_amux_setup(dev, joypad); ++ if (error) ++ return error; ++ ++ error = joypad_gpio_setup(dev, joypad); ++ if (error) ++ return error; ++ ++ error = joypad_fkey_setup(dev, joypad); ++ if (error) ++ return error; ++ ++ dev_info(dev, "%s : adc key cnt = %d, gpio key cnt = %d\n", ++ __func__, joypad->amux_count, joypad->bt_gpio_count); ++ ++ return error; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static int joypad_probe(struct platform_device *pdev) ++{ ++ struct joypad *joypad; ++ struct device *dev = &pdev->dev; ++ int error; ++ ++ joypad = devm_kzalloc(dev, sizeof(struct joypad), GFP_KERNEL); ++ if (!joypad) { ++ dev_err(dev, "joypad devm_kzmalloc error!"); ++ return -ENOMEM; ++ } ++ ++ /* device tree data parse */ ++ error = joypad_dt_parse(dev, joypad); ++ if (error) { ++ dev_err(dev, "dt parse error!(err = %d)\n", error); ++ return error; ++ } ++ ++ mutex_init(&joypad->mutex); ++ platform_set_drvdata(pdev, joypad); ++ ++ /* input device setup */ ++ error = joypad_input_setup(dev, joypad); ++ if (error) { ++ dev_err(dev, "input setup failed!(err = %d)\n", error); ++ return error; ++ } ++ ++ error = sysfs_create_group(&pdev->dev.kobj, &joypad_attr_group); ++ if (error) { ++ dev_err(dev, "create sysfs group fail, error: %d\n", ++ error); ++ return error; ++ } ++ ++ return 0; ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void joypad_shutdown(struct platform_device *pdev) ++{ ++ struct joypad *joypad = platform_get_drvdata(pdev); ++ struct input_dev *input = joypad->input; ++ ++ if (input_device_enabled(input)) ++ joypad_close(input); ++ input_unregister_device(input); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static const struct of_device_id joypad_of_match[] = { ++ { .compatible = "singleadc-joypad", }, ++ {}, ++}; ++ ++MODULE_DEVICE_TABLE(of, joypad_of_match); ++ ++/*----------------------------------------------------------------------------*/ ++static struct platform_driver joypad_driver = { ++ .probe = joypad_probe, ++ .shutdown = joypad_shutdown, ++ .driver = { ++ .name = DRV_NAME, ++ .of_match_table = joypad_of_match, ++ }, ++}; ++ ++/*----------------------------------------------------------------------------*/ ++static int __init joypad_init(void) ++{ ++ return platform_driver_register(&joypad_driver); ++} ++ ++/*----------------------------------------------------------------------------*/ ++static void __exit joypad_exit(void) ++{ ++ platform_driver_unregister(&joypad_driver); ++} ++ ++/*----------------------------------------------------------------------------*/ ++late_initcall(joypad_init); ++module_exit(joypad_exit); +-- +2.48.1 + diff --git a/board/recalbox/anbernic/rg353x/kernel_patches/0002-disable-ohci-usb-device.patch b/board/recalbox/anbernic/rg353x/kernel_patches/0002-disable-ohci-usb-device.patch new file mode 100644 index 0000000000000000000000000000000000000000..c822dc356da404e67b2a3327bb87a7efd2296498 --- /dev/null +++ b/board/recalbox/anbernic/rg353x/kernel_patches/0002-disable-ohci-usb-device.patch @@ -0,0 +1,25 @@ +From 1525bf3ad4083253ab78e8c39ac60725979e1fff Mon Sep 17 00:00:00 2001 +From: David Barbion +Date: Tue, 7 Jan 2025 23:15:48 +0100 +Subject: [PATCH 2/3] disable ohci usb device + +--- + arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +index b76fe7faf50e..7fba104e90ec 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rgxx3.dtsi +@@ -834,7 +834,7 @@ &usb_host1_ehci { + }; + + &usb_host1_ohci { +- status = "okay"; ++ status = "disabled"; + }; + + &usb_host1_xhci { +-- +2.48.1 + diff --git a/board/recalbox/anbernic/rg353x/kernel_patches/0003-add-spk_amp-regulator-for-Anbernic-RGxx3-Devices.patch b/board/recalbox/anbernic/rg353x/kernel_patches/0003-add-spk_amp-regulator-for-Anbernic-RGxx3-Devices.patch new file mode 100644 index 0000000000000000000000000000000000000000..d2cc891648d40dee47c6a3cd70783ac03315cdcd --- /dev/null +++ b/board/recalbox/anbernic/rg353x/kernel_patches/0003-add-spk_amp-regulator-for-Anbernic-RGxx3-Devices.patch @@ -0,0 +1,69 @@ +From 09d298a016243063fd45f051e53c5720020ff3b1 Mon Sep 17 00:00:00 2001 +From: David Barbion +Date: Thu, 23 Jan 2025 00:02:03 +0100 +Subject: [PATCH 3/3] add spk_amp regulator for Anbernic RGxx3 Devices + +--- + arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts | 3 ++- + arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts | 2 +- + arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts | 3 ++- + 3 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts +index a73cf30801ec..20f600e1ceb3 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353p.dts +@@ -43,7 +43,7 @@ sound { + simple-audio-card,name = "rk817_ext"; + simple-audio-card,aux-devs = <&spk_amp>; + simple-audio-card,format = "i2s"; +- simple-audio-card,hp-det-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; ++ simple-audio-card,hp-det-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone", "Mic Jack", +@@ -74,6 +74,7 @@ spk_amp: audio-amplifier { + pinctrl-0 = <&spk_amp_enable_h>; + pinctrl-names = "default"; + sound-name-prefix = "Speaker Amp"; ++ VCC-supply = <&vcc_3v3>; + }; + }; + +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts +index ca5284e4807d..4fb712fe918c 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg353ps.dts +@@ -42,7 +42,7 @@ sound { + simple-audio-card,name = "rk817_ext"; + simple-audio-card,aux-devs = <&spk_amp>; + simple-audio-card,format = "i2s"; +- simple-audio-card,hp-det-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; ++ simple-audio-card,hp-det-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone", "Mic Jack", +diff --git a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +index 74cf313e0635..4e62b4568c65 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3566-anbernic-rg503.dts +@@ -132,7 +132,7 @@ sound { + simple-audio-card,name = "rk817_ext"; + simple-audio-card,aux-devs = <&spk_amp>; + simple-audio-card,format = "i2s"; +- simple-audio-card,hp-det-gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; ++ simple-audio-card,hp-det-gpios = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>; + simple-audio-card,mclk-fs = <256>; + simple-audio-card,widgets = + "Microphone", "Mic Jack", +@@ -163,6 +163,7 @@ spk_amp: audio-amplifier { + pinctrl-0 = <&spk_amp_enable_h>; + pinctrl-names = "default"; + sound-name-prefix = "Speaker Amp"; ++ VCC-supply = <&vcc_3v3>; + }; + }; + +-- +2.48.1 + diff --git a/board/recalbox/copy-recalbox-archives.sh b/board/recalbox/copy-recalbox-archives.sh index 3869d2ff3d062ba3782b8c38e7079cc948b7839d..e3a66b84a3542b2647a2197d96e6a9d52064d93c 100755 --- a/board/recalbox/copy-recalbox-archives.sh +++ b/board/recalbox/copy-recalbox-archives.sh @@ -143,26 +143,27 @@ case "${RECALBOX_TARGET}" in rm -rf "${BINARIES_DIR}/boot-data/boot" || exit 1 mkdir -p "${BINARIES_DIR}/boot-data/boot" || exit 1 mkdir -p "${BINARIES_DIR}/boot-data/boot/extlinux" || exit 1 - mkdir -p "${BINARIES_DIR}/boot-data/boot/dtb" || exit 1 + mkdir -p "${BINARIES_DIR}/boot-data/boot/dtb/rockchip" || exit 1 mkdir -p "${BINARIES_DIR}/boot-data/boot/bootloader/64" || exit 1 - mkdir -p "${BINARIES_DIR}/boot-data/boot/bootloader/16384" || exit 1 - mkdir -p "${BINARIES_DIR}/boot-data/boot/bootloader/24576" || exit 1 # /boot echo "generating boot" cp "${BR2_EXTERNAL_RECALBOX_PATH}/board/recalbox/anbernic/rg353x/extlinux.conf" "${BINARIES_DIR}/boot-data/boot/extlinux/extlinux.conf" || exit 1 cp "${BR2_EXTERNAL_RECALBOX_PATH}/board/recalbox/anbernic/boot-640x480.ppm" "${BINARIES_DIR}/boot-data/boot.ppm" || exit 1 - cp "${BINARIES_DIR}/rk3566-rg353p-linux.dtb" "${BINARIES_DIR}/boot-data/boot/dtb/" || exit 1 - cp "${BINARIES_DIR}/rk3566-rg353v-linux.dtb" "${BINARIES_DIR}/boot-data/boot/dtb/" || exit 1 - cp "${BINARIES_DIR}/rk3566-rg353m-linux.dtb" "${BINARIES_DIR}/boot-data/boot/dtb/" || exit 1 - cp "${BINARIES_DIR}/rk3566-rg503-linux.dtb" "${BINARIES_DIR}/boot-data/boot/dtb/" || exit 1 - cp "${BINARIES_DIR}/rk3566-rk2023-linux.dtb" "${BINARIES_DIR}/boot-data/boot/dtb/" || exit 1 + for dtb in rk3566-anbernic-rg353ps.dtb rk3566-anbernic-rg353vs.dtb rk3566-anbernic-rg503.dtb \ + rk3566-anbernic-rg353p.dtb rk3566-anbernic-rg353v.dtb rk3566-powkiddy-rk2023.dtb \ + rk3566-powkiddy-rgb30.dtb rk3566-powkiddy-rgb10max3.dtb; do + cp "${BINARIES_DIR}/${dtb}" "${BINARIES_DIR}/boot-data/boot/dtb/rockchip/" || exit 1 + done cp "${BINARIES_DIR}/initrd.gz" "${BINARIES_DIR}/boot-data/boot/initrd.gz" || exit 1 cp "${BINARIES_DIR}/Image" "${BINARIES_DIR}/boot-data/boot/linux" || exit 1 cp "${BINARIES_DIR}/rootfs.squashfs" "${BINARIES_DIR}/boot-data/boot/recalbox" || exit 1 - cp "${BINARIES_DIR}/idbloader.img" "${BINARIES_DIR}/boot-data/boot/bootloader/64/" || exit 1 - cp "${BINARIES_DIR}/uboot.img" "${BINARIES_DIR}/boot-data/boot/bootloader/16384/" || exit 1 - cp "${BINARIES_DIR}/resource.img" "${BINARIES_DIR}/boot-data/boot/bootloader/24576/" || exit 1 + # split uboot, genimage does not allow flashing image bigger than partition + dd if="${BINARIES_DIR}/u-boot-rockchip.bin" of="${BINARIES_DIR}/u-boot-rockchip-idbloader.bin" bs=512 count=16320 || exit 1 + dd if="${BINARIES_DIR}/u-boot-rockchip.bin" of="${BINARIES_DIR}/u-boot-rockchip-uboot.bin" bs=512 skip=16320 || exit 1 + mkdir -p "${BINARIES_DIR}/boot-data/boot/bootloader/"{64,16384} + cp "${BINARIES_DIR}/u-boot-rockchip-idbloader.bin" "${BINARIES_DIR}/boot-data/boot/bootloader/64/" || exit 1 + cp "${BINARIES_DIR}/u-boot-rockchip-uboot.bin" "${BINARIES_DIR}/boot-data/boot/bootloader/16384/" || exit 1 GENIMAGE_CFG="${BR2_EXTERNAL_RECALBOX_PATH}/board/recalbox/anbernic/rg353x/genimage.cfg" ;; diff --git a/board/recalbox/fsoverlay/etc/init.d/S31emulationstation b/board/recalbox/fsoverlay/etc/init.d/S31emulationstation index 399706233b0d31231d89483c4d47730be18ad9f4..865e842d4fde901dcb7cb900265ed4c231cac604 100755 --- a/board/recalbox/fsoverlay/etc/init.d/S31emulationstation +++ b/board/recalbox/fsoverlay/etc/init.d/S31emulationstation @@ -41,7 +41,7 @@ case "$1" in if currentVideoOnCRT; then export MESA_LOADER_DRIVER_OVERRIDE=vc4; fi HOME=/recalbox/share/system LANG="${settings_lang}.UTF-8" SDL_VIDEO_GL_DRIVER=/usr/lib/libGLESv2.so SDL_VIDEO_EGL_DRIVER=/usr/lib/libEGL.so SDL_NOMOUSE=1 start-stop-daemon -S -q -m -p /var/run/emulationstation.pid --exec "$ESBIN" & else - HOME=/recalbox/share/system LANG="${settings_lang}.UTF-8" SDL_VIDEO_GL_DRIVER=/usr/lib/libGLESv2.so SDL_VIDEO_EGL_DRIVER=/usr/lib/libGLESv2.so SDL_NOMOUSE=1 start-stop-daemon -S -q -m -p /var/run/emulationstation.pid --exec "$ESBIN" & + HOME=/recalbox/share/system LANG="${settings_lang}.UTF-8" SDL_NOMOUSE=1 start-stop-daemon -S -q -m -p /var/run/emulationstation.pid --exec "$ESBIN" & fi fi ;; diff --git a/board/recalbox/fsoverlay/etc/udev/rules.d/91-pulseaudio.rules b/board/recalbox/fsoverlay/etc/udev/rules.d/91-pulseaudio.rules index e80a7ce7255ad42447f851ff7950ac0456a870bb..5dc2591a012b2a80648190a2a98e3593b3e4864c 100644 --- a/board/recalbox/fsoverlay/etc/udev/rules.d/91-pulseaudio.rules +++ b/board/recalbox/fsoverlay/etc/udev/rules.d/91-pulseaudio.rules @@ -16,7 +16,7 @@ DRIVERS=="vc4_hdmi", ATTR{id}=="vc4hdmi1", ENV{PULSE_PROFILE_SET}="recalbox-hdmi DRIVERS=="bcm2835_audio", ATTR{id}=="Headphones", ENV{PULSE_PROFILE_SET}="recalbox-analog.conf",ENV{PULSE_MODARGS}="tsched=false", GOTO="end" DRIVERS=="bcm2835_audio", ATTR{id}=="ALSA", ENV{PULSE_PROFILE_SET}="recalbox-analog.conf",ENV{PULSE_MODARGS}="tsched=false", GOTO="end" -DRIVERS=="asoc-simple-card", ATTR{id}=="rockchiprk817co", ENV{PULSE_PROFILE_SET}="rk817.conf", GOTO="end" -DRIVERS=="asoc-simple-card", ATTR{id}=="rockchiphdmi", ENV{PULSE_PROFILE_SET}="recalbox-hdmi.conf", GOTO="end" +DRIVERS=="asoc-simple-card", ATTR{id}=="rk817ext", ENV{PULSE_PROFILE_SET}="rk817.conf", GOTO="end" +DRIVERS=="asoc-simple-card", ATTR{id}=="HDMI", ENV{PULSE_PROFILE_SET}="recalbox-hdmi.conf", GOTO="end" LABEL="end" diff --git a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-headphones.conf b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-headphones.conf index a2d63a7a2bb588cec1c05de4fa5fb0a6c4d0fae5..2ca4a2b3ed04f8203a149d70da1995d7bc509843 100644 --- a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-headphones.conf +++ b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-headphones.conf @@ -1,27 +1,14 @@ -[Element Int Spk] +[Element Internal Speakers] switch = off -[Element Speaker] -switch = off - -[Element Speaker] -volume = off - -[Element DMIC] +[Element Playback Mux] enumeration = select -[Option DMIC:DMIC1] -name = analog-input-internal-microphone - -[Element Playback Path] -enumeration = select - -[Option Playback Path:HP] +[Option Playback Mux:HP] name = output-headphones priority = 10 [Jack Headphone] -state.unplugged=no +state.unplugged=unknown state.plugged=yes - diff --git a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-speaker.conf b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-speaker.conf index f1aa32b951c40cd395e83cc043cf87700b025215..1d77ff8d82a8b081a9799a16da43dfa0e229bc3b 100644 --- a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-speaker.conf +++ b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/paths/rk817-speaker.conf @@ -1,28 +1,14 @@ -[Element Int Spk] -switch = mute +[Element Internal Speakers] +switch = on -[Element Speaker] -switch = mute - -[Element Speaker] -volume = merge -override-map.1 = all -override-map.2 = all-left,all-right - -[Element DMIC] -enumeration = select - -[Option DMIC:DMIC1] -name = analog-input-internal-microphone - -[Element Playback Path] +[Element Playback Mux] enumeration = select -[Option Playback Path:SPK] +# for an unknown reason, SPK disables all outputs (at least on rg353m) +[Option Playback Mux:HP] name = output-speaker priority = 10 [Jack Headphone] state.unplugged=unknown state.plugged=no - diff --git a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/profile-sets/rk817.conf b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/profile-sets/rk817.conf index d5a7e627a974f605f8e62dc72add39818c8c2ed9..9c51a3a6c3b3a9ee1483ffb3ec539194b602d43e 100644 --- a/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/profile-sets/rk817.conf +++ b/board/recalbox/fsoverlay/usr/share/pulseaudio/alsa-mixer/profile-sets/rk817.conf @@ -2,17 +2,17 @@ auto-profiles = yes [Mapping analog-stereo] +description = Analog Stereo device-strings = hw:%f channel-map = left,right paths-output = rk817-speaker rk817-headphones +priority = 9000 direction = output -priority = 60 [Mapping analog-mono] description = Analog Mono device-strings = hw:%f -direction = output channel-map = mono -paths-output = analog-output analog-output-mono -priority = 1 - +paths-input = microphone-input +priority = 9000 +direction = input diff --git a/configs/recalbox-rg353x_defconfig b/configs/recalbox-rg353x_defconfig index 9e48ac0d47999115c694ed3b0fa291712d1e254e..5047dd8e78dfe509395090ba05ee486e8f748726 100644 --- a/configs/recalbox-rg353x_defconfig +++ b/configs/recalbox-rg353x_defconfig @@ -4,9 +4,7 @@ BR2_OPTIMIZE_3=y BR2_SHARED_STATIC_LIBS=y BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/patches" BR2_TOOLCHAIN_BUILDROOT_GLIBC=y -BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_4_19=y BR2_TOOLCHAIN_BUILDROOT_CXX=y -BR2_GCC_ENABLE_LTO=y BR2_GCC_ENABLE_OPENMP=y BR2_GCC_ENABLE_GRAPHITE=y BR2_GCC_VERSION_14_X=y @@ -28,14 +26,25 @@ BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/fsoverlay $(BR2 BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/recalbox-patch-target.sh" BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-recalbox-archives.sh" BR2_LINUX_KERNEL=y -BR2_LINUX_KERNEL_CUSTOM_GIT=y -BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/JustEnoughLinuxOS/rk356x-kernel" -BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="9d98ce7b4db1b66bcb173557c75bdadc136135cb" -BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)" +BR2_LINUX_KERNEL_CUSTOM_VERSION=y +BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.10.14" +BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel_patches/" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y -BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel-aarch64-4.19-defconfig.config" +BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig.config" +BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/anbernic/rg353x/kernel-6.10-defconfig-fragment.config" BR2_LINUX_KERNEL_DTS_SUPPORT=y -BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3566-rg353p-linux rockchip/rk3566-rg353v-linux rockchip/rk3566-rg353m-linux rockchip/rk3566-rg503-linux rockchip/rk3566-rk2023-linux rockchip/rk3566-rgb30-linux" +BR2_LINUX_KERNEL_INTREE_DTS_NAME="rockchip/rk3566-anbernic-rg353ps rockchip/rk3566-anbernic-rg353vs rockchip/rk3566-anbernic-rg503 rockchip/rk3566-anbernic-rg353p rockchip/rk3566-anbernic-rg353v rockchip/rk3566-powkiddy-rk2023 rockchip/rk3566-powkiddy-rgb30 rockchip/rk3566-powkiddy-rgb10max3" +BR2_PACKAGE_ROCKCHIP_RKBIN_TPL_FILENAME="bin/rk35/rk3568_ddr_1056MHz_v1.18.bin" +BR2_PACKAGE_ROCKCHIP_RKBIN_BL31_FILENAME="bin/rk35/rk3568_bl31_v1.43.elf" +BR2_TARGET_UBOOT=y +BR2_TARGET_UBOOT_BOARD_DEFCONFIG="anbernic-rgxx3-rk3566" +BR2_TARGET_UBOOT_NEEDS_ROCKCHIP_RKBIN=y +BR2_TARGET_UBOOT_USE_BINMAN=y +# BR2_TARGET_UBOOT_FORMAT_BIN is not set +BR2_TARGET_UBOOT_FORMAT_CUSTOM=y +BR2_TARGET_UBOOT_FORMAT_CUSTOM_NAME="u-boot-rockchip.bin" +BR2_PACKAGE_ROCKCHIP_RKBIN=y +BR2_PACKAGE_HOST_SWIG=y BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/busybox.custom.config" BR2_PACKAGE_ALSA_UTILS=y BR2_PACKAGE_ALSA_UTILS_AMIXER=y @@ -63,12 +72,10 @@ BR2_PACKAGE_FBV_RECALBOX=y BR2_PACKAGE_SDL_IMAGE_XPM=y BR2_PACKAGE_SDL_MIXER=y BR2_PACKAGE_SDL_NET=y -BR2_PACKAGE_SDL2_KMSDRM=y BR2_PACKAGE_SDL2_OPENGLES=y BR2_PACKAGE_XKEYBOARD_CONFIG=y BR2_PACKAGE_LINUX_FIRMWARE=y -BR2_PACKAGE_LINUX_FIRMWARE_RTL_81XX=y -BR2_PACKAGE_LINUX_FIRMWARE_RTL_87XX=y +BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX_BT=y BR2_PACKAGE_LINUX_FIRMWARE_RTL_88XX=y BR2_PACKAGE_LINUX_FIRMWARE_RTL_RTW88=y BR2_PACKAGE_DBUS_CPP=y @@ -82,7 +89,6 @@ BR2_PACKAGE_LIRC_TOOLS=y BR2_PACKAGE_PARTED=y BR2_PACKAGE_RECALBOX_3MOUNTS=y BR2_PACKAGE_USBUTILS=y -BR2_PACKAGE_NODEJS_MODULES_ADDITIONAL="request" BR2_PACKAGE_PYTHON3_PY_PYC=y BR2_PACKAGE_PYTHON_LIBUSB1=y BR2_PACKAGE_PYTHON_PAHO_MQTT=y @@ -289,8 +295,6 @@ BR2_PACKAGE_LIBRETRO_CHEATS=y BR2_PACKAGE_MEGATOOLS=y BR2_PACKAGE_PAMIX=y BR2_PACKAGE_KMSGRAB=y -BR2_PACKAGE_RECALBOX_ROCKCHIP_MALI_BIFROST_G52=y -BR2_PACKAGE_RECALBOX_ROCKCHIP_MALI_LIB_VERSION_G52_G2P0=y BR2_PACKAGE_XONE=y BR2_PACKAGE_XPAD_NOONE=y BR2_PACKAGE_WII_U_GC_ADAPTER=y diff --git a/package/libretro-flycast/libretro-flycast.mk b/package/libretro-flycast/libretro-flycast.mk index 22ce94954eee677c3c69b87ba0408be129405bc6..33f043e9ebc7cdccca8ae493502b1dc6ef5c9f42 100644 --- a/package/libretro-flycast/libretro-flycast.mk +++ b/package/libretro-flycast/libretro-flycast.mk @@ -16,10 +16,10 @@ LIBRETRO_FLYCAST_PLATFORM = odroid LIBRETRO_FLYCAST_SUPP_OPT += BOARD=ODROID-XU4 CC_AS="$(TARGET_CC)" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) LIBRETRO_FLYCAST_PLATFORM = odroid-go2 -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" LDFLAGS=-lmali +LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) LIBRETRO_FLYCAST_PLATFORM = arm64 -LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" LDFLAGS=-lmali +LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPIZERO2LEGACY),y) LIBRETRO_FLYCAST_PLATFORM = rpi3 LIBRETRO_FLYCAST_SUPP_OPT += CC_AS="$(TARGET_CC)" @@ -41,6 +41,10 @@ LIBRETRO_FLYCAST_SUPP_OPT += FORCE_GLES=1 LIBRETRO_FLYCAST_DEPENDENCIES += libgles endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBMALI),y) +LIBRETRO_FLYCAST_SUPP_OPT += LDFLAGS=-lmali +endif + ifeq ($(BR2_PACKAGE_HAS_LIBGL),y) LIBRETRO_FLYCAST_DEPENDENCIES += libgl endif diff --git a/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk b/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk index cfc5c9d27cf9938f8fe410c342bee67e55e8e79d..a457135aff7a76896c6dad704c3e50b35f021561 100644 --- a/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk +++ b/package/libretro-mupen64plus-nx/libretro-mupen64plus-nx.mk @@ -36,11 +36,10 @@ LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT=BOARD="ODROID-XU" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) LIBRETRO_MUPEN64PLUS_NX_PLATFORM=odroid64 -LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT=BOARD="ODROID-GO2" EGL_LIB="-lEGL -lmali" +LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT=BOARD="ODROID-GO2" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) LIBRETRO_MUPEN64PLUS_NX_PLATFORM=unix -LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT= EGL_LIB="-lEGL -lmali" else ifeq ($(BR2_x86_64),y) LIBRETRO_MUPEN64PLUS_NX_PLATFORM=unix @@ -59,6 +58,10 @@ ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBGLES3),y) LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT += FORCE_GLES3=1 endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBMALI),y) +LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT += EGL_LIB="-lEGL -lmali" +endif + LIBRETRO_MUPEN64PLUS_NX_SUPP_OPT += ARCH=$(BR2_ARCH) LIBRETRO_MUPEN64PLUS_NX_DYNAREC = $(BR2_ARCH) diff --git a/package/libretro-parallel-n64/libretro-parallel-n64.mk b/package/libretro-parallel-n64/libretro-parallel-n64.mk index 169177ac76d40dbd0714d22841bd39ce78849579..ced02f27e204a7afd0677e013366a13a2f9c1a62 100644 --- a/package/libretro-parallel-n64/libretro-parallel-n64.mk +++ b/package/libretro-parallel-n64/libretro-parallel-n64.mk @@ -53,19 +53,23 @@ LIBRETRO_PARALLEL_N64_SUPP_OPT=BOARD=ODROID-XU else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) LIBRETRO_PARALLEL_N64_PLATFORM = odroid -LIBRETRO_PARALLEL_N64_SUPP_OPT = BOARD=ODROIDGO2 HAVE_PARELLEL_RSP=1 LIBS=-lmali +LIBRETRO_PARALLEL_N64_SUPP_OPT = BOARD=ODROIDGO2 HAVE_PARELLEL_RSP=1 else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) #LIBRETRO_PARALLEL_N64_PLATFORM = unix gles #LIBRETRO_PARALLEL_N64_SUPP_OPT = HAVE_PARALLEL=1 LIBS=-lmali CPUFLAGS="-DCLASSIC -DARM64 -DARM_FIX" LIBRETRO_PARALLEL_N64_PLATFORM = odroid -LIBRETRO_PARALLEL_N64_SUPP_OPT = BOARD=ODROIDGO2 HAVE_PARELLEL_RSP=1 LIBS=-lmali +LIBRETRO_PARALLEL_N64_SUPP_OPT = BOARD=ODROIDGO2 HAVE_PARELLEL_RSP=1 else ifeq ($(BR2_x86_64),y) LIBRETRO_PARALLEL_N64_SUPP_OPT=ARCH=x86_64 HAVE_PARALLEL_RSP=1 HAVE_THR_AL=1 LIBRETRO_PARALLEL_N64_PLATFORM=unix endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBMALI),y) +LIBRETRO_PARALLEL_N64_SUPP_OPT += LIBS=-lmali +endif + LIBRETRO_PARALLEL_N64_DYNAREC = $(BR2_ARCH) define LIBRETRO_PARALLEL_N64_BUILD_CMDS diff --git a/package/libretro-yabasanshiro/libretro-yabasanshiro.mk b/package/libretro-yabasanshiro/libretro-yabasanshiro.mk index 9d2a1140d7bacbae4d3792bfc66d334285eacfa4..8624c9dd3bad982faa9a1eb893ef77d7dc6d9dc4 100644 --- a/package/libretro-yabasanshiro/libretro-yabasanshiro.mk +++ b/package/libretro-yabasanshiro/libretro-yabasanshiro.mk @@ -15,16 +15,20 @@ LIBRETRO_YABASANSHIRO_PLATFORM=odroid LIBRETRO_YABASANSHIRO_SUPP_OPT=BOARD="ODROID-XU4" else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) LIBRETRO_YABASANSHIRO_PLATFORM=odroid-go2 -LIBRETRO_YABASANSHIRO_LDFLAGS_OPT = -lmali -lpthread +LIBRETRO_YABASANSHIRO_LDFLAGS_OPT = -lpthread else ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) LIBRETRO_YABASANSHIRO_PLATFORM=arm64 LIBRETRO_YABASANSHIRO_SUPP_OPT = FORCE_GLES=1 -LIBRETRO_YABASANSHIRO_LDFLAGS_OPT = -lmali -lpthread +LIBRETRO_YABASANSHIRO_LDFLAGS_OPT = -lpthread else LIBRETRO_YABASANSHIRO_PLATFORM=$(RETROARCH_LIBRETRO_BOARD_SHORT) LIBRETRO_YABASANSHIRO_SUPP_OPT= endif +ifeq ($(BR2_PACKAGE_RECALBOX_HAS_LIBMALI),y) +LIBRETRO_YABASANSHIRO_LDFLAGS_OPT += -lmali +endif + define LIBRETRO_YABASANSHIRO_DOSUNIX_PATCH $(SED) 's/\r//' $(@D)/yabause/src/yglshaderes.c endef diff --git a/package/recalbox-bluetooth/recalbox-bluetooth.mk b/package/recalbox-bluetooth/recalbox-bluetooth.mk index c5eabfd9c22fb07e80180dd1310527e3e27cea2e..e12c1584ada9f794f1ea696c8a1c65394b9811c0 100644 --- a/package/recalbox-bluetooth/recalbox-bluetooth.mk +++ b/package/recalbox-bluetooth/recalbox-bluetooth.mk @@ -8,12 +8,6 @@ RECALBOX_BLUETOOTH_SOURCE = RECALBOX_BLUETOOTH_VERSION = 1.0 RECALBOX_BLUETOOTH_LICENSE = MIT -ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) -RECALBOX_BLUETOOTH_BT_CONTROLLERS=rg353x -else -RECALBOX_BLUETOOTH_BT_CONTROLLERS=others -endif - RECALBOX_BLUETOOTH_SCRIPTS_FILES = \ bluezutils.py \ recalpair \ @@ -22,13 +16,12 @@ RECALBOX_BLUETOOTH_SCRIPTS_FILES = \ test-discovery \ autopair \ recalbox-bluetooth-agent + define RECALBOX_BLUETOOTH_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(RECALBOX_BLUETOOTH_PKGDIR)/src/init/bluetooth $(TARGET_DIR)/etc/init.d/S07bluetooth $(foreach script,$(RECALBOX_BLUETOOTH_SCRIPTS_FILES),\ $(INSTALL) -D -m 0755 $(RECALBOX_BLUETOOTH_PKGDIR)/src/scripts/$(script) $(TARGET_DIR)/recalbox/scripts/bluetooth/$(script) ) - $(INSTALL) -D -m 0755 $(RECALBOX_BLUETOOTH_PKGDIR)/src/scripts/bluetoothcontrollers.sh.$(RECALBOX_BLUETOOTH_BT_CONTROLLERS) \ - $(TARGET_DIR)/recalbox/scripts/bluetooth/bluetoothcontrollers.sh endef $(eval $(generic-package)) diff --git a/package/recalbox-bluetooth/src/init/bluetooth b/package/recalbox-bluetooth/src/init/bluetooth index 8f7f49d33fd24cb226a1899f6ffa8a9f3e6805de..3f13b1dd5fe443d78f56195a9f392a5bf63fbefa 100755 --- a/package/recalbox-bluetooth/src/init/bluetooth +++ b/package/recalbox-bluetooth/src/init/bluetooth @@ -34,7 +34,6 @@ start_bluetoothd() { settings_version="$($systemsetting -command load -key controllers.ps3.driver -default bluez)" if [ "$settings_version" != "bluez" ]; then BLUETOOTHD_ARGS="--noplugin=sixaxis"; else BLUETOOTHD_ARGS="--noplugin=sixaxispair"; fi start-stop-daemon -S -q -m -p /var/run/bluetoothd.pid --exec /usr/libexec/bluetooth/bluetoothd -- $BLUETOOTHD_ARGS & - ( /recalbox/scripts/bluetooth/bluetoothcontrollers.sh ) & } start_bluetooth_autopair() { diff --git a/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.others b/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.others deleted file mode 100755 index 8c3cbfc39d945c2c5c4a5e3c3980d6252018cb2c..0000000000000000000000000000000000000000 --- a/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.others +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exit 0 diff --git a/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.rg353x b/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.rg353x deleted file mode 100755 index a9de129f1b565ca039f590868ff128672a7eaf58..0000000000000000000000000000000000000000 --- a/package/recalbox-bluetooth/src/scripts/bluetoothcontrollers.sh.rg353x +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -HCIATTACH=/usr/bin/rtk_hciattach -SERIAL=$(awk '/^Serial/{ print $3 }' /proc/cpuinfo) -B1=${SERIAL:10:2} -B2=${SERIAL:12:2} -B3=${SERIAL:14:2} -BDADDR=$(printf 00:e0:4c:%02x:%02x:%02x $((0x$B1 ^ 0xaa)) $((0x$B2 ^ 0xaa)) $((0x$B3 ^ 0xaa))) - -$HCIATTACH -n -s 115200 /dev/ttyS1 rtk_h5 "$BDADDR" diff --git a/package/recalbox-initramfs/init b/package/recalbox-initramfs/init index 8c4c09a2277d0174b6a3b5dbc96704b548e631c4..6da6a28980dc3b3108171d651e3d3bc58298f9e6 100755 --- a/package/recalbox-initramfs/init +++ b/package/recalbox-initramfs/init @@ -89,8 +89,12 @@ do_clean_safeboot() { do_clean_update() { # delete content of /boot_root/update/ - rm -rf /boot_root/update/ - mkdir /boot_root/update/ + rm -rf /boot_root/update/* + # Remove useless files + [ -f /boot_root/boot.lst ] && rm /boot_root/boot.lst + [ -f /boot_root/boot.md5 ] && rm /boot_root/boot.md5 + [ -f /boot_root/pre-upgrade.sh ] && rm /boot_root/pre-upgrade.sh + [ -d /boot_root/boot/bootloader ] && rm -rf /boot_root/boot/bootloader } do_update() { @@ -109,10 +113,6 @@ do_update() { return 1 fi - # remove useless files - rm /boot_root/boot.lst - rm /boot_root/boot.md5 - rm /boot_root/pre-upgrade.sh return 0 # mask errors } @@ -161,7 +161,6 @@ do_bootloader_update() { error=1 fi done - rm -rf "$sector_dir" done return $error } diff --git a/package/recalbox-system/Config.in b/package/recalbox-system/Config.in index 56e49af87f55a49018d9a346d8455251e0693b8e..916969a476f25ab125e2583e2a05eb9bd74f32f9 100644 --- a/package/recalbox-system/Config.in +++ b/package/recalbox-system/Config.in @@ -108,6 +108,10 @@ config BR2_PACKAGE_RECALBOX_TARGET_RG353X select BR2_PACKAGE_GPTFDISK select BR2_PACKAGE_GPTFDISK_SGDISK select BR2_PACKAGE_RKWIFIBT + select BR2_PACKAGE_MESA3D + select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_PANFROST + select BR2_PACKAGE_MESA3D_OPENGL_EGL + select BR2_PACKAGE_MESA3D_OPENGL_ES config BR2_PACKAGE_RECALBOX_TARGET_X86_64 bool "x86_64" @@ -195,8 +199,7 @@ config BR2_PACKAGE_RECALBOX_HAS_LIBMALI bool default y if \ BR2_PACKAGE_RECALBOX_TARGET_ODROIDXU4 ||\ - BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 ||\ - BR2_PACKAGE_RECALBOX_TARGET_RG353X + BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 config BR2_PACKAGE_RECALBOX_EGL_NO_X11 bool diff --git a/package/recalbox-system/rg353x/pre-upgrade.sh b/package/recalbox-system/rg353x/pre-upgrade.sh index e4de3036bc58f34483bf3e072803a5f9c8b337b6..9e2d5df74c25176fb75b0ae5e48b4cffab1e5548 100644 --- a/package/recalbox-system/rg353x/pre-upgrade.sh +++ b/package/recalbox-system/rg353x/pre-upgrade.sh @@ -16,3 +16,9 @@ rm -rf /recalbox/share/bios/mame2003-plus/mame2003-plus.xml rm -rf /recalbox/share/bios/mame2010/mame2010.xml rm -rf /recalbox/share/bios/mame2015/mame2014-xml.zip rm -rf /recalbox/share/bios/mame2015/mame2015-xml.zip + +# remove old bootloader blobs +mount -o remount,rw /boot +rm -rf /boot/boot/bootloader +mount -o remount,ro /boot + diff --git a/package/scummvm/Config.in b/package/scummvm/Config.in index 854cb945a4438bdf756ff94bb417e8f9206bb1f9..ad7e8252a378ee4907423284af3eac92291779e0 100644 --- a/package/scummvm/Config.in +++ b/package/scummvm/Config.in @@ -14,7 +14,7 @@ config BR2_PACKAGE_SCUMMVM select BR2_PACKAGE_FLUIDSYNTH select BR2_PACKAGE_FREETYPE select BR2_PACKAGE_ZLIB - select BR2_PACKAGE_LIBRGA if (BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 || BR2_PACKAGE_RECALBOX_TARGET_RG353X) + select BR2_PACKAGE_LIBRGA if BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2 help ScummVM point and click http://wiki.scummvm.org/ diff --git a/package/scummvm/scummvm.mk b/package/scummvm/scummvm.mk index bed62c0326d84703b6262b0d9c66338a52a7dead..3249a137e8a0c723c2ad3fd4542f3710bc21098e 100644 --- a/package/scummvm/scummvm.mk +++ b/package/scummvm/scummvm.mk @@ -15,7 +15,7 @@ ifeq ($(BR2_PACKAGE_RPI_USERLAND),y) SCUMMVM_CONF_OPTS += --host=raspberrypi endif -ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2)$(BR2_PACKAGE_RECALBOX_TARGET_RG353X),y) +ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_ODROIDGO2),y) SCUMMVM_CONF_ENV += LDFLAGS="-lmali -lrga" SCUMMVM_DEPENDENCIES += librga endif diff --git a/package/uboot-rg353x/Config.in b/package/uboot-rg353x/Config.in deleted file mode 100644 index adc46624c4c6857339cf81b2afde31acad92852e..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/Config.in +++ /dev/null @@ -1,7 +0,0 @@ -config BR2_PACKAGE_UBOOT_RG353X - bool "U-Boot for Anbernic RG353x" - select BR2_PACKAGE_HOST_DTC - help - u-boot for Anbernic RG35P/V/M - - https://github.com/pkegg/RG353P_uboot diff --git a/package/uboot-rg353x/assets/battery_0.bmp b/package/uboot-rg353x/assets/battery_0.bmp deleted file mode 100644 index 06d80885a9ddf75c464f77c8346db27549e9e2ce..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_0.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_1.bmp b/package/uboot-rg353x/assets/battery_1.bmp deleted file mode 100644 index eea68bdd4e672bfaf267712306bf9e4ee4199223..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_1.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_2.bmp b/package/uboot-rg353x/assets/battery_2.bmp deleted file mode 100644 index 7e4f9b0c9fedea23ce53f07341a777fbbe937d7c..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_2.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_3.bmp b/package/uboot-rg353x/assets/battery_3.bmp deleted file mode 100644 index 050e9a842cbd549ff21c875077e7398fb2b11ed3..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_3.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_4.bmp b/package/uboot-rg353x/assets/battery_4.bmp deleted file mode 100644 index daa7c88d355208f15f6a0a2ae55ea6a29029e1ea..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_4.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_5.bmp b/package/uboot-rg353x/assets/battery_5.bmp deleted file mode 100644 index 734e33c36ed5598938d97f68b2dfa43cb65502f8..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_5.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/battery_fail.bmp b/package/uboot-rg353x/assets/battery_fail.bmp deleted file mode 100644 index 6ec87ac73fc75ca5e9b212a4e95267931966a978..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/battery_fail.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/logo.bmp b/package/uboot-rg353x/assets/logo.bmp deleted file mode 100644 index 4c7fbae2131e5733d21ec9456d29d113cdf2270b..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/logo.bmp and /dev/null differ diff --git a/package/uboot-rg353x/assets/logo2.bmp b/package/uboot-rg353x/assets/logo2.bmp deleted file mode 100644 index a38fc50bb0543ae6d6951c19ed54a5841e8b9354..0000000000000000000000000000000000000000 Binary files a/package/uboot-rg353x/assets/logo2.bmp and /dev/null differ diff --git a/package/uboot-rg353x/old/0001-address-of-packed-member-to-warning.patch b/package/uboot-rg353x/old/0001-address-of-packed-member-to-warning.patch deleted file mode 100644 index e605c30a2f9f7b69311c533f6b5c0e04428e9616..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0001-address-of-packed-member-to-warning.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 5a7cce2e7326ba43982512bbddf456cf92d30c1c Mon Sep 17 00:00:00 2001 -From: fewtarius -Date: Mon, 16 May 2022 23:00:40 +0000 -Subject: [PATCH 1/6] address-of-packed-member to warning - ---- - Makefile | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/Makefile b/Makefile -index d3e3d37..663d717 100644 ---- a/Makefile -+++ b/Makefile -@@ -593,6 +593,7 @@ endif - - KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) - KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks) -+KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) - - KBUILD_CFLAGS += -g - # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g --- -2.38.1 - diff --git a/package/uboot-rg353x/old/0002-Remove-a-few-broken-device-trees.patch b/package/uboot-rg353x/old/0002-Remove-a-few-broken-device-trees.patch deleted file mode 100644 index 493bea35a17d3b69b41f7c05a2642591b42c6caf..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0002-Remove-a-few-broken-device-trees.patch +++ /dev/null @@ -1,46 +0,0 @@ -From cc2384e130ca4b4abedaf95e352551ecffda732a Mon Sep 17 00:00:00 2001 -From: fewtarius -Date: Mon, 16 May 2022 23:05:13 +0000 -Subject: [PATCH 2/6] Remove a few broken device trees - ---- - arch/arm/dts/Makefile | 23 ----------------------- - 1 file changed, 23 deletions(-) - -diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile -index 594614a..a7c20e1 100644 ---- a/arch/arm/dts/Makefile -+++ b/arch/arm/dts/Makefile -@@ -28,29 +28,6 @@ dtb-$(CONFIG_EXYNOS5) += exynos5250-arndale.dtb \ - exynos5422-odroidxu3.dtb - dtb-$(CONFIG_EXYNOS7420) += exynos7420-espresso7420.dtb - dtb-$(CONFIG_ARCH_ROCKCHIP) += \ -- rk3036-sdk.dtb \ -- rk3066a-mk808.dtb \ -- rk3126-evb.dtb \ -- rk3128-evb.dtb \ -- rk3188-radxarock.dtb \ -- rk3288-evb.dtb \ -- rk3288-fennec.dtb \ -- rk3288-firefly.dtb \ -- rk3288-miqi.dtb \ -- rk3288-phycore-rdk.dtb \ -- rk3288-popmetal.dtb \ -- rk3288-rock2-square.dtb \ -- rk3288-tinker.dtb \ -- rk3288-veyron-jerry.dtb \ -- rk3288-veyron-mickey.dtb \ -- rk3288-veyron-minnie.dtb \ -- rk3288-vyasa.dtb \ -- rk3308-evb.dtb \ -- rk3328-evb.dtb \ -- rk3368-lion.dtb \ -- rk3368-sheep.dtb \ -- rk3368-geekbox.dtb \ -- rk3368-px5-evb.dtb \ - rk3399-evb.dtb \ - rk3399-firefly.dtb \ - rk3399-puma-ddr1333.dtb \ --- -2.38.1 - diff --git a/package/uboot-rg353x/old/0003-Fix-scripts.patch b/package/uboot-rg353x/old/0003-Fix-scripts.patch deleted file mode 100644 index 826f782d971aef6b03bcf06a443911c6ea5778c4..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0003-Fix-scripts.patch +++ /dev/null @@ -1,179 +0,0 @@ -From f4680fca588bd8d41ab3d00f7266ffb9e2a253f6 Mon Sep 17 00:00:00 2001 -From: fewtarius -Date: Fri, 29 Jul 2022 07:37:48 -0400 -Subject: [PATCH 3/6] Fix-scripts - ---- - arch/arm/mach-rockchip/decode_bl31.py | 2 +- - arch/arm/mach-rockchip/make_fit_atf.py | 2 +- - make.sh | 2 +- - scripts/dtc/pylibfdt/setup.py | 2 +- - scripts/fill_scrapyard.py | 2 +- - scripts/mailmapper | 2 +- - test/py/test.py | 2 +- - tools/binman/binman.py | 2 +- - tools/buildman/buildman.py | 2 +- - tools/dtoc/dtoc.py | 2 +- - tools/genboardscfg.py | 2 +- - tools/microcode-tool.py | 2 +- - tools/moveconfig.py | 2 +- - tools/patman/patman.py | 2 +- - tools/rkmux.py | 2 +- - 15 files changed, 15 insertions(+), 15 deletions(-) - -diff --git a/arch/arm/mach-rockchip/decode_bl31.py b/arch/arm/mach-rockchip/decode_bl31.py -index 301bd15..c0db739 100755 ---- a/arch/arm/mach-rockchip/decode_bl31.py -+++ b/arch/arm/mach-rockchip/decode_bl31.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (C) 2020 Rockchip Electronics Co., Ltd - # -diff --git a/arch/arm/mach-rockchip/make_fit_atf.py b/arch/arm/mach-rockchip/make_fit_atf.py -index 27b6ef7..59a2cc9 100755 ---- a/arch/arm/mach-rockchip/make_fit_atf.py -+++ b/arch/arm/mach-rockchip/make_fit_atf.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - """ - A script to generate FIT image source for rockchip boards - with ARM Trusted Firmware -diff --git a/make.sh b/make.sh -index 7e76bcb..b306c92 100755 ---- a/make.sh -+++ b/make.sh -@@ -718,7 +718,7 @@ select_ini_file - handle_args_late - sub_commands - clean_files --make PYTHON=python2 CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} -+make PYTHON=python3 CROSS_COMPILE=${TOOLCHAIN_GCC} all --jobs=${JOB} - pack_images - #pack_idbloader - finish -diff --git a/scripts/dtc/pylibfdt/setup.py b/scripts/dtc/pylibfdt/setup.py -index 4f7cf04..992cdec 100755 ---- a/scripts/dtc/pylibfdt/setup.py -+++ b/scripts/dtc/pylibfdt/setup.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - - """ - setup.py file for SWIG libfdt -diff --git a/scripts/fill_scrapyard.py b/scripts/fill_scrapyard.py -index 9a94354..ae76116 100755 ---- a/scripts/fill_scrapyard.py -+++ b/scripts/fill_scrapyard.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Author: Masahiro Yamada - # -diff --git a/scripts/mailmapper b/scripts/mailmapper -index 78b23d1..50e4719 100755 ---- a/scripts/mailmapper -+++ b/scripts/mailmapper -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (C) 2014, Masahiro Yamada - # -diff --git a/test/py/test.py b/test/py/test.py -index 4695079..36a7746 100755 ---- a/test/py/test.py -+++ b/test/py/test.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - - # Copyright (c) 2015 Stephen Warren - # Copyright (c) 2015-2016, NVIDIA CORPORATION. All rights reserved. -diff --git a/tools/binman/binman.py b/tools/binman/binman.py -index e75a59d..d57e6db 100755 ---- a/tools/binman/binman.py -+++ b/tools/binman/binman.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - - # Copyright (c) 2016 Google, Inc - # Written by Simon Glass -diff --git a/tools/buildman/buildman.py b/tools/buildman/buildman.py -index f5c4b04..cd40894 100755 ---- a/tools/buildman/buildman.py -+++ b/tools/buildman/buildman.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (c) 2012 The Chromium OS Authors. - # -diff --git a/tools/dtoc/dtoc.py b/tools/dtoc/dtoc.py -index 6eacfc9..d3aa7b6 100755 ---- a/tools/dtoc/dtoc.py -+++ b/tools/dtoc/dtoc.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (C) 2016 Google, Inc - # Written by Simon Glass -diff --git a/tools/genboardscfg.py b/tools/genboardscfg.py -index 2345a19..daf1498 100755 ---- a/tools/genboardscfg.py -+++ b/tools/genboardscfg.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Author: Masahiro Yamada - # -diff --git a/tools/microcode-tool.py b/tools/microcode-tool.py -index 069d961..2bc2cf3 100755 ---- a/tools/microcode-tool.py -+++ b/tools/microcode-tool.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (c) 2014 Google, Inc - # -diff --git a/tools/moveconfig.py b/tools/moveconfig.py -index 6f549a5..bfde61e 100755 ---- a/tools/moveconfig.py -+++ b/tools/moveconfig.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Author: Masahiro Yamada - # -diff --git a/tools/patman/patman.py b/tools/patman/patman.py -index 7647440..3f9855e 100755 ---- a/tools/patman/patman.py -+++ b/tools/patman/patman.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - # - # Copyright (c) 2011 The Chromium OS Authors. - # -diff --git a/tools/rkmux.py b/tools/rkmux.py -index 11c192a..e8a0424 100755 ---- a/tools/rkmux.py -+++ b/tools/rkmux.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python2 -+#!/usr/bin/env python3 - - # Script to create enums from datasheet register tables - # --- -2.38.1 - diff --git a/package/uboot-rg353x/old/0004-Fixes-for-GCC-12.2.patch b/package/uboot-rg353x/old/0004-Fixes-for-GCC-12.2.patch deleted file mode 100644 index 806dfe141cf1b0530edf4af4c04270dde326ca82..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0004-Fixes-for-GCC-12.2.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 3cb59bfc8fe1bcc4e3ca17c24a748d26e76bc4eb Mon Sep 17 00:00:00 2001 -From: fewtarius -Date: Tue, 1 Nov 2022 17:09:45 -0400 -Subject: [PATCH 4/6] Fixes-for-GCC-12.2 - ---- - Makefile | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/Makefile b/Makefile -index 663d717..cdb3ff9 100644 ---- a/Makefile -+++ b/Makefile -@@ -594,6 +594,8 @@ endif - KBUILD_CFLAGS += $(call cc-option,-fno-stack-protector) - KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks) - KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) -+KBUILD_CFLAGS += $(call cc-disable-warning, dangling-pointer) -+KBUILD_CFLAGS += $(call cc-disable-warning, address) - - KBUILD_CFLAGS += -g - # $(KBUILD_AFLAGS) sets -g, which causes gcc to pass a suitable -g --- -2.38.1 - diff --git a/package/uboot-rg353x/old/0006-fixup-path-to-dtc.patch b/package/uboot-rg353x/old/0006-fixup-path-to-dtc.patch deleted file mode 100644 index 461c291d268b3d98d025464165ce6f07951a44b3..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0006-fixup-path-to-dtc.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 57d0b869412faa2b40c5e828f33883d7ef2f769a Mon Sep 17 00:00:00 2001 -From: David Barbion -Date: Sat, 19 Nov 2022 00:55:14 +0100 -Subject: [PATCH 6/6] fixup path to dtc - ---- - make.sh | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/make.sh b/make.sh -index b306c92..521e9ed 100755 ---- a/make.sh -+++ b/make.sh -@@ -25,6 +25,7 @@ GCC_ARM32=arm-linux-gnueabihf- - GCC_ARM64=aarch64-linux-gnu- - TOOLCHAIN_ARM32=../prebuilts/gcc/linux-x86/arm/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin - TOOLCHAIN_ARM64=../prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin -+DTC=${TOOLCHAIN_ARM64}/dtc - - ########################################### User not touch ############################################# - # Declare global INI file searching index name for every chip, update in select_chip_info() -@@ -652,7 +653,7 @@ function pack_trust_image() - function pack_fit_image() - { - # check host tools -- if ! which dtc >/dev/null 2>&1 ; then -+ if ! which "$DTC" >/dev/null 2>&1 ; then - echo "ERROR: No 'dtc', please: apt-get install device-tree-compiler" - exit 1 - fi --- -2.38.1 - diff --git a/package/uboot-rg353x/old/0007-set-part-name.patch b/package/uboot-rg353x/old/0007-set-part-name.patch deleted file mode 100644 index 2ebb63b7dc33101ae18f926e3cf382c159e5d6aa..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/old/0007-set-part-name.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 1a3e974370769f9eaa11179dcde9d1f56d88de63 Mon Sep 17 00:00:00 2001 -From: David Barbion -Date: Sat, 19 Nov 2022 23:43:45 +0100 -Subject: [PATCH 7/7] set part name - ---- - include/configs/rockchip-common.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/configs/rockchip-common.h b/include/configs/rockchip-common.h -index 79ee3d7..4a76766 100644 ---- a/include/configs/rockchip-common.h -+++ b/include/configs/rockchip-common.h -@@ -92,7 +92,7 @@ - "uuid_disk=${uuid_gpt_disk};" \ - "name=uboot,start=8MB,size=4MB,uuid=${uuid_gpt_loader2};" \ - "name=resource,start=12MB,size=4MB,uuid=${uuid_gpt_resource};" \ -- "name=ANBERNIC,start=16MB,size=3072M,bootable,uuid=${uuid_gpt_boot};\0" -+ "name=RECALBOX,start=16MB,size=3072M,bootable,uuid=${uuid_gpt_boot};\0" - #else - #define PARTS_DEFAULT \ - "uuid_disk=${uuid_gpt_disk};" \ --- -2.38.1 - diff --git a/package/uboot-rg353x/uboot-rg353x.mk b/package/uboot-rg353x/uboot-rg353x.mk deleted file mode 100644 index 7d054bd948900f104a7b3802c5c5a848dd16942e..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/uboot-rg353x.mk +++ /dev/null @@ -1,36 +0,0 @@ -################################################################################ -# -# uboot-rg353x -# -################################################################################ - -UBOOT_RG353X_VERSION = 06ce0271ddf522f97b9150e369ebec10bf2c763b -UBOOT_RG353X_SITE = https://gitlab.com/recalbox/packages/hardware/uboot-rg353x.git -UBOOT_RG353X_SITE_METHOD = git -UBOOT_RG353X_LICENSE = unknown -UBOOT_RG353X_DEPENDENCIES = linux host-python3 - -UBOOT_RG353X_INSTALL_TARGET = NO -UBOOT_RG353X_INSTALL_IMAGES = YES - -define UBOOT_RG353X_BUILD_CMDS - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/logo.bmp $(LINUX_DIR)/logo_kernel.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/logo2.bmp $(LINUX_DIR)/logo.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_0.bmp $(LINUX_DIR)/battery_0.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_1.bmp $(LINUX_DIR)/battery_1.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_2.bmp $(LINUX_DIR)/battery_2.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_3.bmp $(LINUX_DIR)/battery_3.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_4.bmp $(LINUX_DIR)/battery_4.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_5.bmp $(LINUX_DIR)/battery_5.bmp - $(INSTALL) $(UBOOT_RG353X_PKGDIR)/assets/battery_fail.bmp $(LINUX_DIR)/battery_fail.bmp - cd $(LINUX_DIR); \ - ./scripts/mkmultidtb.py rk356x -endef - -define UBOOT_RG353X_INSTALL_IMAGES_CMDS - $(INSTALL) -D $(@D)/uboot.img $(BINARIES_DIR)/ - $(INSTALL) -D $(@D)/idbloader.img $(BINARIES_DIR)/ - $(INSTALL) -D $(LINUX_DIR)/resource.img $(BINARIES_DIR)/ -endef - -$(eval $(generic-package)) diff --git a/package/uboot-rg353x/uboot-rg353x.mk.old b/package/uboot-rg353x/uboot-rg353x.mk.old deleted file mode 100644 index d793a9d8a4ba68d3b22e8c2c9cef10a8bc8c7651..0000000000000000000000000000000000000000 --- a/package/uboot-rg353x/uboot-rg353x.mk.old +++ /dev/null @@ -1,40 +0,0 @@ -################################################################################ -# -# uboot-rg353x -# -################################################################################ - -UBOOT_RG353X_VERSION = 62a0e69da448ca37a8c106ff3886e8b1543ea829 -UBOOT_RG353X_SITE = $(call github,JustEnoughLinuxOS,rk356x-uboot,$(UBOOT_RG353X_VERSION)) -UBOOT_RG353X_LICENSE = GPL-2.0+ -UBOOT_RG353X_LICENSE_FILES = Licenses/gpl-2.0.txt -UBOOT_RG353X_DEPENDENCIES = host-dtc host-rockchip-rkbin - -UBOOT_RG353X_INSTALL_TARGET = NO -UBOOT_RG353X_INSTALL_IMAGES = YES - -define UBOOT_RG353X_TOOLCHAIN_PATCH - $(SED) '/^TOOLCHAIN_ARM64=/s#=.*#="$(HOST_DIR)/bin/"#' $(@D)/make.sh - $(SED) '/^ADDR2LINE_ARM64=/s#=.*#=aarch64-buildroot-linux-gnu-addr2line#' $(@D)/make.sh - $(SED) '/^OBJ_ARM64=/s#=.*#=aarch64-buildroot-linux-gnu-objdump#' $(@D)/make.sh - $(SED) '/^NM_ARM64=/s#=.*#=aarch64-buildroot-linux-gnu-nm#' $(@D)/make.sh - $(SED) '/^GCC_ARM64=/s#=.*#=aarch64-buildroot-linux-gnu-#' $(@D)/make.sh - $(SED) '/^RKBIN_TOOLS=/s#=.*#=$(HOST_DIR)/rkbin/.#' $(@D)/make.sh -endef - -define UBOOT_RG353X_BUILD_CMDS - #cd $(@D) && PATH="$(HOST_DIR)/bin:$$PATH" ./make.sh rk3566 - #cd $(@D) && ./tools/mkimage -n rk356x -T rksd -d $(HOST_DIR)/rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.08.bin:$(HOST_DIR)/rkbin/bin/rk35/rk356x_spl_v1.11.bin -C bzip2 idbloader.img - echo "ok" -endef -# cd $(@D) && ./tools/mkimage -n rk356x -T rksd -d $(HOST_DIR)/rkbin/bin/rk35/rk3566_ddr_1056MHz_v1.13.bin:$(HOST_DIR)/rkbin/bin/rk35/rk356x_spl_v1.12.bin -C bzip2 idbloader.img - -define UBOOT_RG353X_INSTALL_IMAGES_CMDS -# $(INSTALL) -D $(@D)/uboot.img $(BINARIES_DIR)/ -# $(INSTALL) -D $(@D)/idbloader.img $(BINARIES_DIR)/ - echo "ok" -endef - -UBOOT_RG353X_PRE_BUILD_HOOKS += UBOOT_RG353X_TOOLCHAIN_PATCH - -$(eval $(generic-package)) diff --git a/projects/frontend/es-core/src/audio/pulseaudio/PulseAudioController.cpp b/projects/frontend/es-core/src/audio/pulseaudio/PulseAudioController.cpp index ebf89e04334268bf6097e968b0647df10afa1c6c..2f2271d270b4bb4302ab4c0c269821a015f8b2a4 100755 --- a/projects/frontend/es-core/src/audio/pulseaudio/PulseAudioController.cpp +++ b/projects/frontend/es-core/src/audio/pulseaudio/PulseAudioController.cpp @@ -712,12 +712,6 @@ String PulseAudioController::AdjustSpecialPlayback(const String& originalPlaybac case BoardType::RG353P: case BoardType::RG353M: case BoardType::RG503: - { - // we force headphone output so that rg353m can be switched to spk by the software after the init/detection of headphone - if (system("amixer sset 'Playback Path' HP") != 0) - { LOG(LogError) << "[PulseAudio] Error setting playback path"; } - break; - } case BoardType::UndetectedYet: case BoardType::Unknown: case BoardType::Pi0: diff --git a/projects/frontend/es-core/src/hardware/Board.cpp b/projects/frontend/es-core/src/hardware/Board.cpp index db21852717efe810a9b7565b6bbb61d19f2d03a1..b5f3cefc9f9704ad2fd8df23fccede4b121561de 100644 --- a/projects/frontend/es-core/src/hardware/Board.cpp +++ b/projects/frontend/es-core/src/hardware/Board.cpp @@ -202,13 +202,19 @@ BoardType Board::GetBoardType() if (left == REVISION_STRING) revision = right; } + // Finally read devicetree model + if (hardware.empty()) + hardware = Files::LoadFile(Path("/sys/firmware/devicetree/base/model")); + + { LOG(LogInfo) << "[Hardware] " << hardware; } + // Identification if (hardware == "Anbernic RG351V") { LOG(LogInfo) << "[Hardware] Anbernic RG351V"; mType = BoardType::RG351V; } else if (hardware == "Anbernic RG351P") { LOG(LogInfo) << "[Hardware] Anbernic RG351P"; mType = BoardType::RG351P; } - else if (hardware == "Anbernic RG353P") { LOG(LogInfo) << "[Hardware] Anbernic RG353P"; mType = BoardType::RG353P; } - else if (hardware == "Anbernic RG353V") { LOG(LogInfo) << "[Hardware] Anbernic RG353V"; mType = BoardType::RG353V; } - else if (hardware == "Anbernic RG353M") { LOG(LogInfo) << "[Hardware] Anbernic RG353M"; mType = BoardType::RG353M; } - else if (hardware == "Anbernic RG503") { LOG(LogInfo) << "[Hardware] Anbernic RG503"; mType = BoardType::RG503; } + else if (hardware.Contains("RG353P")) { LOG(LogInfo) << "[Hardware] Anbernic RG353P"; mType = BoardType::RG353P; } + else if (hardware.Contains("RG353V")) { LOG(LogInfo) << "[Hardware] Anbernic RG353V"; mType = BoardType::RG353V; } + else if (hardware.Contains("RG353M")) { LOG(LogInfo) << "[Hardware] Anbernic RG353M"; mType = BoardType::RG353M; } + else if (hardware.Contains("RG503")) { LOG(LogInfo) << "[Hardware] Anbernic RG503"; mType = BoardType::RG503; } else if (hardware == "Hardkernel ODROID-GO3") { LOG(LogInfo) << "[Hardware] Odroid Advance Go Super revision " << revision; mType = BoardType::OdroidAdvanceGoSuper; } else if ((hardware == "Hardkernel ODROID-GO2") || (hardware == "Hardkernel ODROID-GO1") || (hardware == "Hardkernel ODROID-GO")) { diff --git a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.cpp b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.cpp index ba540d0c404fe7f63a5533a8fd72840f32ad399f..823e7850803aee8ab025d682c97eebd4b98d077c 100644 --- a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.cpp +++ b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.cpp @@ -32,9 +32,9 @@ void RG353XBoard::SetLowestBrightness() void RG353XBoard::SetBrightness(int step) { String maxValue = Files::LoadFile(Path("/sys/class/backlight/backlight/max_brightness")); - int max = 255; // Max RG value + int max = 1666; // Max RG value (void)maxValue.Trim("\r\n").TryAsInt(max); - int value = 1 << step; if (value > max) value = max; + int value = ((max >> 8) + 1) << step; if (value > max) value = max; Files::SaveFile(Path("/sys/class/backlight/backlight/brightness"), String(value)); } @@ -86,15 +86,11 @@ bool RG353XBoard::IsBatteryCharging() void RG353XBoard::HeadphonePlugged() { - if (system("amixer sset 'Playback Path' HP") != 0) - { LOG(LogError) << "[RG353XBoard] Error setting headphone on!"; } AudioController::Instance().SetOutputPort("rk817-headphones"); } void RG353XBoard::HeadphoneUnplugged() { - if (system("amixer sset 'Playback Path' SPK") != 0) - { LOG(LogError) << "[RG353XBoard] Error setting headphone off!"; } AudioController::Instance().SetOutputPort("rk817-speaker"); } diff --git a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.h b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.h index 3319f5d6ed1bddacbc2ccf128c0d2b1907514f37..a9a9ba11a9030b2e7d5ab91a87ab3ed609776a88 100644 --- a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.h +++ b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XBoard.h @@ -29,9 +29,9 @@ class RG353XBoard: public IBoardInterface private: static constexpr const char* sCpuGovernancePath = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"; static constexpr const char* sGpuGovernancePath = "/sys/class/devfreq/fde60000.gpu/governor"; - static constexpr const char* sDmcGovernancePath = "/sys/class/devfreq/dmc/governor"; - static constexpr const char* sBatteryCapacityPath = "/sys/class/power_supply/battery/capacity"; - static constexpr const char* sBatteryStatusPath = "/sys/class/power_supply/battery/status"; + static constexpr const char* sDmcGovernancePath = "/sys/class/devfreq/dmc/governor"; // TODO + static constexpr const char* sBatteryCapacityPath = "/sys/class/power_supply/rk817-battery/capacity"; + static constexpr const char* sBatteryStatusPath = "/sys/class/power_supply/rk817-battery/status"; //! Headphone jack event reader RG353XJackEventReader mHeadphoneReader; diff --git a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XJackEventReader.h b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XJackEventReader.h index 229ca9563201517bc488668dc134487d6014468b..45dc57a5d63c3bf0cb442557937b4a81acb39da5 100644 --- a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XJackEventReader.h +++ b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XJackEventReader.h @@ -24,7 +24,7 @@ class RG353XJackEventReader : private Thread private: //! Event to read - static constexpr const char* sInputEventPath = "/dev/input/event4"; + static constexpr const char* sInputEventPath = "/dev/input/event3"; //! Headphone insert event type static constexpr int sHeadphoneInsertType = EV_SW; //! Headphone insert event code diff --git a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XPowerEventReader.h b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XPowerEventReader.h index fe82404d26f3bd6d9fd7434f247cc9a8e7d5a43b..c2e8999c77f5df8612d40c13e048c4fac96e8f7f 100644 --- a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XPowerEventReader.h +++ b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XPowerEventReader.h @@ -33,7 +33,7 @@ class RG353XPowerEventReader : private Thread }; //! Event to read - static constexpr const char* sInputEventPath = "/dev/input/by-path/platform-fdd40000.i2c-platform-rk805-pwrkey-event"; + static constexpr const char* sInputEventPath = "/dev/input/by-path/platform-fdd40000.i2c-platform-rk805-pwrkey.3.auto-event"; //! Power key code static constexpr int sPowerKeyCode = 116; diff --git a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XVolumeReader.h b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XVolumeReader.h index bb6f233ac3cabdda63b5dec24f06742194a5d097..8c655afa30efc96572c5e3d8509b59616b30efa2 100644 --- a/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XVolumeReader.h +++ b/projects/frontend/es-core/src/hardware/boards/anbernic/RG353XVolumeReader.h @@ -32,7 +32,7 @@ class RG353XVolumeReader : private Thread private: //! Event to read - static constexpr const char* sInputEventPath = "/dev/input/by-path/platform-gpio-keys-event"; + static constexpr const char* sInputEventPath = "/dev/input/by-path/platform-gpio-keys-vol-event"; //! Volume button up static constexpr int sVolumeUp = 115; //! Volume button down