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 <javi...@redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmerm...@suse.de>
---

(no changes since v1)

 drivers/gpu/drm/solomon/ssd130x.c | 14 ++++++++++++--
 drivers/gpu/drm/solomon/ssd130x.h |  2 ++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/solomon/ssd130x.c 
b/drivers/gpu/drm/solomon/ssd130x.c
index 8cbf5aa66e19..a0e5e26c0bc9 100644
--- a/drivers/gpu/drm/solomon/ssd130x.c
+++ b/drivers/gpu/drm/solomon/ssd130x.c
@@ -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;
diff --git a/drivers/gpu/drm/solomon/ssd130x.h 
b/drivers/gpu/drm/solomon/ssd130x.h
index db03ee5db392..a2bc8d75078b 100644
--- a/drivers/gpu/drm/solomon/ssd130x.h
+++ b/drivers/gpu/drm/solomon/ssd130x.h
@@ -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;
-- 
2.40.1

Reply via email to