]> Git Repo - linux.git/blob - drivers/gpu/drm/solomon/ssd130x.h
Linux 6.14-rc3
[linux.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 <[email protected]>
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
21 #include <linux/regmap.h>
22
23 #define SSD13XX_DATA                            0x40
24 #define SSD13XX_COMMAND                         0x80
25
26 enum ssd130x_family_ids {
27         SSD130X_FAMILY,
28         SSD132X_FAMILY,
29         SSD133X_FAMILY
30 };
31
32 enum ssd130x_variants {
33         /* ssd130x family */
34         SH1106_ID,
35         SSD1305_ID,
36         SSD1306_ID,
37         SSD1307_ID,
38         SSD1309_ID,
39         /* ssd132x family */
40         SSD1322_ID,
41         SSD1325_ID,
42         SSD1327_ID,
43         /* ssd133x family */
44         SSD1331_ID,
45         NR_SSD130X_VARIANTS
46 };
47
48 struct ssd130x_deviceinfo {
49         u32 default_vcomh;
50         u32 default_dclk_div;
51         u32 default_dclk_frq;
52         u32 default_width;
53         u32 default_height;
54         bool need_pwm;
55         bool need_chargepump;
56         bool page_mode_only;
57
58         enum ssd130x_family_ids family_id;
59 };
60
61 struct ssd130x_device {
62         struct drm_device drm;
63         struct device *dev;
64         struct drm_display_mode mode;
65         struct drm_plane primary_plane;
66         struct drm_crtc crtc;
67         struct drm_encoder encoder;
68         struct drm_connector connector;
69         struct i2c_client *client;
70
71         struct regmap *regmap;
72
73         const struct ssd130x_deviceinfo *device_info;
74
75         unsigned page_address_mode : 1;
76         unsigned area_color_enable : 1;
77         unsigned com_invdir : 1;
78         unsigned com_lrremap : 1;
79         unsigned com_seq : 1;
80         unsigned lookup_table_set : 1;
81         unsigned low_power : 1;
82         unsigned seg_remap : 1;
83         u32 com_offset;
84         u32 contrast;
85         u32 dclk_div;
86         u32 dclk_frq;
87         u32 height;
88         u8 lookup_table[4];
89         u32 page_offset;
90         u32 col_offset;
91         u32 prechargep1;
92         u32 prechargep2;
93
94         struct backlight_device *bl_dev;
95         struct pwm_device *pwm;
96         struct gpio_desc *reset;
97         struct regulator *vcc_reg;
98         u32 vcomh;
99         u32 width;
100         /* Cached address ranges */
101         u8 col_start;
102         u8 col_end;
103         u8 page_start;
104         u8 page_end;
105 };
106
107 extern const struct ssd130x_deviceinfo ssd130x_variants[];
108
109 struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
110 void ssd130x_remove(struct ssd130x_device *ssd130x);
111 void ssd130x_shutdown(struct ssd130x_device *ssd130x);
112
113 #endif /* __SSD130X_H__ */
This page took 0.041101 seconds and 4 git commands to generate.