33static const char*
s_tag =
"GLCDC";
44typedef enum : uint8_t {
54typedef enum : uint16_t {
58typedef enum : uint32_t {
63typedef enum : uint32_t {
72typedef enum : uint32_t {
77typedef enum : uint32_t {
148 uint32_t dispsel = 0U;
195 k_bg_en_ven = 1UL << 8,
196 k_ven_timeout = 0x40000UL,
200 bg_en |= k_bg_en_ven;
203 for (uint32_t i = 0U; i < (uint32_t)k_ven_timeout; i++) {
237 k_gr1_ven = 1UL << 0,
238 k_gr1_dispsel_lower = 3UL,
287 k_gr2_ven = 1UL << 0,
294 k_ab7_ckon = (1UL << 0) | (1UL << 16) | (1UL << 24),
296 k_ab1_arcon = 1UL << 12,
299 k_alpha_opaque_byte = 0xFFUL << 24,
300 k_rgb888_mask = 0x00FFFFFFUL,
301 k_ab9_transparent = 0x00000000UL,
347 k_gr2_ven = 1UL << 0,
348 k_gr2_dispsel_lower = 3UL,
359 const uint32_t lnnum = (uint32_t)fb_h - 1U;
412 const uint32_t* clut,
427 const uint32_t active =
429 const uint8_t target_plane = (active != 0U) ? (uint8_t)0U : (uint8_t)1U;
433 for (uint32_t i = 0U; i < entries; ++i) {
static const char * s_tag
Logging / check tag.
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Validation and Error-Checking Macros for ra8-firmware.
#define RA8_CHECK_NULL_PTR(ptr, tag, message)
Reject nullptr pointer, returning k_ra8_err_null_ptr.
Error Code Definitions for ra8-firmware.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
@ k_glcdc_shift_arcdef
GLCDC shift arcdef.
@ k_glcdc_shift_high
GLCDC shift high.
@ k_glcdc_axi_burst_bytes
GLCDC axi burst bytes.
@ k_glcdc_bpp_rgb565
GLCDC bpp rgb565.
@ k_glcdc_shift_flm6_fmt
GLCDC shift flm6 fmt.
@ k_glcdc_out_set_rgb565
GLCDC out set rgb565.
@ k_ra8_glcdc_clut_entries
Entries per CLUT plane.
@ k_ra8_glcdc_word_shift
16-bit field shift.
@ k_ra8_glcdc_dispsel_above
AB1.DISPSEL = upper layer.
@ k_ra8_glcdc_clutsel_shift
CLUTINT.SEL bit position.
@ k_ra8_glcdc_layer_count
Number of graphics layers.
@ k_ra8_glcdc_arcdef_shift
AB7.ARCDEF bit shift.
@ k_ra8_glcdc_dispsel_below
AB1.DISPSEL = lower layer.
@ k_ra8_glcdc_layer1
Layer index for GR[0].
@ k_glcdc_alpha_opaque
Fully opaque (constant alpha).
@ k_ra8_glcdc_clutsel_mask
CLUTINT.SEL bit mask.
@ k_ra8_glcdc_arcon_mask
AB1.ARCON bit mask.
Graphics LCD Controller driver (two-layer with alpha blending).
ra8_glcdc_blend_mode_t
Compositing mode between Graphics 1 and Graphics 2.
@ k_ra8_blend_alpha
Per-pixel + global alpha blend (DISPSEL=10+AR).
@ k_ra8_blend_overwrite
Layer 1 fully covers layer 2 (DISPSEL=01).
@ k_ra8_blend_normal
Layer 1 over layer 2, no alpha (DISPSEL=10).
ra8_err_t ra8_glcdc_layer2_chroma_key_enable(uint32_t key_rgb888)
Enable chroma-key transparency on GLCDC graphics layer 2.
ra8_err_t ra8_glcdc_set_layer2(const ra8_glcdc_layer2_cfg_t *cfg)
Configure the Graphics 2 (background-image) layer.
ra8_err_t ra8_glcdc_set_background_color(uint32_t argb)
Set the panel-wide background colour shown where neither layer covers a pixel.
ra8_err_t ra8_glcdc_layer1_show(uintptr_t fb_addr)
Implementation of ra8_glcdc_layer1_show.
ra8_err_t ra8_glcdc_set_clut_double_buffered(uint8_t layer, const uint32_t *clut, uint32_t entries, bool swap_now)
Update a CLUT plane double-buffered, optionally swapping on the next vsync.
static volatile uint32_t * internal_clut_plane(uint8_t layer, uint8_t plane)
ra8_err_t ra8_glcdc_set_blend(ra8_glcdc_blend_mode_t mode, uint8_t global_alpha)
Set the layer-1-over-layer-2 blend mode and global alpha.
static volatile uint32_t * internal_clutint_reg(uint8_t layer)
ra8_err_t ra8_glcdc_layer2_show(uintptr_t fb_addr, uint16_t panel_x, uint16_t panel_y, uint16_t fb_w, uint16_t fb_h)
Make graphics layer 2 visible at the given panel position.
Graphics LCD Controller (GLCDC) register layout for the RA8D2.
@ k_ra8_glcdc_off_gr2_ab5
GR[1].AB5: alpha rect H size+pos.
@ k_ra8_glcdc_off_gr2_ab2
GR[1].AB2: graphics V size + pos.
@ k_ra8_glcdc_off_gr2_ab9
GR[1].AB9: chroma-key replace col.
@ k_ra8_glcdc_off_gr2_saddr
GR[1].FLM2.BASE.
@ k_ra8_glcdc_off_gr1_ab1
GR[0].AB1: alpha blend ctrl 1.
@ k_ra8_glcdc_off_bg_en
BG.EN: module enable.
@ k_ra8_glcdc_off_gr2_ab1
GR[1].AB1.
@ k_ra8_glcdc_off_gr2_clut1
GR2_CLUT1[256] @ 0x0C00.
@ k_ra8_glcdc_off_gr2_ab8
GR[1].AB8: chroma-key key colour.
@ k_ra8_glcdc_off_gr1_saddr
GR[0].FLM2.BASE: framebuffer addr.
@ k_ra8_glcdc_off_gr1_ab7
GR[0].AB7: chroma-key on, def alf.
@ k_ra8_glcdc_off_gr2_clutint
GR[1].CLUTINT.
@ k_ra8_glcdc_off_gr1_en
GR[0].VEN: register update ctrl.
@ k_ra8_glcdc_off_gr2_ab4
GR[1].AB4: alpha rect V size+pos.
@ k_ra8_glcdc_off_gr2_clut0
GR2_CLUT0[256] @ 0x0800.
@ k_ra8_glcdc_off_gr2_flmrd
GR[1].FLMRD.
@ k_ra8_glcdc_off_gr2_line
GR[1].FLM5.
@ k_ra8_glcdc_off_gr2_en
GR[1].VEN.
@ k_ra8_glcdc_off_gr1_clutint
GR[0].CLUTINT: CLUT swap + line.
@ k_ra8_glcdc_off_gr1_clut1
GR1_CLUT1[256] @ 0x0400.
@ k_ra8_glcdc_off_gr2_fmt
GR[1].FLM6.FORMAT.
@ k_ra8_glcdc_off_gr2_size
GR[1].AB3: graphics H size + pos.
@ k_ra8_glcdc_off_gr1_clut0
GR1_CLUT0[256] @ 0x0000.
@ k_ra8_glcdc_off_gr1_flmrd
GR[0].FLMRD: frame buffer read en.
@ k_ra8_glcdc_off_bg_bgc
BG.BGC: background colour.
@ k_ra8_glcdc_off_gr2_ab7
GR[1].AB7: chroma-key on, def alf.
@ k_ra8_glcdc_off_gr2_flm3
GR[1].FLM3.
static volatile uint32_t * ra8_glcdc_reg32(ra8_glcdc_block_off_t offset)
Pointer to a 32-bit register inside the GLCDC block.
@ k_ra8_glcdc_base_addr
RA8 GLCDC base address.
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
Configuration for the background-image (Graphics 2) layer.
uint32_t framebuffer_addr
Layer-2 framebuffer base address.
uint16_t height_px
Layer-2 image height (lines).
uint16_t pos_x
Top-left X within the panel viewport.
uint16_t width_px
Layer-2 image width (pixels).
uint16_t pos_y
Top-left Y within the panel viewport.
uint32_t line_stride_bytes
Bytes between successive scan lines.
ra8_glcdc_pixel_fmt_t format
Pixel format code (FLM6.FORMAT).
uint8_t alpha
Constant alpha 0..255 (AB7.ARCDEF).