1 /* SPDX-License-Identifier: GPL-2.0-only */
4 * DRM driver for Solomon SSD130x OLED displays
6 * Copyright 2022 Red Hat Inc.
9 * Based on drivers/video/fbdev/ssd1307fb.c
10 * Copyright 2012 Free Electrons
16 #include <drm/drm_connector.h>
17 #include <drm/drm_crtc.h>
18 #include <drm/drm_drv.h>
19 #include <drm/drm_encoder.h>
21 #include <linux/regmap.h>
23 #define SSD13XX_DATA 0x40
24 #define SSD13XX_COMMAND 0x80
26 enum ssd130x_family_ids {
31 enum ssd130x_variants {
45 struct ssd130x_deviceinfo {
55 enum ssd130x_family_ids family_id;
58 struct ssd130x_device {
59 struct drm_device drm;
61 struct drm_display_mode mode;
62 struct drm_plane primary_plane;
64 struct drm_encoder encoder;
65 struct drm_connector connector;
66 struct i2c_client *client;
68 struct regmap *regmap;
70 const struct ssd130x_deviceinfo *device_info;
72 unsigned page_address_mode : 1;
73 unsigned area_color_enable : 1;
74 unsigned com_invdir : 1;
75 unsigned com_lrremap : 1;
77 unsigned lookup_table_set : 1;
78 unsigned low_power : 1;
79 unsigned seg_remap : 1;
91 struct backlight_device *bl_dev;
92 struct pwm_device *pwm;
93 struct gpio_desc *reset;
94 struct regulator *vcc_reg;
97 /* Cached address ranges */
104 extern const struct ssd130x_deviceinfo ssd130x_variants[];
106 struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
107 void ssd130x_remove(struct ssd130x_device *ssd130x);
108 void ssd130x_shutdown(struct ssd130x_device *ssd130x);
110 #endif /* __SSD130X_H__ */