| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Header file for: | |
| * Driver for Sitronix ST7571, a 4 level gray scale dot matrix LCD controller | |
| * | |
| * Copyright (C) 2025 Marcus Folkesson <marcus.folkesson@gmail.com> | |
| */ | |
| #ifndef __ST7571_H__ | |
| #define __ST7571_H__ | |
| #include <drm/drm_connector.h> | |
| #include <drm/drm_crtc.h> | |
| #include <drm/drm_drv.h> | |
| #include <drm/drm_encoder.h> | |
| #include <drm/drm_format_helper.h> | |
| #include <linux/regmap.h> | |
| enum st7571_color_mode { | |
| ST7571_COLOR_MODE_GRAY = 0, | |
| ST7571_COLOR_MODE_BLACKWHITE = 1, | |
| }; | |
| struct st7571_device; | |
| struct st7571_panel_constraints { | |
| u32 min_nlines; | |
| u32 max_nlines; | |
| u32 min_ncols; | |
| u32 max_ncols; | |
| bool support_grayscale; | |
| }; | |
| struct st7571_panel_data { | |
| int (*init)(struct st7571_device *st7571); | |
| int (*parse_dt)(struct st7571_device *st7571); | |
| struct st7571_panel_constraints constraints; | |
| }; | |
| struct st7571_panel_format { | |
| void (*prepare_buffer)(struct st7571_device *st7571, | |
| const struct iosys_map *vmap, | |
| struct drm_framebuffer *fb, | |
| struct drm_rect *rect, | |
| struct drm_format_conv_state *fmtcnv_state); | |
| int (*update_rect)(struct drm_framebuffer *fb, struct drm_rect *rect); | |
| enum st7571_color_mode mode; | |
| const u8 nformats; | |
| const u32 formats[]; | |
| }; | |
| struct st7571_device { | |
| struct drm_device drm; | |
| struct device *dev; | |
| struct drm_plane primary_plane; | |
| struct drm_crtc crtc; | |
| struct drm_encoder encoder; | |
| struct drm_connector connector; | |
| struct drm_display_mode mode; | |
| const struct st7571_panel_format *pformat; | |
| const struct st7571_panel_data *pdata; | |
| struct gpio_desc *reset; | |
| struct regmap *regmap; | |
| bool grayscale; | |
| bool inverted; | |
| u32 height_mm; | |
| u32 width_mm; | |
| u32 startline; | |
| u32 nlines; | |
| u32 ncols; | |
| u32 bpp; | |
| /* Intermediate buffer in LCD friendly format */ | |
| u8 *hwbuf; | |
| /* Row of (transformed) pixels ready to be written to the display */ | |
| u8 *row; | |
| }; | |
| extern const struct st7571_panel_data st7567_config; | |
| extern const struct st7571_panel_data st7571_config; | |
| struct st7571_device *st7571_probe(struct device *dev, struct regmap *regmap); | |
| void st7571_remove(struct st7571_device *st7571); | |
| #endif /* __ST7571_H__ */ |