samsung-a21s: new device

Mainline 7.2 port for the Samsung Galaxy A21s, Exynos 850.

Working: display, touchscreen, Phosh with GPU acceleration.

Signed-off-by: Thomas Turner <tturner@lineageos.org>
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9467>
This commit is contained in:
Thomas Turner
2026-09-01 19:38:17 +00:00
parent 7527ebe3eb
commit 3ef06e837f
7 changed files with 9609 additions and 0 deletions
@@ -0,0 +1,43 @@
# Reference: <https://postmarketos.org/devicepkg>
maintainer="Thomas Turner <tturner@lineageos.org>"
pkgname=device-samsung-a21s
pkgver=1
pkgrel=0
pkgdesc="Samsung Galaxy A21s"
url="https://postmarketos.org"
arch="aarch64"
license="MIT"
depends="
android-tools-mkbootimg
firmware-samsung-a21s
linux-postmarketos-exynos850
postmarketos-base
"
makedepends="
android-tools-mkdtboimg
devicepkg-dev
dtc
"
source="
deviceinfo
exynos850-samsung-a21s-empty.dts
"
options="!archcheck !check"
build() {
devicepkg_build $startdir $pkgname
dtc -O dtb -o "$srcdir/dtbo" -I dts "$srcdir/exynos850-samsung-a21s-empty.dts"
mkdtboimg create "$srcdir/dtbo.img" "$srcdir/dtbo" --custom0=0x6 --custom1=0x20
}
package() {
devicepkg_package $startdir $pkgname
install -Dm644 "$srcdir/dtbo.img" "$pkgdir/boot/dtbo.img"
}
sha512sums="
246ee4a60eba0354667313f1653a8df7468a09f9607b4330e3ef3818dec6d3840ad9467e778aa49082ab211e6a98b2a52393a1c918ca71284d120e45553ff772 deviceinfo
6e127e53f2380efad88b64d9720954ca633b4dace54afba29207afd210b0c43cf6fe6c636cfb9f14aa486bd6887da3b30f2a241d4a9244cd593639790c0c53b9 exynos850-samsung-a21s-empty.dts
"
@@ -0,0 +1,32 @@
# Reference: <https://postmarketos.org/deviceinfo>
# Please use double quotes only. You can source this file in shell
# scripts.
deviceinfo_format_version="0"
deviceinfo_name="Samsung Galaxy A21s"
deviceinfo_manufacturer="Samsung"
deviceinfo_codename="samsung-a21s"
deviceinfo_year="2020"
deviceinfo_dtb="exynos850-a217f-3gb"
deviceinfo_arch="aarch64"
# Device related
deviceinfo_chassis="handset"
deviceinfo_drm="true"
deviceinfo_external_storage="true"
deviceinfo_swap_size_recommended="1024"
# Bootloader related
deviceinfo_flash_method="fastboot"
deviceinfo_generate_bootimg="true"
deviceinfo_create_initfs_extra="true"
deviceinfo_flash_pagesize="2048"
deviceinfo_header_version="2"
deviceinfo_flash_offset_dtb="0x00000000"
deviceinfo_flash_offset_kernel="0x00008000"
deviceinfo_flash_offset_ramdisk="0x01000000"
deviceinfo_flash_offset_second="0xf0000000"
deviceinfo_flash_offset_tags="0x00000100"
deviceinfo_flash_fastboot_partition_dtbo="dtbo"
deviceinfo_flash_fastboot_partition_vbmeta="vbmeta"
@@ -0,0 +1,8 @@
/dts-v1/;
/ {
model = "Samsung Galaxy A21s";
compatible = "samsung,exynos850";
dtbo-hw_rev = <0x06>;
dtbo-hw_rev_end = <0x20>;
};
@@ -0,0 +1 @@
/usr/lib/firmware/td4150_a21s.bin
@@ -0,0 +1,28 @@
maintainer="Thomas Turner <tturner@lineageos.org>"
pkgname=firmware-samsung-a21s
pkgver=1
pkgrel=0
pkgdesc="Firmware for a21s"
url="https://github.com/samsungexynos850/firmware-samsung-a21s"
arch="aarch64"
license="proprietary"
options="!check !strip !archcheck !tracedeps
pmb:cross-native
"
source="
https://raw.githubusercontent.com/samsungexynos850/firmware-samsung-a21s/refs/heads/master/td4150_a21s.bin
30-initramfs-firmware-samsung-a21s.files
"
package() {
mkdir -p "$pkgdir"/usr/lib/firmware
mv "$srcdir"/td4150_a21s.bin "$pkgdir"/usr/lib/firmware/
install -Dm644 "$srcdir"/30-initramfs-$pkgname.files -t \
"$pkgdir"/usr/share/mkinitfs/files
}
sha512sums="
a9624ddaebe4885eedb81984f54f05c65d68114a371a5711878289380476f2ce710cfa96fb6ffc8d7ce2889715669009f48368344ac5095114d452a23549c465 td4150_a21s.bin
dbc91c5cbe60fd0bb0a9daf582ebf1184fa89664aa934cad4952aa28bd161bb97921e86aa20dcc98df994c84c6a5cd74caee3784b3fcb9533ae6ece35db0602a 30-initramfs-firmware-samsung-a21s.files
"
@@ -0,0 +1,81 @@
# Kernel config based on: arch/arm64/configs/exynos850_defconfig
maintainer="Thomas Turner <tturner@lineageos.org>"
pkgname=linux-postmarketos-exynos850
pkgver=7.2.0
pkgrel=0
pkgdesc="Mainline kernel fork for Exynos850"
arch="aarch64"
_carch="arm64"
_flavor="postmarketos-exynos850"
url="https://github.com/samsungexynos850/linux"
license="GPL-2.0-only"
options="!strip !check !tracedeps
pmb:cross-native
pmb:kconfigcheck-nftables
"
makedepends="
android-tools-mkdtboimg
bash
bc
bison
clang
elfutils-dev
findutils
flex
linux-headers
lld
llvm
openssl-dev
pahole
perl
postmarketos-installkernel
python3
"
_repository="linux"
_commit="8be82eacf2ea237e8a3d06d4f5b1bf6554571322"
_config="config-$_flavor.$arch"
# Source
source="
linux-$_commit.tar.gz::https://github.com/samsungexynos850/$_repository/archive/$_commit.tar.gz
$_config
"
builddir="$srcdir/linux-$_commit"
prepare() {
default_prepare
cp "$srcdir/$_config" .config
}
build() {
unset LDFLAGS
make ARCH="$_carch" LLVM=1 \
KBUILD_BUILD_VERSION="$((pkgrel + 1))-postmarketOS"
}
package() {
mkdir -p "$pkgdir"/boot
for ram in 3gb 4gb 6gb; do
mv arch/arm64/boot/dts/exynos/exynos850-a217f-"${ram}".dtb dtb
mkdtboimg create arch/arm64/boot/dts/exynos/exynos850-a217f-"${ram}".dtb dtb --custom1=0xff
done
make install modules_install dtbs_install \
ARCH="$_carch" \
LLVM=1 \
INSTALL_PATH="$pkgdir"/boot \
INSTALL_MOD_PATH="$pkgdir"/usr \
INSTALL_MOD_STRIP=1 \
INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs
rm -f "$pkgdir"/usr/lib/modules/*/build "$pkgdir"/usr/lib/modules/*/source
install -Dm644 "$builddir"/include/config/kernel.release \
"$pkgdir"/usr/share/kernel/$_flavor/kernel.release
}
sha512sums="
41d91860fcbb7f3c8e8e1c9bd05ebffb1665a4c7ffa308692c065d7c78d8e400f099ef497c8a1016c729f2ebc1bd1ff004d87be480aa23e38e3bf4ef1fafcfca linux-8be82eacf2ea237e8a3d06d4f5b1bf6554571322.tar.gz
3a8a4fe4a6136aef54ec959db6b7bc717fb07067c96c64b7bacf58bfccc1bf18b50fa21283549b201ba0464e02285f186d723717af16ba84293dec4446eb3a3e config-postmarketos-exynos850.aarch64
"