hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/tiny/ili9486.c
....@@ -43,6 +43,7 @@
4343 size_t num)
4444 {
4545 struct spi_device *spi = mipi->spi;
46
+ unsigned int bpw = 8;
4647 void *data = par;
4748 u32 speed_hz;
4849 int i, ret;
....@@ -56,8 +57,6 @@
5657 * The displays are Raspberry Pi HATs and connected to the 8-bit only
5758 * SPI controller, so 16-bit command and parameters need byte swapping
5859 * before being transferred as 8-bit on the big endian SPI bus.
59
- * Pixel data bytes have already been swapped before this function is
60
- * called.
6160 */
6261 buf[0] = cpu_to_be16(*cmd);
6362 gpiod_set_value_cansleep(mipi->dc, 0);
....@@ -71,12 +70,18 @@
7170 for (i = 0; i < num; i++)
7271 buf[i] = cpu_to_be16(par[i]);
7372 num *= 2;
74
- speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num);
7573 data = buf;
7674 }
7775
76
+ /*
77
+ * Check whether pixel data bytes needs to be swapped or not
78
+ */
79
+ if (*cmd == MIPI_DCS_WRITE_MEMORY_START && !mipi->swap_bytes)
80
+ bpw = 16;
81
+
7882 gpiod_set_value_cansleep(mipi->dc, 1);
79
- ret = mipi_dbi_spi_transfer(spi, speed_hz, 8, data, num);
83
+ speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num);
84
+ ret = mipi_dbi_spi_transfer(spi, speed_hz, bpw, data, num);
8085 free:
8186 kfree(buf);
8287