boards: nxp: rd_rw612_bga: enable DMIC

Enable DMIC on RW612 BGA board. The DMIC is enabled for both onboard
MEMS microphones for this board, and the board is enabled with the DMIC
sample and test

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
diff --git a/boards/nxp/rd_rw612_bga/doc/index.rst b/boards/nxp/rd_rw612_bga/doc/index.rst
index 3797d1b..9f115e4 100644
--- a/boards/nxp/rd_rw612_bga/doc/index.rst
+++ b/boards/nxp/rd_rw612_bga/doc/index.rst
@@ -49,6 +49,8 @@
 +-----------+------------+-----------------------------------+
 | TRNG      | on-chip    | entropy                           |
 +-----------+------------+-----------------------------------+
+| DMIC      | on-chip    | dmic                              |
++-----------+------------+-----------------------------------+
 | WWDT      | on-chip    | watchdog                          |
 +-----------+------------+-----------------------------------+
 | CTIMER    | on-chip    | counter                           |
diff --git a/boards/nxp/rd_rw612_bga/rd_rw612_bga-pinctrl.dtsi b/boards/nxp/rd_rw612_bga/rd_rw612_bga-pinctrl.dtsi
index d55a83f..f7b131a 100644
--- a/boards/nxp/rd_rw612_bga/rd_rw612_bga-pinctrl.dtsi
+++ b/boards/nxp/rd_rw612_bga/rd_rw612_bga-pinctrl.dtsi
@@ -32,6 +32,16 @@
 		};
 	};
 
+	pinmux_dmic0: pinmux_dmic0 {
+		group0 {
+			pinmux = <IO_MUX_PDM_IO51
+				IO_MUX_PDM_IO52
+				IO_MUX_PDM_IO53
+				IO_MUX_PDM_IO54>;
+			slew-rate = "fast";
+		};
+	};
+
 	pinmux_flexspi: pinmux_flexspi {
 		group0 {
 			pinmux = <IO_MUX_QUAD_SPI_FLASH_IO28
diff --git a/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi b/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi
index e2793a1..23e9d24 100644
--- a/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi
+++ b/boards/nxp/rd_rw612_bga/rd_rw612_bga.dtsi
@@ -13,6 +13,7 @@
 		sw0 = &sw_4;
 		i2c-0 = &flexcomm2;
 		watchdog0 = &wwdt;
+		dmic-dev = &dmic0;
 	};
 
 	chosen {
@@ -125,6 +126,47 @@
 	};
 };
 
+&dmic0 {
+	pinctrl-0 = <&pinmux_dmic0>;
+	pinctrl-names = "default";
+	use2fs;
+	status = "okay";
+};
+
+/* Configure pdm channels 0-3 with gain, and cutoff settings
+ * appropriate for the attached MEMS microphones.
+ * Note that PDMC0/PDMC1 and PDMC2/PDMC3 are each connected to the same
+ * microphone. For best results, read from PDM HW channel 0 as left channel,
+ * and PDM HW channel 1 as right channel.
+ */
+&pdmc0 {
+	status = "okay";
+	gainshift = <3>;
+	dc-cutoff = "155hz";
+	dc-gain = <1>;
+};
+
+&pdmc1 {
+	status = "okay";
+	gainshift = <3>;
+	dc-cutoff = "155hz";
+	dc-gain = <1>;
+};
+
+&pdmc2 {
+	status = "okay";
+	gainshift = <3>;
+	dc-cutoff = "155hz";
+	dc-gain = <1>;
+};
+
+&pdmc3 {
+	status = "okay";
+	gainshift = <3>;
+	dc-cutoff = "155hz";
+	dc-gain = <1>;
+};
+
 &dma0 {
 	status = "okay";
 };
diff --git a/boards/nxp/rd_rw612_bga/rd_rw612_bga.yaml b/boards/nxp/rd_rw612_bga/rd_rw612_bga.yaml
index 61d73f0..0457f38 100644
--- a/boards/nxp/rd_rw612_bga/rd_rw612_bga.yaml
+++ b/boards/nxp/rd_rw612_bga/rd_rw612_bga.yaml
@@ -16,6 +16,7 @@
 flash: 65536
 supported:
   - dma
+  - dmic
   - gpio
   - spi
   - i2c
diff --git a/samples/drivers/audio/dmic/boards/rd_rw612_bga.overlay b/samples/drivers/audio/dmic/boards/rd_rw612_bga.overlay
new file mode 100644
index 0000000..ce71fa6
--- /dev/null
+++ b/samples/drivers/audio/dmic/boards/rd_rw612_bga.overlay
@@ -0,0 +1,3 @@
+dmic_dev: &dmic0 {
+        status = "okay";
+};
diff --git a/tests/drivers/audio/dmic_api/boards/rd_rw612_bga.overlay b/tests/drivers/audio/dmic_api/boards/rd_rw612_bga.overlay
new file mode 100644
index 0000000..4901818
--- /dev/null
+++ b/tests/drivers/audio/dmic_api/boards/rd_rw612_bga.overlay
@@ -0,0 +1,39 @@
+/*
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Copyright 2023 NXP
+ */
+
+/* Enable PDM channels 0-3,
+ * Gain settings are configured for testing with a PDM generator,
+ * using a -20dbFS sine wave.
+ */
+&dmic0 {
+	dmic-channel@0 {
+		status = "okay";
+		gainshift = <2>;
+		dc-cutoff = "155hz";
+		dc-gain = <1>;
+	};
+
+	dmic-channel@1 {
+		status = "okay";
+		gainshift = <2>;
+		dc-cutoff = "155hz";
+		dc-gain = <1>;
+	};
+
+	dmic-channel@2 {
+		status = "okay";
+		gainshift = <2>;
+		dc-cutoff = "155hz";
+		dc-gain = <1>;
+	};
+
+	dmic-channel@3 {
+		status = "okay";
+		gainshift = <2>;
+		dc-cutoff = "155hz";
+		dc-gain = <1>;
+	};
+};