testing/device-samsung-j4lte: New device (MR 5936)

Successfully built and booted postmarketOS on Samsung Galaxy J4.
It's based on Exynos 7570, same SoC used by samsung-xcover4lte [1].

Currently, these are tested working:

  - Boots from internal storage
  - Display (console framebuffer is NOT working, kernel panics)
  - Framebuffer (additionally with msm-fb-refresher to refresh the screen)
  - Touchscreen
  - USB Networking (RNDIS)
  - Wi-Fi

Tested UI environments:

  - XFCE 4
  - Console (Kernel log doesn't show up because
    `CONFIG_FRAMEBUFFER_CONSOLE` is not enabled, but enabling it panics
    the kernel. This is a known issue for some Samsung devices, notably
samsung-crownlte [2].)

[1] https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Xcover_4_(samsung-xcover4lte)

[2] https://wiki.postmarketos.org/wiki/Samsung_Galaxy_Note_9_(Exynos)_(samsung-crownlte)#Current_status
This commit is contained in:
Hendra Manudinata 2024-12-22 11:48:20 +07:00 committed by Robert Eckelmann
parent d506dbcb30
commit bfdbb4a3a3
No known key found for this signature in database
GPG key ID: 30C0D50BEF63BF54
12 changed files with 4979 additions and 0 deletions

View file

@ -48,6 +48,7 @@ device/*/*-samsung-grandmax/ @wonderfulShrineMaidenOfParadise
device/*/*-samsung-gt510/ @TravMurav
device/*/*-samsung-gt58/ @TravMurav
device/*/*-samsung-j3ltetw/ @bolilingmeng89006
device/*/*-samsung-j4lte/ @manoedinata
device/*/*-samsung-j5/ @wonderfulShrineMaidenOfParadise
device/*/*-samsung-j5x/ @wonderfulShrineMaidenOfParadise
device/*/*-samsung-rossa/ @wonderfulShrineMaidenOfParadise

View file

@ -0,0 +1,40 @@
# Maintainer: Hendra Manudinata <hendra@manoedinata.com>
# Reference: <https://postmarketos.org/devicepkg>
pkgname=device-samsung-j4lte
pkgdesc="Samsung Galaxy J4"
pkgver=1
pkgrel=0
url="https://postmarketos.org"
license="MIT"
arch="aarch64"
options="!check !archcheck"
depends="
linux-samsung-j4lte
mkbootimg
postmarketos-base
postmarketos-base-downstream
msm-fb-refresher
"
makedepends="devicepkg-dev"
source="
deviceinfo
"
subpackages="$pkgname-nonfree-firmware:nonfree_firmware"
build() {
devicepkg_build $startdir $pkgname
}
package() {
devicepkg_package $startdir $pkgname
}
nonfree_firmware() {
pkgdesc="Non-free firmware for Samsung Galaxy J4 (j4lte)"
depends="firmware-samsung-j4lte"
mkdir "$subpkgdir"
}
sha512sums="
67c130d3a70b5905d50586dd341a999cff954a80eea6e0517907a463e9711aca24cf5a1265fd8ecfacfc62010866aa0cb6d648c1f663b6c87e791072d3c00f34 deviceinfo
"

View file

@ -0,0 +1,30 @@
# 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 J4"
deviceinfo_manufacturer="Samsung"
deviceinfo_codename="samsung-j4lte"
deviceinfo_year="2018"
deviceinfo_arch="aarch64"
# Device related
deviceinfo_chassis="handset"
deviceinfo_external_storage="true"
# Bootloader related
deviceinfo_flash_method="heimdall-bootimg"
deviceinfo_kernel_cmdline="androidboot.selinux=permissive androidboot.selinux=permissive"
deviceinfo_generate_bootimg="true"
deviceinfo_bootimg_qcdt="true"
deviceinfo_flash_pagesize="2048"
deviceinfo_flash_offset_base="0x10000000"
deviceinfo_flash_offset_kernel="0x00008000"
deviceinfo_flash_offset_ramdisk="0x01000000"
deviceinfo_flash_offset_second="0x00f00000"
deviceinfo_flash_offset_tags="0x00000100"
deviceinfo_flash_sparse="true"
deviceinfo_flash_sparse_samsung_format="1"
deviceinfo_flash_heimdall_partition_kernel="BOOT"
deviceinfo_flash_heimdall_partition_rootfs="SYSTEM"

View file

@ -0,0 +1,37 @@
# Maintainer: Hendra Manudinata <hendra@manoedinata.com>
pkgname=firmware-samsung-j4lte
pkgver=1
pkgrel=0
pkgdesc="Proprietary firmware for Samsung Galaxy J4 (j4lte)"
url="https://github.com/manoe-firmware/samsung_j4lte_dump"
arch="aarch64"
license="proprietary"
options="!check !archcheck !tracedeps pmb:cross-native"
_commit="019a045093a481c8cea9503fbd91247924d7cdbe"
_repo="$url/raw/$_commit"
_files_wifi="
mx
mx140.bin
mx140_wlan.hcf
"
for _file in $_files_wifi; do
source="$source $pkgname-$_commit-$_file::$_repo/vendor/etc/wifi/$_file"
done
package() {
j4lte_dir="$pkgdir/lib/firmware/postmarketos/samsung-j4lte"
local file
for file in $_files_wifi; do
install -Dm644 "$srcdir/$pkgname-$_commit-$file" \
"$j4lte_dir/mx140/$file"
done
}
sha512sums="
cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e firmware-samsung-j4lte-019a045093a481c8cea9503fbd91247924d7cdbe-mx
23cae12e6350ec4f785891726e35e1546eebe5f049501b4a803af32e015ef0a3cf9284fe246409ad83789d4cde1acfce642ca52c96f599b4c04dde9732aeb13b firmware-samsung-j4lte-019a045093a481c8cea9503fbd91247924d7cdbe-mx140.bin
2f325056446b09e063d1d22c6db5201b17638589993ef2f5f763ddef54947761049eeb1ea64b9e4450283e3d5e3550eb40ac604ce1158a3da9af86f28a48583d firmware-samsung-j4lte-019a045093a481c8cea9503fbd91247924d7cdbe-mx140_wlan.hcf
"

View file

@ -0,0 +1,93 @@
From 3af049e080fad9ea2cae686b92e2888ca4d27cc9 Mon Sep 17 00:00:00 2001
From: Hendra Manudinata <manoedinata@gmail.com>
Date: Tue, 7 May 2024 21:54:04 +0700
Subject: [PATCH 1/6] drivers: leds: ktd2692: Guard function calls under
`CONFIG_VIDEO_EXYNOS_FIMC_IS2`
Fixes compilation issues when `CONFIG_VIDEO_EXYNOS_FIMC_IS2` is disabled.
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
---
drivers/leds/leds-ktd2692.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/leds/leds-ktd2692.c b/drivers/leds/leds-ktd2692.c
index 4c2038a8..b75e0910 100755
--- a/drivers/leds/leds-ktd2692.c
+++ b/drivers/leds/leds-ktd2692.c
@@ -24,7 +24,9 @@
//#define DEBUG_LED_TIME
+#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS2
extern struct class *camera_class; /*sys/class/camera*/
+#endif
struct device *ktd2692_dev;
struct ktd2692_platform_data *global_ktd2692data = NULL;
@@ -176,6 +178,7 @@ static int ktd2692_write_data(unsigned data)
return err;
}
+#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS2
#ifdef CONFIG_LEDS_SUPPORT_FRONT_FLASH
int ktd2692_led_set_front_flash_brightness(int brightness) /*For control brightness of front flash led*/
{
@@ -281,6 +284,7 @@ int ktd2692_led_mode_ctrl(int mode)
return ret;
}
#endif
+#endif /* CONFIG_VIDEO_EXYNOS_FIMC_IS2 */
ssize_t ktd2692_store(struct device *dev,
struct device_attribute *attr, const char *buf,
@@ -360,6 +364,7 @@ ssize_t ktd2692_show(struct device *dev,
{
return sprintf(buf, "%d\n", global_ktd2692data->sysfs_input_data);
}
+#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS2
#ifdef CONFIG_LEDS_SUPPORT_FRONT_FLASH
static DEVICE_ATTR(front_flash, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH,
ktd2692_show, ktd2692_store);
@@ -369,6 +374,7 @@ static DEVICE_ATTR(front_torch_flash, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH,
static DEVICE_ATTR(rear_flash, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH,
ktd2692_show, ktd2692_store);
#endif
+#endif /* CONFIG_VIDEO_EXYNOS_FIMC_IS2 */
static int ktd2692_parse_dt(struct device *dev,
struct ktd2692_platform_data *pdata)
@@ -423,6 +429,7 @@ static int ktd2692_probe(struct platform_device *pdev)
LED_INFO("KTD2692_LED Probed\n");
+#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS2
#ifdef CONFIG_LEDS_SUPPORT_FRONT_FLASH
if( led_dev == NULL) {
led_dev = device_create(camera_class, NULL, 3, NULL, "flash");
@@ -452,12 +459,14 @@ static int ktd2692_probe(struct platform_device *pdev)
dev_attr_rear_flash.attr.name);
}
#endif
+#endif /* CONFIG_VIDEO_EXYNOS_FIMC_IS2 */
spin_lock_init(&pdata->int_lock);
return 0;
}
static int __devexit ktd2692_remove(struct platform_device *pdev)
{
+#ifdef CONFIG_VIDEO_EXYNOS_FIMC_IS2
#ifdef CONFIG_LEDS_SUPPORT_FRONT_FLASH
device_remove_file(led_dev, &dev_attr_front_flash);
device_remove_file(led_dev, &dev_attr_front_torch_flash);
@@ -466,6 +475,7 @@ static int __devexit ktd2692_remove(struct platform_device *pdev)
device_destroy(camera_class, 0);
class_destroy(camera_class);
#endif
+#endif /* CONFIG_VIDEO_EXYNOS_FIMC_IS2 */
return 0;
}
--
2.34.1

View file

@ -0,0 +1,37 @@
From 458b76be4e001e9c50104b113e56654ed3575cc7 Mon Sep 17 00:00:00 2001
From: Hendra Manudinata <manoedinata@gmail.com>
Date: Tue, 7 May 2024 21:01:13 +0700
Subject: [PATCH 2/6] drivers: samsung: scsc: Skip mount point check
We definitely won't be able to do this check on postmarketOS, so let's
say that the path will be always exist.
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
---
drivers/misc/samsung/scsc/mx140_file.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/misc/samsung/scsc/mx140_file.c b/drivers/misc/samsung/scsc/mx140_file.c
index 0bc345ca..601e4bd6 100644
--- a/drivers/misc/samsung/scsc/mx140_file.c
+++ b/drivers/misc/samsung/scsc/mx140_file.c
@@ -488,6 +488,8 @@ int mx140_basedir_file(struct scsc_mx *mx)
/* Set to kernel segment. */
set_fs(get_ds());
+/* HACK: Skip mount point check (postmarketOS) */
+#if 0
/* If /system isn't present, assume platform isn't ready yet */
r = vfs_stat("/system", &stat);
if (r != 0) {
@@ -507,6 +509,7 @@ int mx140_basedir_file(struct scsc_mx *mx)
r = -EAGAIN;
goto done;
}
+#endif
/* Search for SCSC FW under the mountpoints */
--
2.34.1

View file

@ -0,0 +1,25 @@
From 53d14f0e8b9d68050dceccbecc8219d356437c07 Mon Sep 17 00:00:00 2001
From: Eray Tutmaz <tarkanttmz261@gmail.com>
Date: Thu, 19 Oct 2023 08:31:12 +0000
Subject: [PATCH 3/6] Update file proc.S
---
arch/arm64/mm/proc.S | 2 --
1 file changed, 2 deletions(-)
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 4c2d56b9..7d2915bc 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -140,8 +140,6 @@ ENTRY(cpu_do_switch_mm)
b post_ttbr_update_workaround // Back to C code...
ENDPROC(cpu_do_switch_mm)
- .section ".text.init", #alloc, #execinstr
-
/*
* __cpu_setup
*
--
2.34.1

View file

@ -0,0 +1,36 @@
From 85d282bcd9ae6a907c10c51354c34a2a5c4cab81 Mon Sep 17 00:00:00 2001
From: Hendra Manudinata <manoedinata@gmail.com>
Date: Tue, 7 May 2024 23:40:58 +0700
Subject: [PATCH 4/6] drivers: usb: u_ether: Force setting random MAC address
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
---
drivers/usb/gadget/function/u_ether.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
index b7d94ae9..6252450c 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -1270,18 +1270,12 @@ struct eth_dev *gether_setup_name(struct usb_gadget *g, u8 ethaddr[ETH_ALEN],
if (get_ether_addr(dev_addr, net->dev_addr))
dev_warn(&g->dev,
"using random %s ethernet address\n", "self");
-#ifdef CONFIG_USB_ANDROID_SAMSUNG_COMPOSITE
- memcpy(dev->host_mac, ethaddr, ETH_ALEN);
- printk(KERN_DEBUG "usb: set unique host mac\n");
-
-#else
if (get_ether_addr(host_addr, dev->host_mac))
dev_warn(&g->dev,
"using random %s ethernet address\n", "host");
if (ethaddr)
memcpy(ethaddr, dev->host_mac, ETH_ALEN);
-#endif
net->netdev_ops = &eth_netdev_ops;
net->ethtool_ops = &ops;
--
2.34.1

View file

@ -0,0 +1,30 @@
From 5c21a20cc9d4c6f19b5d4baa1ac4ec40ce26ae0f Mon Sep 17 00:00:00 2001
From: Hendra Manudinata <manoedinata@gmail.com>
Date: Tue, 7 May 2024 23:42:50 +0700
Subject: [PATCH 5/6] staging: samsung: sec_batt: Force disable low power
charge
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
---
drivers/staging/samsung/sec_batt.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/drivers/staging/samsung/sec_batt.c b/drivers/staging/samsung/sec_batt.c
index de9f63ef..5145dcc6 100644
--- a/drivers/staging/samsung/sec_batt.c
+++ b/drivers/staging/samsung/sec_batt.c
@@ -20,8 +20,11 @@ EXPORT_SYMBOL(lpcharge);
static int sec_bat_is_lpm_check(char *str)
{
+/* HACK: Force disable low power charge */
+#if 0
if (strncmp(str, "charger", 7) == 0)
lpcharge = 1;
+#endif
pr_info("%s: Low power charging mode: %d\n", __func__, lpcharge);
--
2.34.1

View file

@ -0,0 +1,35 @@
From b902b582f39d47d0196e0540e57e172c5a6eb403 Mon Sep 17 00:00:00 2001
From: Hendra Manudinata <manoedinata@gmail.com>
Date: Mon, 28 Oct 2024 16:22:38 +0700
Subject: [PATCH 6/6] HACK: decon_7570: Swap red & blue offset
Based on [1], to make red & blue properly rendered.
[1] https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/master/device/testing/linux-samsung-xcover4lte/02-swap-red-blue.patch?ref_type=heads
Signed-off-by: Hendra Manudinata <manoedinata@gmail.com>
---
drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c b/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
index 7695b674..b3010c98 100644
--- a/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
+++ b/drivers/video/fbdev/exynos/decon_7570/decon-int_drv.c
@@ -440,11 +440,11 @@ int decon_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
case 24:
/* our 24bpp is unpacked, so 32bpp */
var->bits_per_pixel = 32;
- var->red.offset = 16;
+ var->red.offset = 0;
var->red.length = 8;
var->green.offset = 8;
var->green.length = 8;
- var->blue.offset = 0;
+ var->blue.offset = 16;
var->blue.length = 8;
break;
--
2.34.1

View file

@ -0,0 +1,79 @@
# Maintainer: Hendra Manudinata <hendra@manoedinata.com>
# Reference: <https://postmarketos.org/vendorkernel>
# Kernel config based on: arch/arm64/configs/exynos7570-j4lte_defconfig
pkgname=linux-samsung-j4lte
pkgver=3.18.140
pkgrel=0
pkgdesc="Samsung Galaxy J4 kernel fork"
arch="aarch64"
_carch="arm64"
_flavor="samsung-j4lte"
url="https://kernel.org"
license="GPL-2.0-only"
options="!strip !check !tracedeps pmb:cross-native"
makedepends="
bash
bc
bison
devicepkg-dev
findutils
flex
openssl-dev
perl
dtbtool-exynos
"
# Source
_repository="android_kernel_samsung_j4lte"
_commit="3649f566a23e749962b946d54a3c73e1a9305ffc"
_config="config-$_flavor.$arch"
source="
$pkgname-$_commit.tar.gz::https://gitlab.com/manoedinata/$_repository/-/archive/$_commit.tar.gz
$_config
0001-drivers-leds-ktd2692-Guard-function-calls-under-CONF.patch
0002-drivers-samsung-scsc-Skip-mount-point-check.patch
0003-Update-file-proc.S.patch
0004-drivers-usb-u_ether-Force-setting-random-MAC-address.patch
0005-staging-samsung-sec_batt-Force-disable-low-power-cha.patch
0006-HACK-decon_7570-Swap-red-blue-offset.patch
"
builddir="$srcdir/$_repository-$_commit"
_outdir="out"
prepare() {
default_prepare
. downstreamkernel_prepare
}
build() {
unset LDFLAGS
make O="$_outdir" ARCH="$_carch" CC="${CC:-gcc}" \
KBUILD_BUILD_VERSION="$((pkgrel + 1 ))-postmarketOS"
# Build dt image with exynos dtbtool
dtbTool-exynos --pagesize 2048 \
--platform 0x50a6 \
--subtype 0x217584da \
-o "$_outdir/arch/$_carch/boot"/dt.img \
$(find "$_outdir/arch/$_carch/boot/dts/" -name *.dtb)
}
package() {
downstreamkernel_package "$builddir" "$pkgdir" "$_carch" \
"$_flavor" "$_outdir"
install -Dm644 "$_outdir/arch/$_carch/boot"/dt.img \
"$pkgdir"/boot/dt.img
}
sha512sums="
fa8883e729c612fc9c563a003f0e24642f5199684932cc92f886feca76956094b8a2a96eaee30513f50b70f38f60b07c0e13668143061c43947f545122c70a5d linux-samsung-j4lte-3649f566a23e749962b946d54a3c73e1a9305ffc.tar.gz
a844d6505b47f6cce06b9598a88f2ae6aa40b90390eee6af6cf5b1b60ab0ac4b77f0da5395508934914a67b773c8485a81b4081f6b4d6846df7d515a018e748b config-samsung-j4lte.aarch64
1e42cdc37e8dffd1b557705f416d94606a61a1fe70bca259d88652f1b7f0d7ded6dc475a9a92d6bf5a1db904936d8fb8ee9a312c0f3cbf461b71472a7b459462 0001-drivers-leds-ktd2692-Guard-function-calls-under-CONF.patch
6d0603e1fbb8d7682c518694c0781292e46be42111a4be84e4e7efaf3298f9c43dfcd40806e0a9f2701c096ef8e6ab223f6e36afc36fc53d3475266b42719a84 0002-drivers-samsung-scsc-Skip-mount-point-check.patch
fde3e1dc2282ed62a2b0973d385c2deed4126ce82e350d4e069635c734e480d66876094a0f99506ee03d4d72626ad7c5755ac11cd2c1a0a1f519733cdb7b6fb3 0003-Update-file-proc.S.patch
142f682492c8020222855b9e900b22ea890dff5a88283438281d6cf7dae5a53b81de75cf02c40c1fc469fa28d3ad2f7e061522375c3f03913ed27c5bd1625dcd 0004-drivers-usb-u_ether-Force-setting-random-MAC-address.patch
da954e52d90344458f80365c7fba60a5a82a0764c54c90cb6259d9f507b00e812b410d868515eb6836837a72697d9e12e2b00d0dd234c962a32888a76db4e0cc 0005-staging-samsung-sec_batt-Force-disable-low-power-cha.patch
007c9e9a8230f12da6dc05f4043cfbd2e1e8909c2397358b71a10aef2a7c7c5139df02e8f8841342c13c72dfcf5079f070acb23768e379c073a035c70b84bef3 0006-HACK-decon_7570-Swap-red-blue-offset.patch
"

File diff suppressed because it is too large Load diff