.. | .. |
---|
43 | 43 | size_t num) |
---|
44 | 44 | { |
---|
45 | 45 | struct spi_device *spi = mipi->spi; |
---|
| 46 | + unsigned int bpw = 8; |
---|
46 | 47 | void *data = par; |
---|
47 | 48 | u32 speed_hz; |
---|
48 | 49 | int i, ret; |
---|
.. | .. |
---|
56 | 57 | * The displays are Raspberry Pi HATs and connected to the 8-bit only |
---|
57 | 58 | * SPI controller, so 16-bit command and parameters need byte swapping |
---|
58 | 59 | * 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. |
---|
61 | 60 | */ |
---|
62 | 61 | buf[0] = cpu_to_be16(*cmd); |
---|
63 | 62 | gpiod_set_value_cansleep(mipi->dc, 0); |
---|
.. | .. |
---|
71 | 70 | for (i = 0; i < num; i++) |
---|
72 | 71 | buf[i] = cpu_to_be16(par[i]); |
---|
73 | 72 | num *= 2; |
---|
74 | | - speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num); |
---|
75 | 73 | data = buf; |
---|
76 | 74 | } |
---|
77 | 75 | |
---|
| 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 | + |
---|
78 | 82 | 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); |
---|
80 | 85 | free: |
---|
81 | 86 | kfree(buf); |
---|
82 | 87 | |
---|