Den 10.03.2021 05.55, skrev Peter Stuge: > Noralf Trønnes wrote: >>> Depending on how long it takes for the DMA mask dependency patch to show >>> up in drm-misc-next, I will either publish a new version or apply the >>> current and provide patches with the necessary fixes. >> >> In case I apply this version, are you happy enough with it that you want >> to give an ack or r-b? > > I've now tested R1 and RGB111 and I think I've found two more things: > > I didn't receive the expected bits/bytes for RGB111 on the bulk endpoint, > I think because of how components were extracted in gud_xrgb8888_to_color(). > > Changing to the following gets me the expected (X R1 G1 B1 X R2 G2 B2) bytes: > > r = (*pix32 >> 8) & 0xff; > g = (*pix32 >> 16) & 0xff; > b = (*pix32++ >> 24) & 0xff; > We're accessing the whole word here through pix32, no byte access, so endianess doesn't come into play. This change will flip r and b, which gives: XRGB8888 -> XBGR1111 BGR is a common thing on controllers, are you sure yours are set to RGB and not BGR? And the 0xff masking isn't necessary since we're assigning to a byte, right? I haven't got a native R1G1B1 display so I have emulated and I do get the expected colors. This is the conversion function I use on the device which I think is correct: static size_t rgb111_to_rgb565(uint16_t *dst, uint8_t *src, uint16_t src_width, uint16_t src_height) { uint8_t rgb111, val = 0; size_t len = 0; for (uint16_t y = 0; y < src_height; y++) { for (uint16_t x = 0; x < src_width; x++) { if (!(x % 2)) val = *src++; rgb111 = val >> 4; *dst++ = ((rgb111 & 0x04) << 13) | ((rgb111 & 0x02) << 9) | ((rgb111 & 0x01) << 4); len += sizeof(*dst); val <<= 4; } } return len; } > > Then, gud_xrgb8888_to_color() and maybe even gud_xrgb8888_to_r124() seem > to be host endian dependent, at least because of that pix32, but maybe more? > I don't know whether drm guarantees "native" XRGB byte sequence in memory, > then I guess the pix32 is okay? Please take a look? > > > Finally my very last ask: Please consider renaming GUD_PIXEL_FORMAT_RGB111 > to GUD_PIXEL_FORMAT_XRGB1111? > It has crossed my mind, I'll change it. Noralf.