Skip to content

Commit 4203e88

Browse files
drm/solomon: Move device info from ssd130x-i2c to the core driver
These are declared in the ssd130x-i2c transport driver but the information is not I2C specific, and could be used by other SSD130x transport drivers. Move them to the ssd130x core driver and just set the OF device entries to an ID that could be used to lookup the correct device info from an array. While being there, also move the SSD130X_DATA and SSD130X_COMMAND control bytes. Since even though they are used by the I2C interface, they could also be useful for other transport protocols such as SPI. Suggested-by: Chen-Yu Tsai <wens@kernel.org> Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Acked-by: Mark Brown <broonie@kernel.org> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://patchwork.freedesktop.org/patch/msgid/20220419214824.335075-5-javierm@redhat.com
1 parent fb19747 commit 4203e88

File tree

3 files changed

+56
-45
lines changed

3 files changed

+56
-45
lines changed

drivers/gpu/drm/solomon/ssd130x-i2c.c

Lines changed: 10 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -53,76 +53,43 @@ static void ssd130x_i2c_shutdown(struct i2c_client *client)
5353
ssd130x_shutdown(ssd130x);
5454
}
5555

56-
static struct ssd130x_deviceinfo ssd130x_sh1106_deviceinfo = {
57-
.default_vcomh = 0x40,
58-
.default_dclk_div = 1,
59-
.default_dclk_frq = 5,
60-
.page_mode_only = 1,
61-
};
62-
63-
static struct ssd130x_deviceinfo ssd130x_ssd1305_deviceinfo = {
64-
.default_vcomh = 0x34,
65-
.default_dclk_div = 1,
66-
.default_dclk_frq = 7,
67-
};
68-
69-
static struct ssd130x_deviceinfo ssd130x_ssd1306_deviceinfo = {
70-
.default_vcomh = 0x20,
71-
.default_dclk_div = 1,
72-
.default_dclk_frq = 8,
73-
.need_chargepump = 1,
74-
};
75-
76-
static struct ssd130x_deviceinfo ssd130x_ssd1307_deviceinfo = {
77-
.default_vcomh = 0x20,
78-
.default_dclk_div = 2,
79-
.default_dclk_frq = 12,
80-
.need_pwm = 1,
81-
};
82-
83-
static struct ssd130x_deviceinfo ssd130x_ssd1309_deviceinfo = {
84-
.default_vcomh = 0x34,
85-
.default_dclk_div = 1,
86-
.default_dclk_frq = 10,
87-
};
88-
8956
static const struct of_device_id ssd130x_of_match[] = {
9057
{
9158
.compatible = "sinowealth,sh1106",
92-
.data = &ssd130x_sh1106_deviceinfo,
59+
.data = &ssd130x_variants[SH1106_ID],
9360
},
9461
{
9562
.compatible = "solomon,ssd1305",
96-
.data = &ssd130x_ssd1305_deviceinfo,
63+
.data = &ssd130x_variants[SSD1305_ID],
9764
},
9865
{
9966
.compatible = "solomon,ssd1306",
100-
.data = &ssd130x_ssd1306_deviceinfo,
67+
.data = &ssd130x_variants[SSD1306_ID],
10168
},
10269
{
10370
.compatible = "solomon,ssd1307",
104-
.data = &ssd130x_ssd1307_deviceinfo,
71+
.data = &ssd130x_variants[SSD1307_ID],
10572
},
10673
{
10774
.compatible = "solomon,ssd1309",
108-
.data = &ssd130x_ssd1309_deviceinfo,
75+
.data = &ssd130x_variants[SSD1309_ID],
10976
},
11077
/* Deprecated but kept for backward compatibility */
11178
{
11279
.compatible = "solomon,ssd1305fb-i2c",
113-
.data = &ssd130x_ssd1305_deviceinfo,
80+
.data = &ssd130x_variants[SSD1305_ID],
11481
},
11582
{
11683
.compatible = "solomon,ssd1306fb-i2c",
117-
.data = &ssd130x_ssd1306_deviceinfo,
84+
.data = &ssd130x_variants[SSD1306_ID],
11885
},
11986
{
12087
.compatible = "solomon,ssd1307fb-i2c",
121-
.data = &ssd130x_ssd1307_deviceinfo,
88+
.data = &ssd130x_variants[SSD1307_ID],
12289
},
12390
{
12491
.compatible = "solomon,ssd1309fb-i2c",
125-
.data = &ssd130x_ssd1309_deviceinfo,
92+
.data = &ssd130x_variants[SSD1309_ID],
12693
},
12794
{ /* sentinel */ }
12895
};
@@ -142,3 +109,4 @@ module_i2c_driver(ssd130x_i2c_driver);
142109
MODULE_DESCRIPTION(DRIVER_DESC);
143110
MODULE_AUTHOR("Javier Martinez Canillas <javierm@redhat.com>");
144111
MODULE_LICENSE("GPL v2");
112+
MODULE_IMPORT_NS(DRM_SSD130X);

drivers/gpu/drm/solomon/ssd130x.c

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,6 @@
3939
#define DRIVER_MAJOR 1
4040
#define DRIVER_MINOR 0
4141

42-
#define SSD130X_DATA 0x40
43-
#define SSD130X_COMMAND 0x80
44-
4542
#define SSD130X_PAGE_COL_START_LOW 0x00
4643
#define SSD130X_PAGE_COL_START_HIGH 0x10
4744
#define SSD130X_SET_ADDRESS_MODE 0x20
@@ -94,6 +91,38 @@
9491

9592
#define MAX_CONTRAST 255
9693

94+
const struct ssd130x_deviceinfo ssd130x_variants[] = {
95+
[SH1106_ID] = {
96+
.default_vcomh = 0x40,
97+
.default_dclk_div = 1,
98+
.default_dclk_frq = 5,
99+
.page_mode_only = 1,
100+
},
101+
[SSD1305_ID] = {
102+
.default_vcomh = 0x34,
103+
.default_dclk_div = 1,
104+
.default_dclk_frq = 7,
105+
},
106+
[SSD1306_ID] = {
107+
.default_vcomh = 0x20,
108+
.default_dclk_div = 1,
109+
.default_dclk_frq = 8,
110+
.need_chargepump = 1,
111+
},
112+
[SSD1307_ID] = {
113+
.default_vcomh = 0x20,
114+
.default_dclk_div = 2,
115+
.default_dclk_frq = 12,
116+
.need_pwm = 1,
117+
},
118+
[SSD1309_ID] = {
119+
.default_vcomh = 0x34,
120+
.default_dclk_div = 1,
121+
.default_dclk_frq = 10,
122+
}
123+
};
124+
EXPORT_SYMBOL_NS_GPL(ssd130x_variants, DRM_SSD130X);
125+
97126
static inline struct ssd130x_device *drm_to_ssd130x(struct drm_device *drm)
98127
{
99128
return container_of(drm, struct ssd130x_device, drm);

drivers/gpu/drm/solomon/ssd130x.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@
1818

1919
#include <linux/regmap.h>
2020

21+
#define SSD130X_DATA 0x40
22+
#define SSD130X_COMMAND 0x80
23+
24+
enum ssd130x_variants {
25+
SH1106_ID,
26+
SSD1305_ID,
27+
SSD1306_ID,
28+
SSD1307_ID,
29+
SSD1309_ID,
30+
NR_SSD130X_VARIANTS
31+
};
32+
2133
struct ssd130x_deviceinfo {
2234
u32 default_vcomh;
2335
u32 default_dclk_div;
@@ -71,6 +83,8 @@ struct ssd130x_device {
7183
u8 page_end;
7284
};
7385

86+
extern const struct ssd130x_deviceinfo ssd130x_variants[];
87+
7488
struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
7589
int ssd130x_remove(struct ssd130x_device *ssd130x);
7690
void ssd130x_shutdown(struct ssd130x_device *ssd130x);

0 commit comments

Comments
 (0)