Add util functions to configure peripherals Change-Id: Ib805c9d30bc4766da1e6a7a52a8326174ba36647
diff --git a/sw/device/lib/testing/pinmux_testutils.c b/sw/device/lib/testing/pinmux_testutils.c index 8a058b2..892dd8f 100644 --- a/sw/device/lib/testing/pinmux_testutils.c +++ b/sw/device/lib/testing/pinmux_testutils.c
@@ -119,3 +119,127 @@ desired_attr, &actual_attr)); } } + +dif_result_t pinmux_testutils_configure_i2s_tx(const dif_pinmux_t *pinmux) { + if (pinmux == NULL) { + return kDifBadArg; + } + // Mux I2S Tx + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIod3, + kTopMatchaPinmuxOutselI2s0TxSclk)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIod4, + kTopMatchaPinmuxOutselI2s0TxWs)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIod5, + kTopMatchaPinmuxOutselI2s0TxSd)); + return kDifOk; +} + +dif_result_t pinmux_testutils_configure_i2s_rx(const dif_pinmux_t *pinmux) { + if (pinmux == NULL) { + return kDifBadArg; + } + // Mux I2S Rx + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIod0, + kTopMatchaPinmuxOutselI2s0RxSclk)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIod1, + kTopMatchaPinmuxOutselI2s0RxWs)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInI2s0RxSd, kTopMatchaPinmuxInselIod2)); + return kDifOk; +} + +dif_result_t pinmux_testutils_configure_cam_i2c(const dif_pinmux_t *pinmux) { + if (pinmux == NULL) { + return kDifBadArg; + } + // Mux Cam I2C + CHECK_DIF_OK(dif_pinmux_input_select(pinmux, + kTopMatchaPinmuxPeripheralInCamI2cSda, + kTopMatchaPinmuxInselIoa5)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIoa5, + kTopMatchaPinmuxOutselCamI2cSda)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIoa4, + kTopMatchaPinmuxOutselCamI2cScl)); + CHECK_DIF_OK(dif_pinmux_input_select(pinmux, + kTopMatchaPinmuxPeripheralInCamI2cScl, + kTopMatchaPinmuxInselIoa4)); + return kDifOk; +} + +dif_result_t pinmux_testutils_configure_isp_wrapper( + const dif_pinmux_t *pinmux) { + if (pinmux == NULL) { + return kDifBadArg; + } + // Mux ISP wrapper + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData0, + kTopMatchaPinmuxInselIob0)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData1, + kTopMatchaPinmuxInselIob1)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData2, + kTopMatchaPinmuxInselIob2)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData3, + kTopMatchaPinmuxInselIob3)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData4, + kTopMatchaPinmuxInselIob4)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData5, + kTopMatchaPinmuxInselIob5)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData6, + kTopMatchaPinmuxInselIob6)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSData7, + kTopMatchaPinmuxInselIob7)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSVsync, + kTopMatchaPinmuxInselIoa2)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSHsync, + kTopMatchaPinmuxInselIoa3)); + CHECK_DIF_OK(dif_pinmux_input_select( + pinmux, kTopMatchaPinmuxPeripheralInIspWrapperSPclk, + kTopMatchaPinmuxInselIob8)); + + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIoa2, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIoa3, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob0, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob1, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob2, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob3, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob4, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob5, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob6, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob7, + kTopMatchaPinmuxOutselConstantHighZ)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIob8, + kTopMatchaPinmuxOutselConstantHighZ)); + return kDifOk; +} + +dif_result_t pinmux_testutils_configure_cam_ctrl(const dif_pinmux_t *pinmux) { + if (pinmux == NULL) { + return kDifBadArg; + } + // Mux cam CTRL / TRIG + CHECK_DIF_OK( + dif_pinmux_input_select(pinmux, kTopMatchaPinmuxPeripheralInCamCtrlCamInt, + kTopMatchaPinmuxInselIoa6)); + CHECK_DIF_OK(dif_pinmux_output_select(pinmux, kTopMatchaPinmuxMioOutIoa7, + kTopMatchaPinmuxOutselCamCtrlCamTrig)); + return kDifOk; +}
diff --git a/sw/device/lib/testing/pinmux_testutils.h b/sw/device/lib/testing/pinmux_testutils.h index 5028683..c59e2b9 100644 --- a/sw/device/lib/testing/pinmux_testutils.h +++ b/sw/device/lib/testing/pinmux_testutils.h
@@ -49,4 +49,13 @@ const pinmux_pad_attributes_t *attrs, size_t num_attrs); +/** + * Configures several Matcha peripherals + */ +dif_result_t pinmux_testutils_configure_i2s_tx(const dif_pinmux_t *pinmux); +dif_result_t pinmux_testutils_configure_i2s_rx(const dif_pinmux_t *pinmux); +dif_result_t pinmux_testutils_configure_cam_i2c(const dif_pinmux_t *pinmux); +dif_result_t pinmux_testutils_configure_isp_wrapper(const dif_pinmux_t *pinmux); +dif_result_t pinmux_testutils_configure_cam_ctrl(const dif_pinmux_t *pinmux); + #endif // SW_DEVICE_LIB_TESTING_PINMUX_TESTUTILS_H_