bcm27xx/bcm2712: add RP1 drivers via kmods
authorJohn Audia <therealgraysky@proton.me>
Wed, 11 Dec 2024 20:06:30 +0000 (15:06 -0500)
committerRobert Marko <robimarko@gmail.com>
Fri, 27 Dec 2024 11:06:19 +0000 (12:06 +0100)
Add kmods for the following RP1 options that not all users
will necessarily need or want compiled in:
* Composite video
* Display video
* LED control
* PWM control
* Serial video

Build system: x86/64
Build-tested: bcm2712/RPi5B
Run-tested: bcm2712/RPi5B

Signed-off-by: John Audia <therealgraysky@proton.me>
Link: https://github.com/openwrt/openwrt/pull/17233
Signed-off-by: Robert Marko <robimarko@gmail.com>
target/linux/bcm27xx/modules/other.mk
target/linux/bcm27xx/modules/video.mk

index 99b71d4d695af1d31e28629ca5a8a08dc5ae7765..5a6900074839711eb0975f1372d7b247e31d0460 100644 (file)
@@ -53,3 +53,40 @@ define KernelPackage/smi-bcm2835-dev/description
 endef
 
 $(eval $(call KernelPackage,smi-bcm2835-dev))
+
+
+define KernelPackage/pwm-pio-rp1
+  SUBMENU:=$(OTHER_MENU)
+  TITLE:=RP1 PWM support
+  KCONFIG:=CONFIG_PWM_PIO_RP1
+  FILES:=$(LINUX_DIR)/drivers/pwm/pwm-pio-rp1.ko
+  AUTOLOAD:=$(call AutoLoad,21,pwm-pio-rp1)
+  DEPENDS:=@TARGET_bcm27xx_bcm2712
+endef
+
+define KernelPackage/pwm-pio-rp1/description
+  Enables precise control of PWM signals for tasks like motor control,
+  LED dimming, and audio signal generation. Leveraging PIO allows for
+  higher accuracy and flexibility in PWM signal generation compared
+  to traditional hardware timers.
+endef
+
+$(eval $(call KernelPackage,pwm-pio-rp1))
+
+
+define KernelPackage/ws2812-pio-rp1
+  SUBMENU:=$(OTHER_MENU)
+  TITLE:=RP1 PIO-base WS2812 driver
+  KCONFIG:=CONFIG_WS2812_PIO_RP1
+  FILES:=$(LINUX_DIR)/drivers/misc/ws2812-pio-rp1.ko
+  AUTOLOAD:=$(call AutoLoad,21,ws2812-pio-rp1)
+  DEPENDS:=@TARGET_bcm27xx_bcm2712
+endef
+
+define KernelPackage/ws2812-pio-rp1/description
+  Driver for the WS2812 (NeoPixel) LEDs using the RP1 PIO hardware.
+  The driver creates a character device to which rgbw pixels may be
+  written. Single-byte writes to offset 0 set the brightness at runtime.
+endef
+
+$(eval $(call KernelPackage,ws2812-pio-rp1))
index b9af0b3e0f8603c0dc378e84afcaa7bc582d1e41..8e2b19bd871165e9e3e650e276bd905e5e40a33c 100644 (file)
@@ -115,3 +115,81 @@ define KernelPackage/vchiq-mmal-bcm2835/description
 endef
 
 $(eval $(call KernelPackage,vchiq-mmal-bcm2835))
+
+
+define KernelPackage/drm-rp1-dsi
+  SUBMENU:=$(VIDEO_MENU)
+  TITLE:=RP1 Display Serial Interface for Video
+  KCONFIG:= \
+    CONFIG_DRM_RP1_DSI \
+    CONFIG_DRM_GEM_DMA_HELPER \
+    CONFIG_DRM_KMS_HELPER \
+    CONFIG_DRM_MIPI_DSI=y \
+    CONFIG_DRM_VRAM_HELPER=n \
+    CONFIG_DRM_TTM=n \
+    CONFIG_DRM_TTM_HELPER=n \
+    CONFIG_GENERIC_PHY_MIPI_DPHY=n \
+    CONFIG_DRM_WERROR=n
+  FILES:=$(LINUX_DIR)/drivers/gpu/drm/rp1/rp1-dsi/drm-rp1-dsi.ko
+  AUTOLOAD:=$(call AutoLoad,67,drm-rp1-dsi)
+  DEPENDS:=@TARGET_bcm27xx_bcm2712 +kmod-drm-vc4
+endef
+
+define KernelPackage/drm-rp1-dsi/description
+  This module manages the DSI for driving high-resolution LCD panels
+  such as the official Raspberry Pi displays or other screens that
+  use the DSI interface.
+endef
+
+$(eval $(call KernelPackage,drm-rp1-dsi))
+
+
+define KernelPackage/drm-rp1-dpi
+  SUBMENU:=$(VIDEO_MENU)
+  TITLE:=RP1 Display Parallel Interface for Video
+  KCONFIG:= \
+    CONFIG_DRM_RP1_DPI \
+    CONFIG_DRM_GEM_DMA_HELPER \
+    CONFIG_DRM_KMS_HELPER \
+    CONFIG_DRM_VRAM_HELPER=n \
+    CONFIG_DRM_TTM=n \
+    CONFIG_DRM_TTM_HELPER=n
+  FILES:=$(LINUX_DIR)/drivers/gpu/drm/rp1/rp1-dpi/drm-rp1-dpi.ko
+  AUTOLOAD:=$(call AutoLoad,67,drm-rp1-dpi)
+  DEPENDS:=@TARGET_bcm27xx_bcm2712 +kmod-drm-vc4
+endef
+
+define KernelPackage/drm-rp1-dpi/description
+  This module is or driving displays using the DPI standard.
+  Useful for interfacing with custom or low-level LCD panels
+  that require parallel RGB signals.  Provides direct control
+  over the timing and signal driving of raw LCD panels.
+  Typically used in maker projects or with non-HDMI displays.
+endef
+
+$(eval $(call KernelPackage,drm-rp1-dpi))
+
+
+define KernelPackage/drm-rp1-vec
+  SUBMENU:=$(VIDEO_MENU)
+  TITLE:=RP1 Display Composite Video
+  KCONFIG:= \
+    CONFIG_DRM_RP1_VEC \
+    CONFIG_DRM_GEM_DMA_HELPER \
+    CONFIG_DRM_KMS_HELPER \
+    CONFIG_DRM_VRAM_HELPER=n \
+    CONFIG_DRM_TTM=n \
+    CONFIG_DRM_TTM_HELPER=n
+  FILES:=$(LINUX_DIR)/drivers/gpu/drm/rp1/rp1-vec/drm-rp1-vec.ko
+  AUTOLOAD:=$(call AutoLoad,67,drm-rp1-vec)
+  DEPENDS:=@TARGET_bcm27xx_bcm2712 +kmod-drm-vc4
+endef
+
+define KernelPackage/drm-rp1-vec/description
+  This module is used for composite video output, which is typically
+  transmitted through the RCA jack.  Primary use is onnecting older
+  TVs or monitors that rely on analog signals via a composite interface.
+  Handles standard-definition analog signals in NTSC and PAL.
+endef
+
+$(eval $(call KernelPackage,drm-rp1-vec))