66static const char*
s_tag =
"MIPI_CSI";
79typedef enum : uint16_t {
216 const uint32_t mct2 =
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_RETURN_ON_ERROR(err, tag, message)
Early return on error, propagating the code upward.
#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_empty
Container empty – nothing to retrieve.
@ k_ra8_err_invalid_arg
Invalid function argument.
@ k_ra8_err_invalid_state
Module in wrong state for requested operation.
@ k_ra8_err_hw_timeout
Hardware timed out waiting for a flag or handshake.
@ 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.
Cross-translation-unit private helpers shared inside ra8_hal.
void priv_ra8_mipi_csi_detach_all_handlers(void)
Detach every MIPI CSI-2 receiver callback (module / data-lane / virtual-channel / power-management / ...
Lightweight Logging Interface for ra8-firmware.
#define ra8_log_info_val(tag, message, value)
RA8 log info val.
#define ra8_log_info(tag, message)
RA8 log info.
static ra8_err_t internal_reject_if_running(void)
ra8_err_t ra8_mipi_csi_vc_clear_status(uint8_t vc, uint32_t mask)
W1C-clear bits in VCST(M) via VCSC(M).
static void internal_program_receiver(const ra8_mipi_csi_config_t *cfg)
Program the MCT/EPCT/EMCT/DTEL/DTEH/GSCT receiver block.
ra8_err_t ra8_mipi_csi_enter_stop(void)
Gate the peripheral via MSTP (low-power entry helper).
ra8_err_t ra8_mipi_csi_exit_stop(void)
Ungate the peripheral via MSTP (low-power exit helper).
ra8_err_t ra8_mipi_csi_set_rx_irq_enable(uint32_t mask)
Programme RXIE (receive interrupt enable mask).
static ra8_err_t internal_validate_cfg(const ra8_mipi_csi_config_t *cfg)
Validate cfg field ranges before any register writes.
ra8_err_t ra8_mipi_csi_set_lrte(ra8_mipi_csi_vlsien_t vlsien, bool eotp_enable)
Programme EMCT (LRTE / EOTP options).
ra8_err_t ra8_mipi_csi_set_data_type_filter(uint32_t low_mask, uint32_t high_mask)
Programme the receive data-type filter (DTEL + DTEH).
ra8_mipi_csi_intern_t
Internal limits used by this translation unit only.
@ k_ra8_mipi_csi_reset_spin_max
Max VSRSTS poll iterations.
@ k_ra8_mipi_csi_gfclr_spin_max
Max GCD poll iterations.
ra8_err_t ra8_mipi_csi_pm_get_status(uint32_t *out_mask)
Read PMST (Power Management Status) live value.
ra8_err_t ra8_mipi_csi_short_packet_clear_fifo(void)
Request a clear of the entire short-packet FIFO (GSIU.GFCLR).
ra8_err_t ra8_mipi_csi_read_short_packet(ra8_mipi_csi_short_packet_t *out)
Drain one stored short-packet header from the FIFO.
ra8_err_t ra8_mipi_csi_pm_set_irq_enable(uint32_t mask)
Programme PMIE (Power Management IRQ enable).
ra8_err_t ra8_mipi_csi_pm_clear_status(uint32_t mask)
W1C-clear bits in PMST via PMSC.
static ra8_err_t internal_wait_reset_idle(void)
ra8_err_t ra8_mipi_csi_vc_set_irq_enable(uint8_t vc, uint32_t mask)
Programme VCIE(M) (Virtual Channel M IRQ enable).
ra8_err_t ra8_mipi_csi_start_receive(void)
Enable MIPI CSI reception (set MCT3.RXEN).
ra8_err_t ra8_mipi_csi_get_status(uint32_t *out_mask)
Read the RXST receive-status register.
ra8_err_t ra8_mipi_csi_short_packet_set_irq_enable(uint32_t mask)
Programme GSIE (short-packet IRQ enable).
ra8_err_t ra8_mipi_csi_get_module_irq_status(uint32_t *out_mask)
Read MIST (Module Interrupt Status, RO summary).
ra8_err_t ra8_mipi_csi_dl_set_irq_enable(uint8_t lane, uint32_t mask)
Programme DLIE(N) (Data Lane N IRQ enable).
ra8_err_t ra8_mipi_csi_short_packet_re_enable_store(void)
Re-enable storing into the FIFO after a GOV overflow (GSIU.GFEN).
static uint32_t internal_encode_mct0(const ra8_mipi_csi_config_t *cfg)
ra8_err_t ra8_mipi_csi_vc_get_status(uint8_t vc, uint32_t *out_mask)
Read VCST(M) (Virtual Channel M Status).
ra8_err_t ra8_mipi_csi_set_frame_error_mode(bool zlmd, bool edmd, bool rvmd)
Update MCT0 frame-error notification bits atomically.
ra8_err_t ra8_mipi_csi_init(const ra8_mipi_csi_config_t *cfg)
Initialise the MIPI CSI receiver.
ra8_err_t ra8_mipi_csi_set_ecc_mode(bool eccv13, bool lfsren)
Update MCT0 ECC bits (ECCV13, LFSREN) atomically.
ra8_err_t ra8_mipi_csi_dl_get_status(uint8_t lane, uint32_t *out_mask)
Read DLST(N) (Data Lane N Status).
ra8_err_t ra8_mipi_csi_dl_clear_status(uint8_t lane, uint32_t mask)
W1C-clear bits in DLST(N) via DLSC(N).
ra8_err_t ra8_mipi_csi_stop_receive(void)
Disable MIPI CSI reception (clear MCT3.RXEN, pulse VSRST).
ra8_err_t ra8_mipi_csi_short_packet_get_status(uint32_t *out_mask)
Read GSST (short-packet status).
ra8_err_t ra8_mipi_csi_set_epd(bool enable, bool option_2, uint16_t long_spacer, uint16_t short_spacer)
Programme EPCT (long-packet spacer + Option-2 EPD).
ra8_err_t ra8_mipi_csi_clear_status(uint32_t mask)
Clear the sticky receive-status bits selected by mask.
ra8_err_t ra8_mipi_csi_reset(void)
Issue a software reset (RTCT.VSRST) and wait for completion.
ra8_err_t ra8_mipi_csi_deinit(void)
Tear down the MIPI CSI receiver.
ra8_err_t ra8_mipi_csi_get_module_info(ra8_mipi_csi_module_info_t *out)
Read MCG (Module Configuration, RO IP info) and decode.
ra8_err_t ra8_mipi_csi_short_packet_clear_status(uint32_t mask)
W1C-clear GSST.GOV (FIFO overflow) via GSSC.
static void internal_program_irq_masks(const ra8_mipi_csi_config_t *cfg)
Program the receiver interrupt-enable mask block.
ra8_err_t ra8_mipi_csi_short_packet_configure(uint8_t threshold, bool store_enable)
Programme GSCT (short-packet FIFO threshold + store flag).
MIPI CSI-2 receiver HAL driver – public API.
MIPI CSI-2 Receiver register layout for the RA8D2 (HUM Ch 66).
@ k_ra8_mipi_csi_vc_max
Highest valid VC index.
@ k_ra8_mipi_csi_vc_count
Number of virtual channels.
@ k_ra8_mipi_csi_dl_max
Highest valid DL index.
@ k_ra8_mipi_csi_epct_epdop_mask
[15] option 2 sel.
@ k_ra8_mipi_csi_epct_slp_mask
[14:0] long spacers.
@ k_ra8_mipi_csi_epct_epden_mask
[31] EPD enable.
@ k_ra8_mipi_csi_epct_ssp_mask
[30:16] short spc.
@ k_ra8_mipi_csi_epct_ssp_shift
SSP shift.
@ k_ra8_mipi_csi_rtct_vsrst_mask
[0] software reset.
ra8_mipi_csi_off_t
Absolute byte offsets into the MIPI CSI register window.
@ k_ra8_mipi_csi_off_vcst0
Virtual Channel 0 Status.
@ k_ra8_mipi_csi_off_dtel
Receive Data-Type Enable Low.
@ k_ra8_mipi_csi_off_epct
EPD Option Control.
@ k_ra8_mipi_csi_off_mcg
Module Configuration (RO).
@ k_ra8_mipi_csi_off_rtct
Reset Control (VSRST).
@ k_ra8_mipi_csi_off_vcie0
Virtual Channel 0 IRQ Enable.
@ k_ra8_mipi_csi_off_gsht
Generic Short Packet Header (RO).
@ k_ra8_mipi_csi_off_gsst
Generic Short Packet Status.
@ k_ra8_mipi_csi_off_vcsc0
Virtual Channel 0 Status Clear.
@ k_ra8_mipi_csi_off_dlie0
Data Lane 0 Interrupt Enable.
@ k_ra8_mipi_csi_off_emct
EPD Misc-Option Control.
@ k_ra8_mipi_csi_off_gsct
Generic Short Packet Control.
@ k_ra8_mipi_csi_off_dlst0
Data Lane 0 Status.
@ k_ra8_mipi_csi_off_rxst
Receive Status.
@ k_ra8_mipi_csi_off_mct2
Module Control 2 (clock rates).
@ k_ra8_mipi_csi_off_mct0
Module Control 0 (lanes, modes).
@ k_ra8_mipi_csi_off_gssc
Generic Short Packet Stat Clear.
@ k_ra8_mipi_csi_off_mist
Module Interrupt Status.
@ k_ra8_mipi_csi_off_gsie
Generic Short Packet IRQ Enable.
@ k_ra8_mipi_csi_off_dlsc0
Data Lane 0 Status Clear.
@ k_ra8_mipi_csi_off_dteh
Receive Data-Type Enable High.
@ k_ra8_mipi_csi_off_pmie
Power-Management IRQ Enable.
@ k_ra8_mipi_csi_off_gsiu
Generic Short Packet Info Update.
@ k_ra8_mipi_csi_off_rtst
Reset Status (VSRSTS).
@ k_ra8_mipi_csi_off_rxie
Receive Interrupt Enable.
@ k_ra8_mipi_csi_off_dlie1
Data Lane 1 Interrupt Enable.
@ k_ra8_mipi_csi_off_pmst
Power-Management Status.
@ k_ra8_mipi_csi_off_mct3
Module Control 3 (RXEN).
@ k_ra8_mipi_csi_off_pmsc
Power-Management Status Clear.
@ k_ra8_mipi_csi_off_rxsc
Receive Status Clear.
@ k_ra8_mipi_csi_emct_vlsien_mask
[5:4] var spacer.
@ k_ra8_mipi_csi_emct_vlsien_shift
VLSIEN shift.
@ k_ra8_mipi_csi_emct_eotpen_mask
[6] EOTP enable.
@ k_ra8_mipi_csi_gsct_shth_mask
[6:0] threshold.
@ k_ra8_mipi_csi_gsct_gfif_mask
[16] FIFO store en.
@ k_ra8_mipi_csi_gsct_shth_max
Max meaningful SHTH.
@ k_ra8_mipi_csi_mcg_gsnm_mask
[23:16] FIFO depth.
@ k_ra8_mipi_csi_mcg_gsnm_shift
GSNM shift.
@ k_ra8_mipi_csi_mcg_ver_mask
[3:0] core version.
@ k_ra8_mipi_csi_mcg_sdln_mask
[11:8] sup.
@ k_ra8_mipi_csi_mcg_sdln_shift
SDLN shift.
@ k_ra8_mipi_csi_mct2_frrskw_shift
FRRSKW shift.
@ k_ra8_mipi_csi_mct2_frrclk_mask
[8:0] FRRCLK.
@ k_ra8_mipi_csi_mct2_frrskw_mask
[24:16] FRRSKW.
@ k_ra8_mipi_csi_rtst_vsrsts_mask
[0] reset busy.
@ k_ra8_mipi_csi_mct3_rxen_mask
[0] RX enable.
@ k_ra8_mipi_csi_pmie_all_mask
Enable everything.
@ k_ra8_mipi_csi_gsht_spvc_mask
[27:24] VC of packet.
@ k_ra8_mipi_csi_gsht_spvc_shift
SPVC shift.
@ k_ra8_mipi_csi_gsht_spdt_shift
SPDT shift.
@ k_ra8_mipi_csi_gsht_dtyp_mask
[21:16] data type.
@ k_ra8_mipi_csi_gsht_spdt_mask
[15:0] payload.
@ k_ra8_mipi_csi_gsht_dtyp_shift
DTYP shift.
@ k_ra8_mipi_csi_gssc_govc_mask
[4] clear GOV.
@ k_ra8_mipi_csi_mct0_lfsren_mask
[25] LFSR descrambling enable.
@ k_ra8_mipi_csi_mct0_vdln_mask
[3:0] valid lane count.
@ k_ra8_mipi_csi_mct0_grmd_mask
[20] Generic CSI-2 rule mode.
@ k_ra8_mipi_csi_mct0_eccv13_mask
[24] ECC v1.3 (24-bit) mode.
@ k_ra8_mipi_csi_mct0_edmd_mask
[17] ErrFrameData notify.
@ k_ra8_mipi_csi_mct0_zlmd_mask
[16] zero-length-LP output.
@ k_ra8_mipi_csi_mct0_rvmd_mask
[19] Reserved-DT receive mode.
@ k_ra8_mipi_csi_pmsc_all_mask
Clear everything.
@ k_ra8_mipi_csi_dlsc_all_mask
All clearable.
@ k_ra8_mipi_csi_gsie_all_mask
Enable everything.
static ra8_mipi_csi_off_t ra8_mipi_csi_dl_off(ra8_mipi_csi_off_t base, uint8_t lane)
Compute the byte offset of a per-data-lane register.
@ k_ra8_mipi_csi_gsst_pnum_mask
[15:8] FIFO depth.
@ k_ra8_mipi_csi_gsst_pnum_shift
PNUM shift.
@ k_ra8_mipi_csi_gsst_gcd_mask
[16] FIFO clear stat.
@ k_ra8_mipi_csi_gsiu_gfclr_mask
[8] FIFO clear req.
@ k_ra8_mipi_csi_gsiu_finc_mask
[0] FIFO increment.
@ k_ra8_mipi_csi_gsiu_gfen_mask
[16] FIFO re-enable.
ra8_mipi_csi_vlsien_t
Encodings for EMCT.VLSIEN[5:4] (HUM Ch 66.3.8 p 3941).
@ k_ra8_mipi_csi_vlsien_x4
11b spacer = 4 x n/lane.
static ra8_mipi_csi_off_t ra8_mipi_csi_vc_off(ra8_mipi_csi_off_t base, uint8_t vc)
Compute the byte offset of a per-virtual-channel register.
static volatile uint32_t * ra8_mipi_csi_reg32(ra8_mipi_csi_off_t off)
Get a 32-bit volatile pointer to a register inside the MIPI CSI window.
@ k_ra8_mipi_csi_lanes_2
Dual-lane D-PHY operation.
@ k_ra8_mipi_csi_lanes_1
Single-lane D-PHY operation.
Ref-counted Module Stop Control wrapper for the RA8D2.
ra8_err_t ra8_mstp_enable(ra8_mstp_t id)
Reference-counted "ungate this peripheral" request.
ra8_err_t ra8_mstp_disable(ra8_mstp_t id)
Reference-counted "gate this peripheral" request.
@ k_ra8_mstp_mipi_csi
MSTPC17 MIPI CSI.
Configuration descriptor for ra8_mipi_csi_init.
uint16_t frrskw
MCT2.FRRSKW[8:0] skew.
bool zlmd
MCT0.ZLMD – zero-length LP.
bool eccv13
MCT0.ECCV13 – ECC v1.3 mode.
bool lfsren
MCT0.LFSREN – descrambling on.
bool edmd
MCT0.EDMD – ErrFrameData notify.
ra8_mipi_csi_vlsien_t vlsien
EMCT.VLSIEN[5:4] LRTE spacer.
uint32_t vc_irq_mask[16]
VCIE0..VCIE15 values.
uint8_t short_threshold
GSCT.SHTH (threshold-1 in stages).
bool epd_option_2
EPCT.EPDOP – 1 = Option 2 (recommended).
ra8_mipi_csi_lanes_t lanes
1 or 2 lanes (MCT0.VDLN).
uint16_t epd_short_spacer
EPCT.SSP[14:0].
uint32_t pm_irq_mask
PMIE value.
uint16_t frrclk
MCT2.FRRCLK[8:0] rate.
bool rvmd
MCT0.RVMD – reserved-DT receive.
bool epd_enable
EPCT.EPDEN – enable EPD.
uint32_t dl_irq_mask[2]
DLIE0 / DLIE1 values.
bool generic_rule
MCT0.GRMD: must be 1 here.
bool short_store_enable
GSCT.GFIF – 1 = store in FIFO.
uint32_t dt_high_mask
DTEH value to programme.
uint16_t epd_long_spacer
EPCT.SLP[14:0].
uint32_t short_irq_mask
GSIE value.
uint32_t dt_low_mask
DTEL value to programme.
bool eotp_enable
EMCT.EOTPEN bit 6.
uint32_t rx_irq_mask
RXIE value.
Decoded MCG (Module Configuration) RO snapshot.
uint32_t raw
Unprocessed register snapshot.
uint8_t lanes_max
MCG.SDLN[11:8] – max supported lanes.
uint8_t version
MCG.VER[3:0] – IP-core version.
uint8_t fifo_stages
MCG.GSNM[23:16] – short-packet FIFO depth.
One drained generic short-packet header.
uint16_t payload
GSHT.SPDT[15:0] – 16-bit user data.
uint32_t raw
Unprocessed register snapshot.
uint8_t data_type
GSHT.DTYP[21:16] – short-packet DT (0x08-0x0F).
uint8_t vc
GSHT.SPVC[27:24] – virtual channel.