diff --git a/device/testing/device-sqfmi-beepy/APKBUILD b/device/testing/device-sqfmi-beepy/APKBUILD new file mode 100644 index 000000000..a9f872bd4 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/APKBUILD @@ -0,0 +1,150 @@ +# Contributor: Adam Thiede +# Maintainer: Adam Thiede +pkgname=device-sqfmi-beepy +pkgdesc="SQFMI Beepy" +pkgver=1 +pkgrel=0 + +_kbdmodname=beepy-kbd +_kbdmodver=2.11 +_kbdcommit="e65472734decd59450e2448d1218c4f69babcea8" + +_dispmodname=sharp-drm +_dispmodver=1.5 +_dispcommit="181a5c5b9dd6fecc66cf4d18a94f4a83277b8ca4" + +_overlaycommit="910b9f59c2bbe5e7f33725370ceff0a4c18777af" + +url="https://postmarketos.org" +license="MIT" +arch="aarch64" +options="!check !archcheck" +install="$pkgname.post-install $pkgname.post-upgrade" +depends=" + postmarketos-base + raspberrypi-bootloader + linux-rpi + kbd + dtc +" +makedepends="dtc devicepkg-dev libdrm-dev" +source=" + deviceinfo + modules-initfs + usercfg.txt + $pkgname-$_kbdcommit.tar.gz::https://github.com/ardangelo/beepberry-keyboard-driver/archive/$_kbdcommit.tar.gz + $pkgname-$_overlaycommit.tar.gz::https://github.com/ardangelo/beepy-symbol-overlay/archive/$_overlaycommit.tar.gz + $pkgname-$_dispcommit.tar.gz::https://github.com/ardangelo/sharp-drm-driver/archive/$_dispcommit.tar.gz + displaydriver-compile-on-new-kernels.patch + symbol-overlay.patch +" +subpackages="$pkgname-overlay $pkgname-modules $pkgname-openrc" + +builddir="$srcdir" + +# define working directories for different components +_dispdir="$srcdir/sharp-drm-driver" +_kbddir="$srcdir/beepberry-keyboard-driver" +_overlaydir="$srcdir/beepy-symbol-overlay" + +prepare() { + # rename directories to generic name for patches to apply + mv "$srcdir"/sharp-drm-driver-$_dispcommit $_dispdir + mv "$srcdir/beepy-symbol-overlay-$_overlaycommit" $_overlaydir + mv "$srcdir/beepberry-keyboard-driver-$_kbdcommit" $_kbddir + + default_prepare + + # add an akmbuild to display driver + cat >$_dispdir/AKMBUILD <<-EOF + modname=$_dispmodname + modver=$_dispmodver + built_modules=$_dispmodname.ko + + build() { + make + } + EOF + + # add an akmbuild to keyboard driver + cat >$_kbddir/AKMBUILD <<-EOF + modname=$_kbdmodname + modver=$_kbdmodver + built_modules=$_kbdmodname.ko + + build() { + make + } + EOF +} + +build() { + devicepkg_build $startdir $pkgname + + # compile dtbo for display + cd $_dispdir + dtc -@ -I dts -O dtb -W no-unit_address_vs_reg -o sharp-drm.dtbo sharp-drm.dts + + # compile dtbo for keyboard + cd $_kbddir + dtc -@ -I dts -O dtb -W no-unit_address_vs_reg -o beepy-kbd.dtbo beepy-kbd.dts + + # build keyboard symbol overlay binary + cd $_overlaydir + make symbol-overlay +} + +package() { + devicepkg_package $startdir $pkgname + install -Dm644 "$srcdir"/usercfg.txt "$pkgdir"/boot/usercfg.txt + + # install keyboard files + install -Dm644 "$_kbddir"/beepy-kbd.map "$pkgdir"/usr/share/kbd/keymaps/beepy-kbd.map + install -Dm644 "$_kbddir"/beepy-kbd.dtbo "$pkgdir"/boot/overlays/beepy-kbd.dtbo + + local kbddestdir="$pkgdir/usr/src/$_kbdmodname-$pkgver" + install -Dm644 -t "$kbddestdir" $_kbddir/AKMBUILD $_kbddir/Makefile + cp -r "$_kbddir"/src "$_kbddir"/beepy-kbd.dts "$kbddestdir" + + # install display files + install -Dm755 "$_dispdir"/monoset "$pkgdir"/usr/bin/monoset + install -Dm644 "$_dispdir"/sharp-drm.dtbo "$pkgdir"/boot/overlays/sharp-drm.dtbo + + local dispdestdir="$pkgdir/usr/src/$_dispmodname-$pkgver" + install -Dm644 -t "$dispdestdir" $_dispdir/AKMBUILD $_dispdir/Makefile + cp -r $_dispdir/src $_dispdir/sharp-drm.dts "$dispdestdir" + + # install symbol-overlay + install -Dm755 $_overlaydir/symbol-overlay "$pkgdir"/sbin/symbol-overlay +} + +modules() { + install_if="$pkgname=$pkgver-r$pkgrel" + depends="linux-rpi-dev akms build-base" + install="$subpkgname.post-install" + + amove boot/overlays + amove usr/src +} + +overlay() { + install_if="$pkgname=$pkgver-r$pkgrel" + amove sbin/symbol-overlay +} + +openrc() { + install_if="$pkgname=$pkgver-r$pkgrel openrc" + install="$subpkgname.post-install" + mkdir -p "$subpkgdir" +} + +sha512sums=" +fa474f0b2b146fa1bb5f683eb4571790ce1311ec232a694e0199ebc2e1f7651f8068b473bf48989582d88b3cf93152de20ae93436863970bb2de14a4dc673243 deviceinfo +3ab0bad9c7f38369457c5896fab2533049a2ad6ddb7cec8e7df3b2ac7f3751bd54dc275da8a7c0eedd7e7aafa79a766cac93750375eed4cb3e8c36612a649a39 modules-initfs +2b387eeb9afddef25a9bb757ec4481c446e213cd1da88291c5b0af0e631bc0bd224588fe6cecb79620bc58820eefa37d0a234ed1b417af2946af48d8f3254d38 usercfg.txt +d3060bcbca3e90aa26c8a8d6772d8b07116e0cc4f0ae97d44d896434510493367966f23bb86d82f9719723b3bc7ee6b7a9e4b93b5185822b32ffaf4ee0411813 device-sqfmi-beepy-e65472734decd59450e2448d1218c4f69babcea8.tar.gz +442703affd913e0bdbbfe5d5eedd49a8b743832702a6fb8e96d49530dd172a7bcdbc36d908b93c61cb455824c85be8ffaa2c67506ae72827e874129f0ba6f912 device-sqfmi-beepy-910b9f59c2bbe5e7f33725370ceff0a4c18777af.tar.gz +b966c2cae09c3ac12d522700f37b4fa669eb884be9a2d9b4dae78e4baf8e333fa207228f944f00ee7967f8e3d17671b518744fd08187e32d4671bdd05fba8e00 device-sqfmi-beepy-181a5c5b9dd6fecc66cf4d18a94f4a83277b8ca4.tar.gz +d26333b6eff7219622fc98bdddc288f901911c72a06a7284f9443153de91b9ee51070c5d822ee74923835057497aa6d0c9c9ed533c1e62770beb01aa5eb45ead displaydriver-compile-on-new-kernels.patch +fc3c720c5c8af33f2bfd8a745340547c29effc458df761cacfa9e6bed7e09f5f5ecea98e5a6c25d630cefc2a4b3e31016d42839c640759cd715bcb81d9560f38 symbol-overlay.patch +" diff --git a/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-modules.post-install b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-modules.post-install new file mode 100644 index 000000000..0451ee0b2 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-modules.post-install @@ -0,0 +1,16 @@ +#!/bin/sh + +kdir=$(find /usr/src/ -type d -iname 'linux-headers-*-rpi' -mindepth 1 -maxdepth 1) +dispdir=/usr/src/sharp-drm-1 +kbddir=/usr/src/beepy-kbd-1 + +dtc -@ -I dts -O dtb -W no-unit_address_vs_reg -o $dispdir/sharp-drm.dtbo $dispdir/sharp-drm.dts +/usr/bin/make -C $kdir M=$dispdir +/usr/bin/make -C $kdir M=$dispdir modules_install + +dtc -@ -I dts -O dtb -W no-unit_address_vs_reg -o $kbddir/beepy-kbd.dtbo $kbddir/beepy-kbd.dts +/usr/bin/make -C $kdir M=$kbddir +/usr/bin/make -C $kdir M=$kbddir modules_install + +# akms hooks fail in pmbootstrap chroot. This is necessary to build an image +exit 0 diff --git a/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-openrc.post-install b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-openrc.post-install new file mode 100644 index 000000000..1ad209ab4 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy-openrc.post-install @@ -0,0 +1,2 @@ +#!/bin/sh +rc-update add loadkeys default diff --git a/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-install b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-install new file mode 100644 index 000000000..47eb2fd70 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-install @@ -0,0 +1,6 @@ +#!/bin/sh + +grep beepy-kbd /etc/modules || echo 'beepy-kbd' >> /etc/modules +grep sharp-drm /etc/modules || echo 'sharp-drm' >> /etc/modules + +grep beepy-kbd.map /etc/conf.d/loadkeys || sed -e 's,^keymap=.*,keymap="/usr/share/kbd/keymaps/beepy-kbd.map",' -i /etc/conf.d/loadkeys diff --git a/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-upgrade b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-upgrade new file mode 120000 index 000000000..c8964e6be --- /dev/null +++ b/device/testing/device-sqfmi-beepy/device-sqfmi-beepy.post-upgrade @@ -0,0 +1 @@ +device-sqfmi-beepy.post-install \ No newline at end of file diff --git a/device/testing/device-sqfmi-beepy/deviceinfo b/device/testing/device-sqfmi-beepy/deviceinfo new file mode 100644 index 000000000..7bba88d06 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/deviceinfo @@ -0,0 +1,21 @@ +# Reference: +# Please use double quotes only. You can source this file in shell +# scripts. + +deviceinfo_format_version="0" +deviceinfo_name="sqfmi SQFMI Beepy" +deviceinfo_manufacturer="sqfmi" +deviceinfo_codename="sqfmi-beepy" +deviceinfo_year="2023" +deviceinfo_arch="aarch64" + +# Device related +deviceinfo_chassis="handset" +deviceinfo_external_storage="true" + +# Bootloader related +deviceinfo_flash_method="none" +deviceinfo_boot_filesystem="fat16" +deviceinfo_partition_type="msdos" +deviceinfo_kernel_cmdline="quiet PMOS_NOSPLASH console=ttyAMA0,115200 console=tty1 fbcon=font:VGA8x8 fbcon=map:10" +deviceinfo_generate_cmdline_txt="true" diff --git a/device/testing/device-sqfmi-beepy/displaydriver-compile-on-new-kernels.patch b/device/testing/device-sqfmi-beepy/displaydriver-compile-on-new-kernels.patch new file mode 100644 index 000000000..3faa6a8f5 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/displaydriver-compile-on-new-kernels.patch @@ -0,0 +1,98 @@ +From 0e241e03f2821d26e37dfa39df529a2c4113be1e Mon Sep 17 00:00:00 2001 +From: Kiboneu <-> +Date: Tue, 22 Apr 2025 01:44:29 -0400 +Subject: [PATCH 1/2] Convert to fbdev-ttm (kernel 6.11+) and use + drm_format_conv_state (kernel 6.8+) + +--- + sharp-drm-driver/src/drm_iface.c | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/sharp-drm-driver/src/drm_iface.c b/sharp-drm-driver/src/drm_iface.c +index 8c57910..e62b7e0 100644 +--- a/sharp-drm-driver/src/drm_iface.c ++++ b/sharp-drm-driver/src/drm_iface.c +@@ -32,7 +32,10 @@ + #include + #include + +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 6, 0) ++// https://github.com/torvalds/linux/commit/aae4682e5d66c1e1dc181fa341652e037237f144 ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0) ++#include ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(6, 6, 0) + #include + #endif + +@@ -262,6 +265,11 @@ static int sharp_memory_clip_mono_tagged(struct sharp_memory_panel* panel, size_ + struct drm_gem_dma_object *dma_obj; + struct iosys_map dst, vmap; + ++ // https://github.com/torvalds/linux/commit/4cd24d4b1a9548f42cdb7f449edc6f869a8ae730 ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0) ++ struct drm_format_conv_state fmtcnv_state = DRM_FORMAT_CONV_STATE_INIT; ++#endif ++ + // Get GEM memory manager + dma_obj = drm_fb_dma_get_gem_obj(fb, 0); + +@@ -274,8 +282,13 @@ static int sharp_memory_clip_mono_tagged(struct sharp_memory_panel* panel, size_ + // Initialize destination (buf) and source (video) + iosys_map_set_vaddr(&dst, buf); + iosys_map_set_vaddr(&vmap, dma_obj->vaddr); ++ + // DMA `clip` into `buf` and convert to 8-bit grayscale ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0) ++ drm_fb_xrgb8888_to_gray8(&dst, NULL, &vmap, fb, clip, &fmtcnv_state); ++#else + drm_fb_xrgb8888_to_gray8(&dst, NULL, &vmap, fb, clip); ++#endif + + // End DMA area + drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE); +@@ -292,6 +305,9 @@ static int sharp_memory_clip_mono_tagged(struct sharp_memory_panel* panel, size_ + (clip->x2 - clip->x1), (clip->y2 - clip->y1), clip->y1); + + // Success ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0) ++ drm_format_conv_state_release(&fmtcnv_state); ++#endif + return 0; + } + +@@ -598,7 +614,12 @@ int drm_probe(struct spi_device *spi) + + // fbdev setup + spi_set_drvdata(spi, drm); ++ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0) ++ drm_ttm_setup(drm, 0); ++#else + drm_fbdev_generic_setup(drm, 0); ++#endif + + printk(KERN_INFO "sharp_memory: successful probe\n"); + + +From ea98230f3b1ff9da993c85c8aa958d338bdd1847 Mon Sep 17 00:00:00 2001 +From: Kiboneu <-> +Date: Tue, 22 Apr 2025 01:48:12 -0400 +Subject: [PATCH 2/2] Fix typo: s/drm_ttm_setup/drm_fbdev_ttm_setup + +--- + sharp-drm-driver/src/drm_iface.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sharp-drm-driver/src/drm_iface.c b/sharp-drm-driver/src/drm_iface.c +index e62b7e0..cecd0f9 100644 +--- a/sharp-drm-driver/src/drm_iface.c ++++ b/sharp-drm-driver/src/drm_iface.c +@@ -616,7 +616,7 @@ int drm_probe(struct spi_device *spi) + spi_set_drvdata(spi, drm); + + #if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0) +- drm_ttm_setup(drm, 0); ++ drm_fbdev_ttm_setup(drm, 0); + #else + drm_fbdev_generic_setup(drm, 0); + #endif diff --git a/device/testing/device-sqfmi-beepy/modules-initfs b/device/testing/device-sqfmi-beepy/modules-initfs new file mode 100644 index 000000000..4fa04ec89 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/modules-initfs @@ -0,0 +1,2 @@ +beepy-kbd +sharp-drm diff --git a/device/testing/device-sqfmi-beepy/symbol-overlay.patch b/device/testing/device-sqfmi-beepy/symbol-overlay.patch new file mode 100644 index 000000000..a36aafff5 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/symbol-overlay.patch @@ -0,0 +1,12 @@ +diff --git a/beepy-symbol-overlay/src/PSF.hpp b/beepy-symbol-overlay/src/PSF.hpp +index 5a8d6ce..775010c 100644 +--- a/beepy-symbol-overlay/src/PSF.hpp ++++ b/beepy-symbol-overlay/src/PSF.hpp +@@ -1,6 +1,7 @@ + #pragma once + + #include ++#include + #include + + class PSF diff --git a/device/testing/device-sqfmi-beepy/usercfg.txt b/device/testing/device-sqfmi-beepy/usercfg.txt new file mode 100644 index 000000000..9ddf282f8 --- /dev/null +++ b/device/testing/device-sqfmi-beepy/usercfg.txt @@ -0,0 +1,9 @@ +kernel=vmlinuz-rpi +initramfs initramfs + +[all] +dtparam=i2c_arm=on +dtoverlay=beepy-kbd,irq_pin=4 +[all] +dtparam=spi=on +dtoverlay=sharp-drm