drm/ssd130x: Rename commands that are shared across chip families
[linux-block.git] / drivers / gpu / drm / solomon / ssd130x.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Header file for:
4  * DRM driver for Solomon SSD130x OLED displays
5  *
6  * Copyright 2022 Red Hat Inc.
7  * Author: Javier Martinez Canillas <javierm@redhat.com>
8  *
9  * Based on drivers/video/fbdev/ssd1307fb.c
10  * Copyright 2012 Free Electrons
11  */
12
13 #ifndef __SSD130X_H__
14 #define __SSD130X_H__
15
16 #include <drm/drm_connector.h>
17 #include <drm/drm_crtc.h>
18 #include <drm/drm_drv.h>
19 #include <drm/drm_encoder.h>
20 #include <drm/drm_plane_helper.h>
21
22 #include <linux/regmap.h>
23
24 #define SSD13XX_DATA                            0x40
25 #define SSD13XX_COMMAND                         0x80
26
27 enum ssd130x_family_ids {
28         SSD130X_FAMILY
29 };
30
31 enum ssd130x_variants {
32         /* ssd130x family */
33         SH1106_ID,
34         SSD1305_ID,
35         SSD1306_ID,
36         SSD1307_ID,
37         SSD1309_ID,
38         NR_SSD130X_VARIANTS
39 };
40
41 struct ssd130x_deviceinfo {
42         u32 default_vcomh;
43         u32 default_dclk_div;
44         u32 default_dclk_frq;
45         u32 default_width;
46         u32 default_height;
47         bool need_pwm;
48         bool need_chargepump;
49         bool page_mode_only;
50
51         enum ssd130x_family_ids family_id;
52 };
53
54 struct ssd130x_device {
55         struct drm_device drm;
56         struct device *dev;
57         struct drm_display_mode mode;
58         struct drm_plane primary_plane;
59         struct drm_crtc crtc;
60         struct drm_encoder encoder;
61         struct drm_connector connector;
62         struct i2c_client *client;
63
64         struct regmap *regmap;
65
66         const struct ssd130x_deviceinfo *device_info;
67
68         unsigned page_address_mode : 1;
69         unsigned area_color_enable : 1;
70         unsigned com_invdir : 1;
71         unsigned com_lrremap : 1;
72         unsigned com_seq : 1;
73         unsigned lookup_table_set : 1;
74         unsigned low_power : 1;
75         unsigned seg_remap : 1;
76         u32 com_offset;
77         u32 contrast;
78         u32 dclk_div;
79         u32 dclk_frq;
80         u32 height;
81         u8 lookup_table[4];
82         u32 page_offset;
83         u32 col_offset;
84         u32 prechargep1;
85         u32 prechargep2;
86
87         struct backlight_device *bl_dev;
88         struct pwm_device *pwm;
89         struct gpio_desc *reset;
90         struct regulator *vcc_reg;
91         u32 vcomh;
92         u32 width;
93         /* Cached address ranges */
94         u8 col_start;
95         u8 col_end;
96         u8 page_start;
97         u8 page_end;
98 };
99
100 extern const struct ssd130x_deviceinfo ssd130x_variants[];
101
102 struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
103 void ssd130x_remove(struct ssd130x_device *ssd130x);
104 void ssd130x_shutdown(struct ssd130x_device *ssd130x);
105
106 #endif /* __SSD130X_H__ */