]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/ssd130x: fix ssd132x encoding
authorJohn Keeping <jkeeping@inmusicbrands.com>
Wed, 15 Jan 2025 11:01:37 +0000 (11:01 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:39:13 +0000 (14:39 +0200)
[ Upstream commit 1e14484677c8e87548f5f0d4eb8800e408004404 ]

The ssd132x buffer is encoded one pixel per nibble, with two pixels in
each byte.  When encoding an 8-bit greyscale input, take the top 4-bits
as the value and ensure the two pixels are distinct and do not overwrite
each other.

Fixes: fdd591e00a9c ("drm/ssd130x: Add support for the SSD132x OLED controller family")
Signed-off-by: John Keeping <jkeeping@inmusicbrands.com>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250115110139.1672488-2-jkeeping@inmusicbrands.com
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/solomon/ssd130x.c

index 6f51bcf774e27ca9efecbba61daa7aca0bb98656..7d071a2f7a460e60e1cab956ddc90f1aecda0d55 100644 (file)
@@ -880,7 +880,7 @@ static int ssd132x_update_rect(struct ssd130x_device *ssd130x,
                        u8 n1 = buf[i * width + j];
                        u8 n2 = buf[i * width + j + 1];
 
-                       data_array[array_idx++] = (n2 << 4) | n1;
+                       data_array[array_idx++] = (n2 & 0xf0) | (n1 >> 4);
                }
        }