drm/ssd130x: Make default width and height to be controller dependent
authorJavier Martinez Canillas <javierm@redhat.com>
Fri, 9 Jun 2023 17:09:36 +0000 (19:09 +0200)
committerJavier Martinez Canillas <javierm@redhat.com>
Thu, 15 Jun 2023 21:50:41 +0000 (23:50 +0200)
Currently the driver hardcodes the default values to 96x16 pixels but this
default resolution depends on the controller. The datasheets for the chips
describes the following display controller resolutions:

 - SH1106:  132 x 64 Dot Matrix OLED/PLED
 - SSD1305: 132 x 64 Dot Matrix OLED/PLED
 - SSD1306: 128 x 64 Dot Matrix OLED/PLED
 - SSD1307: 128 x 39 Dot Matrix OLED/PLED
 - SSD1309: 128 x 64 Dot Matrix OLED/PLED

Add this information to the devices' info structures, and use it set as a
default if not defined in DT rather than hardcoding to an arbitrary value.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230609170941.1150941-2-javierm@redhat.com
drivers/gpu/drm/solomon/ssd130x.c
drivers/gpu/drm/solomon/ssd130x.h

index 8cbf5aa..a0e5e26 100644 (file)
@@ -99,29 +99,39 @@ const struct ssd130x_deviceinfo ssd130x_variants[] = {
                .default_vcomh = 0x40,
                .default_dclk_div = 1,
                .default_dclk_frq = 5,
+               .default_width = 132,
+               .default_height = 64,
                .page_mode_only = 1,
        },
        [SSD1305_ID] = {
                .default_vcomh = 0x34,
                .default_dclk_div = 1,
                .default_dclk_frq = 7,
+               .default_width = 132,
+               .default_height = 64,
        },
        [SSD1306_ID] = {
                .default_vcomh = 0x20,
                .default_dclk_div = 1,
                .default_dclk_frq = 8,
                .need_chargepump = 1,
+               .default_width = 128,
+               .default_height = 64,
        },
        [SSD1307_ID] = {
                .default_vcomh = 0x20,
                .default_dclk_div = 2,
                .default_dclk_frq = 12,
                .need_pwm = 1,
+               .default_width = 128,
+               .default_height = 39,
        },
        [SSD1309_ID] = {
                .default_vcomh = 0x34,
                .default_dclk_div = 1,
                .default_dclk_frq = 10,
+               .default_width = 128,
+               .default_height = 64,
        }
 };
 EXPORT_SYMBOL_NS_GPL(ssd130x_variants, DRM_SSD130X);
@@ -798,10 +808,10 @@ static void ssd130x_parse_properties(struct ssd130x_device *ssd130x)
        struct device *dev = ssd130x->dev;
 
        if (device_property_read_u32(dev, "solomon,width", &ssd130x->width))
-               ssd130x->width = 96;
+               ssd130x->width = ssd130x->device_info->default_width;
 
        if (device_property_read_u32(dev, "solomon,height", &ssd130x->height))
-               ssd130x->height = 16;
+               ssd130x->height = ssd130x->device_info->default_height;
 
        if (device_property_read_u32(dev, "solomon,page-offset", &ssd130x->page_offset))
                ssd130x->page_offset = 1;
index db03ee5..a2bc8d7 100644 (file)
@@ -37,6 +37,8 @@ struct ssd130x_deviceinfo {
        u32 default_vcomh;
        u32 default_dclk_div;
        u32 default_dclk_frq;
+       u32 default_width;
+       u32 default_height;
        int need_pwm;
        int need_chargepump;
        bool page_mode_only;