ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_mipi_dsi_api.h File Reference

MIPI DSI-2 host driver – public function surface (full HUM Ch 65). More...

#include <stdint.h>
#include "ra8_err.h"
#include "ra8_mipi_dsi_regs.h"
#include "ra8_mipi_dsi_types.h"
Include dependency graph for ra8_mipi_dsi_api.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  ra8_mipi_dsi_video_timing_t
 Compact video-mode timing block (HSA/HBP/HACT/HFP + VSA/VBP/VACT/VFP). More...

Functions

ra8_err_t ra8_mipi_dsi_init (const ra8_mipi_dsi_config_t *cfg)
 Bring up the MIPI DSI host link layer.
ra8_err_t ra8_mipi_dsi_deinit (void)
 Tear down the MIPI DSI host link layer.
ra8_err_t ra8_mipi_dsi_enter_stop (void)
 Gate the MIPI DSI block at the MSTP register.
ra8_err_t ra8_mipi_dsi_exit_stop (void)
 Re-enable the MIPI DSI block clock from MSTP.
ra8_err_t ra8_mipi_dsi_soft_reset (void)
 Pulse RSTCR.SWRST to take the protocol-layer state back to a clean slate (registers retained).
ra8_err_t ra8_mipi_dsi_hs_clock_start (void)
 Start the high-speed differential clock to the panel.
ra8_err_t ra8_mipi_dsi_hs_clock_stop (void)
 Stop the high-speed differential clock.
ra8_err_t ra8_mipi_dsi_send_short_packet (ra8_mipi_dsi_dt_t cmd_id, ra8_mipi_dsi_vc_t vc, uint8_t param0, uint8_t param1)
 Send a DSI short packet on sequence channel 0 (LP escape).
ra8_err_t ra8_mipi_dsi_send_long_packet (ra8_mipi_dsi_dt_t cmd_id, ra8_mipi_dsi_vc_t vc, const uint8_t *data, uint16_t tx_len, bool low_power)
 Send a DSI long-packet write (Generic Long / DCS Long).
ra8_err_t ra8_mipi_dsi_send_command (const ra8_mipi_dsi_command_t *cmd)
 Send any sequence-channel command (full-feature path).
ra8_err_t ra8_mipi_dsi_read_packet (ra8_mipi_dsi_dt_t cmd_id, ra8_mipi_dsi_vc_t vc, uint8_t param0, uint8_t param1, uint8_t *p_rx_buffer, uint16_t rx_len)
 Issue a BTA-then-read on sequence channel 0 and return the captured response payload.
ra8_err_t ra8_mipi_dsi_ulps_enter (uint8_t lanes)
 Drive the selected lanes into Ultra-Low-Power State.
ra8_err_t ra8_mipi_dsi_ulps_exit (uint8_t lanes)
 Wake the selected lanes out of ULPS.
ra8_err_t ra8_mipi_dsi_video_configure (const ra8_mipi_dsi_video_cfg_t *vcfg)
 Programme every video-mode timing register from a single config.
ra8_err_t ra8_mipi_dsi_video_start (const ra8_mipi_dsi_video_cfg_t *vcfg)
 Start video-mode operation.
ra8_err_t ra8_mipi_dsi_video_stop (void)
 Request a video-mode stop and wait for it.
ra8_err_t ra8_mipi_dsi_get_status (uint32_t *out_mask)
 Read the top-level Interrupt Status Register.
ra8_err_t ra8_mipi_dsi_link_status_get (ra8_mipi_dsi_link_status_t *out_status)
 Decode LINKSR into a struct.
ra8_err_t ra8_mipi_dsi_clear_status (uint32_t mask)
 Clear bits in any of the sub-status registers.
ra8_err_t ra8_mipi_dsi_ack_error_get (ra8_mipi_dsi_ack_error_t *out_err)
 Read the latest accumulated ack/error report and clear it.
ra8_err_t ra8_mipi_dsi_rx_result_get (uint8_t slot, ra8_mipi_dsi_rx_result_t *out_result)
 Decode and consume an RXRSS slot.
ra8_err_t ra8_mipi_dsi_rx_payload_read (uint8_t *dest, uint16_t max_len, uint16_t *out_len)
 Copy out the most-recent long-packet RX payload (RXPPD0..3R).
ra8_err_t ra8_mipi_dsi_te_event_pending (bool *out_pending)
 Check if a tearing-effect (TE) trigger was received.
ra8_err_t ra8_mipi_dsi_te_event_clear (void)
 Clear the latched tearing-effect bits in RXSR.
ra8_err_t ra8_mipi_dsi_irq_enable (ra8_mipi_dsi_event_t event, uint32_t mask, bool enable)
 Toggle a sub-class IER bit.
ra8_err_t ra8_mipi_dsi_attach_handler (ra8_mipi_dsi_event_fn_t fn, void *ctx)
 Attach a callback for MIPI DSI interrupt events.
void ra8_mipi_dsi_dispatch (void)
 Snapshot ISR, clear sub-status, fan out per-class callbacks.
void ra8_mipi_dsi_dispatch_seq0 (void)
 Sequence-channel-0 IRQ handler (LP path).
void ra8_mipi_dsi_dispatch_seq1 (void)
 Sequence-channel-1 IRQ handler (HS path).
void ra8_mipi_dsi_dispatch_video (void)
 Video-mode IRQ handler.
void ra8_mipi_dsi_dispatch_receive (void)
 Receive IRQ handler.
void ra8_mipi_dsi_dispatch_fatal (void)
 Fatal-error IRQ handler.
void ra8_mipi_dsi_dispatch_phy (void)
 PHY-protocol-interface IRQ handler.
ra8_err_t ra8_mipi_dsi_set_video_timing (const ra8_mipi_dsi_video_timing_t *timing)
 Load only the HSA/HBP/HACT/HFP/VSA/VBP/VACT/VFP video-timing registers from a compact descriptor.
ra8_err_t ra8_mipi_dsi_send_command_short (ra8_mipi_dsi_dt_t dt, const uint8_t params[2])
 Send a DSI command-mode short packet on VC0 (LP escape).
ra8_err_t ra8_mipi_dsi_send_command_long (ra8_mipi_dsi_dt_t dt, const uint8_t *payload, uint16_t len)
 Send a DSI command-mode long packet on VC0 (HS path).
ra8_err_t ra8_mipi_dsi_send_command_payload (ra8_mipi_dsi_dt_t packet_type, const uint8_t *payload, uint16_t len)
 Send a DSI command-mode packet (short or long) on VC0 in LP escape.
ra8_err_t ra8_mipi_dsi_enter_ulps (void)
 Drive the entire link (clock + data lanes) into ULPS.
ra8_err_t ra8_mipi_dsi_exit_ulps (void)
 Wake the entire link out of ULPS.
ra8_err_t ra8_mipi_dsi_get_link_status (ra8_mipi_dsi_link_status_t *out)
 Snapshot the link state (running flags + busy flags + accumulated ack/error report) into a single struct.

Detailed Description

MIPI DSI-2 host driver – public function surface (full HUM Ch 65).

Tag
[Ring 3 / HAL] {World: S}

Function-prototype split of the MIPI DSI host public API (HUM Ch 65, p 3839-3934). Carries every lifecycle / HS-clock / sequence-channel / ULPS / video-mode / status-IRQ / dispatch prototype plus the Sweep-6 convenience surface and its compact video-timing struct. Pulled out of ra8_mipi_dsi.h so the umbrella stays a thin include shim; consumers keep including ra8_mipi_dsi.h unchanged.

Since
0.1.0

Definition in file ra8_mipi_dsi_api.h.

Function Documentation

◆ ra8_mipi_dsi_ack_error_get()

ra8_err_t ra8_mipi_dsi_ack_error_get ( ra8_mipi_dsi_ack_error_t * out_err)
nodiscard

Read the latest accumulated ack/error report and clear it.

Parameters
[out]out_errDecoded report.
Returns
k_ra8_ok / k_ra8_err_null_ptr.
Precondition
out_err non-NULL.
Driver initialized.
Postcondition
AKEPACMSR written to AKEPSCR (cleared in HW).
*out_err reflects the snapshot before clearing.
Since
0.1.0

Definition at line 256 of file ra8_mipi_dsi_dispatch.c.

References r_mipi_dsi_regs_t::AKEPACMSR, r_mipi_dsi_regs_t::AKEPSCR, ra8_mipi_dsi_ack_error_t::error_report, k_akep_vc_shift, k_ra8_mipi_dsi_akep_erep_mask, k_ra8_mipi_dsi_akep_vc_mask, k_ra8_mipi_dsi_vc_mask, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), s_tag, and ra8_mipi_dsi_ack_error_t::virtual_channel.

◆ ra8_mipi_dsi_attach_handler()

ra8_err_t ra8_mipi_dsi_attach_handler ( ra8_mipi_dsi_event_fn_t fn,
void * ctx )
nodiscard

Attach a callback for MIPI DSI interrupt events.

Parameters
[in]fnFunction to call (or nullptr to detach).
[in]ctxOpaque context passed back to fn.
Returns
k_ra8_ok.
Precondition
Caller's fn is ISR-safe.
Caller owns ctx lifetime for as long as fn is attached.
Postcondition
Subsequent ra8_mipi_dsi_dispatch* calls invoke fn.
Detached state silently swallowed.
Since
0.1.0

Definition at line 387 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_ok, s_mipi_dsi_event_ctx, and s_mipi_dsi_event_fn.

◆ ra8_mipi_dsi_clear_status()

ra8_err_t ra8_mipi_dsi_clear_status ( uint32_t mask)
nodiscard

Clear bits in any of the sub-status registers.

Fans mask out across SQCH0SCR, SQCH1SCR, VMSCR, RXSCR, FERRSCR, PLSCR so callers do not need to track which bit lives where.

Parameters
[in]maskOR of ra8_mipi_dsi_isr_mask_t bits to clear.
Returns
k_ra8_ok always.
Precondition
Driver init has run (or this is the bring-up path).
mask only contains bits defined in ra8_mipi_dsi_isr_mask_t.
Postcondition
Cleared sub-status registers read 0 for the requested bits.
Other status bits are preserved.
Since
0.1.0

Definition at line 226 of file ra8_mipi_dsi_dispatch.c.

References r_mipi_dsi_regs_t::FERRSCR, k_ra8_mipi_dsi_ferrsr_clear_all, k_ra8_mipi_dsi_isr_ferr, k_ra8_mipi_dsi_isr_ppi, k_ra8_mipi_dsi_isr_rcv, k_ra8_mipi_dsi_isr_sq0, k_ra8_mipi_dsi_isr_sq1, k_ra8_mipi_dsi_isr_vm, k_ra8_mipi_dsi_plsr_clear_all, k_ra8_mipi_dsi_rxsr_clear_all, k_ra8_mipi_dsi_sqch_clear_all, k_ra8_mipi_dsi_vmsr_clear_all, k_ra8_ok, r_mipi_dsi_regs_t::PLSCR, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RXSCR, r_mipi_dsi_regs_t::SQCH0SCR, r_mipi_dsi_regs_t::SQCH1SCR, and r_mipi_dsi_regs_t::VMSCR.

◆ ra8_mipi_dsi_deinit()

ra8_err_t ra8_mipi_dsi_deinit ( void )
nodiscard

Tear down the MIPI DSI host link layer.

Detaches any IRQ handler, asserts RSTCR.SWRST, then disables the MSTP gate. Idempotent: calling twice in a row is harmless.

Returns
ra8_err_t outcome.
Return values
k_ra8_okBlock stopped, MSTP gated.
k_ra8_err_hw_timeoutMSTP read-back loop timed out.
Precondition
Driver was initialized with ra8_mipi_dsi_init (ignored if not).
No active sequence operation (LINKSR.SQ0RUN == SQ1RUN == 0).
Postcondition
IRQ callback pointer cleared.
MSTPCRC.MSTPC10 set (block clock gated).
Note
Not thread-safe.
See also
ra8_mipi_dsi_init
Since
0.1.0

Definition at line 466 of file ra8_mipi_dsi.c.

References k_ra8_mipi_dsi_rstcr_swrst, k_ra8_mstp_mipi_dsi, k_ra8_ok, ra8_mipi_dsi(), ra8_mstp_disable(), r_mipi_dsi_regs_t::RSTCR, s_clock_lanes_in_ulps, s_continuous_clock, s_data_lanes_in_ulps, s_initialized, s_mipi_dsi_event_ctx, s_mipi_dsi_event_fn, s_mipi_dsi_pending_rx_buffer, and s_mipi_dsi_pending_rx_len.

◆ ra8_mipi_dsi_dispatch()

void ra8_mipi_dsi_dispatch ( void )

Snapshot ISR, clear sub-status, fan out per-class callbacks.

Convenience trampoline that calls every per-class ra8_mipi_dsi_dispatch_* whose ISR bit is set. The platform's NVIC stub may also call individual _dispatch_* directly when wired up per-IRQ.

Precondition
Called either in IRQ context or with IRQs masked.
Driver init has run.
Postcondition
ISR reads 0 for the bits that were set when the call began.
Per-class dispatch trampolines have each fired at most once.
Note
Not thread-safe; pair with NVIC masking. See HUM Ch 65 "MIPI DSI Host" pp 3839-3934.
Since
0.1.0

Definition at line 511 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), r_mipi_dsi_regs_t::ISR, k_ra8_mipi_dsi_event_phy, k_ra8_mipi_dsi_isr_all, k_ra8_mipi_dsi_isr_ferr, k_ra8_mipi_dsi_isr_ppi, k_ra8_mipi_dsi_isr_rcv, k_ra8_mipi_dsi_isr_sq0, k_ra8_mipi_dsi_isr_sq1, k_ra8_mipi_dsi_isr_vm, ra8_mipi_dsi(), ra8_mipi_dsi_dispatch_fatal(), ra8_mipi_dsi_dispatch_phy(), ra8_mipi_dsi_dispatch_receive(), ra8_mipi_dsi_dispatch_seq0(), ra8_mipi_dsi_dispatch_seq1(), and ra8_mipi_dsi_dispatch_video().

◆ ra8_mipi_dsi_dispatch_fatal()

void ra8_mipi_dsi_dispatch_fatal ( void )

Fatal-error IRQ handler.

Snapshots FERRSR, clears the latched bits and invokes the registered fatal callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
FERRSR cleared.
Callback invoked with fatal event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 489 of file ra8_mipi_dsi_dispatch.c.

References r_mipi_dsi_regs_t::FERRSCR, r_mipi_dsi_regs_t::FERRSR, internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_fatal, k_ra8_mipi_dsi_ferrsr_clear_all, and ra8_mipi_dsi().

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_dispatch_phy()

void ra8_mipi_dsi_dispatch_phy ( void )

PHY-protocol-interface IRQ handler.

Snapshots PLSR, clears the latched bits and invokes the registered phy callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
PLSR cleared.
Callback invoked with phy event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 500 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_phy, k_ra8_mipi_dsi_plsr_clear_all, r_mipi_dsi_regs_t::PLSCR, r_mipi_dsi_regs_t::PLSR, and ra8_mipi_dsi().

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_dispatch_receive()

void ra8_mipi_dsi_dispatch_receive ( void )

Receive IRQ handler.

Snapshots RXSR, clears the latched bits and invokes the registered receive callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
RXSR cleared.
Callback invoked with receive event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 464 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_receive, k_ra8_mipi_dsi_rxrinfoow_sl0, k_ra8_mipi_dsi_rxsr_clear_all, k_ra8_mipi_dsi_rxsr_rxresp, ra8_mipi_dsi(), ra8_mipi_dsi_rx_payload_read(), r_mipi_dsi_regs_t::RXRINFOOWSCR, r_mipi_dsi_regs_t::RXSCR, r_mipi_dsi_regs_t::RXSR, s_mipi_dsi_pending_rx_buffer, and s_mipi_dsi_pending_rx_len.

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_dispatch_seq0()

void ra8_mipi_dsi_dispatch_seq0 ( void )

Sequence-channel-0 IRQ handler (LP path).

Snapshots SQCH0SR, clears the latched bits and invokes the registered seq0 callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
SQCH0SR cleared.
Callback invoked with seq0 event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 424 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_seq0, k_ra8_mipi_dsi_sqch_clear_all, ra8_mipi_dsi(), r_mipi_dsi_regs_t::SQCH0SCR, and r_mipi_dsi_regs_t::SQCH0SR.

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_dispatch_seq1()

void ra8_mipi_dsi_dispatch_seq1 ( void )

Sequence-channel-1 IRQ handler (HS path).

Snapshots SQCH1SR, clears the latched bits and invokes the registered seq1 callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
SQCH1SR cleared.
Callback invoked with seq1 event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 435 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_seq1, k_ra8_mipi_dsi_sqch_clear_all, ra8_mipi_dsi(), r_mipi_dsi_regs_t::SQCH1SCR, and r_mipi_dsi_regs_t::SQCH1SR.

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_dispatch_video()

void ra8_mipi_dsi_dispatch_video ( void )

Video-mode IRQ handler.

Snapshots VMSR, clears the latched bits and invokes the registered video callback. Safe to call from a spurious IRQ.

Precondition
Driver init done.
IRQ context.
Postcondition
VMSR cleared.
Callback invoked with video event.
Note
ISR-context only; not thread-safe.
Since
0.1.0

Definition at line 446 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_call_user(), k_ra8_mipi_dsi_event_video, k_ra8_mipi_dsi_rstcr_swrst, k_ra8_mipi_dsi_vmsr_clear_all, k_ra8_mipi_dsi_vmsr_vbufovf, k_ra8_mipi_dsi_vmsr_vbufudf, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RSTCR, r_mipi_dsi_regs_t::VMSCR, and r_mipi_dsi_regs_t::VMSR.

Referenced by ra8_mipi_dsi_dispatch().

◆ ra8_mipi_dsi_enter_stop()

ra8_err_t ra8_mipi_dsi_enter_stop ( void )
nodiscard

Gate the MIPI DSI block at the MSTP register.

Returns
ra8_err_t outcome.
Return values
k_ra8_okBlock gated.
k_ra8_err_hw_timeoutMSTP read-back loop timed out.
Precondition
Sequence + video engines are idle (caller's responsibility).
IRQs are masked.
Postcondition
MSTPCRC.MSTPC10 is set.
See also
ra8_mipi_dsi_exit_stop
Since
0.1.0

Definition at line 495 of file ra8_mipi_dsi.c.

References k_ra8_err_invalid_state, k_ra8_mstp_mipi_dsi, k_ra8_ok, ra8_mstp_disable(), and s_initialized.

◆ ra8_mipi_dsi_enter_ulps()

ra8_err_t ra8_mipi_dsi_enter_ulps ( void )
nodiscard

Drive the entire link (clock + data lanes) into ULPS.

Convenience equivalent to ra8_mipi_dsi_ulps_enter(k_ra8_mipi_dsi_lane_all). Honours the same continuous-clock-mode guard as the underlying call.

Returns
ra8_err_t outcome.
Return values
k_ra8_okBoth lanes pulsed into ULPS.
k_ra8_err_invalid_argContinuous-clock mode active and clock lane requested – HW prohibits it.
Precondition
Driver initialized, HS clock currently running.
Continuous-clock mode is OFF.
Postcondition
ULPSCR.CLENT and DLENT have been pulsed.
Subsequent ra8_mipi_dsi_send_* is rejected until ra8_mipi_dsi_exit_ulps.
Since
0.1.0

Definition at line 644 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_lane_all, and ra8_mipi_dsi_ulps_enter().

◆ ra8_mipi_dsi_exit_stop()

ra8_err_t ra8_mipi_dsi_exit_stop ( void )
nodiscard

Re-enable the MIPI DSI block clock from MSTP.

Returns
ra8_err_t outcome.
Return values
k_ra8_okBlock clocked again.
k_ra8_err_hw_timeoutMSTP read-back loop timed out.
Precondition
Caller is in single-threaded context.
PHY is up and out of LP-11 stop.
Postcondition
MSTPCRC.MSTPC10 is clear, register I/O works again.
See also
ra8_mipi_dsi_enter_stop
Since
0.1.0

Definition at line 510 of file ra8_mipi_dsi.c.

References k_ra8_err_invalid_state, k_ra8_mstp_mipi_dsi, k_ra8_ok, ra8_mstp_enable(), and s_initialized.

◆ ra8_mipi_dsi_exit_ulps()

ra8_err_t ra8_mipi_dsi_exit_ulps ( void )
nodiscard

Wake the entire link out of ULPS.

Convenience equivalent to ra8_mipi_dsi_ulps_exit(k_ra8_mipi_dsi_lane_all).

Returns
ra8_err_t outcome.
Return values
k_ra8_okBoth lanes woken.
Precondition
At least one of the lanes was previously placed in ULPS.
Driver initialized.
Postcondition
ULPSCR.CLEXIT and DLEXIT pulsed.
Link is ready for HS / LP traffic again once the wake-up sequence completes.
Since
0.1.0

Definition at line 649 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_lane_all, and ra8_mipi_dsi_ulps_exit().

◆ ra8_mipi_dsi_get_link_status()

ra8_err_t ra8_mipi_dsi_get_link_status ( ra8_mipi_dsi_link_status_t * out)
nodiscard

Snapshot the link state (running flags + busy flags + accumulated ack/error report) into a single struct.

Convenience around ra8_mipi_dsi_link_status_get – some callers want the more direct "get_link_status" name from the FSP surface.

Parameters
[out]outDecoded link status.
Returns
ra8_err_t outcome.
Return values
k_ra8_okStatus returned.
k_ra8_err_null_ptrout == nullptr.
Precondition
out non-NULL.
Driver initialized.
Postcondition
*out reflects the current LINKSR snapshot.
No registers mutated.
Since
0.1.0

Definition at line 654 of file ra8_mipi_dsi_dispatch.c.

References ra8_mipi_dsi_link_status_get().

◆ ra8_mipi_dsi_get_status()

ra8_err_t ra8_mipi_dsi_get_status ( uint32_t * out_mask)
nodiscard

Read the top-level Interrupt Status Register.

Parameters
[out]out_maskReceives the raw ISR value.
Returns
k_ra8_ok / k_ra8_err_null_ptr.
Precondition
out_mask non-NULL.
Driver init has run.
Postcondition
*out_mask reflects the current ISR snapshot.
No registers mutated.
Since
0.1.0

Definition at line 205 of file ra8_mipi_dsi_dispatch.c.

References r_mipi_dsi_regs_t::ISR, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), and s_tag.

◆ ra8_mipi_dsi_hs_clock_start()

ra8_err_t ra8_mipi_dsi_hs_clock_start ( void )
nodiscard

Start the high-speed differential clock to the panel.

Sets HSCLKSETR.HSCLST = 1 and, if the init config selected continuous mode, also sets HSCLMD = 1. Polls PLSR.CLLP2HS until the clock-lane LP-to-HS event fires (bounded by k_ra8_mipi_dsi_busy_loop_max).

Returns
k_ra8_ok on success, k_ra8_err_hw_timeout on poll timeout.
Precondition
Driver is initialized.
PHY is up.
Postcondition
LINKSR.HSBUSY clear once HS clock is stable.
Continuous mode: clock keeps running until ra8_mipi_dsi_hs_clock_stop().
Since
0.1.0

Definition at line 539 of file ra8_mipi_dsi.c.

References r_mipi_dsi_regs_t::HSCLKSETR, k_ra8_mipi_dsi_hsclk_continuous, k_ra8_mipi_dsi_hsclk_start, k_ra8_mipi_dsi_plsr_cllp2hs, r_mipi_dsi_regs_t::PLSR, priv_ra8_mipi_dsi_internal_wait_eq(), ra8_mipi_dsi(), and s_continuous_clock.

Referenced by ra8_board_mipi_dsi_init().

◆ ra8_mipi_dsi_hs_clock_stop()

ra8_err_t ra8_mipi_dsi_hs_clock_stop ( void )
nodiscard

Stop the high-speed differential clock.

Clears HSCLKSETR.HSCLST and waits for PLSR.CLHS2LP.

Returns
k_ra8_ok on success, k_ra8_err_hw_timeout on poll timeout.
Precondition
Sequence channels idle.
Video mode stopped.
Postcondition
HS clock lane is back to LP-11.
Subsequent HS Tx will fail until the clock is restarted.
Since
0.1.0

Definition at line 554 of file ra8_mipi_dsi.c.

References r_mipi_dsi_regs_t::HSCLKSETR, k_ra8_mipi_dsi_plsr_clhs2lp, r_mipi_dsi_regs_t::PLSR, priv_ra8_mipi_dsi_internal_wait_eq(), and ra8_mipi_dsi().

◆ ra8_mipi_dsi_init()

ra8_err_t ra8_mipi_dsi_init ( const ra8_mipi_dsi_config_t * cfg)
nodiscard

Bring up the MIPI DSI host link layer.

  1. Releases module-stop bit MSTPCRC.MSTPC10 (HUM 11.2.8 p 446).
  2. Asserts then de-asserts RSTCR.SWRST to drop the block back to a known reset state.
  3. Programmes lane count + lane enables in TXSETR.
  4. Loads DSISETR from the config struct (ECC, CRC mask, scramble, EoTp, tearing detect, max-return-packet size).
  5. Loads guard-band timing into CLSTPTSETR / LPTRNSTSETR.
  6. Loads bus timeouts into HSTXTOSETR / LRXHTOSETR / TATOSETR / PRESPTOBTASETR / PRESPTOLPSETR / PRESPTOHSSETR.
  7. Loads ULPS wake-up period into ULPSSETR.
  8. Clears all latched status flags so the first IRQ reflects only post-init events.

The HS clock is not started by this function; call ra8_mipi_dsi_hs_clock_start() separately so the application can insert PHY-level steps in between.

Parameters
[in]cfgStatic driver configuration. Must not be nullptr.
Returns
ra8_err_t outcome.
Return values
k_ra8_okDriver initialized, link up.
k_ra8_err_null_ptrcfg == nullptr.
k_ra8_err_invalid_argLane count outside [1,2].
k_ra8_err_hw_timeoutMSTP read-back loop timed out.
Precondition
cfg is non-NULL.
cfg->lane_count is one of the k_ra8_mipi_dsi_lanes_* values.
Postcondition
On success, LINKSR reports HSBUSY/LPBUSY clear.
On success, every sub-status register reads 0.
Note
Not thread-safe. Call from single-threaded init context.
Warning
The MIPI PHY (HUM Ch 64) must be brought up first.
See also
ra8_mipi_dsi_deinit
ra8_mipi_dsi_hs_clock_start
Since
0.1.0

Definition at line 439 of file ra8_mipi_dsi.c.

References ra8_mipi_dsi_config_t::clock_mode, internal_program_link(), internal_program_timeouts(), internal_ra8_mipi_dsi_clear_all_status(), internal_ra8_mipi_dsi_validate_cfg(), k_ra8_mipi_dsi_clock_continuous, k_ra8_mstp_mipi_dsi, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_log_info, ra8_mstp_enable(), RA8_RETURN_ON_ERROR, s_clock_lanes_in_ulps, s_continuous_clock, s_data_lanes_in_ulps, s_initialized, s_mipi_dsi_event_ctx, s_mipi_dsi_event_fn, s_mipi_dsi_pending_rx_buffer, s_mipi_dsi_pending_rx_len, and s_tag.

Referenced by ra8_board_mipi_dsi_init().

◆ ra8_mipi_dsi_irq_enable()

ra8_err_t ra8_mipi_dsi_irq_enable ( ra8_mipi_dsi_event_t event,
uint32_t mask,
bool enable )
nodiscard

Toggle a sub-class IER bit.

Parameters
[in]eventWhich class (k_ra8_mipi_dsi_event_*).
[in]maskBits inside the class IER register to update.
[in]enabletrue -> set selected bits, false -> clear.
Returns
k_ra8_ok / k_ra8_err_invalid_arg for unknown class.
Precondition
Driver initialized.
event is a defined enumerator.
Postcondition
Selected IER bits updated.
Other IER bits preserved.
Since
0.1.0

Definition at line 347 of file ra8_mipi_dsi_dispatch.c.

References r_mipi_dsi_regs_t::FERRIER, k_ra8_err_invalid_arg, k_ra8_mipi_dsi_event_fatal, k_ra8_mipi_dsi_event_phy, k_ra8_mipi_dsi_event_receive, k_ra8_mipi_dsi_event_seq0, k_ra8_mipi_dsi_event_seq1, k_ra8_mipi_dsi_event_video, k_ra8_ok, r_mipi_dsi_regs_t::PLIER, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RXIER, r_mipi_dsi_regs_t::SQCH0IER, r_mipi_dsi_regs_t::SQCH1IER, and r_mipi_dsi_regs_t::VMIER.

◆ ra8_mipi_dsi_link_status_get()

ra8_err_t ra8_mipi_dsi_link_status_get ( ra8_mipi_dsi_link_status_t * out_status)
nodiscard

Decode LINKSR into a struct.

Parameters
[out]out_statusDecoded status.
Returns
k_ra8_ok / k_ra8_err_null_ptr.
Precondition
out_status non-NULL.
Driver initialized.
Postcondition
*out_status populated with the current LINKSR snapshot.
No registers mutated.
Since
0.1.0

Definition at line 213 of file ra8_mipi_dsi_dispatch.c.

References ra8_mipi_dsi_link_status_t::hs_busy, k_ra8_mipi_dsi_link_hsbusy, k_ra8_mipi_dsi_link_lpbusy, k_ra8_mipi_dsi_link_sq0run, k_ra8_mipi_dsi_link_sq1run, k_ra8_mipi_dsi_link_vrun, k_ra8_ok, r_mipi_dsi_regs_t::LINKSR, ra8_mipi_dsi_link_status_t::lp_busy, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), s_tag, ra8_mipi_dsi_link_status_t::sequence_ch0_running, ra8_mipi_dsi_link_status_t::sequence_ch1_running, and ra8_mipi_dsi_link_status_t::video_running.

Referenced by ra8_mipi_dsi_get_link_status().

◆ ra8_mipi_dsi_read_packet()

ra8_err_t ra8_mipi_dsi_read_packet ( ra8_mipi_dsi_dt_t cmd_id,
ra8_mipi_dsi_vc_t vc,
uint8_t param0,
uint8_t param1,
uint8_t * p_rx_buffer,
uint16_t rx_len )
nodiscard

Issue a BTA-then-read on sequence channel 0 and return the captured response payload.

Builds a Generic / DCS read descriptor with BTA = bta_read, kicks the sequence, then leaves response collection to the IRQ – the caller polls ra8_mipi_dsi_rx_result_get() for the slot containing the result.

Parameters
[in]cmd_idk_ra8_mipi_dsi_dt_gen_read_* or k_ra8_mipi_dsi_dt_dcs_read.
[in]vcVirtual channel.
[in]param0First parameter byte.
[in]param1Second parameter byte.
[out]p_rx_bufferBuffer the IRQ handler will copy RXPPD into.
[in]rx_lenMaximum bytes the buffer can hold.
Returns
ra8_err_t outcome.
Return values
k_ra8_okRead kicked off.
k_ra8_err_null_ptrp_rx_buffer == nullptr.
k_ra8_err_invalid_argvc > 3 or rx_len == 0.
k_ra8_err_busySequence engine running.
Precondition
Driver initialized; PHY in BTA-capable state.
p_rx_buffer lives until the IRQ fires.
Postcondition
Descriptor 0 of channel 0 holds a read header.
SQCH0SET0R pulsed.
Since
0.1.0

Definition at line 434 of file ra8_mipi_dsi_cmd.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_dsi_bta_read, RA8_CHECK_NULL_PTR, ra8_mipi_dsi_send_command(), s_mipi_dsi_pending_rx_buffer, s_mipi_dsi_pending_rx_len, and s_tag.

◆ ra8_mipi_dsi_rx_payload_read()

ra8_err_t ra8_mipi_dsi_rx_payload_read ( uint8_t * dest,
uint16_t max_len,
uint16_t * out_len )
nodiscard

Copy out the most-recent long-packet RX payload (RXPPD0..3R).

Parameters
[out]destCaller buffer.
[in]max_lenBytes available in dest (capped at 16).
[out]out_lenBytes actually read.
Returns
k_ra8_ok / k_ra8_err_null_ptr.
Precondition
dest and out_len non-NULL.
max_len <= k_ra8_mipi_dsi_payload_max.
Postcondition
dest[0..*out_len) populated.
*out_len <= 16.
Since
0.1.0

Definition at line 310 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_byte_mask, k_ra8_mipi_dsi_payload_max, k_ra8_ok, k_shift_8, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RXPPD0R, r_mipi_dsi_regs_t::RXPPD1R, r_mipi_dsi_regs_t::RXPPD2R, r_mipi_dsi_regs_t::RXPPD3R, and s_tag.

Referenced by ra8_mipi_dsi_dispatch_receive().

◆ ra8_mipi_dsi_rx_result_get()

ra8_err_t ra8_mipi_dsi_rx_result_get ( uint8_t slot,
ra8_mipi_dsi_rx_result_t * out_result )
nodiscard

Decode and consume an RXRSS slot.

Parameters
[in]slot0..3 – which RXRSS register.
[out]out_resultDecoded packet header.
Returns
k_ra8_ok if the slot was valid, k_ra8_err_no_data if the slot's RXRSSR.SLT*VLD bit was clear.
Precondition
out_result non-NULL.
slot in 0..3.
Postcondition
On success, slot's RXRSSR + RXRINFOOWSR valid bits cleared.
*out_result carries the decoded header.
Since
0.1.0

Definition at line 271 of file ra8_mipi_dsi_dispatch.c.

References internal_ra8_mipi_dsi_decode_rx(), k_ra8_err_invalid_arg, k_ra8_err_no_data, k_ra8_mipi_dsi_rx_slots, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RXRINFOOWSCR, r_mipi_dsi_regs_t::RXRSS0R, r_mipi_dsi_regs_t::RXRSS1R, r_mipi_dsi_regs_t::RXRSS2R, r_mipi_dsi_regs_t::RXRSS3R, r_mipi_dsi_regs_t::RXRSSCR, r_mipi_dsi_regs_t::RXRSSR, and s_tag.

◆ ra8_mipi_dsi_send_command()

ra8_err_t ra8_mipi_dsi_send_command ( const ra8_mipi_dsi_command_t * cmd)
nodiscard

Send any sequence-channel command (full-feature path).

Assembles a descriptor from cmd – handles short / long / aux-op / BTA / ack-request / LP vs HS / read-with-rx-buffer in one entry point. This is the FSP-equivalent surface; the helpers above just wrap it.

Parameters
[in]cmdValidated command descriptor.
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued.
k_ra8_err_null_ptrcmd == nullptr.
k_ra8_err_invalid_argcmd->virtual_channel > 3, or LP and tx_len > 128, or HS and tx_len > 1024, or aux op while video running.
k_ra8_err_busySequence engine running.
k_ra8_err_invalid_stateLP requested while video mode running.
Precondition
cmd non-NULL.
Driver initialized.
Postcondition
Selected sequence channel descriptor 0 populated.
SQCH*SET0R pulsed.
Since
0.1.0

Definition at line 370 of file ra8_mipi_dsi_cmd.c.

References internal_check_link_state(), internal_ra8_mipi_dsi_validate_cmd(), internal_send_stage_and_pulse(), k_ra8_mipi_dsi_payload_max, k_ra8_ok, ra8_mipi_dsi_command_t::p_rx_buffer, RA8_CHECK_NULL_PTR, RA8_RETURN_ON_ERROR, s_mipi_dsi_pending_rx_buffer, s_mipi_dsi_pending_rx_len, and s_tag.

Referenced by ra8_mipi_dsi_read_packet(), ra8_mipi_dsi_send_long_packet(), and ra8_mipi_dsi_send_short_packet().

◆ ra8_mipi_dsi_send_command_long()

ra8_err_t ra8_mipi_dsi_send_command_long ( ra8_mipi_dsi_dt_t dt,
const uint8_t * payload,
uint16_t len )
nodiscard

Send a DSI command-mode long packet on VC0 (HS path).

Convenience surface around ra8_mipi_dsi_send_long_packet – always uses VC0 and the high-speed sequence channel 1, which is what every command-mode panel programming sequence wants. Use the lower-level helper if you need LP routing or a non-zero VC. HUM Ch 65 "Long packet write" p 3839+.

Parameters
[in]dtk_ra8_mipi_dsi_dt_gen_long_write or k_ra8_mipi_dsi_dt_dcs_long_write.
[in]payloadPayload bytes (len bytes long).
[in]lenPayload length in bytes (max 1024 in HS mode).
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued, START asserted.
k_ra8_err_null_ptrpayload == nullptr and len > 0.
k_ra8_err_invalid_arglen > 1024.
k_ra8_err_busySequence engine running.
Precondition
Driver initialized.
Either len == 0 or payload valid.
Postcondition
Descriptor 0 of channel 1 carries the long-packet header.
Since
0.1.0

Definition at line 613 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_err_null_ptr, k_ra8_mipi_dsi_vc0, and ra8_mipi_dsi_send_long_packet().

◆ ra8_mipi_dsi_send_command_payload()

ra8_err_t ra8_mipi_dsi_send_command_payload ( ra8_mipi_dsi_dt_t packet_type,
const uint8_t * payload,
uint16_t len )
nodiscard

Send a DSI command-mode packet (short or long) on VC0 in LP escape.

Routes a command-mode payload through the LP-escape sequence channel. Short writes (len <= 2) use the short-packet path; longer writes go through the long-packet path with the payload staged into TXPPD0..3R. Mirrors HUM Ch 65 "Command-mode packet TX" pp 3839-3934.

Parameters
[in]packet_typeDSI Data Type (see k_ra8_mipi_dsi_dt_*).
[in]payloadPayload bytes (len bytes).
[in]lenPayload length in bytes (LP cap = 128).
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued.
k_ra8_err_null_ptrpayload == nullptr and len > 0.
k_ra8_err_invalid_arglen > 128 (LP cap).
k_ra8_err_busySequence engine still running.
Precondition
Driver initialized via ra8_mipi_dsi_init.
Either len == 0 or payload is non-NULL.
Postcondition
Sequence channel 0 descriptor 0 carries the assembled header.
SQCH0SET0R pulsed with START.
Note
Not thread-safe.
Since
0.1.0

< RA8 mipi dsi short payload maximum.

Definition at line 622 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_err_null_ptr, k_ra8_mipi_dsi_vc0, ra8_mipi_dsi_send_long_packet(), and ra8_mipi_dsi_send_short_packet().

◆ ra8_mipi_dsi_send_command_short()

ra8_err_t ra8_mipi_dsi_send_command_short ( ra8_mipi_dsi_dt_t dt,
const uint8_t params[2] )
nodiscard

Send a DSI command-mode short packet on VC0 (LP escape).

Convenience surface around ra8_mipi_dsi_send_short_packet that matches the FSP "command short" signature: a Data Type plus a 2-byte parameter array. Always sent on virtual channel 0 in low power escape mode. HUM Ch 65 "Command-mode short packet" p 3839+.

Parameters
[in]dtOne of the k_ra8_mipi_dsi_dt_*_short_* constants.
[in]params2-element array carrying parameter 0 / 1.
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued.
k_ra8_err_null_ptrparams == nullptr.
k_ra8_err_busySequence engine still running.
k_ra8_err_invalid_stateVideo mode running (LP rejected).
Precondition
Driver initialized.
params is non-NULL.
Postcondition
Sequence channel 0 descriptor 0 carries the assembled header.
SQCH0SET0R pulsed with START.
Since
0.1.0

Definition at line 605 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_vc0, RA8_CHECK_NULL_PTR, ra8_mipi_dsi_send_short_packet(), and s_tag.

◆ ra8_mipi_dsi_send_long_packet()

ra8_err_t ra8_mipi_dsi_send_long_packet ( ra8_mipi_dsi_dt_t cmd_id,
ra8_mipi_dsi_vc_t vc,
const uint8_t * data,
uint16_t tx_len,
bool low_power )
nodiscard

Send a DSI long-packet write (Generic Long / DCS Long).

Stages the payload bytes into TXPPD0..3R (max 16 bytes) and points the descriptor at the packet RAM. For payloads > 16 bytes the descriptor word D carries an external buffer pointer.

Parameters
[in]cmd_idk_ra8_mipi_dsi_dt_gen_long_write or k_ra8_mipi_dsi_dt_dcs_long_write.
[in]vcVirtual channel (0..3).
[in]dataPayload bytes (tx_len long).
[in]tx_lenPayload length in bytes (max 65535 per spec).
[in]low_powertrue to send via channel 0 (LP), false for channel 1 (HS).
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued, START asserted.
k_ra8_err_null_ptrdata == nullptr and tx_len > 0.
k_ra8_err_invalid_argvc > 3 or LP and tx_len > 128.
k_ra8_err_busySequence engine already running.
Precondition
Driver initialized.
Either tx_len == 0 or data valid.
Postcondition
Descriptor 0 of the selected channel carries the long-packet header (DATA0 = WC[7:0], DATA1 = WC[15:8]).
SQCH*SET0R pulsed with START + CHSEL for that channel.
Since
0.1.0

Definition at line 410 of file ra8_mipi_dsi_cmd.c.

References k_ra8_err_null_ptr, k_ra8_mipi_dsi_bta_none, and ra8_mipi_dsi_send_command().

Referenced by ra8_mipi_dsi_send_command_long(), and ra8_mipi_dsi_send_command_payload().

◆ ra8_mipi_dsi_send_short_packet()

ra8_err_t ra8_mipi_dsi_send_short_packet ( ra8_mipi_dsi_dt_t cmd_id,
ra8_mipi_dsi_vc_t vc,
uint8_t param0,
uint8_t param1 )
nodiscard

Send a DSI short packet on sequence channel 0 (LP escape).

Backwards-compat helper – assembles a default LP descriptor with SPD=1, BTA=none, no ack, no aux, then pulses START. Equivalent to ra8_mipi_dsi_send_command() with the matching ra8_mipi_dsi_command_t.

Parameters
[in]cmd_idOne of the k_ra8_mipi_dsi_dt_* short-write constants.
[in]vcVirtual channel (0..3).
[in]param0First parameter byte.
[in]param1Second parameter byte.
Returns
ra8_err_t outcome.
Return values
k_ra8_okPacket queued and START asserted.
k_ra8_err_invalid_argvc > 3.
k_ra8_err_busySequence engine already running.
Precondition
Driver was initialized via ra8_mipi_dsi_init.
LINKSR.SQ0RUN is 0.
Postcondition
Descriptor 0 of channel 0 carries the assembled header.
SQCH0SET0R was pulsed with START + CHSEL.
Since
0.1.0

Definition at line 389 of file ra8_mipi_dsi_cmd.c.

References k_ra8_mipi_dsi_bta_none, and ra8_mipi_dsi_send_command().

Referenced by ra8_mipi_dsi_send_command_payload(), and ra8_mipi_dsi_send_command_short().

◆ ra8_mipi_dsi_set_video_timing()

ra8_err_t ra8_mipi_dsi_set_video_timing ( const ra8_mipi_dsi_video_timing_t * timing)
nodiscard

Load only the HSA/HBP/HACT/HFP/VSA/VBP/VACT/VFP video-timing registers from a compact descriptor.

Wraps ra8_mipi_dsi_video_configure with sensible defaults (RGB888 pixel format on VC0, sync-pulse mode off, HSA/HBP/HFP-no-LP all set so the link stays HS through blanking). The remaining VMSET1R / VMPPSETR fields keep their power-on defaults.

Parameters
[in]timingCompact timing descriptor.
Returns
ra8_err_t outcome.
Return values
k_ra8_okTiming registers loaded.
k_ra8_err_null_ptrtiming == nullptr.
k_ra8_err_invalid_argA field is wider than the target register.
Precondition
Driver initialized.
timing is non-NULL.
Postcondition
Video-mode timing registers reflect the new values.
Other VM* registers preserve their power-on defaults.
Note
Not thread-safe. Call from single-threaded init or with IRQs masked.
See also
ra8_mipi_dsi_video_configure – full-feature surface.
ra8_mipi_dsi_video_start
Since
0.1.0

Definition at line 560 of file ra8_mipi_dsi_dispatch.c.

References ra8_mipi_dsi_video_timing_t::horizontal_active, ra8_mipi_dsi_video_timing_t::horizontal_back_porch, ra8_mipi_dsi_video_timing_t::horizontal_front_porch, ra8_mipi_dsi_video_timing_t::horizontal_sync, k_ra8_err_invalid_arg, k_ra8_mipi_dsi_dt_pixel_rgb888, k_ra8_mipi_dsi_timing_max_active, k_ra8_mipi_dsi_timing_max_porch, k_ra8_mipi_dsi_timing_max_sync, k_ra8_mipi_dsi_vc0, RA8_CHECK_NULL_PTR, ra8_mipi_dsi_video_configure(), s_tag, ra8_mipi_dsi_video_timing_t::vertical_active, ra8_mipi_dsi_video_timing_t::vertical_back_porch, ra8_mipi_dsi_video_timing_t::vertical_front_porch, and ra8_mipi_dsi_video_timing_t::vertical_sync.

◆ ra8_mipi_dsi_soft_reset()

ra8_err_t ra8_mipi_dsi_soft_reset ( void )
nodiscard

Pulse RSTCR.SWRST to take the protocol-layer state back to a clean slate (registers retained).

Returns
k_ra8_ok always.
Precondition
Caller has IRQs masked or is in IRQ context.
Sequence channels are idle.
Postcondition
RSTSR.RSTHS|RSTLP|RSTAPB|RSTAXI|RSTV read 0 on success.
Block is ready for a fresh ra8_mipi_dsi_hs_clock_start().
Since
0.1.0

Definition at line 524 of file ra8_mipi_dsi.c.

References k_ra8_mipi_dsi_rstcr_swrst, k_ra8_ok, ra8_mipi_dsi(), and r_mipi_dsi_regs_t::RSTCR.

◆ ra8_mipi_dsi_te_event_clear()

ra8_err_t ra8_mipi_dsi_te_event_clear ( void )
nodiscard

Clear the latched tearing-effect bits in RXSR.

Returns
k_ra8_ok.
Precondition
Driver initialized.
Caller is in IRQ context or has IRQs masked.
Postcondition
RXSR.RXTE / EXTEDET clear.
Other RXSR bits preserved.
Since
0.1.0

Definition at line 339 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_rxsr_extedet, k_ra8_mipi_dsi_rxsr_rxte, k_ra8_ok, ra8_mipi_dsi(), and r_mipi_dsi_regs_t::RXSCR.

◆ ra8_mipi_dsi_te_event_pending()

ra8_err_t ra8_mipi_dsi_te_event_pending ( bool * out_pending)
nodiscard

Check if a tearing-effect (TE) trigger was received.

Parameters
[out]out_pendingReceives true if RXSR.RXTE (rx TE trigger) or RXSR.EXTEDET (external TE pin) is set.
Returns
k_ra8_ok / k_ra8_err_null_ptr.
Precondition
out_pending non-NULL.
Driver initialized.
Postcondition
*out_pending reflects current RXSR snapshot.
No registers mutated.
Since
0.1.0

Definition at line 329 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_rxsr_extedet, k_ra8_mipi_dsi_rxsr_rxte, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), r_mipi_dsi_regs_t::RXSR, and s_tag.

◆ ra8_mipi_dsi_ulps_enter()

ra8_err_t ra8_mipi_dsi_ulps_enter ( uint8_t lanes)
nodiscard

Drive the selected lanes into Ultra-Low-Power State.

Parameters
[in]lanesOR of k_ra8_mipi_dsi_lane_clock / k_ra8_mipi_dsi_lane_data.
Returns
k_ra8_ok on success; k_ra8_err_invalid_arg if lanes == 0 or the clock lane is requested while continuous-clock mode is on (HW prohibits it).
Precondition
Driver initialized and HS clock currently running.
lanes is a non-empty subset of valid lane bits.
Postcondition
ULPSCR.CLENT and/or DLENT were pulsed for selected lanes.
Subsequent ra8_mipi_dsi_send_* is rejected until _ulps_exit.
Since
0.1.0

Definition at line 570 of file ra8_mipi_dsi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_dsi_lane_clock, k_ra8_mipi_dsi_lane_data, k_ra8_mipi_dsi_lane_none, k_ra8_mipi_dsi_ulpscr_clent, k_ra8_mipi_dsi_ulpscr_dlent, k_ra8_ok, ra8_log_error, ra8_mipi_dsi(), s_clock_lanes_in_ulps, s_continuous_clock, s_data_lanes_in_ulps, s_tag, and r_mipi_dsi_regs_t::ULPSCR.

Referenced by ra8_mipi_dsi_enter_ulps().

◆ ra8_mipi_dsi_ulps_exit()

ra8_err_t ra8_mipi_dsi_ulps_exit ( uint8_t lanes)
nodiscard

Wake the selected lanes out of ULPS.

Parameters
[in]lanesOR of k_ra8_mipi_dsi_lane_* bits.
Returns
k_ra8_ok on success; k_ra8_err_invalid_arg if lanes == 0.
Precondition
At least one of the requested lanes is currently in ULPS (otherwise the exit pulse is a no-op).
Driver initialized.
Postcondition
ULPSCR.CLEXIT and/or DLEXIT pulsed.
After the wake-up sequence completes (driver-tracked) the link is ready for HS / LP traffic again.
Since
0.1.0

Definition at line 595 of file ra8_mipi_dsi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_dsi_lane_clock, k_ra8_mipi_dsi_lane_data, k_ra8_mipi_dsi_lane_none, k_ra8_mipi_dsi_ulpscr_clexit, k_ra8_mipi_dsi_ulpscr_dlexit, k_ra8_ok, ra8_mipi_dsi(), s_clock_lanes_in_ulps, s_data_lanes_in_ulps, and r_mipi_dsi_regs_t::ULPSCR.

Referenced by ra8_mipi_dsi_exit_ulps().

◆ ra8_mipi_dsi_video_configure()

ra8_err_t ra8_mipi_dsi_video_configure ( const ra8_mipi_dsi_video_cfg_t * vcfg)
nodiscard

Programme every video-mode timing register from a single config.

Touches VMSET1R, VMPPSETR, VMVSSETR, VMVPSETR, VMHSSETR, VMHPSETR. Does not assert VMSET0R.VSTART – call ra8_mipi_dsi_video_start() for that.

Parameters
[in]vcfgPointer to video-mode timing struct.
Returns
k_ra8_ok on success; k_ra8_err_null_ptr if vcfg == nullptr, k_ra8_err_invalid_arg if a field is out of range.
Precondition
vcfg is non-NULL.
All sync / porch / active-line counts fit into their HUM-defined bit widths.
Postcondition
Video timing registers loaded.
Subsequent _video_start will use these values.
Since
0.1.0

Definition at line 106 of file ra8_mipi_dsi_dispatch.c.

References ra8_mipi_dsi_video_cfg_t::horizontal_active_pixels, ra8_mipi_dsi_video_cfg_t::horizontal_back_porch, ra8_mipi_dsi_video_cfg_t::horizontal_front_porch, ra8_mipi_dsi_video_cfg_t::horizontal_sync_lines, ra8_mipi_dsi_video_cfg_t::hsync_active_high, k_ra8_err_invalid_arg, k_ra8_mipi_dsi_vc3, k_ra8_mipi_dsi_vmhp_hbp_mask, k_ra8_mipi_dsi_vmhp_hfp_mask, k_ra8_mipi_dsi_vmhp_hfp_shift, k_ra8_mipi_dsi_vmhs_hact_mask, k_ra8_mipi_dsi_vmhs_hact_shift, k_ra8_mipi_dsi_vmhs_hsa_mask, k_ra8_mipi_dsi_vmhs_hspol, k_ra8_mipi_dsi_vmpp_dt_mask, k_ra8_mipi_dsi_vmpp_dt_shift, k_ra8_mipi_dsi_vmpp_txesync, k_ra8_mipi_dsi_vmpp_vc_mask, k_ra8_mipi_dsi_vmpp_vc_shift, k_ra8_mipi_dsi_vmset1_dly_mask, k_ra8_mipi_dsi_vmset1_dly_shift, k_ra8_mipi_dsi_vmvp_vbp_mask, k_ra8_mipi_dsi_vmvp_vfp_mask, k_ra8_mipi_dsi_vmvp_vfp_shift, k_ra8_mipi_dsi_vmvs_vact_mask, k_ra8_mipi_dsi_vmvs_vact_shift, k_ra8_mipi_dsi_vmvs_vsa_mask, k_ra8_mipi_dsi_vmvs_vspol, k_ra8_ok, ra8_mipi_dsi_video_cfg_t::pixel_format, RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), s_tag, ra8_mipi_dsi_video_cfg_t::sync_pulse, ra8_mipi_dsi_video_cfg_t::vertical_active_lines, ra8_mipi_dsi_video_cfg_t::vertical_back_porch, ra8_mipi_dsi_video_cfg_t::vertical_front_porch, ra8_mipi_dsi_video_cfg_t::vertical_sync_lines, ra8_mipi_dsi_video_cfg_t::video_mode_delay, ra8_mipi_dsi_video_cfg_t::virtual_channel, r_mipi_dsi_regs_t::VMHPSETR, r_mipi_dsi_regs_t::VMHSSETR, r_mipi_dsi_regs_t::VMPPSETR, r_mipi_dsi_regs_t::VMSET1R, r_mipi_dsi_regs_t::VMVPSETR, r_mipi_dsi_regs_t::VMVSSETR, and ra8_mipi_dsi_video_cfg_t::vsync_active_high.

Referenced by ra8_mipi_dsi_set_video_timing().

◆ ra8_mipi_dsi_video_start()

ra8_err_t ra8_mipi_dsi_video_start ( const ra8_mipi_dsi_video_cfg_t * vcfg)
nodiscard

Start video-mode operation.

Writes VMSET0R with the HSA/HBP/HFP no-LP bits and the VSTART bit. Polls VMSR.VIRDY until set (bounded).

Returns
k_ra8_ok on success, k_ra8_err_hw_timeout on poll timeout.
Precondition
_video_configure has run since the last reset.
HS clock running.
Postcondition
LINKSR.VRUN set.
Video pixel stream is being transmitted.
Since
0.1.0

Definition at line 162 of file ra8_mipi_dsi_dispatch.c.

References ra8_mipi_dsi_video_cfg_t::hbp_no_lp, ra8_mipi_dsi_video_cfg_t::hfp_no_lp, ra8_mipi_dsi_video_cfg_t::hsa_no_lp, k_ra8_mipi_dsi_vmset0_hbpnolp, k_ra8_mipi_dsi_vmset0_hfpnolp, k_ra8_mipi_dsi_vmset0_hsanolp, k_ra8_mipi_dsi_vmset0_vstart, k_ra8_mipi_dsi_vmsr_virdy, priv_ra8_mipi_dsi_internal_wait_eq(), RA8_CHECK_NULL_PTR, ra8_mipi_dsi(), s_tag, r_mipi_dsi_regs_t::VMSET0R, and r_mipi_dsi_regs_t::VMSR.

◆ ra8_mipi_dsi_video_stop()

ra8_err_t ra8_mipi_dsi_video_stop ( void )
nodiscard

Request a video-mode stop and wait for it.

Sets VMSET0R.VSTOP, polls VMSR.STOP until 1, then scrubs the VMSCR latches. Equivalent to FSP dsi_stop.

Returns
k_ra8_ok on success, k_ra8_err_hw_timeout if VMSR.STOP never asserts within the bounded loop.
Precondition
Video mode is currently running (otherwise call is a no-op).
Driver initialized.
Postcondition
LINKSR.VRUN clear.
VMSR cleared of stale flags.
Since
0.1.0

Definition at line 184 of file ra8_mipi_dsi_dispatch.c.

References k_ra8_mipi_dsi_vmset0_vstop, k_ra8_mipi_dsi_vmsr_clear_all, k_ra8_mipi_dsi_vmsr_stop, k_ra8_ok, priv_ra8_mipi_dsi_internal_wait_eq(), ra8_mipi_dsi(), r_mipi_dsi_regs_t::VMSCR, r_mipi_dsi_regs_t::VMSET0R, and r_mipi_dsi_regs_t::VMSR.