/* * The PiScreen/waveshare rpi-lcd-35 has a SPI to 16-bit parallel bus converter * in front of the display controller. This means that 8-bit values have to be * transferred as 16-bit.
*/ staticint waveshare_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par,
size_t num)
{ struct spi_device *spi = mipi->spi; unsignedint bpw = 8; void *data = par;
u32 speed_hz; int i, ret;
__be16 *buf;
buf = kmalloc(32 * sizeof(u16), GFP_KERNEL); if (!buf) return -ENOMEM;
/* * The displays are Raspberry Pi HATs and connected to the 8-bit only * SPI controller, so 16-bit command and parameters need byte swapping * before being transferred as 8-bit on the big endian SPI bus.
*/
buf[0] = cpu_to_be16(*cmd);
spi_bus_lock(spi->controller);
gpiod_set_value_cansleep(mipi->dc, 0);
speed_hz = mipi_dbi_spi_cmd_max_speed(spi, 2);
ret = mipi_dbi_spi_transfer(spi, speed_hz, 8, buf, 2);
spi_bus_unlock(spi->controller); if (ret || !num) goto free;
/* 8-bit configuration data, not 16-bit pixel data */ if (num <= 32) { for (i = 0; i < num; i++)
buf[i] = cpu_to_be16(par[i]);
num *= 2;
data = buf;
}
/* * Check whether pixel data bytes needs to be swapped or not
*/ if (*cmd == MIPI_DCS_WRITE_MEMORY_START && !mipi->swap_bytes)
bpw = 16;
dbi->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); if (IS_ERR(dbi->reset)) return dev_err_probe(dev, PTR_ERR(dbi->reset), "Failed to get GPIO 'reset'\n");
dc = devm_gpiod_get(dev, "dc", GPIOD_OUT_LOW); if (IS_ERR(dc)) return dev_err_probe(dev, PTR_ERR(dc), "Failed to get GPIO 'dc'\n");
dbidev->backlight = devm_of_find_backlight(dev); if (IS_ERR(dbidev->backlight)) return PTR_ERR(dbidev->backlight);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.