diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0001-video-backlight-Add-OCP8178-backlight-driver.patch b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0001-video-backlight-Add-OCP8178-backlight-driver.patch new file mode 100644 index 000000000..85d710875 --- /dev/null +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0001-video-backlight-Add-OCP8178-backlight-driver.patch @@ -0,0 +1,327 @@ +From bf1ccb5dc61576a573409810dfee9d68eb141845 Mon Sep 17 00:00:00 2001 +From: ayakael +Date: Sun, 8 Feb 2026 09:17:03 -0500 +Subject: [PATCH 1/3] video: backlight: Add OCP8178 backlight driver + +This driver is taken from +https://github.com/clockworkpi/DevTerm/blob/main/Code/patch/armbian_build_a06/patch/kernel-005-backlight.patch +and optimized for v6.5 +--- + drivers/video/backlight/Kconfig | 6 + + drivers/video/backlight/Makefile | 1 + + drivers/video/backlight/ocp8178_bl.c | 277 +++++++++++++++++++++++++++ + 3 files changed, 284 insertions(+) + create mode 100644 drivers/video/backlight/ocp8178_bl.c + +diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig +index 936ba1e4d35e..440cf1c6d011 100644 +--- a/drivers/video/backlight/Kconfig ++++ b/drivers/video/backlight/Kconfig +@@ -477,6 +477,12 @@ config BACKLIGHT_LED + If you have a LCD backlight adjustable by LED class driver, say Y + to enable this driver. + ++config BACKLIGHT_OCP8178 ++ tristate "OCP8178 Backlight Driver" ++ depends on GPIOLIB ++ help ++ If you have an OCP8178, say Y to enable the backlight driver. ++ + endif # BACKLIGHT_CLASS_DEVICE + + endmenu +diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile +index e815f3f1deff..e1184bb56516 100644 +--- a/drivers/video/backlight/Makefile ++++ b/drivers/video/backlight/Makefile +@@ -59,3 +59,4 @@ obj-$(CONFIG_BACKLIGHT_WM831X) += wm831x_bl.o + obj-$(CONFIG_BACKLIGHT_ARCXCNN) += arcxcnn_bl.o + obj-$(CONFIG_BACKLIGHT_RAVE_SP) += rave-sp-backlight.o + obj-$(CONFIG_BACKLIGHT_LED) += led_bl.o ++obj-$(CONFIG_BACKLIGHT_OCP8178) += ocp8178_bl.o +diff --git a/drivers/video/backlight/ocp8178_bl.c b/drivers/video/backlight/ocp8178_bl.c +new file mode 100644 +index 000000000000..db8db1771644 +--- /dev/null ++++ b/drivers/video/backlight/ocp8178_bl.c +@@ -0,0 +1,277 @@ ++/* ++ * ocp8178_bl.c - ocp8178 backlight driver ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include /* Only for legacy support */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++struct ocp8178_backlight { ++ struct device *dev; ++ struct device *fbdev; ++ ++ struct gpio_desc *gpiod; ++ int def_value; ++ int current_value; ++}; ++ ++#define DETECT_DELAY 200 ++#define DETECT_TIME 500 ++#define DETECT_WINDOW_TIME 1000 ++#define START_TIME 10 ++#define END_TIME 10 ++#define SHUTDOWN_TIME 3000 ++#define LOW_BIT_HIGH_TIME 10 ++#define LOW_BIT_LOW_TIME 50 ++#define HIGH_BIT_HIGH_TIME 50 ++#define HIGH_BIT_LOW_TIME 10 ++#define MAX_BRIGHTNESS_VALUE 9 ++ ++static void entry_1wire_mode(struct ocp8178_backlight *gbl) ++{ ++ unsigned long flags = 0; ++ local_irq_save(flags); ++ gpiod_set_value(gbl->gpiod, 0); ++ mdelay(SHUTDOWN_TIME/1000); ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(DETECT_DELAY); ++ gpiod_set_value(gbl->gpiod, 0); ++ udelay(DETECT_TIME); ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(DETECT_WINDOW_TIME); ++ local_irq_restore(flags); ++} ++ ++static inline void write_bit(struct ocp8178_backlight *gbl, int bit) ++{ ++ if (bit) { ++ gpiod_set_value(gbl->gpiod, 0); ++ udelay(HIGH_BIT_LOW_TIME); ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(HIGH_BIT_HIGH_TIME); ++ } else { ++ gpiod_set_value(gbl->gpiod, 0); ++ udelay(LOW_BIT_LOW_TIME); ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(LOW_BIT_HIGH_TIME); ++ } ++} ++ ++static void write_byte(struct ocp8178_backlight *gbl, int byte) ++{ ++ unsigned long flags = 0; ++ unsigned char data = 0x72; ++ int i; ++ ++ local_irq_save(flags); ++ ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(START_TIME); ++ for(i = 0; i < 8; i++) { ++ if(data & 0x80) { ++ write_bit(gbl, 1); ++ } else { ++ write_bit(gbl, 0); ++ } ++ data <<= 1; ++ } ++ gpiod_set_value(gbl->gpiod, 0); ++ udelay(END_TIME); ++ ++ data = byte & 0x1f; ++ ++ gpiod_set_value(gbl->gpiod, 1); ++ udelay(START_TIME); ++ for(i = 0; i < 8; i++) { ++ if(data & 0x80) { ++ write_bit(gbl, 1); ++ } else { ++ write_bit(gbl, 0); ++ } ++ data <<= 1; ++ } ++ gpiod_set_value(gbl->gpiod, 0); ++ udelay(END_TIME); ++ gpiod_set_value(gbl->gpiod, 1); ++ ++ local_irq_restore(flags); ++} ++ ++unsigned char ocp8178_bl_table[MAX_BRIGHTNESS_VALUE+1] = {0, 1, 4, 8, 12, 16, 20, 24, 28, 31}; ++ ++static int ocp8178_update_status(struct backlight_device *bl) ++{ ++ struct ocp8178_backlight *gbl = bl_get_data(bl); ++ int brightness = bl->props.brightness, i; ++ ++ if (bl->props.power != FB_BLANK_UNBLANK || ++ bl->props.fb_blank != FB_BLANK_UNBLANK || ++ bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK)) ++ brightness = 0; ++ ++ if(brightness > MAX_BRIGHTNESS_VALUE) ++ brightness = MAX_BRIGHTNESS_VALUE; ++ ++ for(i = 0; i < 2; i++) { ++ entry_1wire_mode(gbl); ++ write_byte(gbl, ocp8178_bl_table[brightness]); ++ } ++ gbl->current_value = brightness; ++ ++ return 0; ++} ++ ++static int ocp8178_get_brightness(struct backlight_device *bl) ++{ ++ struct ocp8178_backlight *gbl = bl_get_data(bl); ++ return gbl->current_value; ++} ++ ++static int ocp8178_check_fb(struct backlight_device *bl, ++ struct fb_info *info) ++{ ++ struct ocp8178_backlight *gbl = bl_get_data(bl); ++ return gbl->fbdev == NULL || gbl->fbdev == info->dev; ++} ++ ++static const struct backlight_ops ocp8178_backlight_ops = { ++ .options = BL_CORE_SUSPENDRESUME, ++ .update_status = ocp8178_update_status, ++ .get_brightness = ocp8178_get_brightness, ++ .check_fb = ocp8178_check_fb, ++}; ++ ++static int ocp8178_probe_dt(struct platform_device *pdev, ++ struct ocp8178_backlight *gbl) ++{ ++ struct device *dev = &pdev->dev; ++ struct device_node *np = dev->of_node; ++ enum gpiod_flags flags; ++ int ret = 0; ++ u32 value32; ++ ++ of_property_read_u32(np, "default-brightness", &value32); ++ if(value32 > MAX_BRIGHTNESS_VALUE) ++ gbl->def_value = MAX_BRIGHTNESS_VALUE; ++ else ++ gbl->def_value = value32; ++ flags = gbl->def_value ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW; ++ ++ gbl->gpiod = devm_gpiod_get(dev, "backlight-control", flags); ++ if (IS_ERR(gbl->gpiod)) { ++ ret = PTR_ERR(gbl->gpiod); ++ ++ if (ret != -EPROBE_DEFER) { ++ dev_err(dev, ++ "Error: The gpios parameter is missing or invalid.\n"); ++ } ++ } ++ ++ return ret; ++} ++ ++static struct backlight_device *backlight; ++ ++static int ocp8178_probe(struct platform_device *pdev) ++{ ++ struct backlight_properties props; ++ struct backlight_device *bl; ++ struct ocp8178_backlight *gbl; ++ struct device_node *np = pdev->dev.of_node; ++ int ret; ++ ++ if ( !np) { ++ dev_err(&pdev->dev, ++ "failed to find platform data or device tree node.\n"); ++ return -ENODEV; ++ } ++ ++ gbl = devm_kzalloc(&pdev->dev, sizeof(*gbl), GFP_KERNEL); ++ if (gbl == NULL) ++ return -ENOMEM; ++ ++ gbl->dev = &pdev->dev; ++ ++ ret = ocp8178_probe_dt(pdev, gbl); ++ if (ret) ++ return ret; ++ ++ gbl->current_value = gbl->def_value; ++ ++ memset(&props, 0, sizeof(props)); ++ props.type = BACKLIGHT_RAW; ++ props.max_brightness = MAX_BRIGHTNESS_VALUE; ++ bl = devm_backlight_device_register(&pdev->dev, dev_name(&pdev->dev), ++ &pdev->dev, gbl, &ocp8178_backlight_ops, ++ &props); ++ if (IS_ERR(bl)) { ++ dev_err(&pdev->dev, "failed to register backlight\n"); ++ return PTR_ERR(bl); ++ } ++ ++// entry_1wire_mode(gbl); ++ ++ bl->props.brightness = gbl->def_value; ++ backlight_update_status(bl); ++ ++ platform_set_drvdata(pdev, bl); ++ ++ backlight = bl; ++ return 0; ++} ++ ++static int ocp8178_suspend(struct platform_device *pdev, pm_message_t state) ++{ ++ return 0; ++} ++ ++static int ocp8178_resume(struct platform_device *pdev) ++{ ++ return 0; ++} ++ ++static struct of_device_id ocp8178_of_match[] = { ++ { .compatible = "ocp8178-backlight" }, ++ { /* sentinel */ } ++}; ++ ++MODULE_DEVICE_TABLE(of, ocp8178_of_match); ++ ++static struct platform_driver ocp8178_driver = { ++ .driver = { ++ .name = "ocp8178-backlight", ++ .of_match_table = of_match_ptr(ocp8178_of_match), ++ }, ++ .probe = ocp8178_probe, ++ .suspend = ocp8178_suspend, ++ .resume = ocp8178_resume, ++}; ++ ++module_platform_driver(ocp8178_driver); ++ ++MODULE_DESCRIPTION("OCP8178 Driver"); ++MODULE_LICENSE("GPL"); +-- +2.53.0 + diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0002-drm-panel-add-clockwork-cwu50.patch b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0002-drm-panel-add-clockwork-cwu50.patch new file mode 100644 index 000000000..0ab9a4011 --- /dev/null +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0002-drm-panel-add-clockwork-cwu50.patch @@ -0,0 +1,530 @@ +From 3034db8bfb94b1e4793c99d777c2f6d6e8efb525 Mon Sep 17 00:00:00 2001 +From: ayakael +Date: Sun, 8 Feb 2026 09:17:29 -0500 +Subject: [PATCH 2/3] drm: panel: add clockwork cwu50 + +set `power_off_case` to 2(other than 1) to enable power off by +DCS command +--- + drivers/gpu/drm/panel/Kconfig | 12 + + drivers/gpu/drm/panel/Makefile | 1 + + drivers/gpu/drm/panel/panel-cwu50.c | 477 ++++++++++++++++++++++++++++ + 3 files changed, 490 insertions(+) + create mode 100644 drivers/gpu/drm/panel/panel-cwu50.c + +diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig +index 0c2e06c01840..b2e2eff3aa03 100644 +--- a/drivers/gpu/drm/panel/Kconfig ++++ b/drivers/gpu/drm/panel/Kconfig +@@ -761,4 +761,16 @@ config DRM_PANEL_XINPENG_XPP055C272 + Say Y here if you want to enable support for the Xinpeng + XPP055C272 controller for 720x1280 LCD panels with MIPI/RGB/SPI + system interfaces. ++ ++config DRM_PANEL_CWU50 ++ tristate "CWU50 panel" ++ depends on OF ++ depends on DRM_MIPI_DSI ++ depends on BACKLIGHT_CLASS_DEVICE ++ help ++ Say Y here if you want to enable support for CWU50 panel. ++ The panel has a 720x1280 resolution and uses 24 bit RGB per pixel. ++ ++ To compile this driver as a module, choose M here: the module ++ will be called panel-cwu50. + endmenu +diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile +index f0db434747a1..05754c6e38e1 100644 +--- a/drivers/gpu/drm/panel/Makefile ++++ b/drivers/gpu/drm/panel/Makefile +@@ -78,3 +78,4 @@ obj-$(CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA) += panel-truly-nt35597.o + obj-$(CONFIG_DRM_PANEL_VISIONOX_RM69299) += panel-visionox-rm69299.o + obj-$(CONFIG_DRM_PANEL_WIDECHIPS_WS2401) += panel-widechips-ws2401.o + obj-$(CONFIG_DRM_PANEL_XINPENG_XPP055C272) += panel-xinpeng-xpp055c272.o ++obj-$(CONFIG_DRM_PANEL_CWU50) += panel-cwu50.o +diff --git a/drivers/gpu/drm/panel/panel-cwu50.c b/drivers/gpu/drm/panel/panel-cwu50.c +new file mode 100644 +index 000000000000..203fa28d6652 +--- /dev/null ++++ b/drivers/gpu/drm/panel/panel-cwu50.c +@@ -0,0 +1,477 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++struct cwu50 { ++ struct device *dev; ++ struct drm_panel panel; ++ struct regulator *supply; ++ struct gpio_desc *reset_gpio; ++ struct backlight_device *backlight; ++ bool prepared; ++ bool enabled; ++ enum drm_panel_orientation orientation; ++}; ++ ++static const struct drm_display_mode default_mode = { ++ .clock = 62500, ++ .hdisplay = 720, ++ .hsync_start = 720 + 43, ++ .hsync_end = 720+ 43 + 20, ++ .htotal = 720 + 43 + 20 + 20, ++ .vdisplay = 1280, ++ .vsync_start = 1280 + 8, ++ .vsync_end = 1280 + 8+ 2, ++ .vtotal = 1280 + 8 + 2 + 16, ++}; ++ ++static inline struct cwu50 *panel_to_cwu50(struct drm_panel *panel) ++{ ++ return container_of(panel, struct cwu50, panel); ++} ++ ++#define dcs_write_seq(seq...) \ ++({ \ ++ static const u8 d[] = { seq }; \ ++ mipi_dsi_dcs_write_buffer(dsi, d, ARRAY_SIZE(d)); \ ++}) ++ ++static void cwu50_init_sequence(struct cwu50 *ctx) ++{ ++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); ++ ++ dcs_write_seq(0xE1,0x93); ++ dcs_write_seq(0xE2,0x65); ++ dcs_write_seq(0xE3,0xF8); ++ dcs_write_seq(0x70,0x20); ++ dcs_write_seq(0x71,0x13); ++ dcs_write_seq(0x72,0x06); ++ dcs_write_seq(0x75,0x03); ++ dcs_write_seq(0xE0,0x01); ++ dcs_write_seq(0x00,0x00); ++ dcs_write_seq(0x01,0x47);//VCOM0x47 ++ dcs_write_seq(0x03,0x00); ++ dcs_write_seq(0x04,0x4D); ++ dcs_write_seq(0x0C,0x64); ++ dcs_write_seq(0x17,0x00); ++ dcs_write_seq(0x18,0xBF); ++ dcs_write_seq(0x19,0x00); ++ dcs_write_seq(0x1A,0x00); ++ dcs_write_seq(0x1B,0xBF); ++ dcs_write_seq(0x1C,0x00); ++ dcs_write_seq(0x1F,0x7E); ++ dcs_write_seq(0x20,0x24); ++ dcs_write_seq(0x21,0x24); ++ dcs_write_seq(0x22,0x4E); ++ dcs_write_seq(0x24,0xFE); ++ dcs_write_seq(0x37,0x09); ++ dcs_write_seq(0x38,0x04); ++ dcs_write_seq(0x3C,0x76); ++ dcs_write_seq(0x3D,0xFF); ++ dcs_write_seq(0x3E,0xFF); ++ dcs_write_seq(0x3F,0x7F); ++ dcs_write_seq(0x40,0x04);//Dot inversion type ++ dcs_write_seq(0x41,0xA0); ++ dcs_write_seq(0x44,0x11); ++ dcs_write_seq(0x55,0x02); ++ dcs_write_seq(0x56,0x01); ++ dcs_write_seq(0x57,0x49); ++ dcs_write_seq(0x58,0x09); ++ dcs_write_seq(0x59,0x2A); ++ dcs_write_seq(0x5A,0x1A); ++ dcs_write_seq(0x5B,0x1A); ++ dcs_write_seq(0x5D,0x78); ++ dcs_write_seq(0x5E,0x6E); ++ dcs_write_seq(0x5F,0x66); ++ dcs_write_seq(0x60,0x5E); ++ dcs_write_seq(0x61,0x60); ++ dcs_write_seq(0x62,0x54); ++ dcs_write_seq(0x63,0x5C); ++ dcs_write_seq(0x64,0x47); ++ dcs_write_seq(0x65,0x5F); ++ dcs_write_seq(0x66,0x5D); ++ dcs_write_seq(0x67,0x5B); ++ dcs_write_seq(0x68,0x76); ++ dcs_write_seq(0x69,0x61); ++ dcs_write_seq(0x6A,0x63); ++ dcs_write_seq(0x6B,0x50); ++ dcs_write_seq(0x6C,0x45); ++ dcs_write_seq(0x6D,0x34); ++ dcs_write_seq(0x6E,0x1C); ++ dcs_write_seq(0x6F,0x07); ++ dcs_write_seq(0x70,0x78); ++ dcs_write_seq(0x71,0x6E); ++ dcs_write_seq(0x72,0x66); ++ dcs_write_seq(0x73,0x5E); ++ dcs_write_seq(0x74,0x60); ++ dcs_write_seq(0x75,0x54); ++ dcs_write_seq(0x76,0x5C); ++ dcs_write_seq(0x77,0x47); ++ dcs_write_seq(0x78,0x5F); ++ dcs_write_seq(0x79,0x5D); ++ dcs_write_seq(0x7A,0x5B); ++ dcs_write_seq(0x7B,0x76); ++ dcs_write_seq(0x7C,0x61); ++ dcs_write_seq(0x7D,0x63); ++ dcs_write_seq(0x7E,0x50); ++ dcs_write_seq(0x7F,0x45); ++ dcs_write_seq(0x80,0x34); ++ dcs_write_seq(0x81,0x1C); ++ dcs_write_seq(0x82,0x07); ++ dcs_write_seq(0xE0,0x02); ++ dcs_write_seq(0x00,0x44); ++ dcs_write_seq(0x01,0x46); ++ dcs_write_seq(0x02,0x48); ++ dcs_write_seq(0x03,0x4A); ++ dcs_write_seq(0x04,0x40); ++ dcs_write_seq(0x05,0x42); ++ dcs_write_seq(0x06,0x1F); ++ dcs_write_seq(0x07,0x1F); ++ dcs_write_seq(0x08,0x1F); ++ dcs_write_seq(0x09,0x1F); ++ dcs_write_seq(0x0A,0x1F); ++ dcs_write_seq(0x0B,0x1F); ++ dcs_write_seq(0x0C,0x1F); ++ dcs_write_seq(0x0D,0x1F); ++ dcs_write_seq(0x0E,0x1F); ++ dcs_write_seq(0x0F,0x1F); ++ dcs_write_seq(0x10,0x1F); ++ dcs_write_seq(0x11,0x1F); ++ dcs_write_seq(0x12,0x1F); ++ dcs_write_seq(0x13,0x1F); ++ dcs_write_seq(0x14,0x1E); ++ dcs_write_seq(0x15,0x1F); ++ dcs_write_seq(0x16,0x45); ++ dcs_write_seq(0x17,0x47); ++ dcs_write_seq(0x18,0x49); ++ dcs_write_seq(0x19,0x4B); ++ dcs_write_seq(0x1A,0x41); ++ dcs_write_seq(0x1B,0x43); ++ dcs_write_seq(0x1C,0x1F); ++ dcs_write_seq(0x1D,0x1F); ++ dcs_write_seq(0x1E,0x1F); ++ dcs_write_seq(0x1F,0x1F); ++ dcs_write_seq(0x20,0x1F); ++ dcs_write_seq(0x21,0x1F); ++ dcs_write_seq(0x22,0x1F); ++ dcs_write_seq(0x23,0x1F); ++ dcs_write_seq(0x24,0x1F); ++ dcs_write_seq(0x25,0x1F); ++ dcs_write_seq(0x26,0x1F); ++ dcs_write_seq(0x27,0x1F); ++ dcs_write_seq(0x28,0x1F); ++ dcs_write_seq(0x29,0x1F); ++ dcs_write_seq(0x2A,0x1E); ++ dcs_write_seq(0x2B,0x1F); ++ dcs_write_seq(0x2C,0x0B); ++ dcs_write_seq(0x2D,0x09); ++ dcs_write_seq(0x2E,0x07); ++ dcs_write_seq(0x2F,0x05); ++ dcs_write_seq(0x30,0x03); ++ dcs_write_seq(0x31,0x01); ++ dcs_write_seq(0x32,0x1F); ++ dcs_write_seq(0x33,0x1F); ++ dcs_write_seq(0x34,0x1F); ++ dcs_write_seq(0x35,0x1F); ++ dcs_write_seq(0x36,0x1F); ++ dcs_write_seq(0x37,0x1F); ++ dcs_write_seq(0x38,0x1F); ++ dcs_write_seq(0x39,0x1F); ++ dcs_write_seq(0x3A,0x1F); ++ dcs_write_seq(0x3B,0x1F); ++ dcs_write_seq(0x3C,0x1F); ++ dcs_write_seq(0x3D,0x1F); ++ dcs_write_seq(0x3E,0x1F); ++ dcs_write_seq(0x3F,0x1F); ++ dcs_write_seq(0x40,0x1F); ++ dcs_write_seq(0x41,0x1E); ++ dcs_write_seq(0x42,0x0A); ++ dcs_write_seq(0x43,0x08); ++ dcs_write_seq(0x44,0x06); ++ dcs_write_seq(0x45,0x04); ++ dcs_write_seq(0x46,0x02); ++ dcs_write_seq(0x47,0x00); ++ dcs_write_seq(0x48,0x1F); ++ dcs_write_seq(0x49,0x1F); ++ dcs_write_seq(0x4A,0x1F); ++ dcs_write_seq(0x4B,0x1F); ++ dcs_write_seq(0x4C,0x1F); ++ dcs_write_seq(0x4D,0x1F); ++ dcs_write_seq(0x4E,0x1F); ++ dcs_write_seq(0x4F,0x1F); ++ dcs_write_seq(0x50,0x1F); ++ dcs_write_seq(0x51,0x1F); ++ dcs_write_seq(0x52,0x1F); ++ dcs_write_seq(0x53,0x1F); ++ dcs_write_seq(0x54,0x1F); ++ dcs_write_seq(0x55,0x1F); ++ dcs_write_seq(0x56,0x1F); ++ dcs_write_seq(0x57,0x1E); ++ dcs_write_seq(0x58,0x40); ++ dcs_write_seq(0x59,0x00); ++ dcs_write_seq(0x5A,0x00); ++ dcs_write_seq(0x5B,0x30); ++ dcs_write_seq(0x5C,0x02); ++ dcs_write_seq(0x5D,0x40); ++ dcs_write_seq(0x5E,0x01); ++ dcs_write_seq(0x5F,0x02); ++ dcs_write_seq(0x60,0x00); ++ dcs_write_seq(0x61,0x01); ++ dcs_write_seq(0x62,0x02); ++ dcs_write_seq(0x63,0x65); ++ dcs_write_seq(0x64,0x66); ++ dcs_write_seq(0x65,0x00); ++ dcs_write_seq(0x66,0x00); ++ dcs_write_seq(0x67,0x74); ++ dcs_write_seq(0x68,0x06); ++ dcs_write_seq(0x69,0x65); ++ dcs_write_seq(0x6A,0x66); ++ dcs_write_seq(0x6B,0x10); ++ dcs_write_seq(0x6C,0x00); ++ dcs_write_seq(0x6D,0x04); ++ dcs_write_seq(0x6E,0x04); ++ dcs_write_seq(0x6F,0x88); ++ dcs_write_seq(0x70,0x00); ++ dcs_write_seq(0x71,0x00); ++ dcs_write_seq(0x72,0x06); ++ dcs_write_seq(0x73,0x7B); ++ dcs_write_seq(0x74,0x00); ++ dcs_write_seq(0x75,0x87); ++ dcs_write_seq(0x76,0x00); ++ dcs_write_seq(0x77,0x5D); ++ dcs_write_seq(0x78,0x17); ++ dcs_write_seq(0x79,0x1F); ++ dcs_write_seq(0x7A,0x00); ++ dcs_write_seq(0x7B,0x00); ++ dcs_write_seq(0x7C,0x00); ++ dcs_write_seq(0x7D,0x03); ++ dcs_write_seq(0x7E,0x7B); ++ dcs_write_seq(0xE0,0x04); ++ dcs_write_seq(0x09,0x10); ++ dcs_write_seq(0xE0,0x00); ++ dcs_write_seq(0xE6,0x02); ++ dcs_write_seq(0xE7,0x02); ++ dcs_write_seq(0x11);// SLPOUT ++ msleep (120); ++ dcs_write_seq(0x29);// DSPON ++ msleep (20); ++ dcs_write_seq(0x35,0x00); ++} ++ ++static int cwu50_disable(struct drm_panel *panel) ++{ ++ struct cwu50 *ctx = panel_to_cwu50(panel); ++ ++ if (!ctx->enabled) ++ return 0; ++ ++ backlight_disable(ctx->backlight); ++ ++ ctx->enabled = false; ++ ++ return 0; ++} ++ ++static int cwu50_unprepare(struct drm_panel *panel) ++{ ++ ++#if 0 ++ if (!ctx->prepared) ++ return 0; ++ ++ ret = mipi_dsi_dcs_set_display_off(dsi); ++ if (ret) { ++ dev_err(ctx->dev, "failed to turn display off (%d)\n", ret); ++ return ret; ++ } ++ ++ ret = mipi_dsi_dcs_enter_sleep_mode(dsi); ++ if (ret) { ++ dev_err(ctx->dev, "failed to enter sleep mode (%d)\n", ret); ++ return ret; ++ } ++ msleep(120); ++ ++ gpiod_set_value_cansleep(ctx->reset_gpio, 0); ++ msleep(5); ++ ++ ctx->prepared = false; ++#endif ++ ++ return 0; ++} ++ ++static int cwu50_prepare(struct drm_panel *panel) ++{ ++ struct cwu50 *ctx = panel_to_cwu50(panel); ++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev); ++ int ret; ++ ++ if (ctx->prepared) ++ return 0; ++ ++ gpiod_set_value_cansleep(ctx->reset_gpio, 0); ++ msleep(10); ++ gpiod_set_value_cansleep(ctx->reset_gpio, 1); ++ msleep(120); ++ ++ /* Enabe tearing mode: send TE (tearing effect) at VBLANK */ ++ ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); ++ if (ret) { ++ dev_err(ctx->dev, "failed to enable vblank TE (%d)\n", ret); ++ return ret; ++ } ++ /* Exit sleep mode and power on */ ++ ++ cwu50_init_sequence(ctx); ++ ++ ret = mipi_dsi_dcs_exit_sleep_mode(dsi); ++ if (ret) { ++ dev_err(ctx->dev, "failed to exit sleep mode (%d)\n", ret); ++ return ret; ++ } ++ msleep(120); ++ ++ ret = mipi_dsi_dcs_set_display_on(dsi); ++ if (ret) { ++ dev_err(ctx->dev, "failed to turn display on (%d)\n", ret); ++ return ret; ++ } ++ msleep(20); ++ ++ ctx->prepared = true; ++ ++ return 0; ++} ++ ++static int cwu50_enable(struct drm_panel *panel) ++{ ++ struct cwu50 *ctx = panel_to_cwu50(panel); ++ ++ if (ctx->enabled) ++ return 0; ++ ++ backlight_enable(ctx->backlight); ++ ++ ctx->enabled = true; ++ ++ return 0; ++} ++ ++static int cwu50_get_modes(struct drm_panel *panel, struct drm_connector *connector) ++{ ++ struct cwu50 *ctx = panel_to_cwu50(panel); ++ struct drm_display_mode *mode; ++ ++ mode = drm_mode_duplicate(connector->dev, &default_mode); ++ if (!mode) { ++ dev_err(panel->dev, "bad mode or failed to add mode\n"); ++ return -EINVAL; ++ } ++ drm_mode_set_name(mode); ++ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED; ++ ++ connector->display_info.width_mm = mode->width_mm; ++ connector->display_info.height_mm = mode->height_mm; ++ ++ /* set up connector's "panel orientation" property */ ++ drm_connector_set_panel_orientation(connector, ctx->orientation); ++ ++ drm_mode_probed_add(connector, mode); ++ ++ return 1; /* Number of modes */ ++} ++ ++static const struct drm_panel_funcs cwu50_drm_funcs = { ++ .disable = cwu50_disable, ++ .unprepare = cwu50_unprepare, ++ .prepare = cwu50_prepare, ++ .enable = cwu50_enable, ++ .get_modes = cwu50_get_modes, ++}; ++ ++static int cwu50_probe(struct mipi_dsi_device *dsi) ++{ ++ struct device *dev = &dsi->dev; ++ struct cwu50 *ctx; ++ int ret; ++ ++ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); ++ if (!ctx) ++ return -ENOMEM; ++ ++ mipi_dsi_set_drvdata(dsi, ctx); ++ ctx->dev = dev; ++ ++ dsi->lanes = 4; ++ dsi->format = MIPI_DSI_FMT_RGB888; ++ dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST | MIPI_DSI_MODE_VIDEO_SYNC_PULSE; ++ ++ ctx->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); ++ if (IS_ERR(ctx->reset_gpio)) { ++ ret = PTR_ERR(ctx->reset_gpio); ++ if (ret != -EPROBE_DEFER) ++ dev_err(dev, "failed to request GPIO (%d)\n", ret); ++ return ret; ++ } ++ ++ ctx->backlight = devm_of_find_backlight(dev); ++ if (IS_ERR(ctx->backlight)) { ++ dev_err(ctx->dev, "devm_of_find_backlight"); ++ return PTR_ERR(ctx->backlight); ++ } ++ ++ ret = of_drm_get_panel_orientation(dev->of_node, &ctx->orientation); ++ if (ret) { ++ dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, ret); ++ return ret; ++ } ++ ++ drm_panel_init(&ctx->panel, dev, &cwu50_drm_funcs, DRM_MODE_CONNECTOR_DSI); ++ ++ drm_panel_add(&ctx->panel); ++ ++ ret = mipi_dsi_attach(dsi); ++ if (ret < 0) { ++ dev_err(dev, "mipi_dsi_attach() failed: %d\n", ret); ++ drm_panel_remove(&ctx->panel); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void cwu50_remove(struct mipi_dsi_device *dsi) ++{ ++ struct cwu50 *ctx = mipi_dsi_get_drvdata(dsi); ++ ++ mipi_dsi_detach(dsi); ++ drm_panel_remove(&ctx->panel); ++} ++ ++static const struct of_device_id cwu50_of_match[] = { ++ { .compatible = "cw,cwu50" }, ++ { } ++}; ++MODULE_DEVICE_TABLE(of, cwu50_of_match); ++ ++static struct mipi_dsi_driver cwu50_driver = { ++ .probe = cwu50_probe, ++ .remove = cwu50_remove, ++ .driver = { ++ .name = "panel-cwu50", ++ .of_match_table = cwu50_of_match, ++ }, ++}; ++module_mipi_dsi_driver(cwu50_driver); ++ ++MODULE_DESCRIPTION("DRM Driver for cwu50 MIPI DSI panel"); ++MODULE_LICENSE("GPL v2"); +-- +2.53.0 + diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0003-power-axp20x_battery-implement-calibration.patch b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0003-power-axp20x_battery-implement-calibration.patch new file mode 100644 index 000000000..d2062b09e --- /dev/null +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/0003-power-axp20x_battery-implement-calibration.patch @@ -0,0 +1,247 @@ +From adc1869bbc73b30f346846f6c083cb130aca5147 Mon Sep 17 00:00:00 2001 +From: ayakael +Date: Sun, 8 Feb 2026 09:18:08 -0500 +Subject: [PATCH 3/3] power: axp20x_battery: implement calibration + +--- + drivers/power/supply/axp20x_ac_power.c | 6 +- + drivers/power/supply/axp20x_battery.c | 106 ++++++++++++++++++++++++- + 2 files changed, 106 insertions(+), 6 deletions(-) + +diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c +index 57e50208d537..5d7c0d7ea16b 100644 +--- a/drivers/power/supply/axp20x_ac_power.c ++++ b/drivers/power/supply/axp20x_ac_power.c +@@ -13,7 +13,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -53,6 +52,9 @@ static irqreturn_t axp20x_ac_power_irq(int irq, void *devid) + { + struct axp20x_ac_power *power = devid; + ++ regmap_update_bits(power->regmap, AXP20X_VBUS_IPSOUT_MGMT, 0x03, 0x00); ++ regmap_update_bits(power->regmap, AXP20X_VBUS_IPSOUT_MGMT, 0x03, 0x03); ++ + power_supply_changed(power->supply); + + return IRQ_HANDLED; +@@ -335,7 +337,7 @@ static int axp20x_ac_power_probe(struct platform_device *pdev) + return -EINVAL; + } + +- axp_data = of_device_get_match_data(&pdev->dev); ++ axp_data = device_get_match_data(&pdev->dev); + + power = devm_kzalloc(&pdev->dev, + struct_size(power, irqs, axp_data->num_irq_names), +diff --git a/drivers/power/supply/axp20x_battery.c b/drivers/power/supply/axp20x_battery.c +index 9106077c0dbb..7f9a7059f17d 100644 +--- a/drivers/power/supply/axp20x_battery.c ++++ b/drivers/power/supply/axp20x_battery.c +@@ -22,7 +22,6 @@ + #include + #include + #include +-#include + #include + #include + #include +@@ -56,6 +55,10 @@ + + #define AXP20X_V_OFF_MASK GENMASK(2, 0) + ++#define AXP228_FULL_CAPACITY_CALIBRATE_EN BIT(5) ++#define AXP228_CAPACITY_CALIBRATE BIT(4) ++#define AXP228_CALIBRATE_MASK (BIT(4) | BIT(5)) ++ + struct axp20x_batt_ps; + + struct axp_data { +@@ -75,6 +78,9 @@ struct axp20x_batt_ps { + struct iio_channel *batt_v; + /* Maximum constant charge current */ + unsigned int max_ccc; ++ int energy_full_design; ++ int current_now; ++ int voltage_now; + const struct axp_data *data; + }; + +@@ -276,6 +282,7 @@ static int axp20x_battery_get_prop(struct power_supply *psy, + + /* IIO framework gives mA but Power Supply framework gives uA */ + val->intval *= 1000; ++ axp20x_batt->current_now = val->intval; + break; + + case POWER_SUPPLY_PROP_CAPACITY: +@@ -324,8 +331,60 @@ static int axp20x_battery_get_prop(struct power_supply *psy, + + /* IIO framework gives mV but Power Supply framework gives uV */ + val->intval *= 1000; ++ axp20x_batt->current_now = val->intval; + break; + ++ case POWER_SUPPLY_PROP_ENERGY_FULL: ++ case POWER_SUPPLY_PROP_ENERGY_NOW: ++ case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: ++ /* When no battery is present, return 0 */ ++ ret = regmap_read(axp20x_batt->regmap, AXP20X_PWR_OP_MODE, ++ ®); ++ if (ret) ++ return ret; ++ ++ if (!(reg & AXP20X_PWR_OP_BATT_PRESENT)) { ++ val->intval = 0; ++ return 0; ++ } ++ ++ if(psp == POWER_SUPPLY_PROP_ENERGY_FULL) { ++ // TODO ++ val->intval = axp20x_batt->energy_full_design; ++ return 0; ++ } ++ ++ if(psp == POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN) { ++ val->intval = axp20x_batt->energy_full_design; ++ return 0; ++ } ++ ++ ret = regmap_read(axp20x_batt->regmap, AXP20X_FG_RES, ®); ++ if (ret) ++ return ret; ++ ++ if (axp20x_batt->data->has_fg_valid && !(reg & AXP22X_FG_VALID)) ++ return -EINVAL; ++ ++ val1 = reg & AXP209_FG_PERCENT; ++ val1 = max(min(val1, 100), 0); ++ val->intval = (val1 * ((long long int)axp20x_batt->energy_full_design)) / 100; ++ break; ++ ++ case POWER_SUPPLY_PROP_CALIBRATE: ++ // report both calibrate enable flag and calibration status ++ ret = regmap_read(axp20x_batt->regmap, AXP20X_CC_CTRL, ®); ++ if (ret) ++ return ret; ++ val1 = reg & AXP228_CALIBRATE_MASK; ++ val->intval = val1; ++ break; ++ ++ case POWER_SUPPLY_PROP_POWER_NOW: ++ val->intval = (axp20x_batt->voltage_now / 10000) * axp20x_batt->current_now; ++ val->intval = val->intval / 100; // uW ++ break; ++ + default: + return -EINVAL; + } +@@ -454,6 +513,7 @@ static int axp20x_battery_set_prop(struct power_supply *psy, + const union power_supply_propval *val) + { + struct axp20x_batt_ps *axp20x_batt = power_supply_get_drvdata(psy); ++ int val1; + + switch (psp) { + case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN: +@@ -468,6 +528,16 @@ static int axp20x_battery_set_prop(struct power_supply *psy, + case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX: + return axp20x_set_max_constant_charge_current(axp20x_batt, + val->intval); ++ ++ case POWER_SUPPLY_PROP_CALIBRATE: ++ if (val->intval) { ++ // enable calibrate ++ val1 = AXP228_FULL_CAPACITY_CALIBRATE_EN | AXP228_CAPACITY_CALIBRATE; ++ } else { ++ // disable calibrate ++ val1 = 0; ++ } ++ return regmap_update_bits(axp20x_batt->regmap, AXP20X_CC_CTRL, AXP228_CALIBRATE_MASK, val1); + case POWER_SUPPLY_PROP_STATUS: + switch (val->intval) { + case POWER_SUPPLY_STATUS_CHARGING: +@@ -497,6 +567,11 @@ static enum power_supply_property axp20x_battery_props[] = { + POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, + POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN, + POWER_SUPPLY_PROP_CAPACITY, ++ POWER_SUPPLY_PROP_ENERGY_FULL, ++ POWER_SUPPLY_PROP_ENERGY_NOW, ++ POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CALIBRATE, ++ POWER_SUPPLY_PROP_POWER_NOW, + }; + + static int axp20x_battery_prop_writeable(struct power_supply *psy, +@@ -506,7 +581,8 @@ static int axp20x_battery_prop_writeable(struct power_supply *psy, + psp == POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN || + psp == POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN || + psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT || +- psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX; ++ psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX || ++ psp == POWER_SUPPLY_PROP_CALIBRATE; + } + + static const struct power_supply_desc axp20x_batt_ps_desc = { +@@ -602,7 +678,7 @@ static int axp20x_power_probe(struct platform_device *pdev) + psy_cfg.drv_data = axp20x_batt; + psy_cfg.of_node = pdev->dev.of_node; + +- axp20x_batt->data = (struct axp_data *)of_device_get_match_data(dev); ++ axp20x_batt->data = (struct axp_data *)device_get_match_data(dev); + + axp20x_batt->batt = devm_power_supply_register(&pdev->dev, + &axp20x_batt_ps_desc, +@@ -616,6 +692,7 @@ static int axp20x_power_probe(struct platform_device *pdev) + if (!power_supply_get_battery_info(axp20x_batt->batt, &info)) { + int vmin = info->voltage_min_design_uv; + int ccc = info->constant_charge_current_max_ua; ++ int cfd = info->charge_full_design_uah; + + if (vmin > 0 && axp20x_set_voltage_min_design(axp20x_batt, + vmin)) +@@ -633,7 +710,22 @@ static int axp20x_power_probe(struct platform_device *pdev) + axp20x_batt->max_ccc = ccc; + axp20x_set_constant_charge_current(axp20x_batt, ccc); + } +- } ++ ++ ++ axp20x_batt->energy_full_design = info->energy_full_design_uwh; ++ // tell pmic about our battery ++ if (cfd) { ++ // [14:8], [7:0], cfd = Value * 1.456mAh ++ cfd = cfd / 1456; ++ regmap_update_bits(axp20x_batt->regmap, AXP288_FG_DES_CAP0_REG, 0xff, cfd & 0xff); ++ regmap_update_bits(axp20x_batt->regmap, AXP288_FG_DES_CAP1_REG, 0xff, BIT(7) | ((cfd >> 8) & 0xff)); ++ } else { ++ dev_warn(axp20x_batt->dev, "charge full design is not set"); ++ } ++ } else { ++ axp20x_batt->energy_full_design = 8000000; ++ dev_warn(axp20x_batt->dev, "energy full design is not set, default to %d\n", axp20x_batt->energy_full_design); ++ } + + /* + * Update max CCC to a valid value if battery info is present or set it +@@ -642,6 +734,12 @@ static int axp20x_power_probe(struct platform_device *pdev) + axp20x_get_constant_charge_current(axp20x_batt, + &axp20x_batt->max_ccc); + ++ regmap_update_bits(axp20x_batt->regmap, AXP20X_VBUS_IPSOUT_MGMT, 0x03, 0x03); ++ regmap_update_bits(axp20x_batt->regmap, AXP20X_OFF_CTRL, 0x08, 0x08); ++ regmap_update_bits(axp20x_batt->regmap, AXP20X_CHRG_CTRL2, 0x30, 0x20); ++ regmap_update_bits(axp20x_batt->regmap, AXP20X_PEK_KEY, 0x0f, 0x0b); ++ regmap_update_bits(axp20x_batt->regmap, AXP20X_GPIO0_CTRL, 0x07, 0x00); ++ + return 0; + } + +-- +2.53.0 + diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/APKBUILD b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/APKBUILD index bf55b3aab..5c432825c 100644 --- a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/APKBUILD +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/APKBUILD @@ -1,17 +1,17 @@ +# Archived: -dev packages x86_64 binaries in aarch64 package which makes akms part of device-clockworkpi-uconsole-radxa-cm5 fail when built on aarch64 # Reference: # Kernel config based on: arch/arm64/configs/rockchip_linux_defconfig maintainer="Antoine Martin (ayakael) " pkgname=linux-clockworkpi-uconsole-radxa-cm5 pkgver=6.1.115 pkgrel=2 -pkgdesc="Radxa kernel fork" +pkgdesc="Radxa kernel fork with uConsole drivers" arch="aarch64" _carch="arm64" -_flavor="radxa" +_flavor="clockworkpi-uconsole-radxa-cm5" url="https://kernel.org" license="GPL-2.0-only" options="!strip !check !tracedeps pmb:cross-native" -subpackages="$pkgname-dev:_dev:$CBUILD_ARCH" makedepends=" bash bc @@ -26,57 +26,49 @@ makedepends=" openssl-dev perl xz + zstd " # Source _repository="kernel" -_commit="74729d7c051026f99138b6e0e60d580c0bf226db" +# from linux-6.1-stan-rkr5.1 +_commit="8582469f117fdfd5d1ab88fa7e4e15c3b714bf24" +_dtso_commit="c2204834e1d7d0acfd64e1b7874d432bc142f1a4" _config="config-$_flavor.$arch" source=" $pkgname-$_commit.tar.gz::https://github.com/radxa/$_repository/archive/$_commit.tar.gz + radxa-cm5-uconsole-$_dtso_commit.tar.gz::https://github.com/dev-null2019/radxa-cm5-uconsole/archive/$_dtso_commit.tar.gz $_config + 0001-video-backlight-Add-OCP8178-backlight-driver.patch + 0002-drm-panel-add-clockwork-cwu50.patch + 0003-power-axp20x_battery-implement-calibration.patch postmarketos-defconfig.patch " +replaces="linux-radxa=$pkgver-r$pkgrel" builddir="$srcdir/$_repository-$_commit" _builddir="$srcdir"/build-$_flavor.$CARCH +_dtsodir="$srcdir"/radxa-cm5-uconsole-$_dtso_commit/devicetree_overlays prepare() { default_prepare - - mkdir -p "$_builddir" - cp "$srcdir/config-$_flavor.$CARCH" "$_builddir"/.config - - # copies missing library - mkdir -p "$_builddir"/drivers/gpu/arm/bifrost/ - cp "$builddir"/drivers/gpu/arm/bifrost/mali_csffw.bin "$_builddir"/drivers/gpu/arm/bifrost/mali_csffw.bin - - # remove and regenerate localversion - rm -f localversion* - echo "-$pkgrel-$_flavor" > "$_builddir"/localversion-postmarketos - - make -C "$builddir" \ - O="$_builddir" \ - ARCH="$_carch" \ - olddefconfig + cp "$srcdir/config-$_flavor.$CARCH" .config } build() { unset LDFLAGS - cd "$_builddir" - local _kver=$(make kernelversion) - if [ "$_kver" != "$pkgver" ]; then - error "Version in Makefile ($_kver) does not correspond with pkgver ($pkgver)" - return 1 - fi make ARCH="$_carch" CC="${CC:-gcc}" \ KBUILD_BUILD_VERSION="$((pkgrel + 1))-postmarketOS" + + # generate dtbo for uconsole + for dts in "$_dtsodir"/*.dts; do + cpp -nostdinc -I "$_dtsodir" -I arch -undef -x assembler-with-cpp $dts $dts.preprocessed + dtc -O dtb -o ${dts/.dts/.dtbo} $dts.preprocessed + done } package() { - downstreamkernel_package "$_builddir" "$pkgdir" "$_carch" "$_flavor" + downstreamkernel_package "$builddir" "$pkgdir" "$_carch" "$_flavor" - cd "$_builddir" - mkdir -p "$pkgdir"/boot make modules_install dtbs_install \ ARCH="$_carch" \ INSTALL_PATH="$pkgdir"/boot \ @@ -84,61 +76,16 @@ package() { INSTALL_MOD_STRIP=1 \ INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs rm -f "$pkgdir"/lib/modules/*/build "$pkgdir"/lib/modules/*/source + + # merge dtbos with soc dtb for uconsole + fdtoverlay -i "$builddir"/arch/arm64/boot/dts/rockchip/rk3588s-radxa-cm5-rpi-cm4-io.dtb "$_dtsodir"/*.dtbo -o "$pkgdir"/boot/dtbs/rockchip/rk3588s-radxa-cm5-uconsole.dtb } - -_dev() { - cd "$_builddir" - local _abi_release="$(make -s kernelrelease)" - # copy the only the parts that we really need for build 3rd party - # kernel modules and install those as /usr/src/linux-headers, - # simlar to what ubuntu does - # - # this way you dont need to install the 300-400 kernel sources to - # build a tiny kernel module - # - pkgdesc="Headers and script for third party modules for $_flavor kernel" - depends="$_depends_dev" - - local dir="$subpkgdir"/usr/src/linux-headers-$_abi_release - - # first we import config, run prepare to set up for building - # external modules, and create the scripts - mkdir -p "$dir" - cp "$_builddir"/.config "$dir"/.config - echo "-$pkgrel-$_flavor" > "$dir"/localversion-postmarketos - - make -j1 -C "$builddir" ARCH="$_carch" O="$dir" \ - syncconfig prepare modules_prepare scripts - - # remove the stuff that points to real sources. we want 3rd party - # modules to believe this is the sources - rm "$dir"/Makefile "$dir"/source - - # copy the needed stuff from real sources - # - # this is taken from ubuntu kernel build script - # http://kernel.ubuntu.com/git/ubuntu/ubuntu-zesty.git/tree/debian/rules.d/3-binary-indep.mk - cd "$builddir" - find . -path './include/*' -prune \ - -o -path './scripts/*' -prune -o -type f \ - \( -name 'Makefile*' -o -name 'Kconfig*' -o -name 'Kbuild*' -o \ - -name '*.sh' -o -name '*.pl' -o -name '*.lds' \) \ - -print | cpio -pdm "$dir" - - cp -a scripts include "$dir" - find $(find arch -name include -type d -print) -type f \ - | cpio -pdm "$dir" - - install -Dm644 "$_builddir"/Module.symvers \ - "$dir"/Module.symvers - - mkdir -p "$subpkgdir"/lib/modules/$_abi_release - ln -sf /usr/src/linux-headers-$_abi_release \ - "$subpkgdir"/lib/modules/$_abi_release/build -} - sha512sums=" -3c268ca3eaaa6bbffce9759f963ec6030a4a4d2c3b8ed5e130ca5c29d25bad78e43faa575fbc6c1f90ffdbffea39db6a569f073d1917547a4bfbe7b8bf506578 linux-radxa-74729d7c051026f99138b6e0e60d580c0bf226db.tar.gz -e23a8fb644bca3e18c399112b1f0f569ddcda37d1cceb2fdef82ef97993071ee085c16c35898a22222988876af5456bc422bb247d501ff6725aa7c6cc7367522 config-radxa.aarch64 -a9ec1018a798ee26cb864933dd3aa1d460e6e40a30c55cb0fdd56806031f3b2755d3823d6c30f7bcc1d2bb71d3cabe7a409f46a2e5ff78dc9ff5a31108709758 postmarketos-defconfig.patch +c59852f84aa505f85fd1bd30e36583aad506ae641072b2b8c69f5bb889e80d7fc6612411a912be07ae4d81b031aa3a2ede6b63121c69e0872807f8f6903abde9 linux-clockworkpi-uconsole-radxa-cm5-8582469f117fdfd5d1ab88fa7e4e15c3b714bf24.tar.gz +a15eb74d9db9114022e96ba04542d18350cf6d637c5efa49f4a5a65c33c5fd20a7997095a049a561fb7aac767a299f367489c5a342138a5259cc32ebb6152384 radxa-cm5-uconsole-c2204834e1d7d0acfd64e1b7874d432bc142f1a4.tar.gz +51da11849ccc66a133a51ea40157e22b8beb9e4e4f2bab7eb8aa6afd859b7bd4638c332dacc97e66671e1a78e7ffd497300ccc53627e0c47af50b6e34f3be8b5 config-clockworkpi-uconsole-radxa-cm5.aarch64 +41ee267962fc9f5580997bfaabaafd782f42995599b127df30794a7b5147b5b7bf787de6206642480c07c7716fe494bc135f24a9bcf406ab57a73af6292fc915 0001-video-backlight-Add-OCP8178-backlight-driver.patch +e9402b88083cc2d3af6c471e36e00e65e97d88cde447ce2f59c07bf29fc712bfdeae6d6d3b503115763b57ba2ac00e827654bc24a91b1cb85b575fdd0db8f5be 0002-drm-panel-add-clockwork-cwu50.patch +f3ce23b013ed7bfbf51849ec683fad2f53ea5e7e5907bbd7f60f56c630dc3ec7d4c595fbb217019e100a053dcdbb731da1f376db5fc841562afa2059b24d7d0a 0003-power-axp20x_battery-implement-calibration.patch +2c9c3649e621841ea067dba5df1deca721c0800ee465356d4f1d71825af081cdbfaa6e88e463a2c48682ac0f3e7ed3e9b8373ee87f5f00d6aa9484be0ab82a87 postmarketos-defconfig.patch " diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-radxa.aarch64 b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-clockworkpi-uconsole-radxa-cm5.aarch64 similarity index 99% rename from device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-radxa.aarch64 rename to device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-clockworkpi-uconsole-radxa-cm5.aarch64 index 48ac35c3e..a24532682 100644 --- a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-radxa.aarch64 +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/config-clockworkpi-uconsole-radxa-cm5.aarch64 @@ -2,14 +2,14 @@ # Automatically generated file; DO NOT EDIT. # Linux/arm64 6.1.115 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 14.3.0) 14.3.0" +CONFIG_CC_VERSION_TEXT="aarch64-alpine-linux-musl-gcc (Alpine 15.2.0) 15.2.0" CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=140300 +CONFIG_GCC_VERSION=150200 CONFIG_CLANG_VERSION=0 CONFIG_AS_IS_GNU=y -CONFIG_AS_VERSION=24200 +CONFIG_AS_VERSION=24501 CONFIG_LD_IS_BFD=y -CONFIG_LD_VERSION=24200 +CONFIG_LD_VERSION=24501 CONFIG_LLD_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y @@ -739,10 +739,11 @@ CONFIG_MODVERSIONS=y CONFIG_ASM_MODVERSIONS=y CONFIG_MODULE_SRCVERSION_ALL=y # CONFIG_MODULE_SIG is not set -CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_NONE is not set # CONFIG_MODULE_COMPRESS_GZIP is not set # CONFIG_MODULE_COMPRESS_XZ is not set -# CONFIG_MODULE_COMPRESS_ZSTD is not set +CONFIG_MODULE_COMPRESS=y +CONFIG_MODULE_COMPRESS_ZSTD=y # CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set CONFIG_MODPROBE_PATH="/sbin/modprobe" # CONFIG_TRIM_UNUSED_KSYMS is not set @@ -2398,7 +2399,7 @@ CONFIG_BCACHE=m # CONFIG_BCACHE_CLOSURES_DEBUG is not set # CONFIG_BCACHE_ASYNC_REGISTRATION is not set CONFIG_BLK_DEV_DM_BUILTIN=y -CONFIG_BLK_DEV_DM=m +CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m # CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set @@ -2425,6 +2426,7 @@ CONFIG_DM_MULTIPATH_ST=m # CONFIG_DM_MULTIPATH_IOA is not set CONFIG_DM_DELAY=m # CONFIG_DM_DUST is not set +# CONFIG_DM_INIT is not set # CONFIG_DM_UEVENT is not set CONFIG_DM_FLAKEY=m CONFIG_DM_VERITY=m @@ -2883,8 +2885,11 @@ CONFIG_BRCMFMAC_PROTO_BCDC=y CONFIG_BRCMFMAC_SDIO=y # CONFIG_BRCMFMAC_USB is not set # CONFIG_BRCMFMAC_PCIE is not set +# CONFIG_BRCMFMAC_BT_SHARED_SDIO is not set +# CONFIG_INFFMAC_BT_SHARED_SDIO is not set # CONFIG_BRCM_TRACING is not set # CONFIG_BRCMDBG is not set +# CONFIG_BRCMFMAC_PCIE_BARWIN_SZ is not set CONFIG_WLAN_VENDOR_CISCO=y CONFIG_WLAN_VENDOR_INTEL=y # CONFIG_IPW2100 is not set @@ -3067,7 +3072,7 @@ CONFIG_INPUT_FF_MEMLESS=y # # CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_JOYDEV is not set -CONFIG_INPUT_EVDEV=y +CONFIG_INPUT_EVDEV=m # CONFIG_INPUT_EVBUG is not set # @@ -3281,6 +3286,7 @@ CONFIG_INPUT_MISC=y # CONFIG_INPUT_YEALINK is not set # CONFIG_INPUT_CM109 is not set # CONFIG_INPUT_REGULATOR_HAPTIC is not set +CONFIG_INPUT_AXP20X_PEK=m CONFIG_INPUT_UINPUT=y # CONFIG_INPUT_PCF8574 is not set # CONFIG_INPUT_PWM_BEEPER is not set @@ -3383,7 +3389,7 @@ CONFIG_SERIAL_MCTRL_GPIO=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_N_GSM is not set # CONFIG_NOZOMI is not set -CONFIG_NULL_TTY=y +CONFIG_NULL_TTY=m # CONFIG_HVC_DCC is not set # CONFIG_RPMSG_TTY is not set CONFIG_SERIAL_DEV_BUS=y @@ -3606,6 +3612,7 @@ CONFIG_PINMUX=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_AXP209=m # CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set @@ -3780,6 +3787,9 @@ CONFIG_BATTERY_SBS=y # CONFIG_CHARGER_SBS is not set # CONFIG_MANAGER_SBS is not set # CONFIG_BATTERY_BQ27XXX is not set +CONFIG_CHARGER_AXP20X=m +CONFIG_BATTERY_AXP20X=m +CONFIG_AXP20X_POWER=m # CONFIG_BATTERY_MAX17040 is not set # CONFIG_BATTERY_MAX17042 is not set # CONFIG_BATTERY_MAX1721X is not set @@ -4064,7 +4074,8 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_ATMEL_HLCDC is not set # CONFIG_MFD_BCM590XX is not set # CONFIG_MFD_BD9571MWV is not set -# CONFIG_MFD_AXP20X_I2C is not set +CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X_I2C=y # CONFIG_MFD_MADERA is not set # CONFIG_PMIC_DA903X is not set # CONFIG_MFD_DA9052_SPI is not set @@ -4199,6 +4210,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_ACT8865=y # CONFIG_REGULATOR_AD5398 is not set # CONFIG_REGULATOR_ARM_SCMI is not set +CONFIG_REGULATOR_AXP20X=y # CONFIG_REGULATOR_DA9121 is not set # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_DA9211 is not set @@ -5260,6 +5272,7 @@ CONFIG_DRM_PANEL_RASPITS_TC358762=y # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set +CONFIG_DRM_PANEL_CWU50=m # end of Display Panels CONFIG_DRM_BRIDGE=y @@ -5312,7 +5325,7 @@ CONFIG_DRM_ANALOGIX_DP=y # CONFIG_DRM_CDNS_MHDP8546 is not set CONFIG_DRM_DW_HDMI=y # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set -CONFIG_DRM_DW_HDMI_I2S_AUDIO=y +CONFIG_DRM_DW_HDMI_I2S_AUDIO=m # CONFIG_DRM_DW_HDMI_GP_AUDIO is not set CONFIG_DRM_DW_HDMI_CEC=y CONFIG_DRM_DW_MIPI_DSI=y @@ -5505,6 +5518,7 @@ CONFIG_BACKLIGHT_PWM=y # CONFIG_BACKLIGHT_BD6107 is not set # CONFIG_BACKLIGHT_ARCXCNN is not set # CONFIG_BACKLIGHT_LED is not set +CONFIG_BACKLIGHT_OCP8178=m # end of Backlight & LCD device support # @@ -5574,21 +5588,21 @@ CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y # CONFIG_LOGO is not set # end of Graphics support -CONFIG_SOUND=y -CONFIG_SND=y -CONFIG_SND_TIMER=y -CONFIG_SND_PCM=y +CONFIG_SOUND=m +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m CONFIG_SND_PCM_ELD=y CONFIG_SND_PCM_IEC958=y -CONFIG_SND_DMAENGINE_PCM=y -CONFIG_SND_HWDEP=y -CONFIG_SND_SEQ_DEVICE=y -CONFIG_SND_RAWMIDI=y +CONFIG_SND_DMAENGINE_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_SEQ_DEVICE=m +CONFIG_SND_RAWMIDI=m CONFIG_SND_JACK=y CONFIG_SND_JACK_INPUT_DEV=y # CONFIG_SND_OSSEMUL is not set CONFIG_SND_PCM_TIMER=y -CONFIG_SND_HRTIMER=y +CONFIG_SND_HRTIMER=m CONFIG_SND_DYNAMIC_MINORS=y CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set @@ -5598,11 +5612,11 @@ CONFIG_SND_VERBOSE_PROCFS=y CONFIG_SND_CTL_FAST_LOOKUP=y # CONFIG_SND_DEBUG is not set # CONFIG_SND_CTL_INPUT_VALIDATION is not set -CONFIG_SND_SEQUENCER=y -CONFIG_SND_SEQ_DUMMY=y +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m CONFIG_SND_SEQ_HRTIMER_DEFAULT=y -CONFIG_SND_SEQ_MIDI_EVENT=y -CONFIG_SND_SEQ_MIDI=y +CONFIG_SND_SEQ_MIDI_EVENT=m +CONFIG_SND_SEQ_MIDI=m CONFIG_SND_DRIVERS=y # CONFIG_SND_DUMMY is not set # CONFIG_SND_ALOOP is not set @@ -5621,7 +5635,7 @@ CONFIG_SND_DRIVERS=y CONFIG_SND_HDA_PREALLOC_SIZE=64 # CONFIG_SND_SPI is not set CONFIG_SND_USB=y -CONFIG_SND_USB_AUDIO=y +CONFIG_SND_USB_AUDIO=m CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y # CONFIG_SND_USB_UA101 is not set # CONFIG_SND_USB_CAIAQ is not set @@ -5632,7 +5646,7 @@ CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y # CONFIG_SND_USB_PODHD is not set # CONFIG_SND_USB_TONEPORT is not set # CONFIG_SND_USB_VARIAX is not set -CONFIG_SND_SOC=y +CONFIG_SND_SOC=m CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_SOC_DYNAMIC_DMA_CHAN is not set # CONFIG_SND_SOC_ADI is not set @@ -5664,27 +5678,27 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # CONFIG_SND_I2S_HI6210_I2S is not set # CONFIG_SND_SOC_IMG is not set # CONFIG_SND_SOC_MTK_BTCVSD is not set -CONFIG_SND_SOC_ROCKCHIP=y -CONFIG_SND_SOC_ROCKCHIP_ASRC=y -CONFIG_SND_SOC_ROCKCHIP_DLP=y -CONFIG_SND_SOC_ROCKCHIP_DLP_PCM=y +CONFIG_SND_SOC_ROCKCHIP=m +CONFIG_SND_SOC_ROCKCHIP_ASRC=m +CONFIG_SND_SOC_ROCKCHIP_DLP=m +CONFIG_SND_SOC_ROCKCHIP_DLP_PCM=m # CONFIG_SND_SOC_ROCKCHIP_DUMMY_DAI is not set -CONFIG_SND_SOC_ROCKCHIP_I2S=y -CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=y +CONFIG_SND_SOC_ROCKCHIP_I2S=m +CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m # CONFIG_SND_SOC_ROCKCHIP_I2S_TDM_MULTI_LANES is not set -CONFIG_SND_SOC_ROCKCHIP_MULTI_DAIS=y -CONFIG_SND_SOC_ROCKCHIP_PDM=y -CONFIG_SND_SOC_ROCKCHIP_PDM_V2=y -CONFIG_SND_SOC_ROCKCHIP_SAI=y +CONFIG_SND_SOC_ROCKCHIP_MULTI_DAIS=m +CONFIG_SND_SOC_ROCKCHIP_PDM=m +CONFIG_SND_SOC_ROCKCHIP_PDM_V2=m +CONFIG_SND_SOC_ROCKCHIP_SAI=m # CONFIG_SND_SOC_ROCKCHIP_SAI_VERBOSE is not set -CONFIG_SND_SOC_ROCKCHIP_SPDIF=y -CONFIG_SND_SOC_ROCKCHIP_SPDIFRX=y -CONFIG_SND_SOC_ROCKCHIP_TRCM=y +CONFIG_SND_SOC_ROCKCHIP_SPDIF=m +CONFIG_SND_SOC_ROCKCHIP_SPDIFRX=m +CONFIG_SND_SOC_ROCKCHIP_TRCM=m # CONFIG_SND_SOC_ROCKCHIP_VAD is not set -CONFIG_SND_SOC_ROCKCHIP_MAX98090=y -CONFIG_SND_SOC_ROCKCHIP_MULTICODECS=y -CONFIG_SND_SOC_ROCKCHIP_RT5645=y -CONFIG_SND_SOC_ROCKCHIP_HDMI=y +CONFIG_SND_SOC_ROCKCHIP_MAX98090=m +CONFIG_SND_SOC_ROCKCHIP_MULTICODECS=m +CONFIG_SND_SOC_ROCKCHIP_RT5645=m +CONFIG_SND_SOC_ROCKCHIP_HDMI=m # CONFIG_SND_SOC_RK3288_HDMI_ANALOG is not set # CONFIG_SND_SOC_RK3399_GRU_SOUND is not set # CONFIG_SND_SOC_SOF_TOPLEVEL is not set @@ -5698,7 +5712,7 @@ CONFIG_SND_SOC_ROCKCHIP_HDMI=y # CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set # CONFIG_SND_SOC_XILINX_SPDIF is not set # CONFIG_SND_SOC_XTFPGA_I2S is not set -CONFIG_SND_SOC_I2C_AND_SPI=y +CONFIG_SND_SOC_I2C_AND_SPI=m # # CODEC drivers @@ -5753,19 +5767,19 @@ CONFIG_SND_SOC_I2C_AND_SPI=y # CONFIG_SND_SOC_CX2072X is not set # CONFIG_SND_SOC_DA7213 is not set # CONFIG_SND_SOC_DMIC is not set -CONFIG_SND_SOC_DUMMY_CODEC=y -CONFIG_SND_SOC_HDMI_CODEC=y +CONFIG_SND_SOC_DUMMY_CODEC=m +CONFIG_SND_SOC_HDMI_CODEC=m # CONFIG_SND_SOC_ES7134 is not set -CONFIG_SND_SOC_ES7202=y +CONFIG_SND_SOC_ES7202=m CONFIG_SND_SOC_ES7202_MIC_MAX_CHANNELS=2 CONFIG_SND_SOC_ES7202_I2C_BUS=1 # CONFIG_SND_SOC_ES7210 is not set # CONFIG_SND_SOC_ES7241 is not set -CONFIG_SND_SOC_ES7243E=y -CONFIG_SND_SOC_ES8311=y -CONFIG_SND_SOC_ES8316=y -CONFIG_SND_SOC_ES8323=y -CONFIG_SND_SOC_ES8326=y +CONFIG_SND_SOC_ES7243E=m +CONFIG_SND_SOC_ES8311=m +CONFIG_SND_SOC_ES8316=m +CONFIG_SND_SOC_ES8323=m +CONFIG_SND_SOC_ES8326=m # CONFIG_SND_SOC_ES8328_I2C is not set # CONFIG_SND_SOC_ES8328_SPI is not set # CONFIG_SND_SOC_ES8396 is not set @@ -5774,7 +5788,7 @@ CONFIG_SND_SOC_ES8326=y # CONFIG_SND_SOC_ICS43432 is not set # CONFIG_SND_SOC_INNO_RK3036 is not set # CONFIG_SND_SOC_MAX98088 is not set -CONFIG_SND_SOC_MAX98090=y +CONFIG_SND_SOC_MAX98090=m # CONFIG_SND_SOC_MAX98357A is not set # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9867 is not set @@ -5800,28 +5814,28 @@ CONFIG_SND_SOC_MAX98090=y # CONFIG_SND_SOC_PCM512x_SPI is not set # CONFIG_SND_SOC_RK312X is not set # CONFIG_SND_SOC_RK3228 is not set -CONFIG_SND_SOC_RK3308=y -CONFIG_SND_SOC_RK3328=y +CONFIG_SND_SOC_RK3308=m +CONFIG_SND_SOC_RK3328=m # CONFIG_SND_SOC_RK3506 is not set -CONFIG_SND_SOC_RK3528=y +CONFIG_SND_SOC_RK3528=m # CONFIG_SND_SOC_RK730 is not set -CONFIG_SND_SOC_RK817=y -CONFIG_SND_SOC_RK_CODEC_DIGITAL=y -CONFIG_SND_SOC_RK_DSM=y -CONFIG_SND_SOC_RL6231=y +CONFIG_SND_SOC_RK817=m +CONFIG_SND_SOC_RK_CODEC_DIGITAL=m +CONFIG_SND_SOC_RK_DSM=m +CONFIG_SND_SOC_RL6231=m # CONFIG_SND_SOC_ROCKCHIP_SPI_CODEC is not set -CONFIG_SND_SOC_RT5616=y +CONFIG_SND_SOC_RT5616=m # CONFIG_SND_SOC_RT5631 is not set -CONFIG_SND_SOC_RT5640=y -CONFIG_SND_SOC_RT5645=y -CONFIG_SND_SOC_RT5651=y +CONFIG_SND_SOC_RT5640=m +CONFIG_SND_SOC_RT5645=m +CONFIG_SND_SOC_RT5651=m # CONFIG_SND_SOC_RT5659 is not set # CONFIG_SND_SOC_RT9120 is not set # CONFIG_SND_SOC_RV1106 is not set # CONFIG_SND_SOC_SGTL5000 is not set # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set # CONFIG_SND_SOC_SIMPLE_MUX is not set -CONFIG_SND_SOC_SPDIF=y +CONFIG_SND_SOC_SPDIF=m # CONFIG_SND_SOC_SRC4XXX_I2C is not set # CONFIG_SND_SOC_SSM2305 is not set # CONFIG_SND_SOC_SSM2518 is not set @@ -5854,7 +5868,7 @@ CONFIG_SND_SOC_SPDIF=y # CONFIG_SND_SOC_TLV320AIC3X_I2C is not set # CONFIG_SND_SOC_TLV320AIC3X_SPI is not set # CONFIG_SND_SOC_TLV320ADCX140 is not set -CONFIG_SND_SOC_TS3A227E=y +CONFIG_SND_SOC_TS3A227E=m # CONFIG_SND_SOC_TSCS42XX is not set # CONFIG_SND_SOC_TSCS454 is not set # CONFIG_SND_SOC_UDA1334 is not set @@ -5905,8 +5919,8 @@ CONFIG_SND_SOC_TS3A227E=y # CONFIG_SND_SOC_IT6621 is not set # end of CODEC drivers -CONFIG_SND_SIMPLE_CARD_UTILS=y -CONFIG_SND_SIMPLE_CARD=y +CONFIG_SND_SIMPLE_CARD_UTILS=m +CONFIG_SND_SIMPLE_CARD=m # CONFIG_SND_AUDIO_GRAPH_CARD is not set # CONFIG_SND_AUDIO_GRAPH_CARD2 is not set # CONFIG_SND_TEST_COMPONENT is not set @@ -7200,6 +7214,8 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 # CONFIG_AD7949 is not set # CONFIG_AD799X is not set # CONFIG_ADI_AXI_ADC is not set +CONFIG_AXP20X_ADC=m +# CONFIG_AXP288_ADC is not set # CONFIG_CC10001_ADC is not set # CONFIG_ENVELOPE_DETECTOR is not set # CONFIG_HI8435 is not set @@ -7225,7 +7241,7 @@ CONFIG_ROCKCHIP_SARADC=y # CONFIG_ROCKCHIP_SARADC_TEST_CHN is not set # CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_SD_ADC_MODULATOR is not set -# CONFIG_TI_ADC081C is not set +CONFIG_TI_ADC081C=y # CONFIG_TI_ADC0832 is not set # CONFIG_TI_ADC084S021 is not set # CONFIG_TI_ADC12138 is not set @@ -8024,7 +8040,7 @@ CONFIG_NFS_SWAP=y CONFIG_NFS_V4_1=y CONFIG_NFS_V4_2=y CONFIG_PNFS_FILE_LAYOUT=y -CONFIG_PNFS_BLOCK=m +CONFIG_PNFS_BLOCK=y CONFIG_PNFS_FLEXFILE_LAYOUT=y CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" CONFIG_NFS_V4_1_MIGRATION=y diff --git a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/postmarketos-defconfig.patch b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/postmarketos-defconfig.patch index 0597c10a9..d8c438390 100644 --- a/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/postmarketos-defconfig.patch +++ b/device/downstream/linux-clockworkpi-uconsole-radxa-cm5/postmarketos-defconfig.patch @@ -2,11 +2,16 @@ diff --git a/./arch/arm64/configs/rockchip_linux_defconfig.orig b/./arch/arm64/c index 0a870e6c7a..7ce0610aec 100644 --- a/./arch/arm64/configs/rockchip_linux_defconfig.orig +++ b/./arch/arm64/configs/rockchip_linux_defconfig -@@ -1,3 +1,14 @@ +@@ -1,3 +1,29 @@ ++CONFIG_MODULE_COMPRESS=y ++CONFIG_MODULE_COMPRESS_ZSTD=y ++CONFIG_BLK_DEV_DM=y ++CONFIG_INPUT_EVDEV=m ++CONFIG_PNFS_BLOCK=y +CONFIG_UDMABUF=y +CONFIG_UEVENT_HELPER=y +CONFIG_UEVENT_HELPER_PATH="" -+CONFIG_NULL_TTY=y ++CONFIG_NULL_TTY=m +CONFIG_PSI=y +CONFIG_FW_LOADER_PAGED_BUF=y +CONFIG_FW_LOADER_COMPRESS=y @@ -14,6 +19,16 @@ index 0a870e6c7a..7ce0610aec 100644 +CONFIG_FW_LOADER_COMPRESS_ZSTD=y +CONFIG_RT2800USB=m +CONFIG_RT2800USB_RT53XX=y ++CONFIG_BACKLIGHT_OCP8178=m ++CONFIG_DRM_PANEL_CWU50=m ++CONFIG_INPUT_AXP20X_PEK=y ++CONFIG_PINCTRL_AXP209=y ++CONFIG_CHARGER_AXP20X=y ++CONFIG_BATTERY_AXP20X=y ++CONFIG_AXP20X_POWER=y ++CONFIG_MFD_AXP20X=y ++CONFIG_MFD_AXP20X_I2C=y ++CONFIG_REGULATOR_AXP20X=y CONFIG_WERROR=y CONFIG_DEFAULT_HOSTNAME="localhost" CONFIG_SYSVIPC=y