Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
27enum ssd130x_family_ids {
28 SSD130X_FAMILY,
29 SSD132X_FAMILY
30};
31
32enum 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 NR_SSD130X_VARIANTS
44};
45
46struct ssd130x_deviceinfo {
47 u32 default_vcomh;
48 u32 default_dclk_div;
49 u32 default_dclk_frq;
50 u32 default_width;
51 u32 default_height;
52 bool need_pwm;
53 bool need_chargepump;
54 bool page_mode_only;
55
56 enum ssd130x_family_ids family_id;
57};
58
59struct ssd130x_device {
60 struct drm_device drm;
61 struct device *dev;
62 struct drm_display_mode mode;
63 struct drm_plane primary_plane;
64 struct drm_crtc crtc;
65 struct drm_encoder encoder;
66 struct drm_connector connector;
67 struct i2c_client *client;
68
69 struct regmap *regmap;
70
71 const struct ssd130x_deviceinfo *device_info;
72
73 unsigned page_address_mode : 1;
74 unsigned area_color_enable : 1;
75 unsigned com_invdir : 1;
76 unsigned com_lrremap : 1;
77 unsigned com_seq : 1;
78 unsigned lookup_table_set : 1;
79 unsigned low_power : 1;
80 unsigned seg_remap : 1;
81 u32 com_offset;
82 u32 contrast;
83 u32 dclk_div;
84 u32 dclk_frq;
85 u32 height;
86 u8 lookup_table[4];
87 u32 page_offset;
88 u32 col_offset;
89 u32 prechargep1;
90 u32 prechargep2;
91
92 struct backlight_device *bl_dev;
93 struct pwm_device *pwm;
94 struct gpio_desc *reset;
95 struct regulator *vcc_reg;
96 u32 vcomh;
97 u32 width;
98 /* Cached address ranges */
99 u8 col_start;
100 u8 col_end;
101 u8 page_start;
102 u8 page_end;
103};
104
105extern const struct ssd130x_deviceinfo ssd130x_variants[];
106
107struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
108void ssd130x_remove(struct ssd130x_device *ssd130x);
109void ssd130x_shutdown(struct ssd130x_device *ssd130x);
110
111#endif /* __SSD130X_H__ */