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_