Skip to content

Support for Waveshare 2.8" DPI Touchscreen LCD #104

@FreeOnlineUser

Description

@FreeOnlineUser

Summary

Documentation and kernel configuration changes needed to support the Waveshare 2.8" DPI Touchscreen LCD (480x640) with Goodix GT911 touch controller on Pi Zero W.

Hardware

  • Raspberry Pi Zero W
  • Waveshare 2.8" DPI LCD (480x640)
  • Goodix GT911 capacitive touchscreen

Required Kernel Config Changes

The default SeedSignerOS kernel is missing DMA support required for the DPI framebuffer. Without these, bcm2708_fb probe fails with "Couldn't allocate a DMA channel".

Add to opt/pi0/board/kernel.config:

# DMA (required for DPI framebuffer)
CONFIG_DMADEVICES=y
CONFIG_DMA_BCM2835=y
CONFIG_DMA_BCM2708=y
CONFIG_DMABUF_HEAPS=y
CONFIG_DMABUF_HEAPS_SYSTEM=y
CONFIG_DMABUF_HEAPS_CMA=y

# Touchscreen input
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_TOUCHSCREEN_GOODIX=y

# I2C (for touch controller)
CONFIG_I2C=y
CONFIG_I2C_BCM2708=y
CONFIG_I2C_BCM2835=y
CONFIG_I2C_GPIO=y

# Framebuffer
CONFIG_FB=y
CONFIG_FB_BCM2708=y
CONFIG_FRAMEBUFFER_CONSOLE=y

Boot Configuration

cmdline.txt:

console=null quiet loglevel=0 vt.global_cursor_default=0 consoleblank=0 logo.nologo spidev.bufsiz=131072

config.txt:

start_file=start_x.elf
fixup_file=fixup_x.dat
kernel=zImage
gpu_mem=128
start_x=1
boot_delay=0
disable_splash=1

# DPI Display
ignore_lcd=0
hdmi_ignore_hotplug=1
disable_hdmi=1
gpio=0-9=a2
gpio=12-17=a2
gpio=20-25=a2
enable_dpi_lcd=1
display_default_lcd=1
dpi_group=2
dpi_mode=87
dpi_output_format=0x7F206
hdmi_timings=480 0 26 16 10 640 0 25 10 15 0 0 0 60 0 32000000 1
extra_transpose_buffer=2

# Overlays
dtoverlay=waveshare-28dpi-3b-4b
dtoverlay=waveshare-28dpi-3b
dtoverlay=waveshare-touch-28dpi
dtparam=i2c_arm=on
dtparam=spi=off
dtparam=audio=off
dtoverlay=disable-wifi
dtoverlay=disable-bt

Required Overlay Files

Copy to /overlays/ on boot partition:

  • waveshare-28dpi-3b-4b.dtbo
  • waveshare-28dpi-3b.dtbo
  • waveshare-touch-28dpi.dtbo

These can be obtained from the Waveshare wiki or a Raspberry Pi OS installation.

Key Findings

  1. DMA is essential - The original kernel had DMA commented out, which prevented the DPI framebuffer from initializing
  2. Software I2C - The DPI display uses GPIO pins that conflict with hardware I2C, so the Waveshare overlay creates software I2C on GPIO 10/11 for the touch controller
  3. Goodix driver - Touch controller detected at I2C address 0x5d on i2c-11
  4. No networking - CONFIG_NET remains disabled for security (air-gapped device)

Tested With

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions