Linux Audio

Check our new training course

Loading...
  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
 21#include <linux/regmap.h>
 22
 23#define SSD13XX_DATA				0x40
 24#define SSD13XX_COMMAND				0x80
 25
 26enum ssd130x_family_ids {
 27	SSD130X_FAMILY,
 28	SSD132X_FAMILY,
 29	SSD133X_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	/* ssd133x family */
 44	SSD1331_ID,
 45	NR_SSD130X_VARIANTS
 46};
 47
 48struct 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
 61struct 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
107extern const struct ssd130x_deviceinfo ssd130x_variants[];
108
109struct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap);
110void ssd130x_remove(struct ssd130x_device *ssd130x);
111void ssd130x_shutdown(struct ssd130x_device *ssd130x);
112
113#endif /* __SSD130X_H__ */