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

MIPI CSI-2 receiver HAL driver – control, status, and IRQ-enable API. More...

#include <stdint.h>
#include "ra8_err.h"
#include "ra8_mipi_csi_regs.h"
#include "ra8_mipi_csi_types.h"
Include dependency graph for ra8_mipi_csi_ctrl.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

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_deinit (void)
 Tear down the MIPI CSI receiver.
ra8_err_t ra8_mipi_csi_reset (void)
 Issue a software reset (RTCT.VSRST) and wait for completion.
ra8_err_t ra8_mipi_csi_start_receive (void)
 Enable MIPI CSI reception (set MCT3.RXEN).
ra8_err_t ra8_mipi_csi_stop_receive (void)
 Disable MIPI CSI reception (clear MCT3.RXEN, pulse VSRST).
ra8_err_t ra8_mipi_csi_get_status (uint32_t *out_mask)
 Read the RXST receive-status register.
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_set_rx_irq_enable (uint32_t mask)
 Programme RXIE (receive interrupt enable mask).
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_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_set_data_type_filter (uint32_t low_mask, uint32_t high_mask)
 Programme the receive data-type filter (DTEL + DTEH).
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_set_frame_error_mode (bool zlmd, bool edmd, bool rvmd)
 Update MCT0 frame-error notification bits atomically.
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_set_lrte (ra8_mipi_csi_vlsien_t vlsien, bool eotp_enable)
 Programme EMCT (LRTE / EOTP options).
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_dl_set_irq_enable (uint8_t lane, uint32_t mask)
 Programme DLIE(N) (Data Lane N IRQ enable).
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_vc_clear_status (uint8_t vc, uint32_t mask)
 W1C-clear bits in VCST(M) via VCSC(M).
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_pm_get_status (uint32_t *out_mask)
 Read PMST (Power Management Status) live value.
ra8_err_t ra8_mipi_csi_pm_clear_status (uint32_t mask)
 W1C-clear bits in PMST via PMSC.
ra8_err_t ra8_mipi_csi_pm_set_irq_enable (uint32_t mask)
 Programme PMIE (Power Management IRQ enable).

Detailed Description

MIPI CSI-2 receiver HAL driver – control, status, and IRQ-enable API.

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

Lifecycle, reception control, module-level status, data-type filter, ECC / scrambling / frame-error knobs, EPD / LRTE tuning, and the per-data-lane / per-VC / power-management status + IRQ-enable prototypes for the RA8D2 MIPI CSI-2 receiver HAL. Split out of ra8_mipi_csi.h to keep each header within the per-file line budget; consumers continue to include ra8_mipi_csi.h.

Since
0.1.0

Definition in file ra8_mipi_csi_ctrl.h.

Function Documentation

◆ ra8_mipi_csi_clear_status()

ra8_err_t ra8_mipi_csi_clear_status ( uint32_t mask)
nodiscard

Clear the sticky receive-status bits selected by mask.

Only RACTDET (bit 17) is currently writable in RXSC; other bits in mask are silently dropped by hardware.

Parameters
[in]maskBit mask to write to RXSC.
Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Caller knows which sticky bits are write-1-to-clear.
Postcondition
RXSC has been written.
Hardware will eventually deassert the targeted RXST bits.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 404 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_rxsc, k_ra8_ok, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_deinit()

ra8_err_t ra8_mipi_csi_deinit ( void )
nodiscard

Tear down the MIPI CSI receiver.

Clears MCT3.RXEN, pulses VSRST to flush any in-flight state, clears every IRQ-enable register, drops cached callbacks, and gates the MSTP bit. Safe to call after a partial init.

Returns
ra8_err_t error code.
Return values
k_ra8_okReceiver gated cleanly.
k_ra8_err_invalid_statera8_mstp ref-count was already 0.
Precondition
IRQs masked or single-threaded teardown context.
Caller has stopped any upstream camera transmission.
Postcondition
MCT3.RXEN is 0.
MSTP bit for MIPI CSI is set (peripheral gated).
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 324 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_dlie0, k_ra8_mipi_csi_off_dlie1, k_ra8_mipi_csi_off_gsie, k_ra8_mipi_csi_off_mct3, k_ra8_mipi_csi_off_pmie, k_ra8_mipi_csi_off_rtct, k_ra8_mipi_csi_off_rxie, k_ra8_mipi_csi_off_vcie0, k_ra8_mipi_csi_rtct_vsrst_mask, k_ra8_mipi_csi_vc_count, k_ra8_mstp_mipi_csi, priv_ra8_mipi_csi_detach_all_handlers(), ra8_mipi_csi_reg32(), ra8_mipi_csi_vc_off(), and ra8_mstp_disable().

◆ ra8_mipi_csi_dl_clear_status()

ra8_err_t ra8_mipi_csi_dl_clear_status ( uint8_t lane,
uint32_t mask )
nodiscard

W1C-clear bits in DLST(N) via DLSC(N).

Parameters
[in]laneData lane index (0..1).
[in]maskBits to clear.
Returns
ra8_err_t error code.
Return values
k_ra8_okCleared.
k_ra8_err_invalid_arglane > 1.
Precondition
lane <= 1.
ra8_mipi_csi_init has succeeded.
Postcondition
DLSC(N) has been written.
Targeted DLST(N) bits will eventually deassert.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 569 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_dl_max, k_ra8_mipi_csi_dlsc_all_mask, k_ra8_mipi_csi_off_dlsc0, k_ra8_ok, ra8_mipi_csi_dl_off(), and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_dl_get_status()

ra8_err_t ra8_mipi_csi_dl_get_status ( uint8_t lane,
uint32_t * out_mask )
nodiscard

Read DLST(N) (Data Lane N Status).

Parameters
[in]laneData lane index (0..1).
[out]out_maskLive DLST(N) value.
Returns
ra8_err_t error code.
Return values
k_ra8_okStatus returned.
k_ra8_err_invalid_arglane > 1.
k_ra8_err_null_ptrout_mask was nullptr.
Precondition
lane <= 1.
out_mask is non-NULL.
Postcondition
*out_mask holds the DLST(N) value.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 557 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_dl_max, k_ra8_mipi_csi_off_dlst0, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_csi_dl_off(), ra8_mipi_csi_reg32(), and s_tag.

◆ ra8_mipi_csi_dl_set_irq_enable()

ra8_err_t ra8_mipi_csi_dl_set_irq_enable ( uint8_t lane,
uint32_t mask )
nodiscard

Programme DLIE(N) (Data Lane N IRQ enable).

Parameters
[in]laneData lane index (0..1).
[in]maskBits to set in DLIE(N).
Returns
ra8_err_t error code.
Return values
k_ra8_okUpdated.
k_ra8_err_invalid_arglane > 1.
Precondition
lane <= 1.
ra8_mipi_csi_init has succeeded.
Postcondition
DLIE(N) = mask.
Subsequent matching DL events trigger the DL IRQ vector.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 580 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_dl_max, k_ra8_mipi_csi_off_dlie0, k_ra8_ok, ra8_mipi_csi_dl_off(), and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_get_module_info()

ra8_err_t ra8_mipi_csi_get_module_info ( ra8_mipi_csi_module_info_t * out)
nodiscard

Read MCG (Module Configuration, RO IP info) and decode.

Parameters
[out]outOn success, the decoded MCG snapshot.
Returns
ra8_err_t error code.
Return values
k_ra8_okInfo returned in *out.
k_ra8_err_null_ptrout was nullptr.
Precondition
out is non-NULL.
ra8_mipi_csi_init has succeeded.
Postcondition
*out holds the decoded MCG snapshot.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 427 of file ra8_mipi_csi.c.

References ra8_mipi_csi_module_info_t::fifo_stages, k_ra8_mipi_csi_mcg_gsnm_mask, k_ra8_mipi_csi_mcg_gsnm_shift, k_ra8_mipi_csi_mcg_sdln_mask, k_ra8_mipi_csi_mcg_sdln_shift, k_ra8_mipi_csi_mcg_ver_mask, k_ra8_mipi_csi_off_mcg, k_ra8_ok, ra8_mipi_csi_module_info_t::lanes_max, RA8_CHECK_NULL_PTR, ra8_mipi_csi_reg32(), ra8_mipi_csi_module_info_t::raw, s_tag, and ra8_mipi_csi_module_info_t::version.

◆ ra8_mipi_csi_get_module_irq_status()

ra8_err_t ra8_mipi_csi_get_module_irq_status ( uint32_t * out_mask)
nodiscard

Read MIST (Module Interrupt Status, RO summary).

Parameters
[out]out_maskOn success, the live MIST value.
Returns
ra8_err_t error code.
Return values
k_ra8_okStatus returned.
k_ra8_err_null_ptrout_mask was nullptr.
Precondition
out_mask is non-NULL.
ra8_mipi_csi_init has succeeded.
Postcondition
*out_mask holds MIST.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 419 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_mist, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_csi_reg32(), and s_tag.

◆ ra8_mipi_csi_get_status()

ra8_err_t ra8_mipi_csi_get_status ( uint32_t * out_mask)
nodiscard

Read the RXST receive-status register.

Parameters
[out]out_maskOn success, the live RXST value (RACT, RACTDET, FRMn[15:0]).
Returns
ra8_err_t error code.
Return values
k_ra8_okStatus returned in *out_mask.
k_ra8_err_null_ptrout_mask was nullptr.
Precondition
out_mask is non-NULL.
ra8_mipi_csi_init has succeeded.
Postcondition
*out_mask holds the RXST value.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 396 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_rxst, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_csi_reg32(), and s_tag.

◆ ra8_mipi_csi_init()

ra8_err_t ra8_mipi_csi_init ( const ra8_mipi_csi_config_t * cfg)
nodiscard

Initialise the MIPI CSI receiver.

Sequence:

  1. Validate cfg and the lane count.
  2. Ungate the peripheral via ra8_mstp_enable(k_ra8_mstp_mipi_csi).
  3. Clear MCT3.RXEN (no reception during configuration).
  4. Spin until RTST.VSRSTS reads 0 (no reset in progress).
  5. Programme MCT0 (lane count + GRMD + ECCV13 + LFSREN + ZLMD + EDMD + RVMD).
  6. Programme MCT2 (FRRCLK + FRRSKW).
  7. Programme EPCT (EPD enable, option, spacers).
  8. Programme EMCT (VLSIEN + EOTPEN).
  9. Programme DTEL / DTEH (data-type filter).

Programme GSCT (short-packet threshold + store flag).

  1. Programme RXIE / DLIE0 / DLIE1 / VCIE0..15 / PMIE / GSIE.
  2. Leave RXEN clear – caller arms via start_receive.
Parameters
[in]cfgNon-NULL configuration descriptor.
Returns
ra8_err_t error code.
Return values
k_ra8_okReceiver configured, RXEN still 0.
k_ra8_err_null_ptrcfg was nullptr.
k_ra8_err_invalid_argLane count not in {1, 2} or VLSIEN out of range.
k_ra8_err_hw_init_failedMSTP enable failed.
k_ra8_err_hw_timeoutVSRSTS did not clear within budget.
Precondition
IRQs masked or single-threaded init context.
ra8_mstp_init has been called.
Postcondition
On success, the peripheral is clocked and configured.
MCT3.RXEN is 0 (no incoming data accepted).
Note
Thread safety: not thread-safe.
See also
ra8_mipi_csi_start_receive
ra8_mipi_csi_deinit
Since
0.1.0

Definition at line 298 of file ra8_mipi_csi.c.

References internal_program_irq_masks(), internal_program_receiver(), internal_validate_cfg(), internal_wait_reset_idle(), k_ra8_mipi_csi_off_mct3, k_ra8_mstp_mipi_csi, k_ra8_ok, ra8_mipi_csi_config_t::lanes, RA8_CHECK_NULL_PTR, ra8_log_info_val, ra8_mipi_csi_reg32(), ra8_mstp_enable(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_pm_clear_status()

ra8_err_t ra8_mipi_csi_pm_clear_status ( uint32_t mask)
nodiscard

W1C-clear bits in PMST via PMSC.

Parameters
[in]maskBits to clear (only [7:0] are clearable).
Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Caller knows which PM bits are W1C.
Postcondition
PMSC has been written.
Targeted PMST bits will eventually deassert.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 643 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_pmsc, k_ra8_mipi_csi_pmsc_all_mask, k_ra8_ok, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_pm_get_status()

ra8_err_t ra8_mipi_csi_pm_get_status ( uint32_t * out_mask)
nodiscard

Read PMST (Power Management Status) live value.

Parameters
[out]out_maskLive PMST value.
Returns
ra8_err_t error code.
Return values
k_ra8_okStatus returned.
k_ra8_err_null_ptrout_mask was nullptr.
Precondition
out_mask is non-NULL.
ra8_mipi_csi_init has succeeded.
Postcondition
*out_mask holds the PMST value.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 635 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_pmst, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_csi_reg32(), and s_tag.

◆ ra8_mipi_csi_pm_set_irq_enable()

ra8_err_t ra8_mipi_csi_pm_set_irq_enable ( uint32_t mask)
nodiscard

Programme PMIE (Power Management IRQ enable).

Parameters
[in]maskBits to set in PMIE.
Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Caller is in single-threaded init context.
Postcondition
PMIE = mask.
Subsequent matching PM events trigger the PM IRQ vector.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 651 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_pmie, k_ra8_mipi_csi_pmie_all_mask, k_ra8_ok, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_reset()

ra8_err_t ra8_mipi_csi_reset ( void )
nodiscard

Issue a software reset (RTCT.VSRST) and wait for completion.

Pulses RTCT.VSRST then spins on RTST.VSRSTS until it clears. Used after stop_receive to drain the video-pixel pipeline before the next start.

Returns
ra8_err_t error code.
Return values
k_ra8_okReset completed.
k_ra8_err_hw_timeoutVSRSTS did not clear in time.
Precondition
Peripheral is ungated.
Caller is in single-threaded context.
Postcondition
RTST.VSRSTS reads 0.
Video-pixel pipeline is empty.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 358 of file ra8_mipi_csi.c.

References internal_wait_reset_idle(), k_ra8_mipi_csi_off_rtct, k_ra8_mipi_csi_rtct_vsrst_mask, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_set_data_type_filter()

ra8_err_t ra8_mipi_csi_set_data_type_filter ( uint32_t low_mask,
uint32_t high_mask )
nodiscard

Programme the receive data-type filter (DTEL + DTEH).

A bit set in low_mask enables the corresponding data type in the 0x00-0x1F range; a bit set in high_mask enables one in 0x20-0x3F. Bits documented as reserved (DTEL[3:0] read 1, [7:5] read 0, [29:16] read 0; DTEH bits other than 4 and 10) are preserved by the hardware.

Parameters
[in]low_maskMask written to DTEL.
[in]high_maskMask written to DTEH.
Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Caller is in single-threaded context.
Postcondition
DTEL = low_mask, DTEH = high_mask.
Receiver accepts only the selected data types.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 445 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_dteh, k_ra8_mipi_csi_off_dtel, k_ra8_ok, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_set_ecc_mode()

ra8_err_t ra8_mipi_csi_set_ecc_mode ( bool eccv13,
bool lfsren )
nodiscard

Update MCT0 ECC bits (ECCV13, LFSREN) atomically.

Parameters
[in]eccv131 = ECC v1.3 (24-bit) mode, 0 = legacy ECC.
[in]lfsren1 = enable LFSR descrambling.
Returns
ra8_err_t error code.
Return values
k_ra8_okBits updated.
k_ra8_err_invalid_stateRXEN was set (can only update while gated).
Precondition
ra8_mipi_csi_init has succeeded.
Reception is stopped (MCT3.RXEN = 0).
Postcondition
MCT0.ECCV13 and MCT0.LFSREN reflect the requested state.
Other MCT0 bits are preserved.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 459 of file ra8_mipi_csi.c.

References internal_reject_if_running(), k_ra8_mipi_csi_mct0_eccv13_mask, k_ra8_mipi_csi_mct0_lfsren_mask, k_ra8_mipi_csi_off_mct0, k_ra8_ok, ra8_mipi_csi_reg32(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_set_epd()

ra8_err_t ra8_mipi_csi_set_epd ( bool enable,
bool option_2,
uint16_t long_spacer,
uint16_t short_spacer )
nodiscard

Programme EPCT (long-packet spacer + Option-2 EPD).

Parameters
[in]enable1 = EPCT.EPDEN – enable EPD operation.
[in]option_21 = EPCT.EPDOP – select Option-2 EPD.
[in]long_spacerEPCT.SLP[14:0] – long-packet spacer count.
[in]short_spacerEPCT.SSP[14:0] – short-packet spacer count.
Returns
ra8_err_t error code.
Return values
k_ra8_okUpdated.
k_ra8_err_invalid_argspacer values exceed 15 bits.
k_ra8_err_invalid_stateRXEN was set.
Precondition
ra8_mipi_csi_init has succeeded.
Reception is stopped (MCT3.RXEN = 0).
Postcondition
EPCT contains the requested fields.
Subsequent transmissions honour the new spacer values.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 505 of file ra8_mipi_csi.c.

References internal_reject_if_running(), k_ra8_err_invalid_arg, k_ra8_mipi_csi_epct_epden_mask, k_ra8_mipi_csi_epct_epdop_mask, k_ra8_mipi_csi_epct_slp_mask, k_ra8_mipi_csi_epct_ssp_mask, k_ra8_mipi_csi_epct_ssp_shift, k_ra8_mipi_csi_off_epct, k_ra8_ok, ra8_mipi_csi_reg32(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_set_frame_error_mode()

ra8_err_t ra8_mipi_csi_set_frame_error_mode ( bool zlmd,
bool edmd,
bool rvmd )
nodiscard

Update MCT0 frame-error notification bits atomically.

Parameters
[in]zlmd1 = treat zero-length LP as ErrFrameSync.
[in]edmd1 = forward ErrFrameData errors to ISR.
[in]rvmd1 = receive Reserved-DT packets normally.
Returns
ra8_err_t error code.
Return values
k_ra8_okBits updated.
k_ra8_err_invalid_stateRXEN was set.
Precondition
ra8_mipi_csi_init has succeeded.
Reception is stopped (MCT3.RXEN = 0).
Postcondition
MCT0.ZLMD / EDMD / RVMD reflect the requested state.
Other MCT0 bits are preserved.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 477 of file ra8_mipi_csi.c.

References internal_reject_if_running(), k_ra8_mipi_csi_mct0_edmd_mask, k_ra8_mipi_csi_mct0_rvmd_mask, k_ra8_mipi_csi_mct0_zlmd_mask, k_ra8_mipi_csi_off_mct0, k_ra8_ok, ra8_mipi_csi_reg32(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_set_lrte()

ra8_err_t ra8_mipi_csi_set_lrte ( ra8_mipi_csi_vlsien_t vlsien,
bool eotp_enable )
nodiscard

Programme EMCT (LRTE / EOTP options).

Parameters
[in]vlsienVariable-length spacer mode (EMCT.VLSIEN[5:4]).
[in]eotp_enable1 = EMCT.EOTPEN – expect EoT packet.
Returns
ra8_err_t error code.
Return values
k_ra8_okUpdated.
k_ra8_err_invalid_argvlsien out of enum range.
k_ra8_err_invalid_stateRXEN was set.
Precondition
ra8_mipi_csi_init has succeeded.
Reception is stopped (MCT3.RXEN = 0).
Postcondition
EMCT.VLSIEN and EMCT.EOTPEN reflect the requested state.
Other EMCT bits are preserved.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 533 of file ra8_mipi_csi.c.

References internal_reject_if_running(), k_ra8_err_invalid_arg, k_ra8_mipi_csi_emct_eotpen_mask, k_ra8_mipi_csi_emct_vlsien_mask, k_ra8_mipi_csi_emct_vlsien_shift, k_ra8_mipi_csi_off_emct, k_ra8_mipi_csi_vlsien_x4, k_ra8_ok, ra8_mipi_csi_reg32(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_set_rx_irq_enable()

ra8_err_t ra8_mipi_csi_set_rx_irq_enable ( uint32_t mask)
nodiscard

Programme RXIE (receive interrupt enable mask).

Parameters
[in]maskBit mask to programme into RXIE.
Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Caller is in single-threaded init context.
Postcondition
RXIE = mask.
Subsequent matching events trigger the receive IRQ vector.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 412 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_rxie, k_ra8_ok, and ra8_mipi_csi_reg32().

◆ ra8_mipi_csi_start_receive()

ra8_err_t ra8_mipi_csi_start_receive ( void )
nodiscard

Enable MIPI CSI reception (set MCT3.RXEN).

Returns
ra8_err_t error code.
Return values
k_ra8_okMCT3.RXEN set.
k_ra8_err_invalid_stateRXEN was already set.
Precondition
ra8_mipi_csi_init has succeeded.
Upstream MIPI PHY is up and clocking.
Postcondition
MCT3.RXEN reads 1.
Subsequent CSI-2 packets land in RXST / VCSTn / GSHT.
Note
Thread safety: not thread-safe.
See also
ra8_mipi_csi_stop_receive
Since
0.1.0

Definition at line 371 of file ra8_mipi_csi.c.

References internal_reject_if_running(), k_ra8_mipi_csi_mct3_rxen_mask, k_ra8_mipi_csi_off_mct3, k_ra8_ok, ra8_log_info, ra8_mipi_csi_reg32(), RA8_RETURN_ON_ERROR, and s_tag.

◆ ra8_mipi_csi_stop_receive()

ra8_err_t ra8_mipi_csi_stop_receive ( void )
nodiscard

Disable MIPI CSI reception (clear MCT3.RXEN, pulse VSRST).

The HUM (and FSP) require the application to wait for a full frame after stopping the upstream camera before calling this – we do not poll for that condition because the driver has no way to know the frame interval. Caller is responsible.

Returns
ra8_err_t error code.
Return values
k_ra8_okAlways.
Precondition
ra8_mipi_csi_init has succeeded.
Upstream camera has stopped sending data.
Postcondition
MCT3.RXEN reads 0.
RTCT.VSRST has been written 1 (reset pulse issued).
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 381 of file ra8_mipi_csi.c.

References k_ra8_mipi_csi_off_mct3, k_ra8_mipi_csi_off_rtct, k_ra8_mipi_csi_rtct_vsrst_mask, k_ra8_ok, ra8_log_info, ra8_mipi_csi_reg32(), and s_tag.

◆ ra8_mipi_csi_vc_clear_status()

ra8_err_t ra8_mipi_csi_vc_clear_status ( uint8_t vc,
uint32_t mask )
nodiscard

W1C-clear bits in VCST(M) via VCSC(M).

Parameters
[in]vcVirtual channel index (0..15).
[in]maskBits to clear.
Returns
ra8_err_t error code.
Return values
k_ra8_okCleared.
k_ra8_err_invalid_argvc > 15.
Precondition
vc <= 15.
ra8_mipi_csi_init has succeeded.
Postcondition
VCSC(M) has been written.
Targeted VCST(M) bits will eventually deassert.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 608 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_off_vcsc0, k_ra8_mipi_csi_vc_max, k_ra8_ok, ra8_mipi_csi_reg32(), and ra8_mipi_csi_vc_off().

◆ ra8_mipi_csi_vc_get_status()

ra8_err_t ra8_mipi_csi_vc_get_status ( uint8_t vc,
uint32_t * out_mask )
nodiscard

Read VCST(M) (Virtual Channel M Status).

Parameters
[in]vcVirtual channel index (0..15).
[out]out_maskLive VCST(M) value.
Returns
ra8_err_t error code.
Return values
k_ra8_okStatus returned.
k_ra8_err_invalid_argvc > 15.
k_ra8_err_null_ptrout_mask was nullptr.
Precondition
vc <= 15.
out_mask is non-NULL.
Postcondition
*out_mask holds the VCST(M) value.
No hardware state is modified.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 596 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_off_vcst0, k_ra8_mipi_csi_vc_max, k_ra8_ok, RA8_CHECK_NULL_PTR, ra8_mipi_csi_reg32(), ra8_mipi_csi_vc_off(), and s_tag.

◆ ra8_mipi_csi_vc_set_irq_enable()

ra8_err_t ra8_mipi_csi_vc_set_irq_enable ( uint8_t vc,
uint32_t mask )
nodiscard

Programme VCIE(M) (Virtual Channel M IRQ enable).

Parameters
[in]vcVirtual channel index (0..15).
[in]maskBits to set in VCIE(M).
Returns
ra8_err_t error code.
Return values
k_ra8_okUpdated.
k_ra8_err_invalid_argvc > 15.
Precondition
vc <= 15.
ra8_mipi_csi_init has succeeded.
Postcondition
VCIE(M) = mask.
Subsequent matching VC events trigger the VC IRQ vector.
Note
Thread safety: not thread-safe.
Since
0.1.0

Definition at line 619 of file ra8_mipi_csi.c.

References k_ra8_err_invalid_arg, k_ra8_mipi_csi_off_vcie0, k_ra8_mipi_csi_vc_max, k_ra8_ok, ra8_mipi_csi_reg32(), and ra8_mipi_csi_vc_off().