From 7bd39a17c5dbcd30d4fb002cbd6d97d3476e57f2 Mon Sep 17 00:00:00 2001 From: kszaq Date: Thu, 25 Apr 2019 21:14:31 +0200 Subject: [PATCH] packages: drop amlogic-specific packages --- .../dvb-tools-depends/t2scan/package.mk | 8 - .../dvb-tools-depends/w_scan/package.mk | 8 - packages/addons/service/hyperion/package.mk | 5 +- packages/devel/libcec/package.mk | 10 - packages/graphics/opengl-meson/package.mk | 68 --- .../system.d/unbind-console.service | 11 - .../dvb/crazycat_aml/changelog.txt | 2 - .../dvb/crazycat_aml/icon/icon.png | Bin 68596 -> 0 bytes .../dvb/crazycat_aml/package.mk | 51 -- ....dvb.crazycat_aml-01-remove-rmmod.pl.patch | 13 - ....dvb.crazycat_aml-02-disable-modules.patch | 13 - ...vb.crazycat_aml-03-config_mycompat_h.patch | 7 - .../dvb/crazycat_aml/source/default.py | 2 - .../dvb/depends/media_tree_cc_aml/package.mk | 26 - ...-linux-901-extend-rc6-toggle-support.patch | 52 -- ...-extend-rc6-toggle-support-for-zotac.patch | 41 -- .../media_tree_cc_aml-04-fix-tbs5520se.patch | 22 - .../amlogic/RTL8188EU-aml/package.mk | 34 -- ...01-Add-support-for-a-few-USB-dongles.patch | 29 - .../amlogic/RTL8189ES-aml/package.mk | 38 -- .../amlogic/RTL8189FS-aml/package.mk | 38 -- .../amlogic/RTL8723BS-aml/package.mk | 38 -- .../amlogic/RTL8723DS-aml/package.mk | 38 -- .../amlogic/RTL8822BU-aml/package.mk | 38 -- .../amlogic/ap6xxx-aml/modprobe.d/dhd.conf | 1 - .../amlogic/ap6xxx-aml/package.mk | 31 - ...new-SDIO-vendor-device-ID-for-AP6212.patch | 34 -- ...add-BCM4335-firmware-loading-support.patch | 53 -- ...dhd-match-only-Broadcom-SDIO-devices.patch | 25 - ...-is-not-yet-initialized-wait-and-ret.patch | 37 -- .../amlogic/avl6862-aml/package.mk | 16 - .../avl6862-aml/system.d/amlogic-dvb.service | 11 - .../amlogic/fd628-aml/package.mk | 37 -- .../amlogic/fd628-aml/sources/Makefile | 6 - .../amlogic/fd628-aml/system.d/fd628.service | 15 - .../amlogic/mt7601u-aml/package.mk | 33 -- .../mt7601u-aml-001-firmware-path.patch | 13 - .../amlogic/mt7603u-aml/package.mk | 35 -- .../mt7603u-aml-001-firmware-path.patch | 38 -- .../mt7603u-aml-002-fix-building.patch | 13 - .../amlogic/qca9377-aml/package.mk | 37 -- ...firmware-handling-to-support-chips-u.patch | 538 ------------------ .../udev.d/99-qca9377-wireless.rules | 1 - .../amlogic/ssv6xxx-aml/package.mk | 47 -- ...-aml-001-fix-build-and-firmware-path.patch | 86 --- .../brcmap6xxx-aml/config/config.txt | 9 - .../brcmap6xxx-aml/modprobe.d/dhd.conf | 1 - .../brcmap6xxx-aml/modules-load.d/dhd.conf | 1 - .../linux-drivers/brcmap6xxx-aml/package.mk | 32 -- packages/linux-drivers/gpu-aml/package.mk | 56 -- .../brcmfmac_sdio-firmware-all-aml/package.mk | 22 - ...aml-all-0001-install-firmware-in-usr.patch | 14 - .../brcmfmac_sdio-firmware-aml.service | 8 - .../system.d/brcmfmac_sdio-firmware@.service | 8 - .../udev.d/80-brcmfmac_sdio.rules | 12 - .../brcmfmac_sdio-firmware-aml/package.mk | 15 - ...e-aml-0001-install-firmware-to-FWDIR.patch | 14 - .../system.d/brcmfmac_sdio-firmware@.service | 8 - .../udev.d/80-brcmfmac_sdio.rules | 30 - .../amlogic/qca9377-firmware-aml/package.mk | 18 - .../system.d/qca9377-firmware-aml.service | 8 - .../udev.d/80-qca9377-firmware-aml.rules | 6 - .../amlogic/wlan-firmware-aml/package.mk | 36 -- packages/multimedia/libamcodec/package.mk | 35 -- .../sysutils/amremote/config/libreelec.conf | 13 - packages/sysutils/amremote/config/wetek.conf | 11 - packages/sysutils/amremote/package.mk | 27 - .../sysutils/amremote/scripts/remote-config | 18 - .../system.d/amlogic-remotecfg.service | 11 - packages/tools/aml-dtbtools/package.mk | 18 - .../u-boot-tools-aml/config/fw_env.config | 31 - packages/tools/u-boot-tools-aml/package.mk | 37 -- .../u-boot-tools-0001-dummy_defconfig.patch | 5 - ...ot-tools-0002-allow-multiple-entries.patch | 23 - .../u-boot-tools-0003-nand_env-hack.patch | 52 -- 75 files changed, 1 insertion(+), 2277 deletions(-) delete mode 100644 packages/graphics/opengl-meson/package.mk delete mode 100644 packages/graphics/opengl-meson/system.d/unbind-console.service delete mode 100755 packages/linux-driver-addons/dvb/crazycat_aml/changelog.txt delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/icon/icon.png delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/package.mk delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-01-remove-rmmod.pl.patch delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-02-disable-modules.patch delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-03-config_mycompat_h.patch delete mode 100644 packages/linux-driver-addons/dvb/crazycat_aml/source/default.py delete mode 100644 packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/package.mk delete mode 100644 packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-02-linux-901-extend-rc6-toggle-support.patch delete mode 100644 packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-03-linux-902-extend-rc6-toggle-support-for-zotac.patch delete mode 100644 packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-04-fix-tbs5520se.patch delete mode 100644 packages/linux-drivers/amlogic/RTL8188EU-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/RTL8188EU-aml/patches/RTL8188EU-aml-0001-Add-support-for-a-few-USB-dongles.patch delete mode 100644 packages/linux-drivers/amlogic/RTL8189ES-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/RTL8189FS-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/RTL8723BS-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/RTL8723DS-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/RTL8822BU-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/modprobe.d/dhd.conf delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0001-bcmdhd-Add-new-SDIO-vendor-device-ID-for-AP6212.patch delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0002-bcmdhd-add-BCM4335-firmware-loading-support.patch delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0003-bcmdhd-match-only-Broadcom-SDIO-devices.patch delete mode 100644 packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0004-bcmdhd-if-driver-is-not-yet-initialized-wait-and-ret.patch delete mode 100644 packages/linux-drivers/amlogic/avl6862-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/avl6862-aml/system.d/amlogic-dvb.service delete mode 100644 packages/linux-drivers/amlogic/fd628-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/fd628-aml/sources/Makefile delete mode 100644 packages/linux-drivers/amlogic/fd628-aml/system.d/fd628.service delete mode 100644 packages/linux-drivers/amlogic/mt7601u-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/mt7601u-aml/patches/mt7601u-aml-001-firmware-path.patch delete mode 100644 packages/linux-drivers/amlogic/mt7603u-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-001-firmware-path.patch delete mode 100644 packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-002-fix-building.patch delete mode 100644 packages/linux-drivers/amlogic/qca9377-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/qca9377-aml/patches/qca9377-aml-001-Modify-SDIO-and-firmware-handling-to-support-chips-u.patch delete mode 100644 packages/linux-drivers/amlogic/qca9377-aml/udev.d/99-qca9377-wireless.rules delete mode 100644 packages/linux-drivers/amlogic/ssv6xxx-aml/package.mk delete mode 100644 packages/linux-drivers/amlogic/ssv6xxx-aml/patches/ssv6xxx-aml-001-fix-build-and-firmware-path.patch delete mode 100644 packages/linux-drivers/brcmap6xxx-aml/config/config.txt delete mode 100644 packages/linux-drivers/brcmap6xxx-aml/modprobe.d/dhd.conf delete mode 100644 packages/linux-drivers/brcmap6xxx-aml/modules-load.d/dhd.conf delete mode 100644 packages/linux-drivers/brcmap6xxx-aml/package.mk delete mode 100644 packages/linux-drivers/gpu-aml/package.mk delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/package.mk delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/patches/brcmfmac_sdio-firmware-aml-all-0001-install-firmware-in-usr.patch delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware-aml.service delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware@.service delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/udev.d/80-brcmfmac_sdio.rules delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/package.mk delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/patches/brcmfmac_sdio-firmware-aml-0001-install-firmware-to-FWDIR.patch delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/system.d/brcmfmac_sdio-firmware@.service delete mode 100644 packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/udev.d/80-brcmfmac_sdio.rules delete mode 100644 packages/linux-firmware/amlogic/qca9377-firmware-aml/package.mk delete mode 100644 packages/linux-firmware/amlogic/qca9377-firmware-aml/system.d/qca9377-firmware-aml.service delete mode 100644 packages/linux-firmware/amlogic/qca9377-firmware-aml/udev.d/80-qca9377-firmware-aml.rules delete mode 100644 packages/linux-firmware/amlogic/wlan-firmware-aml/package.mk delete mode 100644 packages/multimedia/libamcodec/package.mk delete mode 100644 packages/sysutils/amremote/config/libreelec.conf delete mode 100644 packages/sysutils/amremote/config/wetek.conf delete mode 100644 packages/sysutils/amremote/package.mk delete mode 100755 packages/sysutils/amremote/scripts/remote-config delete mode 100644 packages/sysutils/amremote/system.d/amlogic-remotecfg.service delete mode 100644 packages/tools/aml-dtbtools/package.mk delete mode 100644 packages/tools/u-boot-tools-aml/config/fw_env.config delete mode 100644 packages/tools/u-boot-tools-aml/package.mk delete mode 100644 packages/tools/u-boot-tools-aml/patches/u-boot-tools-0001-dummy_defconfig.patch delete mode 100644 packages/tools/u-boot-tools-aml/patches/u-boot-tools-0002-allow-multiple-entries.patch delete mode 100644 packages/tools/u-boot-tools-aml/patches/u-boot-tools-0003-nand_env-hack.patch diff --git a/packages/addons/addon-depends/dvb-tools-depends/t2scan/package.mk b/packages/addons/addon-depends/dvb-tools-depends/t2scan/package.mk index 6dd63949c6..e36f790212 100644 --- a/packages/addons/addon-depends/dvb-tools-depends/t2scan/package.mk +++ b/packages/addons/addon-depends/dvb-tools-depends/t2scan/package.mk @@ -10,14 +10,6 @@ PKG_URL="https://github.com/mighty-p/t2scan/archive/$PKG_VERSION.tar.gz" PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A small channel scan tool which generates DVB-T/T2 channels.conf files." -# aml 3.14 hack -pre_configure_target() { - if [ "$LINUX" = "amlogic-3.14" -o "$LINUX" = "amlogic-3.10" ]; then - sed -i 's/DVB_HEADER=0/DVB_HEADER=1/g' $PKG_BUILD/configure* - sed -i 's/HAS_DVB_API5=0/HAS_DVB_API5=1/g' $PKG_BUILD/configure* - fi -} - makeinstall_target() { : } diff --git a/packages/addons/addon-depends/dvb-tools-depends/w_scan/package.mk b/packages/addons/addon-depends/dvb-tools-depends/w_scan/package.mk index 25f5ef30fd..67d5e08923 100644 --- a/packages/addons/addon-depends/dvb-tools-depends/w_scan/package.mk +++ b/packages/addons/addon-depends/dvb-tools-depends/w_scan/package.mk @@ -11,14 +11,6 @@ PKG_DEPENDS_TARGET="toolchain" PKG_LONGDESC="A channel scan tool which generates ATSC, DVB-C, DVB-S/S2 and DVB-T channels.conf files." PKG_TOOLCHAIN="autotools" -# aml 3.14 hack -pre_configure_target() { - if [ "$LINUX" = "amlogic-3.14" -o "$LINUX" = "amlogic-3.10" ]; then - sed -i 's/DVB_HEADER=0/DVB_HEADER=1/g' $PKG_BUILD/configure* - sed -i 's/HAS_DVB_API5=0/HAS_DVB_API5=1/g' $PKG_BUILD/configure* - fi -} - makeinstall_target() { : } diff --git a/packages/addons/service/hyperion/package.mk b/packages/addons/service/hyperion/package.mk index d4d736e330..6a302159b2 100644 --- a/packages/addons/service/hyperion/package.mk +++ b/packages/addons/service/hyperion/package.mk @@ -25,10 +25,7 @@ PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=0" PKG_FB_SUPPORT="-DENABLE_FB=1" PKG_X11_SUPPORT="-DENABLE_X11=0" -if [ "$KODIPLAYER_DRIVER" = "libamcodec" ]; then - PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libamcodec" - PKG_AMLOGIC_SUPPORT="-DENABLE_AMLOGIC=1" -elif [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then +if [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver" PKG_DISPMANX_SUPPORT="-DENABLE_DISPMANX=1" PKG_FB_SUPPORT="-DENABLE_FB=0" diff --git a/packages/devel/libcec/package.mk b/packages/devel/libcec/package.mk index c5b797d9b8..380d83997c 100644 --- a/packages/devel/libcec/package.mk +++ b/packages/devel/libcec/package.mk @@ -22,16 +22,6 @@ if [ "$KODIPLAYER_DRIVER" = "bcm2835-driver" ]; then PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET bcm2835-driver" fi -if [ "$KODIPLAYER_DRIVER" = "libamcodec" ]; then - if [ "$TARGET_KERNEL_ARCH" = "arm64" ]; then - PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AOCEC_API=1" - else - PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AMLOGIC_API=1" - fi -else - PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_TARGET -DHAVE_AOCEC_API=0 -DHAVE_AMLOGIC_API=0" -fi - # libX11 and xrandr to read the sink's EDID, used to determine the PC's HDMI physical address if [ "$DISPLAYSERVER" = "x11" ]; then PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libX11 libXrandr" diff --git a/packages/graphics/opengl-meson/package.mk b/packages/graphics/opengl-meson/package.mk deleted file mode 100644 index e7af48e2cf..0000000000 --- a/packages/graphics/opengl-meson/package.mk +++ /dev/null @@ -1,68 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="opengl-meson" -PKG_ARCH="arm aarch64" -PKG_LICENSE="nonfree" -PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/filesystem/" -case $MESON_FAMILY in - 8) - PKG_VERSION="8-r5p1-02rel0-armhf" - PKG_SHA256="717739c9f65f6782e3185aad09d01f228873315f70f9a58c0526b9e63a6e386f" - ;; - 6) - PKG_VERSION="6-r5p1-02rel0-armhf" - PKG_SHA256="de38a1fa23191bd5de5c85c66627d4537775ee4634b71baa8d0e241b8b9d4ba2" - ;; - gxbb) - if [ "$TARGET_ARCH" = "arm" ]; then - PKG_VERSION="8-r5p1-02rel0-armhf" - PKG_SHA256="717739c9f65f6782e3185aad09d01f228873315f70f9a58c0526b9e63a6e386f" - else - PKG_VERSION="gxbb-r5p1-01rel0" - fi -;; -esac -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="OpenGL ES pre-compiled libraries for Mali GPUs found in Amlogic Meson SoCs." -PKG_TOOLCHAIN="manual" - -makeinstall_target() { - mkdir -p $SYSROOT_PREFIX/usr/include - cp -PR usr/include/* $SYSROOT_PREFIX/usr/include - - mkdir -p $SYSROOT_PREFIX/usr/lib - cp -PR usr/lib/libMali.so $SYSROOT_PREFIX/usr/lib - - ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libEGL.so.1.4 - ln -sf libEGL.so.1.4 $SYSROOT_PREFIX/usr/lib/libEGL.so.1 - ln -sf libEGL.so.1 $SYSROOT_PREFIX/usr/lib/libEGL.so - - ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so.1.1 - ln -sf libGLESv1_CM.so.1.1 $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so.1 - ln -sf libGLESv1_CM.so.1 $SYSROOT_PREFIX/usr/lib/libGLESv1_CM.so - - ln -sf libMali.so $SYSROOT_PREFIX/usr/lib/libGLESv2.so.2.0 - ln -sf libGLESv2.so.2.0 $SYSROOT_PREFIX/usr/lib/libGLESv2.so.2 - ln -sf libGLESv2.so.2 $SYSROOT_PREFIX/usr/lib/libGLESv2.so - - mkdir -p $INSTALL/usr/lib - cp -PR usr/lib/libMali.so $INSTALL/usr/lib - - ln -sf libMali.so $INSTALL/usr/lib/libEGL.so.1.4 - ln -sf libEGL.so.1.4 $INSTALL/usr/lib/libEGL.so.1 - ln -sf libEGL.so.1 $INSTALL/usr/lib/libEGL.so - - ln -sf libMali.so $INSTALL/usr/lib/libGLESv1_CM.so.1.1 - ln -sf libGLESv1_CM.so.1.1 $INSTALL/usr/lib/libGLESv1_CM.so.1 - ln -sf libGLESv1_CM.so.1 $INSTALL/usr/lib/libGLESv1_CM.so - - ln -sf libMali.so $INSTALL/usr/lib/libGLESv2.so.2.0 - ln -sf libGLESv2.so.2.0 $INSTALL/usr/lib/libGLESv2.so.2 - ln -sf libGLESv2.so.2 $INSTALL/usr/lib/libGLESv2.so -} - -post_install() { - enable_service unbind-console.service -} diff --git a/packages/graphics/opengl-meson/system.d/unbind-console.service b/packages/graphics/opengl-meson/system.d/unbind-console.service deleted file mode 100644 index a79c37ad11..0000000000 --- a/packages/graphics/opengl-meson/system.d/unbind-console.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Unbind framebuffer console - -ConditionPathExists=/sys/class/vtconsole/vtcon1/bind - -[Service] -Type=oneshot -ExecStart=/bin/sh -c 'echo 0 > /sys/class/vtconsole/vtcon1/bind' - -[Install] -WantedBy=graphical.target diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/changelog.txt b/packages/linux-driver-addons/dvb/crazycat_aml/changelog.txt deleted file mode 100755 index 32d81ca428..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/changelog.txt +++ /dev/null @@ -1,2 +0,0 @@ -100 -- Initial add-on diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/icon/icon.png b/packages/linux-driver-addons/dvb/crazycat_aml/icon/icon.png deleted file mode 100644 index 22a6c6a0d90344f27d68561d8d44115debdfe89a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68596 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 diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/package.mk b/packages/linux-driver-addons/dvb/crazycat_aml/package.mk deleted file mode 100644 index 5e413670e6..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/package.mk +++ /dev/null @@ -1,51 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="crazycat_aml" -PKG_VERSION="835dc72da3ee63df7f4057bd0507887454c005d1" -PKG_SHA256="3d68d368a9eda15688c6686caa854a045a753740ec93553d80a4bcfc14c2950a" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="https://bitbucket.org/CrazyCat/media_build" -PKG_URL="https://bitbucket.org/CrazyCat/media_build/get/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux media_tree_cc_aml" -PKG_NEED_UNPACK="$LINUX_DEPENDS media_tree_cc_aml" -PKG_SECTION="driver.dvb" -PKG_LONGDESC="DVB drivers from the latest kernel" - -PKG_IS_ADDON="embedded" -PKG_IS_KERNEL_PKG="yes" -PKG_ADDON_IS_STANDALONE="yes" -PKG_ADDON_NAME="DVB drivers from the latest kernel" -PKG_ADDON_TYPE="xbmc.service" -PKG_ADDON_VERSION="${ADDON_VERSION}.${PKG_REV}" - -pre_make_target() { - export KERNEL_VER=$(get_module_dir) - export LDFLAGS="" -} - -make_target() { - cp -RP $(get_build_dir media_tree_cc_aml)/* $PKG_BUILD/linux - - # compile modules - echo "obj-y += video_dev/" >> "$PKG_BUILD/linux/drivers/media/platform/meson/Makefile" - echo "obj-y += wetek/" >> "$PKG_BUILD/linux/drivers/media/platform/meson/Makefile" - - # make config all - kernel_make VER=$KERNEL_VER SRCDIR=$(kernel_path) allyesconfig - - # deactivate several build options - sed '/CONFIG_VIDEO_S5C73M3=m/d' -i $PKG_BUILD/v4l/.config - - # enable AML drivers - echo "CONFIG_IR_MESON=m" >> $PKG_BUILD/v4l/.config - echo "CONFIG_V4L_AMLOGIC_VIDEO=m" >> $PKG_BUILD/v4l/.config - echo "CONFIG_VIDEOBUF_RESOURCE=m" >> $PKG_BUILD/v4l/.config - - kernel_make VER=$KERNEL_VER SRCDIR=$(kernel_path) -} - -makeinstall_target() { - install_driver_addon_files "$PKG_BUILD/v4l/" -} diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-01-remove-rmmod.pl.patch b/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-01-remove-rmmod.pl.patch deleted file mode 100644 index b7a80a6434..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-01-remove-rmmod.pl.patch +++ /dev/null @@ -1,13 +0,0 @@ -[Patch] without this patch you need to install libproc-processtable-perl at host system - ---- a/v4l/Makefile -+++ b/v4l/Makefile -@@ -51,7 +51,7 @@ - @echo Kernel build directory is $(OUTDIR) - $(MAKE) -C ../linux apply_patches - $(MAKE) -C $(OUTDIR) SUBDIRS=$(PWD) $(MYCFLAGS) modules -- ./scripts/rmmod.pl check -+# ./scripts/rmmod.pl check - # $(MAKE) checkpatch - - mismatch:: prepare firmware diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-02-disable-modules.patch b/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-02-disable-modules.patch deleted file mode 100644 index e2659408e8..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-02-disable-modules.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/v4l/scripts/make_kconfig.pl -+++ b/v4l/scripts/make_kconfig.pl -@@ -626,6 +626,10 @@ ($$) - close OUT; - - # These options should default to off -+disable_config('MEDIA_ANALOG_TV_SUPPORT'); -+disable_config('MEDIA_CAMERA_SUPPORT'); -+disable_config('MEDIA_CEC_SUPPORT'); -+disable_config('SOC_CAMERA'); - disable_config('DVB_AV7110_FIRMWARE'); - disable_config('DVB_CINERGYT2_TUNING'); - disable_config('VIDEO_HELPER_CHIPS_AUTO'); diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-03-config_mycompat_h.patch b/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-03-config_mycompat_h.patch deleted file mode 100644 index 174c69a955..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/patches/driver.dvb.crazycat_aml-03-config_mycompat_h.patch +++ /dev/null @@ -1,7 +0,0 @@ ---- /dev/null -+++ b/v4l/config-mycompat.h -@@ -0,0 +1,3 @@ -+#undef NEED_PFN_TO_PHYS -+#undef NEED_WRITEL_RELAXED -+#undef NEED_PM_RUNTIME_GET --- diff --git a/packages/linux-driver-addons/dvb/crazycat_aml/source/default.py b/packages/linux-driver-addons/dvb/crazycat_aml/source/default.py deleted file mode 100644 index c8f85a76fc..0000000000 --- a/packages/linux-driver-addons/dvb/crazycat_aml/source/default.py +++ /dev/null @@ -1,2 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) diff --git a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/package.mk b/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/package.mk deleted file mode 100644 index f06e70e437..0000000000 --- a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/package.mk +++ /dev/null @@ -1,26 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="media_tree_cc_aml" -PKG_VERSION="2018-09-23" -PKG_SHA256="3b0cf3699317c04d9184b7e25056065fd374b20b851ee86a63ea2c70e219ee9e" -PKG_LICENSE="GPL" -PKG_SITE="https://bitbucket.org/CrazyCat/media_build/downloads/" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Source of Linux Kernel media_tree subsystem to build with media_build." -PKG_TOOLCHAIN="manual" - -unpack() { - mkdir -p $PKG_BUILD/ - tar -xf $SOURCES/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.xz -C $PKG_BUILD/ - - # hack/workaround for borked upstream kernel/media_build - # without removing atomisp there a lot additional includes that - # slowdown build process after modpost from 3min to 6min - # even if atomisp is disabled via kernel.conf - rm -rf $PKG_BUILD/drivers/staging/media/atomisp - sed -i 's|^.*drivers/staging/media/atomisp.*$||' \ - $PKG_BUILD/drivers/staging/media/Kconfig -} diff --git a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-02-linux-901-extend-rc6-toggle-support.patch b/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-02-linux-901-extend-rc6-toggle-support.patch deleted file mode 100644 index de21628bda..0000000000 --- a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-02-linux-901-extend-rc6-toggle-support.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 3f1f8303b6e0be751d7a7c55031c8ab840ed5c1a Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Fri, 24 Aug 2018 23:31:51 +0200 -Subject: [PATCH] media: rc: ir-rc6-decoder: enable toggle bit for Kathrein - RCU-676 remote - -The Kathrein RCU-676 remote uses the 32-bit rc6 protocol and toggles -bit 15 (0x8000) on repeated button presses, like MCE remotes. - -Add it's customer code 0x80460000 to the 32-bit rc6 toggle -handling code to get proper scancodes and toggle reports. - -Signed-off-by: Matthias Reichl ---- - drivers/media/rc/ir-rc6-decoder.c | 9 +++++++-- - 1 file changed, 7 insertions(+), 2 deletions(-) - -diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c -index 68487ce9f79b..d96aed1343e4 100644 ---- a/drivers/media/rc/ir-rc6-decoder.c -+++ b/drivers/media/rc/ir-rc6-decoder.c -@@ -40,6 +40,7 @@ - #define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */ - #define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */ - #define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */ -+#define RC6_6A_KATHREIN_CC 0x80460000 /* Kathrein RCU-676 customer code */ - #ifndef CHAR_BIT - #define CHAR_BIT 8 /* Normally in */ - #endif -@@ -242,13 +243,17 @@ static int ir_rc6_decode(struct rc_dev *dev, struct ir_raw_event ev) - toggle = 0; - break; - case 32: -- if ((scancode & RC6_6A_LCC_MASK) == RC6_6A_MCE_CC) { -+ switch (scancode & RC6_6A_LCC_MASK) { -+ case RC6_6A_MCE_CC: -+ case RC6_6A_KATHREIN_CC: - protocol = RC_PROTO_RC6_MCE; - toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK); - scancode &= ~RC6_6A_MCE_TOGGLE_MASK; -- } else { -+ break; -+ default: - protocol = RC_PROTO_RC6_6A_32; - toggle = 0; -+ break; - } - break; - default: --- -2.11.0 - diff --git a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-03-linux-902-extend-rc6-toggle-support-for-zotac.patch b/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-03-linux-902-extend-rc6-toggle-support-for-zotac.patch deleted file mode 100644 index 65fe5fd6c7..0000000000 --- a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-03-linux-902-extend-rc6-toggle-support-for-zotac.patch +++ /dev/null @@ -1,41 +0,0 @@ -From ae1ccaa3587c0bd3d6d01841fa2e668cdf738f1e Mon Sep 17 00:00:00 2001 -From: Matthias Reichl -Date: Sun, 3 Feb 2019 14:24:00 +0100 -Subject: [PATCH] media: rc: ir-rc6-decoder: enable toggle bit for Zotac - remotes - -The Zotac RC2604323/01G and RC2604329/02BG remotes use the 32-bit -rc6 protocol and toggle bit 15 (0x8000) on repeated button presses, -like MCE remotes. - -Add the customer code 0x80340000 to the 32-bit rc6 toggle -handling code to get proper scancodes and toggle reports. - -Signed-off-by: Matthias Reichl ---- - drivers/media/rc/ir-rc6-decoder.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c -index d96aed1343e4..5cc302fa4daa 100644 ---- a/drivers/media/rc/ir-rc6-decoder.c -+++ b/drivers/media/rc/ir-rc6-decoder.c -@@ -40,6 +40,7 @@ - #define RC6_6A_MCE_TOGGLE_MASK 0x8000 /* for the body bits */ - #define RC6_6A_LCC_MASK 0xffff0000 /* RC6-6A-32 long customer code mask */ - #define RC6_6A_MCE_CC 0x800f0000 /* MCE customer code */ -+#define RC6_6A_ZOTAC_CC 0x80340000 /* Zotac customer code */ - #define RC6_6A_KATHREIN_CC 0x80460000 /* Kathrein RCU-676 customer code */ - #ifndef CHAR_BIT - #define CHAR_BIT 8 /* Normally in */ -@@ -246,6 +247,7 @@ static int ir_rc6_decode(struct rc_dev *dev, struct ir_raw_event ev) - switch (scancode & RC6_6A_LCC_MASK) { - case RC6_6A_MCE_CC: - case RC6_6A_KATHREIN_CC: -+ case RC6_6A_ZOTAC_CC: - protocol = RC_PROTO_RC6_MCE; - toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK); - scancode &= ~RC6_6A_MCE_TOGGLE_MASK; --- -2.20.1 - diff --git a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-04-fix-tbs5520se.patch b/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-04-fix-tbs5520se.patch deleted file mode 100644 index 5919df3e7b..0000000000 --- a/packages/linux-driver-addons/dvb/depends/media_tree_cc_aml/patches/media_tree_cc_aml-04-fix-tbs5520se.patch +++ /dev/null @@ -1,22 +0,0 @@ -https://bitbucket.org/CrazyCat/linux_media/commits/ebd9c45524383e09d993563f4bd3cc765796b38a/raw -https://forum.libreelec.tv/thread/14405-dual-tbs-5520se-libreelec-9-0-0-intel-generic/?postID=110926#post110926 -fixes TBS5520se scanning of frequencies - -From: CrazyCat -Date: Mon, 12 Nov 2018 19:49:55 +0200 -Subject: [PATCH] si2183: Fixed minimal frequency for DVB-C. - -diff --git a/drivers/media/dvb-frontends/si2183.c b/drivers/media/dvb-frontends/si2183.c -index f1cc0da..333abd0 100644 ---- a/drivers/media/dvb-frontends/si2183.c -+++ b/drivers/media/dvb-frontends/si2183.c -@@ -1335,7 +1335,7 @@ static int si2183_set_property(struct dvb_frontend *fe, - break; - case SYS_DVBC_ANNEX_A: - case SYS_DVBC_ANNEX_B: -- fe->ops.info.frequency_min_hz = 470 * MHz; -+ fe->ops.info.frequency_min_hz = 47 * MHz; - fe->ops.info.frequency_max_hz = 862 * MHz; - fe->ops.info.frequency_stepsize_hz = 62500; - break; - diff --git a/packages/linux-drivers/amlogic/RTL8188EU-aml/package.mk b/packages/linux-drivers/amlogic/RTL8188EU-aml/package.mk deleted file mode 100644 index a8ac047d28..0000000000 --- a/packages/linux-drivers/amlogic/RTL8188EU-aml/package.mk +++ /dev/null @@ -1,34 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8188EU-aml" -PKG_VERSION="2d358c5" -PKG_SHA256="adf31d56d3a94bca814f1bd0de24af61fae85d25a259124b5d16c1d23cc72c91" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8188eu" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8188eu/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8188EU Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -make_target() { - LDFLAGS="" make -C $(kernel_path) M=$PKG_BUILD/rtl8xxx_EU \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/RTL8188EU-aml/patches/RTL8188EU-aml-0001-Add-support-for-a-few-USB-dongles.patch b/packages/linux-drivers/amlogic/RTL8188EU-aml/patches/RTL8188EU-aml-0001-Add-support-for-a-few-USB-dongles.patch deleted file mode 100644 index 5a36dca7b8..0000000000 --- a/packages/linux-drivers/amlogic/RTL8188EU-aml/patches/RTL8188EU-aml-0001-Add-support-for-a-few-USB-dongles.patch +++ /dev/null @@ -1,29 +0,0 @@ -From b67364bd4236f890238fb44df1bbba228b42ffe1 Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Mon, 2 Oct 2017 11:13:42 +0200 -Subject: [PATCH] Add support for a few USB dongles - ---- - rtl8xxx_EU/os_dep/linux/usb_intf.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/rtl8xxx_EU/os_dep/linux/usb_intf.c b/rtl8xxx_EU/os_dep/linux/usb_intf.c -index 2fbffd6..4892838 100755 ---- a/rtl8xxx_EU/os_dep/linux/usb_intf.c -+++ b/rtl8xxx_EU/os_dep/linux/usb_intf.c -@@ -138,6 +138,12 @@ static struct usb_device_id rtw_usb_id_tbl[] = { - /*=== Customer ID ===*/ - /****** 8188EUS ********/ - {USB_DEVICE(0x07B8, 0x8179), .driver_info = RTL8188E}, /* Abocom - Abocom */ -+ {USB_DEVICE(0x0DF6, 0x0076), .driver_info = RTL8188E}, /* Sitecom N150 v2 */ -+ {USB_DEVICE(0x2001, 0x330F), .driver_info = RTL8188E}, /* DLink DWA-125 REV D1 */ -+ {USB_DEVICE(0x2001, 0x3310), .driver_info = RTL8188E}, /* Dlink DWA-123 REV D1 */ -+ {USB_DEVICE(0x2001, 0x3311), .driver_info = RTL8188E}, /* DLink GO-USB-N150 REV B1 */ -+ {USB_DEVICE(0x056E, 0x4008), .driver_info = RTL8188E}, /* Elecom WDC-150SU2M */ -+ {USB_DEVICE(0x2357, 0x010c), .driver_info = RTL8188E}, /* TP-Link TL-WN722N v2 */ - #endif - - #ifdef CONFIG_RTL8812A --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/RTL8189ES-aml/package.mk b/packages/linux-drivers/amlogic/RTL8189ES-aml/package.mk deleted file mode 100644 index 89bbbc183a..0000000000 --- a/packages/linux-drivers/amlogic/RTL8189ES-aml/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8189ES-aml" -PKG_VERSION="f971e4b" -PKG_SHA256="a87d891e3a42d70429b39f01216775dee95b0dc9093f9576ca7417e74f21ee2b" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8189es" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8189es/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8189ES Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/rtl8189ES \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/RTL8189FS-aml/package.mk b/packages/linux-drivers/amlogic/RTL8189FS-aml/package.mk deleted file mode 100644 index 445fbc1092..0000000000 --- a/packages/linux-drivers/amlogic/RTL8189FS-aml/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8189FS-aml" -PKG_VERSION="538ba58" -PKG_SHA256="3dc7602481096b8890d48915e16bf0eb1554ca1b7a3dfec6450486468aadb826" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8189ftv" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8189ftv/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8189FS Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/rtl8189FS \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/RTL8723BS-aml/package.mk b/packages/linux-drivers/amlogic/RTL8723BS-aml/package.mk deleted file mode 100644 index 4bdab1beba..0000000000 --- a/packages/linux-drivers/amlogic/RTL8723BS-aml/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8723BS-aml" -PKG_VERSION="ee9d86a" -PKG_SHA256="4d1c5fe0d05edbf5eab96dfe5ff99b7d56c098f4d4d317351fa25e75606de094" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8723bs" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8723bs/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8723BS Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/rtl8723BS \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/RTL8723DS-aml/package.mk b/packages/linux-drivers/amlogic/RTL8723DS-aml/package.mk deleted file mode 100644 index eadb590abb..0000000000 --- a/packages/linux-drivers/amlogic/RTL8723DS-aml/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8723DS-aml" -PKG_VERSION="fb4adf7" -PKG_SHA256="00da0a7773286df38e8785be2891025e4fa6c4ff5ace9450e54cae85f143847e" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8723ds" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8723ds/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8723DS Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/rtl8723DS \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/RTL8822BU-aml/package.mk b/packages/linux-drivers/amlogic/RTL8822BU-aml/package.mk deleted file mode 100644 index 08969d2ff0..0000000000 --- a/packages/linux-drivers/amlogic/RTL8822BU-aml/package.mk +++ /dev/null @@ -1,38 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="RTL8822BU-aml" -PKG_VERSION="9df3607" -PKG_SHA256="d7005150d0737f81475437e55430b2cef780664db6948f5a17fecc32c915d317" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8822bu" -PKG_URL="https://github.com/khadas/android_hardware_wifi_realtek_drivers_8822bu/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="Realtek RTL8822BU Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's/-DCONFIG_CONCURRENT_MODE//g; s/^CONFIG_POWER_SAVING.*$/CONFIG_POWER_SAVING = n/g; s/^CONFIG_RTW_DEBUG.*/CONFIG_RTW_DEBUG = n/g' $PKG_BUILD/*/Makefile - sed -i 's/^#define CONFIG_DEBUG.*//g' $PKG_BUILD/*/include/autoconf.h - sed -i 's/#define DEFAULT_RANDOM_MACADDR.*1/#define DEFAULT_RANDOM_MACADDR 0/g' $PKG_BUILD/*/core/rtw_ieee80211.c -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/rtl8822BU \ - ARCH=$TARGET_KERNEL_ARCH \ - KSRC=$(kernel_path) \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - USER_EXTRA_CFLAGS="-fgnu89-inline" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/modprobe.d/dhd.conf b/packages/linux-drivers/amlogic/ap6xxx-aml/modprobe.d/dhd.conf deleted file mode 100644 index 3eac44b78f..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/modprobe.d/dhd.conf +++ /dev/null @@ -1 +0,0 @@ -options dhd firmware_path=/usr/lib/firmware/brcm/ nvram_path=/usr/lib/firmware/brcm/ diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/package.mk b/packages/linux-drivers/amlogic/ap6xxx-aml/package.mk deleted file mode 100644 index 6c2d80aba9..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/package.mk +++ /dev/null @@ -1,31 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="ap6xxx-aml" -PKG_VERSION="99b3459" -PKG_SHA256="5f2bfc29616d869ad5fb41e0782887d73cafe0bae8a13e7e945bb32b2a2c0877" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_broadcom_drivers_ap6xxx" -PKG_URL="https://github.com/khadas/android_hardware_wifi_broadcom_drivers_ap6xxx/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="ap6xxx: Linux drivers for AP6xxx WLAN chips used in some devices based on Amlogic SoCs" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD/bcmdhd.1.363.59.144.x.cn \ - ARCH=$TARGET_KERNEL_ARCH \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - CONFIG_BCMDHD_DISABLE_WOWLAN=y -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0001-bcmdhd-Add-new-SDIO-vendor-device-ID-for-AP6212.patch b/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0001-bcmdhd-Add-new-SDIO-vendor-device-ID-for-AP6212.patch deleted file mode 100644 index 3efe1cdbd5..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0001-bcmdhd-Add-new-SDIO-vendor-device-ID-for-AP6212.patch +++ /dev/null @@ -1,34 +0,0 @@ -From fb537b584b78c0407c663ed4076e4ff79b36a14c Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Thu, 14 Sep 2017 21:20:18 +0200 -Subject: [PATCH 1/4] bcmdhd: Add new SDIO vendor/device ID for AP6212 - ---- - bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -index af321a6..f7d9a09 100644 ---- a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -+++ b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -@@ -74,6 +74,9 @@ - #if !defined(SDIO_DEVICE_ID_BROADCOM_43239) - #define SDIO_DEVICE_ID_BROADCOM_43239 43239 - #endif /* !defined(SDIO_DEVICE_ID_BROADCOM_43239) */ -+#if !defined(SDIO_DEVICE_ID_BROADCOM_4343) -+#define SDIO_DEVICE_ID_BROADCOM_4343 0xa9a6 -+#endif /* !defined(SDIO_DEVICE_ID_BROADCOM_4343) */ - - extern void wl_cfg80211_set_parent_dev(void *dev); - extern void sdioh_sdmmc_devintr_off(sdioh_info_t *sd); -@@ -217,6 +220,7 @@ static void bcmsdh_sdmmc_remove(struct sdio_func *func) - /* devices we support, null terminated */ - static const struct sdio_device_id bcmsdh_sdmmc_ids[] = { - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_DEFAULT) }, -+ { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4343) }, - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4325_SDGWB) }, - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4325) }, - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4329) }, --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0002-bcmdhd-add-BCM4335-firmware-loading-support.patch b/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0002-bcmdhd-add-BCM4335-firmware-loading-support.patch deleted file mode 100644 index 1e4ddb9790..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0002-bcmdhd-add-BCM4335-firmware-loading-support.patch +++ /dev/null @@ -1,53 +0,0 @@ -From cd000f263d8433f2a1a29d7e722cd57e47b30fc5 Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Thu, 14 Sep 2017 21:20:55 +0200 -Subject: [PATCH 2/4] bcmdhd: add BCM4335 firmware loading support - ---- - bcmdhd.1.363.59.144.x.cn/dhd_config.c | 10 ++++++++++ - bcmdhd.1.363.59.144.x.cn/dhd_config.h | 1 + - 2 files changed, 11 insertions(+) - -diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_config.c b/bcmdhd.1.363.59.144.x.cn/dhd_config.c -index ff07d18..b668400 100644 ---- a/bcmdhd.1.363.59.144.x.cn/dhd_config.c -+++ b/bcmdhd.1.363.59.144.x.cn/dhd_config.c -@@ -141,6 +141,14 @@ const static char *bcm43241b4_ag_fw_name[] = { - "fw_bcm43241b4_ag_mfg.bin" - }; - -+const static char *bcm4335b0_ag_fw_name[] = { -+ "fw_bcm4335b0_ag.bin", -+ "fw_bcm4335b0_ag_apsta.bin", -+ "fw_bcm4335b0_ag_p2p.bin", -+ "fw_bcm4335b0_ag_es.bin", -+ "fw_bcm4335b0_ag_mfg.bin" -+}; -+ - const static char *bcm4339a0_ag_fw_name[] = { - "fw_bcm4339a0_ag.bin", - "fw_bcm4339a0_ag_apsta.bin", -@@ -529,6 +537,8 @@ dhd_conf_set_fw_name_by_chip(dhd_pub_t *dhd, char *fw_path) - case BCM4335_CHIP_ID: - if (chiprev == BCM4335A0_CHIP_REV) - strcpy(&fw_path[i+1], bcm4339a0_ag_fw_name[fw_type]); -+ else if (chiprev == BCM4335B0_CHIP_REV) -+ strcpy(&fw_path[i+1], bcm4335b0_ag_fw_name[fw_type]); - break; - case BCM4345_CHIP_ID: - case BCM43454_CHIP_ID: -diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_config.h b/bcmdhd.1.363.59.144.x.cn/dhd_config.h -index cc76e8b..450df56 100644 ---- a/bcmdhd.1.363.59.144.x.cn/dhd_config.h -+++ b/bcmdhd.1.363.59.144.x.cn/dhd_config.h -@@ -28,6 +28,7 @@ extern uint dhd_slpauto; - #define BCM43341B0_CHIP_REV 2 - #define BCM43241B4_CHIP_REV 5 - #define BCM4335A0_CHIP_REV 2 -+#define BCM4335B0_CHIP_REV 1 - #define BCM4339A0_CHIP_REV 1 - #define BCM43455C0_CHIP_REV 6 - #define BCM4354A1_CHIP_REV 1 --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0003-bcmdhd-match-only-Broadcom-SDIO-devices.patch b/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0003-bcmdhd-match-only-Broadcom-SDIO-devices.patch deleted file mode 100644 index 5f7354d34e..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0003-bcmdhd-match-only-Broadcom-SDIO-devices.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 24affe6bf59dfd6fd9b62b3118e4b2b9e555181a Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Thu, 14 Sep 2017 21:21:18 +0200 -Subject: [PATCH 3/4] bcmdhd: match only Broadcom SDIO devices - ---- - bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -index f7d9a09..47ca535 100644 ---- a/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -+++ b/bcmdhd.1.363.59.144.x.cn/bcmsdh_sdmmc_linux.c -@@ -229,7 +229,7 @@ static const struct sdio_device_id bcmsdh_sdmmc_ids[] = { - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4334) }, - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_4324) }, - { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_DEVICE_ID_BROADCOM_43239) }, -- { SDIO_DEVICE_CLASS(SDIO_CLASS_NONE) }, -+ { SDIO_DEVICE(SDIO_VENDOR_ID_BROADCOM, SDIO_ANY_ID) }, - { /* end: all zeroes */ }, - }; - --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0004-bcmdhd-if-driver-is-not-yet-initialized-wait-and-ret.patch b/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0004-bcmdhd-if-driver-is-not-yet-initialized-wait-and-ret.patch deleted file mode 100644 index a904347194..0000000000 --- a/packages/linux-drivers/amlogic/ap6xxx-aml/patches/ap6xxx-aml-0004-bcmdhd-if-driver-is-not-yet-initialized-wait-and-ret.patch +++ /dev/null @@ -1,37 +0,0 @@ -From b9edf37b14f64a8bed5586898e3503322a5b8bfc Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Thu, 5 Oct 2017 22:04:11 +0200 -Subject: [PATCH 4/4] bcmdhd: if driver is not yet initialized, wait and retry - ---- - bcmdhd.1.363.59.144.x.cn/dhd_linux.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/bcmdhd.1.363.59.144.x.cn/dhd_linux.c b/bcmdhd.1.363.59.144.x.cn/dhd_linux.c -index c64f851..1754fb7 100644 ---- a/bcmdhd.1.363.59.144.x.cn/dhd_linux.c -+++ b/bcmdhd.1.363.59.144.x.cn/dhd_linux.c -@@ -6127,9 +6127,17 @@ dhd_open(struct net_device *net) - int ifidx; - int32 ret = 0; - -- if (!dhd_download_fw_on_driverload && !dhd_driver_init_done) { -- DHD_ERROR(("%s: WLAN driver is not initialized\n", __FUNCTION__)); -- return -1; -+ for (int retry = 0; ++retry; ) { -+ if (!dhd_download_fw_on_driverload && !dhd_driver_init_done) { -+ DHD_ERROR(("%s: WLAN driver is not initialized\n", __FUNCTION__)); -+ if (retry > 1) { -+ return -1; -+ } else { -+ OSL_SLEEP(1000); -+ } -+ } else { -+ break; -+ } - } - - printf("%s: Enter %p\n", __FUNCTION__, net); --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/avl6862-aml/package.mk b/packages/linux-drivers/amlogic/avl6862-aml/package.mk deleted file mode 100644 index f6343588a7..0000000000 --- a/packages/linux-drivers/amlogic/avl6862-aml/package.mk +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="avl6862-aml" -PKG_VERSION="1.0" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://libreelec.tv" -PKG_URL="" -PKG_DEPENDS_TARGET="toolchain" -PKG_SECTION="virtual" -PKG_LONGDESC="avl6862-aml: Internal DVB tuner driver for Amlogic devices developed by afl1" - -post_install() { - enable_service amlogic-dvb.service -} diff --git a/packages/linux-drivers/amlogic/avl6862-aml/system.d/amlogic-dvb.service b/packages/linux-drivers/amlogic/avl6862-aml/system.d/amlogic-dvb.service deleted file mode 100644 index 3feef16975..0000000000 --- a/packages/linux-drivers/amlogic/avl6862-aml/system.d/amlogic-dvb.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Amlogic DVB module loader -ConditionPathExists=/proc/device-tree/dvbfe/dtv_demod0 -After=kernel-overlays.service - -[Service] -Type=simple -ExecStart=/bin/sh -c '[ `cat /proc/device-tree/dvbfe/dtv_demod0` = "Avl6211" ] && /sbin/modprobe aml_fe' - -[Install] -WantedBy=basic.target diff --git a/packages/linux-drivers/amlogic/fd628-aml/package.mk b/packages/linux-drivers/amlogic/fd628-aml/package.mk deleted file mode 100644 index 4d66175f0c..0000000000 --- a/packages/linux-drivers/amlogic/fd628-aml/package.mk +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="fd628-aml" -PKG_VERSION="8047f2e" -PKG_SHA256="168b9ae9df56834462a68654fb204468a4c8df31ce2b88d654fdff378e5eacda" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/arthur-liberman/linux_fd628" -PKG_URL="https://github.com/arthur-liberman/linux_fd628/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="fd628-aml: Driver for Amlogic FD628 display" - -PKG_TOOLCHAIN="manual" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - kernel_make -C "$(kernel_path)" M="$PKG_BUILD/driver" - - make FD628Service -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; - - mkdir -p $INSTALL/usr/sbin - cp -P FD628Service $INSTALL/usr/sbin -} - -post_install() { - enable_service fd628.service -} diff --git a/packages/linux-drivers/amlogic/fd628-aml/sources/Makefile b/packages/linux-drivers/amlogic/fd628-aml/sources/Makefile deleted file mode 100644 index 3bbee48b6e..0000000000 --- a/packages/linux-drivers/amlogic/fd628-aml/sources/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -default: - obj-m += driver/aml_fd628.o - $(MAKE) modules - -FD628Service: FD628Service.c - $(CC) $(CFLAGS) -Wall -w -o $@ $^ -lm -lpthread diff --git a/packages/linux-drivers/amlogic/fd628-aml/system.d/fd628.service b/packages/linux-drivers/amlogic/fd628-aml/system.d/fd628.service deleted file mode 100644 index 08a04f8ee6..0000000000 --- a/packages/linux-drivers/amlogic/fd628-aml/system.d/fd628.service +++ /dev/null @@ -1,15 +0,0 @@ -[Unit] -Description=Amlogic FD628 Service -ConditionPathExists=/proc/device-tree/le-vfd/ -ConditionPathExists=/storage/.config/vfd.conf - -[Service] -Type=oneshot -EnvironmentFile=/storage/.config/vfd.conf -ExecStart=/bin/sh -c '[ `cat /proc/device-tree/le-vfd/compatible` = "le,vfd" ] && /sbin/modprobe aml_fd628 vfd_gpio_clk=${vfd_gpio_clk} vfd_gpio_dat=${vfd_gpio_dat} vfd_gpio_stb=${vfd_gpio_stb} vfd_chars=${vfd_chars} vfd_dot_bits=${vfd_dot_bits} vfd_display_type=${vfd_display_type}' -ExecStart=/bin/sh -c '[ `cat /proc/device-tree/le-vfd/compatible` = "le,vfd" ] && /usr/sbin/FD628Service' -RemainAfterExit=yes - -[Install] -WantedBy=basic.target - diff --git a/packages/linux-drivers/amlogic/mt7601u-aml/package.mk b/packages/linux-drivers/amlogic/mt7601u-aml/package.mk deleted file mode 100644 index 7e306f25e5..0000000000 --- a/packages/linux-drivers/amlogic/mt7601u-aml/package.mk +++ /dev/null @@ -1,33 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="mt7601u-aml" -PKG_VERSION="4e61a61" -PKG_SHA256="814a63d8654f87a76cc06425ad2120daa32646f5220341a26296e4a6643b013a" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_mtk_drivers_mt7601" -PKG_URL="https://github.com/khadas/android_hardware_wifi_mtk_drivers_mt7601/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="mt7601u Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make -C $(kernel_path) M=$PKG_BUILD \ - ARCH=$TARGET_KERNEL_ARCH \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; - - mkdir -p $INSTALL/$(get_full_firmware_dir) - cp $PKG_BUILD/RT2870STA_7601.dat $INSTALL/$(get_full_firmware_dir) -} diff --git a/packages/linux-drivers/amlogic/mt7601u-aml/patches/mt7601u-aml-001-firmware-path.patch b/packages/linux-drivers/amlogic/mt7601u-aml/patches/mt7601u-aml-001-firmware-path.patch deleted file mode 100644 index 5df89a3819..0000000000 --- a/packages/linux-drivers/amlogic/mt7601u-aml/patches/mt7601u-aml-001-firmware-path.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/include/os/rt_linux.h b/include/os/rt_linux.h -index 0303698..36dd603 100755 ---- a/include/os/rt_linux.h -+++ b/include/os/rt_linux.h -@@ -159,7 +159,7 @@ typedef struct usb_ctrlrequest devctrlrequest; - #ifdef ALLWINNER - #define STA_PROFILE_PATH "/system/vendor/modules/RT2870STA_7601.dat" - #else --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7601.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7601.dat" - #endif - #define STA_DRIVER_VERSION "JEDI.L0.MP1.mt7601u.v1.2" - #define DRIVER_ROLE "STA" diff --git a/packages/linux-drivers/amlogic/mt7603u-aml/package.mk b/packages/linux-drivers/amlogic/mt7603u-aml/package.mk deleted file mode 100644 index 1cd4d4ffca..0000000000 --- a/packages/linux-drivers/amlogic/mt7603u-aml/package.mk +++ /dev/null @@ -1,35 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="mt7603u-aml" -PKG_VERSION="0c53dfb" -PKG_SHA256="9e3eab02f3c3dd7de373c5d631c2069771e6ad783ecda36a484030ab4ec0ccec" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/khadas/android_hardware_wifi_mtk_drivers_mt7603" -PKG_URL="https://github.com/khadas/android_hardware_wifi_mtk_drivers_mt7603/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="mt7603u Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - make LINUX_SRC=$(kernel_path) \ - ARCH=$TARGET_KERNEL_ARCH \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - RT28xx_DIR=$PKG_BUILD \ - -f $PKG_BUILD/Makefile -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; - - mkdir -p $INSTALL/$(get_full_firmware_dir) - cp $PKG_BUILD/conf/MT7603USTA.dat $INSTALL/$(get_full_firmware_dir) -} diff --git a/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-001-firmware-path.patch b/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-001-firmware-path.patch deleted file mode 100644 index 3cf74f011c..0000000000 --- a/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-001-firmware-path.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/include/os/rt_linux.h b/include/os/rt_linux.h -index 9ddc4ea..258907a 100755 ---- a/include/os/rt_linux.h -+++ b/include/os/rt_linux.h -@@ -201,7 +201,7 @@ typedef struct usb_ctrlrequest devctrlrequest; - - #ifdef CONFIG_STA_SUPPORT - #ifdef RTMP_MAC_PCI --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7603.dat" - #define STA_DRIVER_VERSION "3.0.0.0" - #ifdef MULTIPLE_CARD_SUPPORT - #define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat" -@@ -210,12 +210,12 @@ typedef struct usb_ctrlrequest devctrlrequest; - - #ifdef RTMP_MAC_USB - #ifdef HE_BD_CFG80211_SUPPORT --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7603.dat" - #else - #ifdef USE_CHIP_DEPENDENT_PROFILE_NAME --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7603.dat" - #else --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7603.dat" - #endif /* USE_CHIP_DEPENDENT_PROFILE_NAME */ - #endif /* HE_BD_CFG80211_SUPPORT */ - #define STA_DRIVER_VERSION "JEDI.L0.MP1.mt7603u.v1.8" -@@ -227,7 +227,7 @@ typedef struct usb_ctrlrequest devctrlrequest; - - - #ifdef RTMP_MAC_SDIO --#define STA_PROFILE_PATH "/system/etc/wifi/RT2870STA_7603.dat" -+#define STA_PROFILE_PATH "/lib/firmware/RT2870STA_7603.dat" - #define STA_DRIVER_VERSION "3.0.0.0" - #ifdef MULTIPLE_CARD_SUPPORT - #define CARD_INFO_PATH "/etc/Wireless/RT2870STA/RT2870STACard.dat" diff --git a/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-002-fix-building.patch b/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-002-fix-building.patch deleted file mode 100644 index 7939d752f1..0000000000 --- a/packages/linux-drivers/amlogic/mt7603u-aml/patches/mt7603u-aml-002-fix-building.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/Makefile b/Makefile -index 65d0a5c..7fc16f4 100755 ---- a/Makefile -+++ b/Makefile -@@ -234,7 +234,7 @@ endif - ifeq ($(PREALLOC), YES) - #build prealloc.ko - cp -f $(RT28xx_DIR)/os/linux/Makefile.6.prealloc $(RT28xx_DIR)/os/linux/Makefile -- $(MAKE) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules -+ $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules - endif - cp -f $(RT28xx_DIR)/os/linux/Makefile.6 $(RT28xx_DIR)/os/linux/Makefile - ifeq ($(PLATFORM),DM6446) diff --git a/packages/linux-drivers/amlogic/qca9377-aml/package.mk b/packages/linux-drivers/amlogic/qca9377-aml/package.mk deleted file mode 100644 index 2b8ce3a299..0000000000 --- a/packages/linux-drivers/amlogic/qca9377-aml/package.mk +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="qca9377-aml" -PKG_VERSION="0cc65f9" -PKG_SHA256="336f6e95fc16874a81daf5289c656688a90c5df566ffeaea708f7ac2f5198b9e" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://boundarydevices.com/new-silex-wifi-802-11ac-bt4-1-module/" -PKG_URL="https://github.com/boundarydevices/qcacld-2.0/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="qca9377 Linux Driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -post_unpack() { - sed -i 's,-Wall,,g; s,-Werror,,g' $PKG_BUILD/Kbuild - sed -i 's,CDEFINES :=,CDEFINES := -Wno-misleading-indentation -Wno-unused-variable -Wno-unused-function,g' $PKG_BUILD/Kbuild -} - -pre_make_target() { - unset LDFLAGS - unset CFLAGS -} - -make_target() { - make KERNEL_SRC="$(kernel_path)" \ - ARCH=$TARGET_KERNEL_ARCH \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX \ - CONFIG_CLD_HL_SDIO_CORE=y -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; -} diff --git a/packages/linux-drivers/amlogic/qca9377-aml/patches/qca9377-aml-001-Modify-SDIO-and-firmware-handling-to-support-chips-u.patch b/packages/linux-drivers/amlogic/qca9377-aml/patches/qca9377-aml-001-Modify-SDIO-and-firmware-handling-to-support-chips-u.patch deleted file mode 100644 index 3523e59c84..0000000000 --- a/packages/linux-drivers/amlogic/qca9377-aml/patches/qca9377-aml-001-Modify-SDIO-and-firmware-handling-to-support-chips-u.patch +++ /dev/null @@ -1,538 +0,0 @@ -From 7d4ee23fb20cc5e17d8d79db20a0d6704ac3df6c Mon Sep 17 00:00:00 2001 -From: kszaq -Date: Tue, 10 Jan 2017 22:43:12 +0100 -Subject: [PATCH] Modify SDIO and firmware handling to support chips used in - Amlogic devices - ---- - CORE/HDD/src/wlan_hdd_cfg.c | 10 +- - CORE/HDD/src/wlan_hdd_main.c | 180 ++++++++++++++++++++- - CORE/SERVICES/BMI/ol_fw.c | 8 +- - CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c | 6 - - .../sdio/linux/native_sdio/include/hif_internal.h | 2 +- - CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c | 62 +++---- - 6 files changed, 209 insertions(+), 59 deletions(-) - -diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c -index af7f399..5eedfcb 100644 ---- a/CORE/HDD/src/wlan_hdd_cfg.c -+++ b/CORE/HDD/src/wlan_hdd_cfg.c -@@ -60,6 +60,8 @@ - #include - #include - -+extern int qca_request_firmware(const struct firmware **firmware_p, const char *name,struct device *device); -+ - static char *mac_param; - module_param_named(mac, mac_param, charp, S_IRUGO); - MODULE_PARM_DESC(mac, "mac address override"); -@@ -4411,11 +4413,11 @@ VOS_STATUS hdd_parse_config_ini(hdd_context_t* pHddCtx) - - memset(cfgIniTable, 0, sizeof(cfgIniTable)); - -- status = request_firmware(&fw, WLAN_INI_FILE, pHddCtx->parent_dev); -+ status = qca_request_firmware(&fw, WLAN_INI_FILE, pHddCtx->parent_dev); - - if(status) - { -- hddLog(VOS_TRACE_LEVEL_FATAL, "%s: request_firmware failed %d",__func__, status); -+ hddLog(VOS_TRACE_LEVEL_FATAL, "%s: qca_request_firmware failed %d",__func__, status); - vos_status = VOS_STATUS_E_FAILURE; - goto config_exit; - } -@@ -5104,11 +5106,11 @@ VOS_STATUS hdd_update_mac_config(hdd_context_t *pHddCtx) - } - - memset(macTable, 0, sizeof(macTable)); -- status = request_firmware(&fw, WLAN_MAC_FILE, pHddCtx->parent_dev); -+ status = qca_request_firmware(&fw, WLAN_MAC_FILE, pHddCtx->parent_dev); - - if (status) - { -- hddLog(VOS_TRACE_LEVEL_WARN, "%s: request_firmware failed %d", -+ hddLog(VOS_TRACE_LEVEL_WARN, "%s: qca_request_firmware failed %d", - __func__, status); - vos_status = VOS_STATUS_E_FAILURE; - return vos_status; -diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c -index 1919627..3bcc6b0 100644 ---- a/CORE/HDD/src/wlan_hdd_main.c -+++ b/CORE/HDD/src/wlan_hdd_main.c -@@ -239,6 +239,163 @@ static VOS_STATUS hdd_parse_ese_beacon_req(tANI_U8 *pValue, - /* - * Android DRIVER command structures - */ -+//tkun add -+ typedef char A_CHAR; -+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) -+ #define GET_INODE_FROM_FILEP(filp) \ -+ (filp)->f_path.dentry->d_inode -+ #else -+ #define GET_INODE_FROM_FILEP(filp) \ -+ (filp)->f_dentry->d_inode -+ #endif -+// #define A_MALLOC(size) kmalloc((size), GFP_KERNEL) -+ #define A_MALLOC_NOWAIT(size) kmalloc((size), GFP_ATOMIC) -+// #define A_FREE(addr) kfree(addr);addr=NULL; -+//#define A_MEMCPY(dst, src, len) memcpy((dst), (src), (len)) -+// #define A_MEMZERO(addr, len) memset((addr), 0, (len)) -+ #define A_MEMCMP(addr1, addr2, len) memcmp((addr1), (addr2), (len)) -+ #define A_ROUND_UP(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) -+ -+ char qcafwpath[256] = "/lib/firmware"; -+ -+ int android_readwrite_file(const A_CHAR *filename, A_CHAR *rbuf, const A_CHAR *wbuf, size_t length) -+ { -+ int ret = 0; -+ struct file *filp = (struct file *)-ENOENT; -+ mm_segment_t oldfs; -+ oldfs = get_fs(); -+ set_fs(KERNEL_DS); -+ -+ // printk("%s: filename %s \n",__func__,filename); -+ do { -+ int mode = (wbuf) ? O_RDWR : O_RDONLY; -+ filp = filp_open(filename, mode, S_IRUSR); -+ if (IS_ERR(filp) || !filp->f_op) { -+ printk("%s: file %s filp_open error\n", __FUNCTION__, filename); -+ ret = -ENOENT; -+ break; -+ } -+ -+ if (length==0) { -+ /* Read the length of the file only */ -+ struct inode *inode; -+ -+ inode = GET_INODE_FROM_FILEP(filp); -+ if (!inode) { -+ // printk("%s: Get inode from %s failed\n", __FUNCTION__, filen ame); -+ ret = -ENOENT; -+ break; -+ } -+ ret = i_size_read(inode->i_mapping->host); -+ break; -+ } -+ -+ if (wbuf) { -+ if ( (ret=filp->f_op->write(filp, wbuf, length, &filp->f_pos)) < 0) { -+// printk("%s: Write %u bytes to file %s error %d\n", __FUNCTION__, -+ // length, filename, ret); -+ break; -+ } -+ } else { -+ if ( (ret=filp->f_op->read(filp, rbuf, length, &filp->f_pos)) < 0) { -+// printk ("%s: Read %u bytes from file %s error %d\n", __FUNCTION__, -+ // length, filename, ret); -+ break; -+ } -+ } -+ } while (0); -+ -+ if (!IS_ERR(filp)) { -+ filp_close(filp, NULL); -+ } -+ set_fs(oldfs); -+ -+ return ret; -+ } -+ -+ -+ int android_request_firmware(const struct firmware **firmware_p, const char *name,struct device *device) -+ { -+ int ret = 0; -+ struct firmware *firmware; -+ char filename[256]; -+ const char *raw_filename = name; -+ *firmware_p = firmware = A_MALLOC(sizeof(*firmware)); -+ if (!firmware) -+ return -ENOMEM; -+ A_MEMZERO(firmware, sizeof(*firmware)); -+ do { -+ size_t length, bufsize, bmisize; -+ -+ if (snprintf(filename, sizeof(filename), "%s/%s", qcafwpath, -+ raw_filename) >= sizeof(filename)) { -+ printk("snprintf: %s/%s\n", qcafwpath, raw_filename); -+ ret = -1; -+ break; -+ } -+ if ( (ret=android_readwrite_file(filename, NULL, NULL, 0)) < 0) { -+ break; -+ } else { -+ length = ret; -+ } -+ -+ if (strcmp(raw_filename, "softmac") == 0) { -+ bufsize = length = 17; -+ } else { -+ bufsize = ALIGN(length, PAGE_SIZE); -+ bmisize = A_ROUND_UP(length, 4); -+ bufsize = max(bmisize, bufsize); -+ } -+ firmware->data = vmalloc(bufsize); -+ firmware->size = length; -+ -+ // printk("AR6K: %s(): raw_filename=%s, bufsize=%d\n", __FUNCTION__, ra w_filename, bufsize); -+ -+ if (!firmware->data) { -+ printk("%s: Cannot allocate buffer for firmware\n", __FUNCTION__); -+ ret = -ENOMEM; -+ break; -+ } -+ -+ if ( (ret=android_readwrite_file(filename, (char*)firmware->data, NULL, length)) != length) { -+// printk("%s: file read error, ret %d request %d\n", __FUNCTION__,ret,length); -+// ret = -1; -+ break; -+ } -+ -+ } while (0); -+ -+ if (ret<0) { -+ if (firmware) { -+ if (firmware->data) -+ vfree(firmware->data); -+ A_FREE(firmware); -+ } -+ *firmware_p = NULL; -+ } else { -+ ret = 0; -+ } -+ return ret; -+ } -+ -+ void android_release_firmware(const struct firmware *firmware) -+ { -+ if (firmware) { -+ if (firmware->data) -+ vfree(firmware->data); -+ kfree(firmware); -+ } -+ } -+extern int qca_request_firmware(const struct firmware **firmware_p,const char *name,struct device *device) -+ { -+ // int uevent = 1; -+ -+ //return _request_firmware(firmware_p, name, device, uevent, false); -+ -+ return android_request_firmware(firmware_p, name,device); -+ -+ -+ } - struct android_wifi_reassoc_params { - unsigned char bssid[18]; - int channel; -@@ -7778,7 +7935,7 @@ VOS_STATUS hdd_get_cfg_file_size(v_VOID_t *pCtx, char *pFileName, v_SIZE_t *pBuf - - ENTER(); - -- status = request_firmware(&pHddCtx->fw, pFileName, pHddCtx->parent_dev); -+ status = qca_request_firmware(&pHddCtx->fw, pFileName, pHddCtx->parent_dev); - - if(status || !pHddCtx->fw || !pHddCtx->fw->data) { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: CFG download failed",__func__); -@@ -7819,7 +7976,7 @@ VOS_STATUS hdd_read_cfg_file(v_VOID_t *pCtx, char *pFileName, - - ENTER(); - -- status = request_firmware(&pHddCtx->fw, pFileName, pHddCtx->parent_dev); -+ status = qca_request_firmware(&pHddCtx->fw, pFileName, pHddCtx->parent_dev); - - if(status || !pHddCtx->fw || !pHddCtx->fw->data) { - hddLog(VOS_TRACE_LEVEL_FATAL,"%s: CFG download failed",__func__); -@@ -12860,15 +13017,34 @@ static int hdd_driver_init( void) - \return - 0 for success, non zero for failure - - --------------------------------------------------------------------------*/ -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0)) -+extern int wifi_setup_dt(void); -+extern void wifi_teardown_dt(void); -+#endif -+extern void extern_wifi_set_enable(int is_on); -+extern void sdio_reinit(void); -+ - #ifdef MODULE - static int __init hdd_module_init ( void) - { -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0)) -+ wifi_setup_dt(); -+#endif -+ extern_wifi_set_enable(0); -+ mdelay(200); -+ extern_wifi_set_enable(1); -+ mdelay(200); -+sdio_reinit(); -+ - return hdd_driver_init(); - } - #else /* #ifdef MODULE */ - static int __init hdd_module_init ( void) - { - /* Driver initialization is delayed to fwpath_changed_handler */ -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0)) -+wifi_teardown_dt(); -+#endif - return 0; - } - #endif /* #ifdef MODULE */ -diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c -index 66d741e..6e0e8d8 100644 ---- a/CORE/SERVICES/BMI/ol_fw.c -+++ b/CORE/SERVICES/BMI/ol_fw.c -@@ -118,7 +118,7 @@ static int ol_get_fw_files_for_target(struct ol_fw_files *pfw_files, - return 0; - } - #endif -- -+extern int qca_request_firmware(const struct firmware **firmware_p, const char *name,struct device *device); - #ifdef HIF_USB - static A_STATUS ol_usb_extra_initialization(struct ol_softc *scn); - #endif -@@ -164,7 +164,7 @@ static int ol_transfer_single_bin_file(struct ol_softc *scn, - __func__)); - } - -- if (request_firmware(&fw_entry, filename, scn->sc_osdev->device) != 0) -+ if (qca_request_firmware(&fw_entry, filename, scn->sc_osdev->device) != 0) - { - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, - ("%s: Failed to get %s\n", -@@ -492,7 +492,7 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file, - break; - } - -- if (request_firmware(&fw_entry, filename, scn->sc_osdev->device) != 0) -+ if (qca_request_firmware(&fw_entry, filename, scn->sc_osdev->device) != 0) - { - printk("%s: Failed to get %s\n", __func__, filename); - -@@ -506,7 +506,7 @@ static int ol_transfer_bin_file(struct ol_softc *scn, ATH_BIN_FILE file, - filename = scn->fw_files.board_data; - printk("%s: Trying to load default %s\n", - __func__, filename); -- if (request_firmware(&fw_entry, filename, -+ if (qca_request_firmware(&fw_entry, filename, - scn->sc_osdev->device) != 0) { - printk("%s: Failed to get %s\n", - __func__, filename); -diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c -index c99020e..6bafed8 100644 ---- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c -+++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c -@@ -234,12 +234,6 @@ ath_hif_sdio_remove(void *context, void *hif_handle) - { - ENTER(); - -- if (!sc) { -- VOS_TRACE(VOS_MODULE_ID_HIF, VOS_TRACE_LEVEL_ERROR, -- "Global SDIO context is NULL"); -- return A_ERROR; -- } -- - athdiag_procfs_remove(); - - #ifndef TARGET_DUMP_FOR_NON_QC_PLATFORM -diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h b/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h -index 382e38c..234bc09 100644 ---- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h -+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/include/hif_internal.h -@@ -112,7 +112,7 @@ struct hif_device { - A_BOOL swap_mailbox; - }; - --#define HIF_DMA_BUFFER_SIZE (4 * 1024) -+#define HIF_DMA_BUFFER_SIZE (56 * 1024) - #define CMD53_FIXED_ADDRESS 1 - #define CMD53_INCR_ADDRESS 2 - -diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c -index d45ebd9..9fb1057 100644 ---- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c -+++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c -@@ -64,7 +64,8 @@ - ((request->request & HIF_WRITE)&& \ - (request->address >= 0x1000 && request->address < 0x1FFFF)) - #endif --unsigned int mmcbusmode = 0; -+//unsigned int mmcbusmode = 0; -+unsigned int mmcbusmode = 5; - module_param(mmcbusmode, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - MODULE_PARM_DESC(mmcbusmode, "Set MMC driver Bus Mode: 1-SDR12, 2-SDR25, 3-SDR50, 4-DDR50, 5-SDR104"); - EXPORT_SYMBOL(mmcbusmode); -@@ -74,7 +75,9 @@ module_param(mmcbuswidth, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - MODULE_PARM_DESC(mmcbuswidth, "Set MMC driver Bus Width: 1-1Bit, 4-4Bit, 8-8Bit"); - EXPORT_SYMBOL(mmcbuswidth); - --unsigned int mmcclock = 0; -+//unsigned int mmcclock = 0; -+//unsigned int mmcclock = 166666666; -+unsigned int mmcclock = 200000000; - module_param(mmcclock, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - MODULE_PARM_DESC(mmcclock, "Set MMC driver Clock value"); - EXPORT_SYMBOL(mmcclock); -@@ -95,7 +98,7 @@ unsigned int asyncintdelay = 2; - module_param(asyncintdelay, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - MODULE_PARM_DESC(asyncintdelay, "Delay clock count for aysnc interrupt, 2 is default, vaild values are 1 and 2"); - #else --unsigned int asyncintdelay = 0; -+unsigned int asyncintdelay = 2; - module_param(asyncintdelay, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - MODULE_PARM_DESC(asyncintdelay, "Delay clock count for aysnc interrupt, 0 is default, vaild values are 1 and 2"); - #endif -@@ -412,12 +415,6 @@ __HIFReadWrite(HIF_DEVICE *device, - tbuffer = device->dma_buffer; - /* copy the write data to the dma buffer */ - AR_DEBUG_ASSERT(length <= HIF_DMA_BUFFER_SIZE); -- if (length > HIF_DMA_BUFFER_SIZE) { -- AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, -- ("AR6000: Invalid write length: %d\n", length)); -- status = A_EINVAL; -- break; -- } - memcpy(tbuffer, buffer, length); - bounced = TRUE; - } else { -@@ -440,12 +437,6 @@ __HIFReadWrite(HIF_DEVICE *device, - if (BUFFER_NEEDS_BOUNCE(buffer)) { - AR_DEBUG_ASSERT(device->dma_buffer != NULL); - AR_DEBUG_ASSERT(length <= HIF_DMA_BUFFER_SIZE); -- if (length > HIF_DMA_BUFFER_SIZE) { -- AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, -- ("AR6000: Invalid read length: %d\n", length)); -- status = A_EINVAL; -- break; -- } - tbuffer = device->dma_buffer; - bounced = TRUE; - } else { -@@ -695,7 +686,7 @@ static int async_task(void *param) - complete_and_exit(&device->async_completion, 0); - return 0; - } --#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) -+#if 1 - static A_INT32 IssueSDCommand(HIF_DEVICE *device, A_UINT32 opcode, A_UINT32 arg, A_UINT32 flags, A_UINT32 *resp) - { - struct mmc_command cmd; -@@ -719,6 +710,7 @@ static A_INT32 IssueSDCommand(HIF_DEVICE *device, A_UINT32 opcode, A_UINT32 arg, - return err; - } - #endif -+//extern int sdio_reset_comm(struct mmc_card *card); - A_STATUS ReinitSDIO(HIF_DEVICE *device) - { - A_INT32 err = 0; -@@ -733,10 +725,12 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device) - host = card->host; - - AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: +ReinitSDIO \n")); -+ -+// err = sdio_reset_comm(card); -+#if 1 - sdio_claim_host(func); - - do { --#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)) - /* 2.6.32 kernel does part of the SDIO initalization upon resume */ - A_BOOL lt_2_6_32 = (LINUX_VERSION_CODEocr) { -- /* Issue CMD5, arg = 0 */ -- err = IssueSDCommand(device, SD_IO_SEND_OP_COND, 0, (MMC_RSP_R4 | MMC_CMD_BCR), &resp); -- if (err) { -- AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD5 failed : %d \n",err)); -- break; -- } -- host->ocr = resp; -- } - - /* Issue CMD5, arg = ocr. Wait till card is ready */ - for (i=0;i<100;i++) { -- err = IssueSDCommand(device, SD_IO_SEND_OP_COND, host->ocr, (MMC_RSP_R4 | MMC_CMD_BCR), &resp); -+ err = IssueSDCommand(device, SD_IO_SEND_OP_COND, 0, (MMC_RSP_R4 | MMC_CMD_BCR), &resp); - if (err) { - AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("ReinitSDIO: CMD5 failed : %d \n",err)); - break; -@@ -828,7 +813,7 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device) - break; - } - } --#endif -+ - /* Enable high speed */ - if (card->host->caps & MMC_CAP_SD_HIGHSPEED) { - AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("ReinitSDIO: Set high speed mode\n")); -@@ -891,7 +876,7 @@ A_STATUS ReinitSDIO(HIF_DEVICE *device) - - sdio_release_host(func); - AR_DEBUG_PRINTF(ATH_DEBUG_TRACE, ("AR6000: -ReinitSDIO \n")); -- -+#endif - return (err) ? A_ERROR : A_OK; - } - -@@ -1320,6 +1305,7 @@ static int hifDeviceInserted(struct sdio_func *func, const struct sdio_device_id - /* - TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Power Manage work. - */ -+#if 1 - { - A_UINT32 clock, clock_set = 12500000; - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) -@@ -1578,7 +1564,7 @@ TODO: MMC SDIO3.0 Setting should also be modified in ReInit() function when Powe - - sdio_release_host(func); - } -- -+#endif - spin_lock_init(&device->lock); - - spin_lock_init(&device->asynclock); -@@ -2070,12 +2056,10 @@ static int hifDeviceSuspend(struct device *dev) - return -1; - } - } else { -- if (wma_suspend_target(temp_module, 0)) { -- AR_DEBUG_PRINTF(ATH_DEBUG_ERROR, ("PDEV Suspend Failed\n")); -- return -1; -- } -+ if (wma_suspend_target(temp_module, 0)) { -+ printk(KERN_ERR "wma_suspend_target failed.\n"); -+ } - } -- - if (pm_flag & MMC_PM_WAKE_SDIO_IRQ){ - AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("hifDeviceSuspend: wow enter\n")); - config = HIF_DEVICE_POWER_DOWN; -@@ -2295,9 +2279,7 @@ static HIF_DEVICE * - addHifDevice(struct sdio_func *func) - { - HIF_DEVICE *hifdevice = NULL; --#if(LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)) && !defined(WITH_BACKPORTS) - int ret = 0; --#endif - ENTER(); - AR_DEBUG_ASSERT(func != NULL); - hifdevice = (HIF_DEVICE *)A_MALLOC(sizeof(HIF_DEVICE)); -@@ -2310,13 +2292,9 @@ addHifDevice(struct sdio_func *func) - hifdevice->func = func; - hifdevice->powerConfig = HIF_DEVICE_POWER_UP; - hifdevice->DeviceState = HIF_DEVICE_STATE_ON; --#if(LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)) && !defined(WITH_BACKPORTS) - ret = sdio_set_drvdata(func, hifdevice); -+ - EXIT("status %d", ret); --#else -- sdio_set_drvdata(func, hifdevice); -- EXIT(); --#endif - return hifdevice; - } - --- -2.7.4 - diff --git a/packages/linux-drivers/amlogic/qca9377-aml/udev.d/99-qca9377-wireless.rules b/packages/linux-drivers/amlogic/qca9377-aml/udev.d/99-qca9377-wireless.rules deleted file mode 100644 index 3515891f51..0000000000 --- a/packages/linux-drivers/amlogic/qca9377-aml/udev.d/99-qca9377-wireless.rules +++ /dev/null @@ -1 +0,0 @@ -ACTION=="add|change", SUBSYSTEM=="net", ENV{INTERFACE}=="wlan*", ATTRS{vendor}=="0x0271", RUN+="/usr/bin/systemctl restart connman.service" diff --git a/packages/linux-drivers/amlogic/ssv6xxx-aml/package.mk b/packages/linux-drivers/amlogic/ssv6xxx-aml/package.mk deleted file mode 100644 index f810e09b34..0000000000 --- a/packages/linux-drivers/amlogic/ssv6xxx-aml/package.mk +++ /dev/null @@ -1,47 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="ssv6xxx-aml" -PKG_VERSION="1041e7d" -PKG_SHA256="1d96db8eec06c8a2c43f2c8024cc573e2bbce08fb0504fd9b6671224335e7d5f" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="http://libreelec.tv" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="ssv6xxx Linux driver" -PKG_IS_KERNEL_PKG="yes" -PKG_TOOLCHAIN="manual" - -pre_configure_target() { - sed -i 's,hw_cap_p2p = on,hw_cap_p2p = off,g' firmware/ssv6051-wifi.cfg -} - -pre_make_target() { - unset LDFLAGS -} - -make_target() { - if [ "$TARGET_KERNEL_ARCH" = "arm64" ]; then - PLATFORM="aml-s905" - else - PLATFORM="aml-s805" - fi - - cd $PKG_BUILD - ./ver_info.pl include/ssv_version.h - cp Makefile.android Makefile - sed -i 's,PLATFORMS =,PLATFORMS = '"$PLATFORM"',g' Makefile - make module SSV_ARCH="$TARGET_KERNEL_ARCH" \ - SSV_CROSS="$TARGET_KERNEL_PREFIX" \ - SSV_KERNEL_PATH="$(kernel_path)" -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/$PKG_NAME - find $PKG_BUILD/ -name \*.ko -not -path '*/\.*' -exec cp {} $INSTALL/$(get_full_module_dir)/$PKG_NAME \; - - mkdir -p $INSTALL/$(get_full_firmware_dir)/ssv6051 - cp $PKG_BUILD/firmware/* $INSTALL/$(get_full_firmware_dir)/ssv6051 -} diff --git a/packages/linux-drivers/amlogic/ssv6xxx-aml/patches/ssv6xxx-aml-001-fix-build-and-firmware-path.patch b/packages/linux-drivers/amlogic/ssv6xxx-aml/patches/ssv6xxx-aml-001-fix-build-and-firmware-path.patch deleted file mode 100644 index c0f46fa1ce..0000000000 --- a/packages/linux-drivers/amlogic/ssv6xxx-aml/patches/ssv6xxx-aml-001-fix-build-and-firmware-path.patch +++ /dev/null @@ -1,86 +0,0 @@ -diff --git a/Makefile.android b/Makefile.android -index 82211e1..0deeee5 100755 ---- a/Makefile.android -+++ b/Makefile.android -@@ -2,10 +2,8 @@ PLATFORMS = - - KBUILD_TOP := $(PWD) - --SSV_PATH=$(ANDROID_BUILD_TOP)/hardware/wifi/icomm/ssv6xxx/ssv6051/ -- --include $(SSV_PATH)/ssv6051.cfg --include $(SSV_PATH)/platform-config.mak -+include ${KBUILD_TOP}/ssv6051.cfg -+include ${KBUILD_TOP}/platform-config.mak - - PWD := $(shell pwd) - -@@ -69,7 +67,7 @@ obj-$(CONFIG_SSV6200_CORE) += $(KMODULE_NAME).o - all:module strip - - module: -- make -C $(SSV_KERNEL_PATH) ARCH=$(SSV_ARCH) CROSS_COMPILE=$(SSV_CROSS) \ -+ $(MAKE) -C $(SSV_KERNEL_PATH) ARCH=$(SSV_ARCH) CROSS_COMPILE=$(SSV_CROSS) \ - EXTRA_CFLAGS="$(EXTRA_CFLAGS)" M=$(PWD) modules - - install: -@@ -92,6 +90,6 @@ ifneq ($(SSV_STRIP),) - endif - - clean: -- make -C $(SSV_KERNEL_PATH) ARCH=$(SSV_ARCH) CROSS_COMPILE=$(SSV_CROSS) \ -+ $(MAKE) -C $(SSV_KERNEL_PATH) ARCH=$(SSV_ARCH) CROSS_COMPILE=$(SSV_CROSS) \ - M=$(PWD) clean - rm $(DEF_PARSER_H) -diff --git a/firmware/ssv6051-wifi.cfg b/firmware/ssv6051-wifi.cfg -index 6c3a823..9c623a0 100755 ---- a/firmware/ssv6051-wifi.cfg -+++ b/firmware/ssv6051-wifi.cfg -@@ -11,7 +11,7 @@ - # Priority.3 default firmware - ################################################## - --firmware_path = /system/etc/wifi/ssv6051/ -+firmware_path = /usr/lib/firmware/ssv6051/ - - ############################################################ - # MAC address - -diff --git a/platform-config.mak b/platform-config.mak -index bf35b70..f02e2b5 100755 ---- a/platform-config.mak -+++ b/platform-config.mak -@@ -5,7 +5,7 @@ CONFIG_SSV6200_CORE=m - ########################################################################### - # Compiler options # - ########################################################################### --ccflags-y += -Werror -+# ccflags-y += -Werror - - # Enable -g to help debug. Deassembly from .o to .S would help to track to - # the problomatic line from call stack dump. -diff --git a/ssv6051.cfg b/ssv6051.cfg -index 7cf12c2..a6960fa 100755 ---- a/ssv6051.cfg -+++ b/ssv6051.cfg -@@ -16,6 +16,6 @@ ccflags-y += -DCONFIG_SSV_RSSI - #SSV_CROSS = $(ANDROID_BUILD_TOP)/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android- - #SSV_KERNEL_PATH = $(ANDROID_BUILD_TOP)/out/target/product/p201/obj/KERNEL_OBJ/ - --SSV_ARCH = arm64 -+#SSV_ARCH = arm64 - #KMODDESTDIR = $(MODDESTDIR) - -diff --git a/ssvdevice/ssvdevice.c b/ssvdevice/ssvdevice.c -index ff4305e..375827f 100755 ---- a/ssvdevice/ssvdevice.c -+++ b/ssvdevice/ssvdevice.c -@@ -35,7 +35,7 @@ - MODULE_AUTHOR("iComm Semiconductor Co., Ltd"); - MODULE_DESCRIPTION("Shared library for SSV wireless LAN cards."); - MODULE_LICENSE("Dual BSD/GPL"); --static char *stacfgpath = NULL; -+static char *stacfgpath = "/usr/lib/firmware/ssv6051/ssv6051-wifi.cfg"; - EXPORT_SYMBOL(stacfgpath); - module_param(stacfgpath, charp, 0000); - MODULE_PARM_DESC(stacfgpath, "Get path of sta cfg"); diff --git a/packages/linux-drivers/brcmap6xxx-aml/config/config.txt b/packages/linux-drivers/brcmap6xxx-aml/config/config.txt deleted file mode 100644 index 2722085821..0000000000 --- a/packages/linux-drivers/brcmap6xxx-aml/config/config.txt +++ /dev/null @@ -1,9 +0,0 @@ -kso_enable=0 -ccode=CN -regrev=38 -mimo_bw_cap=1 -PM=0 -nv_by_chip=3 \ -17221 6 nvram_ap6255.txt \ -17200 4 nvram_ap6330.txt \ -17209 1 nvram_ap6335.txt diff --git a/packages/linux-drivers/brcmap6xxx-aml/modprobe.d/dhd.conf b/packages/linux-drivers/brcmap6xxx-aml/modprobe.d/dhd.conf deleted file mode 100644 index c200d67e84..0000000000 --- a/packages/linux-drivers/brcmap6xxx-aml/modprobe.d/dhd.conf +++ /dev/null @@ -1 +0,0 @@ -options dhd firmware_path=/lib/firmware/brcm/ nvram_path=/lib/firmware/brcm/ diff --git a/packages/linux-drivers/brcmap6xxx-aml/modules-load.d/dhd.conf b/packages/linux-drivers/brcmap6xxx-aml/modules-load.d/dhd.conf deleted file mode 100644 index 46b277676f..0000000000 --- a/packages/linux-drivers/brcmap6xxx-aml/modules-load.d/dhd.conf +++ /dev/null @@ -1 +0,0 @@ -dhd diff --git a/packages/linux-drivers/brcmap6xxx-aml/package.mk b/packages/linux-drivers/brcmap6xxx-aml/package.mk deleted file mode 100644 index 63f095f3c6..0000000000 --- a/packages/linux-drivers/brcmap6xxx-aml/package.mk +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="brcmap6xxx-aml" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/wifi/" -PKG_VERSION="de3f5c5" -PKG_SHA256="5d109f630aa8c92b6c4ab8622d405dcbc2a7c4f07f1e5a8834358be230d2c35b" -PKG_URL="https://github.com/openwetek/brcmap6xxx-aml/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux wlan-firmware-aml" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="brcmap6xxx-aml: Linux drivers for AP6xxx WLAN chips used in some devices based on Amlogic SoCs" -PKG_TOOLCHAIN="manual" -PKG_IS_KERNEL_PKG="yes" - -make_target() { - cd bcmdhd_1_201_59_x - LDFLAGS="" make V=1 \ - -C $(kernel_path) M=$PKG_BUILD/bcmdhd_1_201_59_x \ - ARCH=$TARGET_KERNEL_ARCH \ - CROSS_COMPILE=$TARGET_KERNEL_PREFIX -} - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_module_dir)/bcmdhd - cp *.ko $INSTALL/$(get_full_module_dir)/bcmdhd - - mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm - cp $PKG_DIR/config/config.txt $INSTALL/$(get_full_firmware_dir)/brcm -} diff --git a/packages/linux-drivers/gpu-aml/package.mk b/packages/linux-drivers/gpu-aml/package.mk deleted file mode 100644 index c68f763051..0000000000 --- a/packages/linux-drivers/gpu-aml/package.mk +++ /dev/null @@ -1,56 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="gpu-aml" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/gpu/" -PKG_VERSION="fe7a4d8" -PKG_SHA256="518f855a2b191e50d09c2d0b3e671b5ed4b5e4db06aa3a718e29ef30cc0d9a57" -PKG_URL="https://github.com/khadas/android_hardware_arm_gpu/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain linux" -PKG_NEED_UNPACK="$LINUX_DEPENDS" -PKG_LONGDESC="gpu-aml: Linux drivers for Mali GPUs found in Amlogic Meson SoCs" -PKG_TOOLCHAIN="manual" -PKG_IS_KERNEL_PKG="yes" - -configure_package() { - PKG_UTGARD_VERSION="r5p1" - PKG_UTGARD_BUILD_DIR="$PKG_BUILD/utgard/$PKG_UTGARD_VERSION" - PKG_MIDGARD_VERSION="r16p0" - PKG_MIDGARD_BUILD_DIR="$PKG_BUILD/midgard/$PKG_MIDGARD_VERSION/kernel/drivers/gpu/arm/midgard" -} - -pre_configure_target() { - sed -e "s|shell date|shell date -R|g" -i $PKG_BUILD/utgard/*/Kbuild - sed -e "s|USING_GPU_UTILIZATION=1|USING_GPU_UTILIZATION=0|g" -i $PKG_BUILD/utgard/platform/Kbuild.amlogic -} - -pre_make_target() { - ln -s $PKG_BUILD/utgard/platform $PKG_UTGARD_BUILD_DIR/platform -} - -make_target() { - if [ "$MESON_FAMILY" = "gxm" ] ; then - kernel_make -C $(kernel_path) M=$PKG_MIDGARD_BUILD_DIR \ - EXTRA_CFLAGS="-DCONFIG_MALI_PLATFORM_DEVICETREE -DCONFIG_MALI_BACKEND=gpu" \ - CONFIG_MALI_MIDGARD=m CONFIG_MALI_PLATFORM_DEVICETREE=y CONFIG_MALI_BACKEND=gpu modules - else - kernel_make -C $(kernel_path) M=$PKG_UTGARD_BUILD_DIR \ - EXTRA_CFLAGS="-DCONFIG_MALI450=y" \ - CONFIG_MALI400=m CONFIG_MALI450=y - fi -} - -makeinstall_target() { - if [ "$MESON_FAMILY" = "gxm" ] ; then - kernel_make -C $(kernel_path) M=$PKG_MIDGARD_BUILD_DIR \ - INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) INSTALL_MOD_STRIP=1 DEPMOD=: \ - modules_install - else - kernel_make -C $(kernel_path) M=$PKG_UTGARD_BUILD_DIR \ - INSTALL_MOD_PATH=$INSTALL/$(get_kernel_overlay_dir) INSTALL_MOD_STRIP=1 DEPMOD=: \ - modules_install - fi -} diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/package.mk b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/package.mk deleted file mode 100644 index a6ac1b964a..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/package.mk +++ /dev/null @@ -1,22 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="brcmfmac_sdio-firmware-all-aml" -PKG_VERSION="02b8502" -PKG_SHA256="899f1da77994d337cfe57ec3f38cc13247769d8df6c56b2541f5b8fea6438f16" -PKG_ARCH="arm aarch64" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/kszaq/brcmfmac_sdio-firmware-aml" -PKG_URL="https://github.com/kszaq/brcmfmac_sdio-firmware-aml/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Firmware for brcm bluetooth chips used in some Amlogic based devices." - -post_makeinstall_target() { - cd $INSTALL/$(get_full_firmware_dir)/brcm - for f in *.hcd; do - ln -sr $f $(grep --text -o 'BCM\S*' $f).hcd 2>/dev/null || true - ln -sr $f $(grep --text -o 'BCM\S*' $f | cut -c4-).hcd 2>/dev/null || true - ln -sr $f $(echo $f | sed -r 's/[^.]*/\U&/') 2>/dev/null || true - ln -sr bcm4335_V0343.0353.hcd BCM4335A0.hcd 2>/dev/null || true - done -} diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/patches/brcmfmac_sdio-firmware-aml-all-0001-install-firmware-in-usr.patch b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/patches/brcmfmac_sdio-firmware-aml-all-0001-install-firmware-in-usr.patch deleted file mode 100644 index 254be5a23c..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/patches/brcmfmac_sdio-firmware-aml-all-0001-install-firmware-in-usr.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -Naur a/Makefile b/Makefile ---- a/Makefile 2014-10-07 14:00:34.000000000 -0700 -+++ b/Makefile 2016-12-06 11:24:34.855522455 -0800 -@@ -15,8 +15,8 @@ - install: - mkdir -p $(DESTDIR)/usr/bin - cp -P $(PROG) $(DESTDIR)/usr/bin -- mkdir -p $(DESTDIR)/lib/firmware -- cp -PR firmware/brcm $(DESTDIR)/lib/firmware/ -+ mkdir -p $(DESTDIR)/usr/lib/kernel-overlays/base/lib/firmware -+ cp -PR firmware/brcm $(DESTDIR)/usr/lib/kernel-overlays/base/lib/firmware/ - - clean: - rm -f $(PROG) diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware-aml.service b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware-aml.service deleted file mode 100644 index d9353648f3..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware-aml.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Broadcom sdio firmware update - -[Service] -Type=simple -RemainAfterExit=yes -EnvironmentFile=/usr/share/bttty.conf -ExecStart=/usr/bin/hciattach -n -s 115200 ${BTTTY} bcm43xx 2000000 diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware@.service b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware@.service deleted file mode 100644 index 0d5fa2cc95..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/system.d/brcmfmac_sdio-firmware@.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Broadcom sdio firmware update for %I - -[Service] -Type=simple -RemainAfterExit=yes -EnvironmentFile=/usr/share/bttty.conf -ExecStart=/usr/bin/brcm_patchram_plus --patchram /usr/lib/kernel-overlays/base/lib/firmware/brcm/%I.hcd --baudrate 2000000 --use_baudrate_for_download ${BTTTY} --enable_hci --no2bytes --tosleep=50000 diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/udev.d/80-brcmfmac_sdio.rules b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/udev.d/80-brcmfmac_sdio.rules deleted file mode 100644 index f119bd2779..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-all-aml/udev.d/80-brcmfmac_sdio.rules +++ /dev/null @@ -1,12 +0,0 @@ -################################################################################ -# udev rules file for loading brcmfmac_sdio-firmware -################################################################################ - -### Broadcom bcm43362/bcm20710a1 bluetooth device -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0xa962", ACTION=="add", \ - TAG+="systemd", ENV{SYSTEMD_WANTS}+="brcmfmac_sdio-firmware@bcm20710a1.service", GOTO="end" - -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ACTION=="add", \ - TAG+="systemd", ENV{SYSTEMD_WANTS}+="brcmfmac_sdio-firmware-aml.service" - -LABEL="end" diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/package.mk b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/package.mk deleted file mode 100644 index c19f1a611c..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/package.mk +++ /dev/null @@ -1,15 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="brcmfmac_sdio-firmware-aml" -PKG_VERSION="0.1" -PKG_SHA256="37e19eb005882793d26d0def8704417b21beb1c24d2b4489715e4ed7e7818776" -PKG_LICENSE="GPL" -PKG_SITE="https://github.com/LibreELEC/LibreELEC.tv" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="Firmware for brcm bluetooth chips used in some Amlogic based devices." - -makeinstall_target() { - DESTDIR=$INSTALL FWDIR=$INSTALL/$(get_kernel_overlay_dir) make install -} diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/patches/brcmfmac_sdio-firmware-aml-0001-install-firmware-to-FWDIR.patch b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/patches/brcmfmac_sdio-firmware-aml-0001-install-firmware-to-FWDIR.patch deleted file mode 100644 index 156bcf4e8e..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/patches/brcmfmac_sdio-firmware-aml-0001-install-firmware-to-FWDIR.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -Naur brcmfmac_sdio-firmware-aml-0.1.orig/Makefile brcmfmac_sdio-firmware-aml-0.1/Makefile ---- brcmfmac_sdio-firmware-aml-0.1.orig/Makefile 2014-10-07 23:00:34.000000000 +0200 -+++ brcmfmac_sdio-firmware-aml-0.1/Makefile 2017-11-09 11:52:47.102781882 +0100 -@@ -15,8 +15,8 @@ - install: - mkdir -p $(DESTDIR)/usr/bin - cp -P $(PROG) $(DESTDIR)/usr/bin -- mkdir -p $(DESTDIR)/lib/firmware -- cp -PR firmware/brcm $(DESTDIR)/lib/firmware/ -+ mkdir -p $(FWDIR)/lib/firmware -+ cp -PR firmware/brcm $(FWDIR)/lib/firmware/ - - clean: - rm -f $(PROG) diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/system.d/brcmfmac_sdio-firmware@.service b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/system.d/brcmfmac_sdio-firmware@.service deleted file mode 100644 index 93f33228ea..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/system.d/brcmfmac_sdio-firmware@.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=Broadcom sdio firmware update for %I -ConditionPathExists=/dev/ttyS1 - -[Service] -Type=simple -RemainAfterExit=yes -ExecStart=/usr/bin/brcm_patchram_plus --patchram /lib/firmware/brcm/%I.hcd --baudrate 2000000 --use_baudrate_for_download /dev/ttyS1 --enable_hci --no2bytes --tosleep=50000 diff --git a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/udev.d/80-brcmfmac_sdio.rules b/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/udev.d/80-brcmfmac_sdio.rules deleted file mode 100644 index bd06442be6..0000000000 --- a/packages/linux-firmware/amlogic/brcmfmac_sdio-firmware-aml/udev.d/80-brcmfmac_sdio.rules +++ /dev/null @@ -1,30 +0,0 @@ -################################################################################ -# udev rules file for loading brcmfmac_sdio-firmware -################################################################################ - -ACTION!="add", GOTO="end" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0xa962", GOTO="begin" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4330", GOTO="begin" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4335", GOTO="begin" -SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x02d0", ATTRS{device}=="0xa9bf", GOTO="begin" -GOTO="end" -LABEL="begin" -### Broadcom bcm43362/bcm20710a1 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0xa962", \ - ENV{brcm_device}="bcm20710a1" - -### Broadcom bcm4330/bcm40183b2 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4330", \ - ENV{brcm_device}="bcm40183b2" - -### Broadcom bcm4335/bcm4335c0 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0x4335", \ - ENV{brcm_device}="bcm4335c0" - -### Broadcom bcm4345c0 bluetooth device -ATTRS{vendor}=="0x02d0", ATTRS{device}=="0xa9bf", \ - ENV{brcm_device}="bcm4345c0" - -ENV{brcm_device}=="bcm*", ACTION=="add", \ - TAG+="systemd", ENV{SYSTEMD_WANTS}+="brcmfmac_sdio-firmware@$env{brcm_device}.service" -LABEL="end" diff --git a/packages/linux-firmware/amlogic/qca9377-firmware-aml/package.mk b/packages/linux-firmware/amlogic/qca9377-firmware-aml/package.mk deleted file mode 100644 index 5a67a1b51e..0000000000 --- a/packages/linux-firmware/amlogic/qca9377-firmware-aml/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="qca9377-firmware-aml" -PKG_VERSION="1.0.0-3" -PKG_SHA256="9a9f214943e77e89ce8fc8c0dc5b41bc253478a9d92383a76590993df861f36d" -PKG_ARCH="arm aarch64" -PKG_LICENSE="BSD-3c" -PKG_SITE="http://linode.boundarydevices.com/repos/apt/ubuntu-relx/pool/main/q/qca-firmware/" -PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="qca9377 Linux firmware" -PKG_TOOLCHAIN="manual" - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_firmware_dir) - cp -a * $INSTALL/$(get_full_firmware_dir) -} diff --git a/packages/linux-firmware/amlogic/qca9377-firmware-aml/system.d/qca9377-firmware-aml.service b/packages/linux-firmware/amlogic/qca9377-firmware-aml/system.d/qca9377-firmware-aml.service deleted file mode 100644 index be1f8a9e57..0000000000 --- a/packages/linux-firmware/amlogic/qca9377-firmware-aml/system.d/qca9377-firmware-aml.service +++ /dev/null @@ -1,8 +0,0 @@ -[Unit] -Description=QCA Bluetooth firmware service -ConditionPathExists=/dev/ttyS1 - -[Service] -Type=simple -RemainAfterExit=yes -ExecStart=/usr/bin/hciattach -n -s 115200 /dev/ttyS1 qca 2000000 diff --git a/packages/linux-firmware/amlogic/qca9377-firmware-aml/udev.d/80-qca9377-firmware-aml.rules b/packages/linux-firmware/amlogic/qca9377-firmware-aml/udev.d/80-qca9377-firmware-aml.rules deleted file mode 100644 index d3dd577bf2..0000000000 --- a/packages/linux-firmware/amlogic/qca9377-firmware-aml/udev.d/80-qca9377-firmware-aml.rules +++ /dev/null @@ -1,6 +0,0 @@ -################################################################################ -# udev rules file for loading qca9377-firmware-aml -################################################################################ - -ACTION=="add", SUBSYSTEMS=="sdio", ATTRS{vendor}=="0x0271", ATTRS{device}=="0x0701", \ - TAG+="systemd", ENV{SYSTEMD_WANTS}+="qca9377-firmware-aml.service" diff --git a/packages/linux-firmware/amlogic/wlan-firmware-aml/package.mk b/packages/linux-firmware/amlogic/wlan-firmware-aml/package.mk deleted file mode 100644 index 827428035f..0000000000 --- a/packages/linux-firmware/amlogic/wlan-firmware-aml/package.mk +++ /dev/null @@ -1,36 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="wlan-firmware-aml" -PKG_VERSION="5f5fae7" -PKG_SHA256="a926edbd87b028afcf8048c776859fa2bf0dca006df6a0f6867ce3915bd21494" -PKG_LICENSE="Free-to-use" -PKG_SITE="http://openlinux.amlogic.com:8000/download/ARM/wifi/" -PKG_URL="https://github.com/openwetek/wlan-firmware-aml/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain" -PKG_LONGDESC="wlan-firmware-aml: Firmware for various WLAN chips used in the devices based on Amlogic SoCs" -PKG_TOOLCHAIN="manual" - -makeinstall_target() { - mkdir -p $INSTALL/$(get_full_firmware_dir)/brcm - - # AP6210 - cp -PR bcm_ampak/config/AP6210/Wi-Fi/fw_bcm40181a2*.bin $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/AP6210/Wi-Fi/nvram_ap6210.txt $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/AP6210/BT/bcm20710a1.hcd $INSTALL/$(get_full_firmware_dir)/brcm - - # AP6255 - cp -PR bcm_ampak/config/6255/fw_bcm43455c0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/6255/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6255.txt - cp -P bcm_ampak/config/6255/BT/BCM4345C0.hcd $INSTALL/$(get_full_firmware_dir)/brcm/bcm4345c0.hcd - - # AP6330 - cp -PR bcm_ampak/config/AP6330/Wi-Fi/fw_bcm40183b2*.bin $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/AP6330/Wi-Fi/nvram_ap6330.txt $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/AP6330/BT/bcm40183b2.hcd $INSTALL/$(get_full_firmware_dir)/brcm - - # AP6335 - cp -PR bcm_ampak/config/6335/fw_bcm4339a0_*.bin $INSTALL/$(get_full_firmware_dir)/brcm - cp -P bcm_ampak/config/6335/nvram.txt $INSTALL/$(get_full_firmware_dir)/brcm/nvram_ap6335.txt - cp -P bcm_ampak/config/6335/BT/bcm4335c0.hcd $INSTALL/$(get_full_firmware_dir)/brcm -} diff --git a/packages/multimedia/libamcodec/package.mk b/packages/multimedia/libamcodec/package.mk deleted file mode 100644 index df350e1212..0000000000 --- a/packages/multimedia/libamcodec/package.mk +++ /dev/null @@ -1,35 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="libamcodec" -PKG_ARCH="arm aarch64" -PKG_LICENSE="other" -PKG_SITE="http://openlinux.amlogic.com" -case $TARGET_KERNEL_ARCH in - arm) - PKG_VERSION="5e23a81" - PKG_SHA256="412cfafbd9725f5186b884b9599ff6561d2031b44d9873e79d377631a2b5f9b9" - PKG_URL="https://github.com/codesnake/libamcodec/archive/$PKG_VERSION.tar.gz" - ;; - arm64) - PKG_VERSION="bb19db7" - PKG_SHA256="81f78b37f2c14313b68cad5c43237dc3a217afaaad4f41e07a840e26673309c4" - PKG_URL="https://github.com/surkovalex/libamcodec/archive/$PKG_VERSION.tar.gz" - ;; -esac -PKG_DEPENDS_TARGET="toolchain alsa-lib" -PKG_LONGDESC="libamplayer: Interface library for Amlogic media codecs" - -post_unpack() { - sed -e "s|-lamadec||g" -i $PKG_BUILD/amcodec/Makefile -} - -make_target() { - mkdir -p $SYSROOT_PREFIX/usr/lib - make -C amcodec HEADERS_DIR="$SYSROOT_PREFIX/usr/include/amcodec" PREFIX="$SYSROOT_PREFIX/usr" install -} - -makeinstall_target() { - mkdir -p $INSTALL/usr/lib - make -C amcodec HEADERS_DIR="$INSTALL/usr/include/amcodec" PREFIX="$INSTALL/usr" install -} diff --git a/packages/sysutils/amremote/config/libreelec.conf b/packages/sysutils/amremote/config/libreelec.conf deleted file mode 100644 index 2fe76e9768..0000000000 --- a/packages/sysutils/amremote/config/libreelec.conf +++ /dev/null @@ -1,13 +0,0 @@ -# OpenELEC NEC remote - -factory_code = 0x00680001 -work_mode = 1 -repeat_enable = 1 -release_delay = 150 -debug_enable = 1 -reg_control = 0xfbe40 - -key_begin - 0xdb 116 ;POWER -key_end - diff --git a/packages/sysutils/amremote/config/wetek.conf b/packages/sysutils/amremote/config/wetek.conf deleted file mode 100644 index 7543fb00bc..0000000000 --- a/packages/sysutils/amremote/config/wetek.conf +++ /dev/null @@ -1,11 +0,0 @@ -# WeTek Play NEC remote -factory_code = 0xbc430001 -work_mode = 1 -repeat_enable = 1 -release_delay = 150 -debug_enable = 1 -reg_control = 0xfbe40 - -key_begin - 0xca 116 ;POWER -key_end \ No newline at end of file diff --git a/packages/sysutils/amremote/package.mk b/packages/sysutils/amremote/package.mk deleted file mode 100644 index a6a6739b21..0000000000 --- a/packages/sysutils/amremote/package.mk +++ /dev/null @@ -1,27 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2009-2016 Stephan Raue (stephan@openelec.tv) - -PKG_NAME="amremote" -PKG_VERSION="6431040" -PKG_SHA256="5859680b0951ed3d2265999b7ad5309060587815df4dd1c48c6fa9aae039d5c5" -PKG_ARCH="arm aarch64" -PKG_LICENSE="other" -PKG_SITE="http://www.amlogic.com" -PKG_URL="https://github.com/codesnake/amremote/archive/$PKG_VERSION.tar.gz" -PKG_DEPENDS_TARGET="toolchain usbutils" -PKG_LONGDESC="amremote - IR remote configuration utility for Amlogic-based devices" - -makeinstall_target() { - mkdir -p $INSTALL/usr/bin - cp remotecfg $INSTALL/usr/bin - - mkdir -p $INSTALL/usr/lib/libreelec - cp $PKG_DIR/scripts/* $INSTALL/usr/lib/libreelec - - mkdir -p $INSTALL/etc/amremote - cp $PKG_DIR/config/*.conf $INSTALL/etc/amremote -} - -post_install() { - enable_service amlogic-remotecfg.service -} diff --git a/packages/sysutils/amremote/scripts/remote-config b/packages/sysutils/amremote/scripts/remote-config deleted file mode 100755 index b7567594c4..0000000000 --- a/packages/sysutils/amremote/scripts/remote-config +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -# SPDX-License-Identifier: GPL-2.0-or-later -# Copyright (C) 2014 Stephan Raue (stephan@openelec.tv) - -# check the Security chip if we run on a WeTek device - lsusb -d 096e:0006 &> /dev/null - LSUSB_RET=$? - -if [ -f /storage/.config/remote.conf ]; then - /usr/bin/remotecfg /storage/.config/remote.conf -elif [ -f /etc/amremote/remote.conf ]; then - /usr/bin/remotecfg /etc/amremote/remote.conf -elif [ "$LSUSB_RET" = 0 ]; then - /usr/bin/remotecfg /etc/amremote/wetek.conf -elif [ "$LSUSB_RET" = 1 ]; then - /usr/bin/remotecfg /etc/amremote/libreelec.conf -fi diff --git a/packages/sysutils/amremote/system.d/amlogic-remotecfg.service b/packages/sysutils/amremote/system.d/amlogic-remotecfg.service deleted file mode 100644 index 98e27badfd..0000000000 --- a/packages/sysutils/amremote/system.d/amlogic-remotecfg.service +++ /dev/null @@ -1,11 +0,0 @@ -[Unit] -Description=Amlogic IR remote support -ConditionPathExists=/dev/amremote - -[Service] -Type=oneshot -ExecStart=/usr/lib/libreelec/remote-config -RemainAfterExit=yes - -[Install] -WantedBy=basic.target diff --git a/packages/tools/aml-dtbtools/package.mk b/packages/tools/aml-dtbtools/package.mk deleted file mode 100644 index 4e7d683128..0000000000 --- a/packages/tools/aml-dtbtools/package.mk +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="aml-dtbtools" -PKG_VERSION="cce100f" -PKG_SHA256="8bcaa83fcc9e85c9c04930e7411447d96a97da0809c5ecd9af91c8b554133c41" -PKG_LICENSE="free" -PKG_SITE="https://github.com/Wilhansen/aml-dtbtools" -PKG_URL="https://github.com/Wilhansen/aml-dtbtools/archive/${PKG_VERSION}.tar.gz" -PKG_DEPENDS_HOST="gcc:host" -PKG_LONGDESC="AML DTB Tools" - -PKG_MAKE_OPTS_HOST="dtbTool" - -makeinstall_host() { - mkdir -p $TOOLCHAIN/bin - cp dtbTool $TOOLCHAIN/bin -} diff --git a/packages/tools/u-boot-tools-aml/config/fw_env.config b/packages/tools/u-boot-tools-aml/config/fw_env.config deleted file mode 100644 index fb9211031a..0000000000 --- a/packages/tools/u-boot-tools-aml/config/fw_env.config +++ /dev/null @@ -1,31 +0,0 @@ -# Configuration file for fw_(printenv/setenv) utility. -# Up to two entries are valid, in this case the redundant -# environment sector is assumed present. -# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash. -# Futhermore, if the Flash sector size is ommitted, this value is assumed to -# be the same as the Environment size, which is valid for NOR and SPI-dataflash - -# NOR example -# MTD device name Device offset Env. size Flash sector size Number of sectors -#/dev/mtd1 0x0000 0x4000 0x4000 -#/dev/mtd2 0x0000 0x4000 0x4000 - -# MTD SPI-dataflash example -# MTD device name Device offset Env. size Flash sector size Number of sectors -#/dev/mtd5 0x4200 0x4200 -#/dev/mtd6 0x4200 0x4200 - -# NAND example -#/dev/mtd0 0x4000 0x4000 0x20000 2 - -# Block device example -#/dev/mmcblk0 0xc0000 0x20000 - -# VFAT example -#/boot/uboot.env 0x0000 0x4000 - -# Amlogic NAND -/dev/nand_env 0x000000 0x10000 0x10000 - -# Amlogic eMMC -/dev/env 0x000000 0x10000 0x10000 diff --git a/packages/tools/u-boot-tools-aml/package.mk b/packages/tools/u-boot-tools-aml/package.mk deleted file mode 100644 index 07f3941019..0000000000 --- a/packages/tools/u-boot-tools-aml/package.mk +++ /dev/null @@ -1,37 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0 -# Copyright (C) 2017-present Team LibreELEC (https://libreelec.tv) - -PKG_NAME="u-boot-tools-aml" -PKG_VERSION="2016.03" -PKG_SHA256="e49337262ecac44dbdeac140f2c6ebd1eba345e0162b0464172e7f05583ed7bb" -PKG_SITE="https://www.denx.de/wiki/U-Boot" -PKG_URL="ftp://ftp.denx.de/pub/u-boot/u-boot-$PKG_VERSION.tar.bz2" -PKG_DEPENDS_HOST="gcc:host" -PKG_DEPENDS_TARGET="toolchain u-boot-tools-aml:host" -PKG_LICENSE="GPL" -PKG_LONGDESC="Das U-Boot is a cross-platform bootloader for embedded systems." - -make_host() { - make mrproper - make dummy_defconfig - make tools-only -} - -make_target() { - CROSS_COMPILE="$TARGET_PREFIX" LDFLAGS="" ARCH=arm make dummy_defconfig - CROSS_COMPILE="$TARGET_PREFIX" LDFLAGS="" ARCH=arm make env -} - -makeinstall_host() { - mkdir -p $TOOLCHAIN/bin - cp tools/mkimage $TOOLCHAIN/bin -} - -makeinstall_target() { - mkdir -p $INSTALL/etc - cp $PKG_DIR/config/fw_env.config $INSTALL/etc/fw_env.config - - mkdir -p $INSTALL/usr/sbin - cp tools/env/fw_printenv $INSTALL/usr/sbin/fw_printenv - cp tools/env/fw_printenv $INSTALL/usr/sbin/fw_setenv -} diff --git a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0001-dummy_defconfig.patch b/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0001-dummy_defconfig.patch deleted file mode 100644 index c25553fc61..0000000000 --- a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0001-dummy_defconfig.patch +++ /dev/null @@ -1,5 +0,0 @@ ---- a/configs/dummy_defconfig -+++ b/configs/dummy_defconfig -@@ -0,0 +1,2 @@ -+CONFIG_ARM=y -+ diff --git a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0002-allow-multiple-entries.patch b/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0002-allow-multiple-entries.patch deleted file mode 100644 index 8a993cc3eb..0000000000 --- a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0002-allow-multiple-entries.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- u-boot-tools-2016.01/tools/env/fw_env.c.orig 2016-01-12 15:06:54.000000000 +0100 -+++ u-boot-tools-2016.01/tools/env/fw_env.c 2016-03-22 09:47:07.014381827 +0100 -@@ -1453,6 +1453,7 @@ - int rc; - char dump[128]; - char *devname; -+ int fd_test; - - fp = fopen (fname, "r"); - if (fp == NULL) -@@ -1473,6 +1474,12 @@ - if (rc < 3) - continue; - -+ fd_test = open (devname, O_RDWR); -+ if (fd_test < 0) -+ continue; -+ if (close (fd_test)) -+ continue; -+ - DEVNAME(i) = devname; - - if (rc < 4) diff --git a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0003-nand_env-hack.patch b/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0003-nand_env-hack.patch deleted file mode 100644 index 6435f1c6d7..0000000000 --- a/packages/tools/u-boot-tools-aml/patches/u-boot-tools-0003-nand_env-hack.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c -index 8b0317a..575f12a 100644 ---- a/tools/env/fw_env.c -+++ b/tools/env/fw_env.c -@@ -888,12 +888,13 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count, - } - } - -- if (lseek (fd, blockstart, SEEK_SET) == -1) { -- fprintf (stderr, -- "Seek error on %s: %s\n", -- DEVNAME (dev), strerror (errno)); -- return -1; -- } -+ if (blockstart != 0) -+ if (lseek (fd, blockstart, SEEK_SET) == -1) { -+ fprintf (stderr, -+ "Seek error on %s: %s\n", -+ DEVNAME (dev), strerror (errno)); -+ return -1; -+ } - - #ifdef DEBUG - fprintf(stderr, "Write 0x%x bytes at 0x%llx\n", erasesize, -@@ -1025,25 +1026,8 @@ static int flash_read (int fd) - return -1; - } - -- if (S_ISCHR(st.st_mode)) { -- rc = ioctl(fd, MEMGETINFO, &mtdinfo); -- if (rc < 0) { -- fprintf(stderr, "Cannot get MTD information for %s\n", -- DEVNAME(dev_current)); -- return -1; -- } -- if (mtdinfo.type != MTD_NORFLASH && -- mtdinfo.type != MTD_NANDFLASH && -- mtdinfo.type != MTD_DATAFLASH && -- mtdinfo.type != MTD_UBIVOLUME) { -- fprintf (stderr, "Unsupported flash type %u on %s\n", -- mtdinfo.type, DEVNAME(dev_current)); -- return -1; -- } -- } else { -- memset(&mtdinfo, 0, sizeof(mtdinfo)); -- mtdinfo.type = MTD_ABSENT; -- } -+ memset(&mtdinfo, 0, sizeof(mtdinfo)); -+ mtdinfo.type = MTD_ABSENT; - - DEVTYPE(dev_current) = mtdinfo.type; -