On Mon, Jan 31, 2022 at 09:29:33AM +0100, Javier Martinez Canillas wrote:
On 1/26/22 15:15, Javier Martinez Canillas wrote:
On 1/26/22 15:10, Andy Shevchenko wrote:
On Wed, Jan 26, 2022 at 04:08:32PM +0200, Andy Shevchenko wrote:
On Wed, Jan 26, 2022 at 02:46:08PM +0100, Javier Martinez Canillas wrote:
On 1/26/22 14:12, Andy Shevchenko wrote:
...
I've just bought a SSD1306 (I2C) based one and will attempt to write a DRM driver using drivers/staging/fbtft/fb_ssd1306.c as a reference.
You should take ssd1307fb.c instead. And basically create a MIPI based driver for I2C. Then we won't go same road again for other similar devices.
For the record it supports your device:
static const struct i2c_device_id ssd1307fb_i2c_id[] = { { "ssd1305fb", 0 }, { "ssd1306fb", 0 }, { "ssd1307fb", 0 }, { "ssd1309fb", 0 },
Thanks a lot for the pointer. I was only looking at drivers/staging and didn't check drivers/video. I'll try to convert that one then once I get the display.
I got some time this weekend and was able to port the ssd1306 fbdev driver to DRM [0]. I'm not that familiar with the simple display pipe helpers, so there may be some wrong things there. But it does work and all the fbtests from https://git.kernel.org/pub/scm/linux/kernel/git/geert/fbtest.git pass.
Thanks! Good news, everybody!
There are some hacks in the driver though. For example it exposes an XRGB8888 format even thought the OLED display is monochromatic and has 1 bit per pixel.
The driver then goes and converts the XRGB8888 pixels first to grayscale and then to reverse mono. I took that idea from the repaper driver but that gives us the multiple copies that Geert was complaining about.
Another hack is that I am just hardcoding the {width, height}_mm, but I don't know what DPI could be used for these panels nor how I could calculate the mm.
I think the hacks is the first what should be eliminated, also see below.
...
+config TINYDRM_SSD130X
- tristate "DRM support for Solomon SSD130X OLED displays"
- depends on DRM && OF && I2C
Please, make sure that it does NOT dependent on OF.
...
+obj-$(CONFIG_TINYDRM_SSD130X) += ssd130x.o
I would keep the original name since we have I2C (fbdev) implementation, SPI and platform (fbtft), and now i2c (drm). I would like to avoid more confusion that we already have.