device-sqfmi-beepy: new device port
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/7296>
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
# Contributor: Adam Thiede <me@adamthiede.com>
|
||||
# Maintainer: Adam Thiede <me@adamthiede.com>
|
||||
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
|
||||
"
|
||||
@@ -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
|
||||
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
rc-update add loadkeys default
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
device-sqfmi-beepy.post-install
|
||||
@@ -0,0 +1,21 @@
|
||||
# Reference: <https://postmarketos.org/deviceinfo>
|
||||
# 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"
|
||||
@@ -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 <drm/drm_probe_helper.h>
|
||||
#include <drm/drm_simple_kms_helper.h>
|
||||
|
||||
-#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 <drm/drm_fbdev_ttm.h>
|
||||
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(6, 6, 0)
|
||||
#include <drm/drm_fbdev_generic.h>
|
||||
#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
|
||||
@@ -0,0 +1,2 @@
|
||||
beepy-kbd
|
||||
sharp-drm
|
||||
@@ -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 <memory>
|
||||
+#include <cstdint>
|
||||
#include <unordered_map>
|
||||
|
||||
class PSF
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user