drivers: mipi_dbi: mipi_dbi_spi: do not take spinlock

Taking a spinlock will result in interrupts being blocked in the MIPI
DBI driver, which is not desired behavior while issuing SPI transfers,
since the driver may use interrupts to drive the transfer

Fixes #68815

Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com>
(cherry picked from commit 5b6fadc10d3be7120a808928f11389a6151944d2)
diff --git a/drivers/mipi_dbi/mipi_dbi_spi.c b/drivers/mipi_dbi/mipi_dbi_spi.c
index 8745686..846158e 100644
--- a/drivers/mipi_dbi/mipi_dbi_spi.c
+++ b/drivers/mipi_dbi/mipi_dbi_spi.c
@@ -25,7 +25,7 @@
 struct mipi_dbi_spi_data {
 	/* Used for 3 wire mode */
 	uint16_t spi_byte;
-	struct k_spinlock lock;
+	struct k_mutex lock;
 };
 
 /* Expands to 1 if the node does not have the `write-only` property */
@@ -58,7 +58,11 @@
 		.count = 1,
 	};
 	int ret = 0;
-	k_spinlock_key_t spinlock_key = k_spin_lock(&data->lock);
+
+	ret = k_mutex_lock(&data->lock, K_FOREVER);
+	if (ret < 0) {
+		return ret;
+	}
 
 	if (dbi_config->mode == MIPI_DBI_MODE_SPI_3WIRE &&
 	    IS_ENABLED(CONFIG_MIPI_DBI_SPI_3WIRE)) {
@@ -124,7 +128,7 @@
 		ret = -ENOTSUP;
 	}
 out:
-	k_spin_unlock(&data->lock, spinlock_key);
+	k_mutex_unlock(&data->lock);
 	return ret;
 }
 
@@ -164,9 +168,12 @@
 		.count = 1,
 	};
 	int ret = 0;
-	k_spinlock_key_t spinlock_key = k_spin_lock(&data->lock);
 	struct spi_config tmp_config;
 
+	ret = k_mutex_lock(&data->lock, K_FOREVER);
+	if (ret < 0) {
+		return ret;
+	}
 	memcpy(&tmp_config, &dbi_config->config, sizeof(tmp_config));
 	if (dbi_config->mode == MIPI_DBI_MODE_SPI_3WIRE &&
 	    IS_ENABLED(CONFIG_MIPI_DBI_SPI_3WIRE)) {
@@ -231,7 +238,7 @@
 	}
 out:
 	spi_release(config->spi_dev, &tmp_config);
-	k_spin_unlock(&data->lock, spinlock_key);
+	k_mutex_unlock(&data->lock);
 	return ret;
 }
 
@@ -262,6 +269,7 @@
 static int mipi_dbi_spi_init(const struct device *dev)
 {
 	const struct mipi_dbi_spi_config *config = dev->config;
+	struct mipi_dbi_spi_data *data = dev->data;
 	int ret;
 
 	if (!device_is_ready(config->spi_dev)) {
@@ -291,6 +299,8 @@
 		}
 	}
 
+	k_mutex_init(&data->lock);
+
 	return 0;
 }