162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Header file for: 462306a36Sopenharmony_ci * DRM driver for Solomon SSD130x OLED displays 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright 2022 Red Hat Inc. 762306a36Sopenharmony_ci * Author: Javier Martinez Canillas <javierm@redhat.com> 862306a36Sopenharmony_ci * 962306a36Sopenharmony_ci * Based on drivers/video/fbdev/ssd1307fb.c 1062306a36Sopenharmony_ci * Copyright 2012 Free Electrons 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#ifndef __SSD130X_H__ 1462306a36Sopenharmony_ci#define __SSD130X_H__ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <drm/drm_connector.h> 1762306a36Sopenharmony_ci#include <drm/drm_crtc.h> 1862306a36Sopenharmony_ci#include <drm/drm_drv.h> 1962306a36Sopenharmony_ci#include <drm/drm_encoder.h> 2062306a36Sopenharmony_ci#include <drm/drm_plane_helper.h> 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci#include <linux/regmap.h> 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define SSD130X_DATA 0x40 2562306a36Sopenharmony_ci#define SSD130X_COMMAND 0x80 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cienum ssd130x_variants { 2862306a36Sopenharmony_ci SH1106_ID, 2962306a36Sopenharmony_ci SSD1305_ID, 3062306a36Sopenharmony_ci SSD1306_ID, 3162306a36Sopenharmony_ci SSD1307_ID, 3262306a36Sopenharmony_ci SSD1309_ID, 3362306a36Sopenharmony_ci NR_SSD130X_VARIANTS 3462306a36Sopenharmony_ci}; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistruct ssd130x_deviceinfo { 3762306a36Sopenharmony_ci u32 default_vcomh; 3862306a36Sopenharmony_ci u32 default_dclk_div; 3962306a36Sopenharmony_ci u32 default_dclk_frq; 4062306a36Sopenharmony_ci u32 default_width; 4162306a36Sopenharmony_ci u32 default_height; 4262306a36Sopenharmony_ci u32 page_height; 4362306a36Sopenharmony_ci int need_pwm; 4462306a36Sopenharmony_ci int need_chargepump; 4562306a36Sopenharmony_ci bool page_mode_only; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cistruct ssd130x_device { 4962306a36Sopenharmony_ci struct drm_device drm; 5062306a36Sopenharmony_ci struct device *dev; 5162306a36Sopenharmony_ci struct drm_display_mode mode; 5262306a36Sopenharmony_ci struct drm_plane primary_plane; 5362306a36Sopenharmony_ci struct drm_crtc crtc; 5462306a36Sopenharmony_ci struct drm_encoder encoder; 5562306a36Sopenharmony_ci struct drm_connector connector; 5662306a36Sopenharmony_ci struct i2c_client *client; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci struct regmap *regmap; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci const struct ssd130x_deviceinfo *device_info; 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci unsigned page_address_mode : 1; 6362306a36Sopenharmony_ci unsigned area_color_enable : 1; 6462306a36Sopenharmony_ci unsigned com_invdir : 1; 6562306a36Sopenharmony_ci unsigned com_lrremap : 1; 6662306a36Sopenharmony_ci unsigned com_seq : 1; 6762306a36Sopenharmony_ci unsigned lookup_table_set : 1; 6862306a36Sopenharmony_ci unsigned low_power : 1; 6962306a36Sopenharmony_ci unsigned seg_remap : 1; 7062306a36Sopenharmony_ci u32 com_offset; 7162306a36Sopenharmony_ci u32 contrast; 7262306a36Sopenharmony_ci u32 dclk_div; 7362306a36Sopenharmony_ci u32 dclk_frq; 7462306a36Sopenharmony_ci u32 height; 7562306a36Sopenharmony_ci u8 lookup_table[4]; 7662306a36Sopenharmony_ci u32 page_offset; 7762306a36Sopenharmony_ci u32 col_offset; 7862306a36Sopenharmony_ci u32 prechargep1; 7962306a36Sopenharmony_ci u32 prechargep2; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci struct backlight_device *bl_dev; 8262306a36Sopenharmony_ci struct pwm_device *pwm; 8362306a36Sopenharmony_ci struct gpio_desc *reset; 8462306a36Sopenharmony_ci struct regulator *vcc_reg; 8562306a36Sopenharmony_ci u32 vcomh; 8662306a36Sopenharmony_ci u32 width; 8762306a36Sopenharmony_ci /* Cached address ranges */ 8862306a36Sopenharmony_ci u8 col_start; 8962306a36Sopenharmony_ci u8 col_end; 9062306a36Sopenharmony_ci u8 page_start; 9162306a36Sopenharmony_ci u8 page_end; 9262306a36Sopenharmony_ci}; 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ciextern const struct ssd130x_deviceinfo ssd130x_variants[]; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_cistruct ssd130x_device *ssd130x_probe(struct device *dev, struct regmap *regmap); 9762306a36Sopenharmony_civoid ssd130x_remove(struct ssd130x_device *ssd130x); 9862306a36Sopenharmony_civoid ssd130x_shutdown(struct ssd130x_device *ssd130x); 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#endif /* __SSD130X_H__ */ 101