1 /* SPDX-License-Identifier: GPL-2.0-only */
4 * DRM driver for Solomon SSD130x OLED displays
6 * Copyright 2022 Red Hat Inc.
7 * Author: Javier Martinez Canillas <javierm@redhat.com>
9 * Based on drivers/video/fbdev/ssd1307fb.c
10 * Copyright 2012 Free Electrons
13 #ifndef __SSD1307X_H__
14 #define __SSD1307X_H__
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>
22 #include <linux/regmap.h>
24 #define SSD130X_DATA 0x40
25 #define SSD130X_COMMAND 0x80
27 enum ssd130x_variants {
36 struct ssd130x_deviceinfo {
45 struct ssd130x_device {
46 struct drm_device drm;
48 struct drm_display_mode mode;
49 struct drm_plane primary_plane;
51 struct drm_encoder encoder;
52 struct drm_connector connector;
53 struct i2c_client *client;
55 struct regmap *regmap;
57 const struct ssd130x_deviceinfo *device_info;
59 unsigned page_address_mode : 1;
60 unsigned area_color_enable : 1;
61 unsigned com_invdir : 1;
62 unsigned com_lrremap : 1;
64 unsigned lookup_table_set : 1;
65 unsigned low_power : 1;
66 unsigned seg_remap : 1;
78 struct backlight_device *bl_dev;
79 struct pwm_device *pwm;
80 struct gpio_desc *reset;
81 struct regulator *vcc_reg;
84 /* Cached address ranges */
91 extern const struct ssd130x_deviceinfo ssd130x_variants[];
93 struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
94 void ssd130x_remove(struct ssd130x_device *ssd130x);
95 void ssd130x_shutdown(struct ssd130x_device *ssd130x);
97 #endif /* __SSD1307X_H__ */