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 {
32 enum ssd130x_variants {
48 struct ssd130x_deviceinfo {
58 enum ssd130x_family_ids family_id;
61 struct ssd130x_device {
62 struct drm_device drm;
64 struct drm_display_mode mode;
65 struct drm_plane primary_plane;
67 struct drm_encoder encoder;
68 struct drm_connector connector;
69 struct i2c_client *client;
71 struct regmap *regmap;
73 const struct ssd130x_deviceinfo *device_info;
75 unsigned page_address_mode : 1;
76 unsigned area_color_enable : 1;
77 unsigned com_invdir : 1;
78 unsigned com_lrremap : 1;
80 unsigned lookup_table_set : 1;
81 unsigned low_power : 1;
82 unsigned seg_remap : 1;
94 struct backlight_device *bl_dev;
95 struct pwm_device *pwm;
96 struct gpio_desc *reset;
97 struct regulator *vcc_reg;
100 /* Cached address ranges */
107 extern const struct ssd130x_deviceinfo ssd130x_variants[];
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);
113 #endif /* __SSD130X_H__ */