Bypass Mode Feature#

Overview#

Purpose#

The Bypass Mode feature enables direct camera data streaming through the deserializer without the usual initialization and configuration steps. This feature is particularly useful for scenarios requiring quick camera data access or when normal deserializer initialization is not needed.

Scope#

This design covers:

  • Implementation of bypass mode in the deserializer

  • Custom interface for mode control

  • Platform configuration support

  • Integration with existing camera module and sensor implementations

Architecture#

Flow Chart#

image1 Note: Example Deserializer is MAX96712.

Key Components#

Deserializer States#

  • CDI_<Deserializer>_STATE_INIT: Initial state after configuration

  • CDI_<Deserializer>_STATE_RUNNING: Active streaming state

Operation Modes#

  • <Deserializer>OPMODE_NORMAL: Standard operation with full initialization

  • <Deserializer>OPMODE_BYPASS: Bypass mode with minimal initialization

Detailed Design#

Custom Interface Implementation#

class <Deserializer>DeserializerCustomInterface : public Interface {
public:
    static const UUID& getClassInterfaceID();
    virtual SIPLStatus SetDeserializerMode(<Deserializer>OpMode const Mode) = 0;
    virtual SIPLStatus GetDeserializerMode(<Deserializer>OpMode * const Mode) = 0;
protected:
    ~<Deserializer>DeserializerCustomInterface() = default;
};

Initialization Flow#

Normal Mode#

  1. Power device initialization

  2. Link initialization

  3. Sensor initialization

  4. CSI configuration

  5. Start sequence

Bypass Mode#

  1. Skip power device initialization

  2. Skip link initialization if in INIT state

  3. Enable replication mode

  4. Set state to RUNNING

Platform Configuration#

The bypass mode is configured in the platform JSON:

{
    "deserializer": "<Deserializer>_BYPASS"
}

Runtime Control#

Command Interface#

  • Command: bp

  • Usage: Sets the deserializer mode (0 for Normal, 1 for Bypass)

  • Implementation: Through <Deserializer>DeserializerCustomInterface

Mode Switching#

SIPLStatus CNvM<Deserializer>::SetDeserializerMode(<Deserializer>OpMode const Mode) {
    if (Mode <= <Deserializer>OPMODE_INVALID || Mode >= <Deserializer>OPMODE_NUM) {
        return NVSIPL_STATUS_BAD_ARGUMENT;
    }
    m_Mode = Mode;
    if (m_Mode == <Deserializer>OPMODE_BYPASS) {
        return ConvertNvMediaStatus(<Deserializer>SetSwitchOver(m_upCDIDevice.get(), true));
    }
    return NVSIPL_STATUS_OK;
}

Power Management#

Power Control in Bypass Mode#

  • Skip power-off sequence if switchover is needed

  • Maintain power state during mode transitions

  • Handle power dependencies appropriately

Limitations and Constraints#

  1. Bypass mode skips certain initialization steps

  2. Limited configuration options in bypass mode

  3. Mode switching may require careful timing consideration

  4. I2C bus signls of External ECU and Tegra are connected to the same I2C port of the Deserializer