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. -- With Best Regards, Andy Shevchenko