XenevaOS
Loading...
Searching...
No Matches
Classes | Macros | Enumerations | Functions | Variables
vc4dsi.c File Reference
#include <Board/RPI3bp/rpi3bp.h>
#include <Hal/AA64/rpi3.h>
#include <Mm/pmmngr.h>
#include <aucon.h>
#include <string.h>
#include <Hal/AA64/aa64lowlevel.h>
Include dependency graph for vc4dsi.c:

Classes

struct  vc4_fb_t
 

Macros

#define MAILBOX_BASE   (RPI_MMIO_BASE + 0x00b880)
 
#define DSI0_BASE   (RPI_MMIO_BASE + 0x209000)
 
#define DSI1_BASE   (RPI_MMIO_BASE + 0x700000)
 
#define GPIO_BASE   (RPI_MMIO_BASE + 0x200000)
 
#define SPI0_BASE   (RPI_MMIO_BASE + 0x204000)
 
#define MAILBOX_READ   (MAILBOX_BASE + 0x00)
 
#define MAILBOX_STATUS   (MAILBOX_BASE + 0x18)
 
#define MAILBOX_WRITE   (MAILBOX_BASE + 0x20)
 
#define MAILBOX_FULL   0x80000000
 
#define MAILBOX_EMPTY   0x40000000
 
#define MAILBOX_CH_PROP   8
 
#define DSI_CTRL   0x00
 
#define DSI_STAT   0x04
 
#define DSI_HSTX_TO_CNT   0x08
 
#define DSI_LPRX_TO_CNT   0x0C
 
#define DSI_TA_TO_CNT   0x10
 
#define DSI_PR_TO_CNT   0x14
 
#define DSI_DISP0_CTRL   0x18
 
#define DSI_DISP1_CTRL   0x1C
 
#define DSI_INT_STAT   0x20
 
#define DSI_INT_EN   0x24
 
#define DSI_PHYC   0x28
 
#define DSI_HS_CLT0   0x2C
 
#define DSI_HS_CLT1   0x30
 
#define DSI_HS_CLT2   0x34
 
#define DSI_HS_DLT3   0x38
 
#define DSI_HS_DLT4   0x3C
 
#define DSI_HS_DLT5   0x40
 
#define DSI_HS_DLT6   0x44
 
#define DSI_HS_DLT7   0x48
 
#define GPFSEL0   (GPIO_BASE + 0x00)
 
#define GPFSEL1   (GPIO_BASE + 0x04)
 
#define GPFSEL2   (GPIO_BASE + 0x08)
 
#define GPSET0   (GPIO_BASE + 0x1C)
 
#define GPCLR0   (GPIO_BASE + 0x28)
 
#define GPIO_DC   25
 
#define GPIO_RST   24
 
#define GPIO_LED   23
 
#define SPI0_CS   (SPI0_BASE + 0x00)
 
#define SPI0_FIFO   (SPI0_BASE + 0x04)
 
#define SPI0_CLK   (SPI0_BASE + 0x08)
 
#define SPI_CS_TXD   (1ULL<<18)
 
#define SPI_CS_RXD   (1ULL<<17)
 
#define SPI_CS_DONE   (1ULL<<16)
 
#define SPI_CS_TA   (1ULL<<7)
 
#define SPI_CS_CLEAR_RX   (1ULL<<5)
 
#define SPI_CS_CLEAR_TX   (1ULL<<4)
 
#define SPI_CS_CS   (3ULL<<0)
 
#define SPI_CS_CS0   (0ULL<<0)
 
#define SPI_CS_CS1   (1ULL<<0)
 
#define SPI_CS_CS2   (2ULL<<0)
 
#define TAG_GET_BOARD_REV   0x00010002
 
#define TAG_ALLOCATE_BUFFER   0x00040001
 
#define TAG_RELEASE_BUFFER   0x00048001
 
#define TAG_BLANK_SCREEN   0x00040002
 
#define TAG_SET_PHYS_WH   0x00048003
 
#define TAG_SET_VIRT_WH   0x00048004
 
#define TAG_SET_DEPTH   0x00048005
 
#define TAG_SET_PIXEL_ORDER   0x00048006
 
#define TAG_GET_PITCH   0x00040008
 
#define TAG_SET_VIRT_OFFSET   0x00048009
 
#define TAG_SET_BACKLIGHT   0x0004800F
 
#define TAG_GET_TOUCHBUF   0x0004000F
 
#define TAG_SET_TOUCHBUF   0x0004801F
 
#define TAG_GET_DISPLAY_ID   0x00040013
 
#define TAG_SET_DSI_TIMING   00x00048014
 
#define TAG_LAST   0x00000000
 
#define DCS_SOFT_RESET   0x01
 
#define DCS_GET_DISPLAY_ID   0x04
 
#define DCS_ENTER_SLEEP   0x10
 
#define DCS_EXIT_SLEEP   0x11
 
#define DCS_SET_DISPLAY_OFF   0x28
 
#define DCS_SET_DISPLAY_ON   0x29
 
#define DCS_SET_COLUMN_ADDR   0x2A
 
#define DCS_SET_PAGE_ADDR   0x2B
 
#define DCS_WRITE_MEMORY_START   0x2C
 
#define DCS_SET_TEAR_OFF   0x34
 
#define DCS_SET_TEAR_ON   0x35
 
#define DCS_SET_PIXEL_FORMAT   0x3A
 
#define DCS_SET_BRIGHTNESS   0x51
 
#define DSI_DT_DCS_SHORT_WRITE_0   0x05
 
#define DSI_DT_DCS_SHORT_WRITE_1   0x15
 
#define DSI_DT_DCS_LONG_WRITE   0x39
 
#define DSI_DT_DCS_READ   0x06
 
#define DSI_DT_SET_MAX_RET_PKT   0x37
 
#define LBTFT_WIDTH   320
 
#define LBTFT_HEIGHT   480
 
#define MIPI_DSI_V_SYNC_START   0x01
 
#define MIPI_DSI_V_SYNC_END   0x11
 
#define MIPI_DSI_H_SYNC_START   0x21
 
#define MIPI_DSI_H_SYNC_END   0x31
 
#define MIPI_DSI_COMPRESSION_MODE   0x07
 
#define MIPI_DSI_END_OF_TRANSMISSION   0x08
 
#define MIPI_DSI_COLOR_MODE_OFF   0x02
 
#define MIPI_DSI_COLOR_MODE_ON   0x12
 
#define MIPI_DSI_SHUTDOWN_PERIPHERAL   0x22
 
#define MIPI_DSI_TURN_ON_PERIPHERAL   0x32
 
#define MIPI_DCS_ENTER_SLEEP_MODE   0x10
 
#define MIPI_DCS_EXIT_SLEEP_MODE   0x11
 
#define MIPI_DCS_SET_PIXEL_FORMAT   0x3A
 

Enumerations

enum  display_type_t { DISPLAY_TYPE_HDMI = 0 , DISPLAY_TYPE_DSI = 1 }
 

Functions

void DSIWriteReg (uint32_t dsiBase, uint32_t reg, uint32_t val)
 
uint32_t DSIReadReg (uint32_t dsiBase, uint32_t reg)
 
void DSISendShortCMD (uint32_t dsiBase, uint8_t cmd, uint8_t param, bool hasParam)
 
void DSISendLongCMD (uint32_t dsiBase, uint8_t cmd, const uint8_t *params, uint32_t len)
 
bool DSIInitPanel (uint32_t dsiBase, uint32_t width, uint32_t height)
 
void GPIOSetFunction (uint8_t pin, uint8_t function)
 
void GPIOSet (uint8_t pin)
 
void GPIOClear (uint8_t pin)
 
void GPIOWrite (uint8_t pin, bool value)
 
void SPIInit ()
 
void SPITransfer (uint8_t data)
 
void SPITransferBuffer (const uint8_t *data, uint32_t len)
 
void LCDWriteCommand (uint8_t cmd)
 
void LCDWriteData (uint8_t data)
 
void LCDWriteDataBuffer (const uint8_t *data, uint32_t len)
 
void LCDWriteU16 (uint16_t data)
 
void LCDWriteU32 (uint32_t data)
 
void ILI9486Init ()
 
void ILI9341Init ()
 
void LCDInit ()
 
void LCDSetWindow (uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
 
void LCDClear (uint16_t color)
 
void LCDPutPixel (uint16_t x, uint16_t y, uint16_t color)
 
bool vc4InitDisplay (uint32_t width, uint32_t height, uint32_t depth, display_type_t display_type)
 
bool vc4InitDSI (uint32_t width, uint32_t height, uint32_t depth)
 
void VC4ClearScreen (uint32_t color)
 
void DSISetBacklight (uint8_t brightness)
 
uint32_t vc4rgb (uint8_t r, uint8_t g, uint8_t b)
 
uint16_t rgb888_to_rgb565 (uint32_t color)
 
uint16_t rgb_to_rgb565 (uint8_t r, uint8_t g, uint8_t b)
 
void AuVC4DSIInit ()
 

Variables

uint32_tmailBOX
 

Macro Definition Documentation

◆ DCS_ENTER_SLEEP

#define DCS_ENTER_SLEEP   0x10

◆ DCS_EXIT_SLEEP

#define DCS_EXIT_SLEEP   0x11

◆ DCS_GET_DISPLAY_ID

#define DCS_GET_DISPLAY_ID   0x04

◆ DCS_SET_BRIGHTNESS

#define DCS_SET_BRIGHTNESS   0x51

◆ DCS_SET_COLUMN_ADDR

#define DCS_SET_COLUMN_ADDR   0x2A

◆ DCS_SET_DISPLAY_OFF

#define DCS_SET_DISPLAY_OFF   0x28

◆ DCS_SET_DISPLAY_ON

#define DCS_SET_DISPLAY_ON   0x29

◆ DCS_SET_PAGE_ADDR

#define DCS_SET_PAGE_ADDR   0x2B

◆ DCS_SET_PIXEL_FORMAT

#define DCS_SET_PIXEL_FORMAT   0x3A

◆ DCS_SET_TEAR_OFF

#define DCS_SET_TEAR_OFF   0x34

◆ DCS_SET_TEAR_ON

#define DCS_SET_TEAR_ON   0x35

◆ DCS_SOFT_RESET

#define DCS_SOFT_RESET   0x01

◆ DCS_WRITE_MEMORY_START

#define DCS_WRITE_MEMORY_START   0x2C

◆ DSI0_BASE

#define DSI0_BASE   (RPI_MMIO_BASE + 0x209000)

◆ DSI1_BASE

#define DSI1_BASE   (RPI_MMIO_BASE + 0x700000)

◆ DSI_CTRL

#define DSI_CTRL   0x00

◆ DSI_DISP0_CTRL

#define DSI_DISP0_CTRL   0x18

◆ DSI_DISP1_CTRL

#define DSI_DISP1_CTRL   0x1C

◆ DSI_DT_DCS_LONG_WRITE

#define DSI_DT_DCS_LONG_WRITE   0x39

◆ DSI_DT_DCS_READ

#define DSI_DT_DCS_READ   0x06

◆ DSI_DT_DCS_SHORT_WRITE_0

#define DSI_DT_DCS_SHORT_WRITE_0   0x05

◆ DSI_DT_DCS_SHORT_WRITE_1

#define DSI_DT_DCS_SHORT_WRITE_1   0x15

◆ DSI_DT_SET_MAX_RET_PKT

#define DSI_DT_SET_MAX_RET_PKT   0x37

◆ DSI_HS_CLT0

#define DSI_HS_CLT0   0x2C

◆ DSI_HS_CLT1

#define DSI_HS_CLT1   0x30

◆ DSI_HS_CLT2

#define DSI_HS_CLT2   0x34

◆ DSI_HS_DLT3

#define DSI_HS_DLT3   0x38

◆ DSI_HS_DLT4

#define DSI_HS_DLT4   0x3C

◆ DSI_HS_DLT5

#define DSI_HS_DLT5   0x40

◆ DSI_HS_DLT6

#define DSI_HS_DLT6   0x44

◆ DSI_HS_DLT7

#define DSI_HS_DLT7   0x48

◆ DSI_HSTX_TO_CNT

#define DSI_HSTX_TO_CNT   0x08

◆ DSI_INT_EN

#define DSI_INT_EN   0x24

◆ DSI_INT_STAT

#define DSI_INT_STAT   0x20

◆ DSI_LPRX_TO_CNT

#define DSI_LPRX_TO_CNT   0x0C

◆ DSI_PHYC

#define DSI_PHYC   0x28

◆ DSI_PR_TO_CNT

#define DSI_PR_TO_CNT   0x14

◆ DSI_STAT

#define DSI_STAT   0x04

◆ DSI_TA_TO_CNT

#define DSI_TA_TO_CNT   0x10

◆ GPCLR0

#define GPCLR0   (GPIO_BASE + 0x28)

◆ GPFSEL0

#define GPFSEL0   (GPIO_BASE + 0x00)

◆ GPFSEL1

#define GPFSEL1   (GPIO_BASE + 0x04)

◆ GPFSEL2

#define GPFSEL2   (GPIO_BASE + 0x08)

◆ GPIO_BASE

#define GPIO_BASE   (RPI_MMIO_BASE + 0x200000)

◆ GPIO_DC

#define GPIO_DC   25

◆ GPIO_LED

#define GPIO_LED   23

◆ GPIO_RST

#define GPIO_RST   24

◆ GPSET0

#define GPSET0   (GPIO_BASE + 0x1C)

◆ LBTFT_HEIGHT

#define LBTFT_HEIGHT   480

◆ LBTFT_WIDTH

#define LBTFT_WIDTH   320

◆ MAILBOX_BASE

#define MAILBOX_BASE   (RPI_MMIO_BASE + 0x00b880)

BSD 2-Clause License

Copyright (c) 2022-2025, Manas Kamal Choudhury All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

◆ MAILBOX_CH_PROP

#define MAILBOX_CH_PROP   8

◆ MAILBOX_EMPTY

#define MAILBOX_EMPTY   0x40000000

◆ MAILBOX_FULL

#define MAILBOX_FULL   0x80000000

◆ MAILBOX_READ

#define MAILBOX_READ   (MAILBOX_BASE + 0x00)

◆ MAILBOX_STATUS

#define MAILBOX_STATUS   (MAILBOX_BASE + 0x18)

◆ MAILBOX_WRITE

#define MAILBOX_WRITE   (MAILBOX_BASE + 0x20)

◆ MIPI_DCS_ENTER_SLEEP_MODE

#define MIPI_DCS_ENTER_SLEEP_MODE   0x10

◆ MIPI_DCS_EXIT_SLEEP_MODE

#define MIPI_DCS_EXIT_SLEEP_MODE   0x11

◆ MIPI_DCS_SET_PIXEL_FORMAT

#define MIPI_DCS_SET_PIXEL_FORMAT   0x3A

◆ MIPI_DSI_COLOR_MODE_OFF

#define MIPI_DSI_COLOR_MODE_OFF   0x02

◆ MIPI_DSI_COLOR_MODE_ON

#define MIPI_DSI_COLOR_MODE_ON   0x12

◆ MIPI_DSI_COMPRESSION_MODE

#define MIPI_DSI_COMPRESSION_MODE   0x07

◆ MIPI_DSI_END_OF_TRANSMISSION

#define MIPI_DSI_END_OF_TRANSMISSION   0x08

◆ MIPI_DSI_H_SYNC_END

#define MIPI_DSI_H_SYNC_END   0x31

◆ MIPI_DSI_H_SYNC_START

#define MIPI_DSI_H_SYNC_START   0x21

◆ MIPI_DSI_SHUTDOWN_PERIPHERAL

#define MIPI_DSI_SHUTDOWN_PERIPHERAL   0x22

◆ MIPI_DSI_TURN_ON_PERIPHERAL

#define MIPI_DSI_TURN_ON_PERIPHERAL   0x32

◆ MIPI_DSI_V_SYNC_END

#define MIPI_DSI_V_SYNC_END   0x11

◆ MIPI_DSI_V_SYNC_START

#define MIPI_DSI_V_SYNC_START   0x01

◆ SPI0_BASE

#define SPI0_BASE   (RPI_MMIO_BASE + 0x204000)

◆ SPI0_CLK

#define SPI0_CLK   (SPI0_BASE + 0x08)

◆ SPI0_CS

#define SPI0_CS   (SPI0_BASE + 0x00)

◆ SPI0_FIFO

#define SPI0_FIFO   (SPI0_BASE + 0x04)

◆ SPI_CS_CLEAR_RX

#define SPI_CS_CLEAR_RX   (1ULL<<5)

◆ SPI_CS_CLEAR_TX

#define SPI_CS_CLEAR_TX   (1ULL<<4)

◆ SPI_CS_CS

#define SPI_CS_CS   (3ULL<<0)

◆ SPI_CS_CS0

#define SPI_CS_CS0   (0ULL<<0)

◆ SPI_CS_CS1

#define SPI_CS_CS1   (1ULL<<0)

◆ SPI_CS_CS2

#define SPI_CS_CS2   (2ULL<<0)

◆ SPI_CS_DONE

#define SPI_CS_DONE   (1ULL<<16)

◆ SPI_CS_RXD

#define SPI_CS_RXD   (1ULL<<17)

◆ SPI_CS_TA

#define SPI_CS_TA   (1ULL<<7)

◆ SPI_CS_TXD

#define SPI_CS_TXD   (1ULL<<18)

◆ TAG_ALLOCATE_BUFFER

#define TAG_ALLOCATE_BUFFER   0x00040001

◆ TAG_BLANK_SCREEN

#define TAG_BLANK_SCREEN   0x00040002

◆ TAG_GET_BOARD_REV

#define TAG_GET_BOARD_REV   0x00010002

◆ TAG_GET_DISPLAY_ID

#define TAG_GET_DISPLAY_ID   0x00040013

◆ TAG_GET_PITCH

#define TAG_GET_PITCH   0x00040008

◆ TAG_GET_TOUCHBUF

#define TAG_GET_TOUCHBUF   0x0004000F

◆ TAG_LAST

#define TAG_LAST   0x00000000

◆ TAG_RELEASE_BUFFER

#define TAG_RELEASE_BUFFER   0x00048001

◆ TAG_SET_BACKLIGHT

#define TAG_SET_BACKLIGHT   0x0004800F

◆ TAG_SET_DEPTH

#define TAG_SET_DEPTH   0x00048005

◆ TAG_SET_DSI_TIMING

#define TAG_SET_DSI_TIMING   00x00048014

◆ TAG_SET_PHYS_WH

#define TAG_SET_PHYS_WH   0x00048003

◆ TAG_SET_PIXEL_ORDER

#define TAG_SET_PIXEL_ORDER   0x00048006

◆ TAG_SET_TOUCHBUF

#define TAG_SET_TOUCHBUF   0x0004801F

◆ TAG_SET_VIRT_OFFSET

#define TAG_SET_VIRT_OFFSET   0x00048009

◆ TAG_SET_VIRT_WH

#define TAG_SET_VIRT_WH   0x00048004

Enumeration Type Documentation

◆ display_type_t

Enumerator
DISPLAY_TYPE_HDMI 
DISPLAY_TYPE_DSI 

Function Documentation

◆ AuVC4DSIInit()

void AuVC4DSIInit ( )

◆ DSIInitPanel()

bool DSIInitPanel ( uint32_t  dsiBase,
uint32_t  width,
uint32_t  height 
)

◆ DSIReadReg()

uint32_t DSIReadReg ( uint32_t  dsiBase,
uint32_t  reg 
)

◆ DSISendLongCMD()

void DSISendLongCMD ( uint32_t  dsiBase,
uint8_t  cmd,
const uint8_t params,
uint32_t  len 
)

◆ DSISendShortCMD()

void DSISendShortCMD ( uint32_t  dsiBase,
uint8_t  cmd,
uint8_t  param,
bool  hasParam 
)

◆ DSISetBacklight()

void DSISetBacklight ( uint8_t  brightness)

◆ DSIWriteReg()

void DSIWriteReg ( uint32_t  dsiBase,
uint32_t  reg,
uint32_t  val 
)

◆ GPIOClear()

void GPIOClear ( uint8_t  pin)

◆ GPIOSet()

void GPIOSet ( uint8_t  pin)

◆ GPIOSetFunction()

void GPIOSetFunction ( uint8_t  pin,
uint8_t  function 
)

◆ GPIOWrite()

void GPIOWrite ( uint8_t  pin,
bool  value 
)

◆ ILI9341Init()

void ILI9341Init ( )

◆ ILI9486Init()

void ILI9486Init ( )

◆ LCDClear()

void LCDClear ( uint16_t  color)

◆ LCDInit()

void LCDInit ( )

◆ LCDPutPixel()

void LCDPutPixel ( uint16_t  x,
uint16_t  y,
uint16_t  color 
)

◆ LCDSetWindow()

void LCDSetWindow ( uint16_t  x0,
uint16_t  y0,
uint16_t  x1,
uint16_t  y1 
)

◆ LCDWriteCommand()

void LCDWriteCommand ( uint8_t  cmd)

◆ LCDWriteData()

void LCDWriteData ( uint8_t  data)

◆ LCDWriteDataBuffer()

void LCDWriteDataBuffer ( const uint8_t data,
uint32_t  len 
)

◆ LCDWriteU16()

void LCDWriteU16 ( uint16_t  data)

◆ LCDWriteU32()

void LCDWriteU32 ( uint32_t  data)

◆ rgb888_to_rgb565()

uint16_t rgb888_to_rgb565 ( uint32_t  color)

◆ rgb_to_rgb565()

uint16_t rgb_to_rgb565 ( uint8_t  r,
uint8_t  g,
uint8_t  b 
)

◆ SPIInit()

void SPIInit ( )

◆ SPITransfer()

void SPITransfer ( uint8_t  data)

◆ SPITransferBuffer()

void SPITransferBuffer ( const uint8_t data,
uint32_t  len 
)

◆ VC4ClearScreen()

void VC4ClearScreen ( uint32_t  color)

◆ vc4InitDisplay()

bool vc4InitDisplay ( uint32_t  width,
uint32_t  height,
uint32_t  depth,
display_type_t  display_type 
)

◆ vc4InitDSI()

bool vc4InitDSI ( uint32_t  width,
uint32_t  height,
uint32_t  depth 
)

◆ vc4rgb()

uint32_t vc4rgb ( uint8_t  r,
uint8_t  g,
uint8_t  b 
)

Variable Documentation

◆ mailBOX

uint32_t* mailBOX