XenevaOS
Loading...
Searching...
No Matches
drm_mipi_dbi.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * MIPI Display Bus Interface (DBI) LCD controller support
4 *
5 * Copyright 2016 Noralf Trønnes
6 */
7
8#ifndef __LINUX_MIPI_DBI_H
9#define __LINUX_MIPI_DBI_H
10
11#include <linux/mutex.h>
12
14#include <drm/drm_device.h>
18
20struct drm_rect;
21struct gpio_desc;
22struct iosys_map;
23struct regulator;
24struct spi_device;
25
29struct mipi_dbi {
33 struct mutex cmdlock;
34
38 int (*command)(struct mipi_dbi *dbi, u8 *cmd, u8 *param, size_t num);
39
45
50
54 struct gpio_desc *reset;
55
56 /* Type C specific */
57
61 struct spi_device *spi;
62
66 unsigned int write_memory_bpw;
67
71 struct gpio_desc *dc;
72
76 void *tx_buf9;
77
82};
83
92
97
102
107
111 unsigned int rotation;
112
117 unsigned int left_offset;
118
123 unsigned int top_offset;
124
128 struct backlight_device *backlight;
129
134
139
143 struct mipi_dbi dbi;
144
152};
153
154static inline struct mipi_dbi_dev *drm_to_mipi_dbi_dev(struct drm_device *drm)
155{
156 return container_of(drm, struct mipi_dbi_dev, drm);
157}
158
159int mipi_dbi_spi_init(struct spi_device *spi, struct mipi_dbi *dbi,
160 struct gpio_desc *dc);
161
162int drm_mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev, const struct drm_display_mode *mode,
163 u32 format, unsigned int rotation, size_t tx_buf_size);
164
169
170u32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len);
171int mipi_dbi_spi_transfer(struct spi_device *spi, u32 speed_hz,
172 u8 bpw, const void *buf, size_t len);
173
174int mipi_dbi_command_read(struct mipi_dbi *dbi, u8 cmd, u8 *val);
175int mipi_dbi_command_buf(struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len);
177 size_t len);
178int mipi_dbi_buf_copy(void *dst, struct iosys_map *src, struct drm_framebuffer *fb,
179 struct drm_rect *clip, bool swap,
180 struct drm_format_conv_state *fmtcnv_state);
181
194#define mipi_dbi_command(dbi, cmd, seq...) \
195({ \
196 const u8 d[] = { seq }; \
197 struct device *dev = &(dbi)->spi->dev; \
198 int ret; \
199 ret = mipi_dbi_command_stackbuf(dbi, cmd, d, ARRAY_SIZE(d)); \
200 if (ret) \
201 dev_err_ratelimited(dev, "error %d when sending command %#02x\n", ret, cmd); \
202 ret; \
203})
204
205/*
206 * Plane
207 */
208
209#define DRM_MIPI_DBI_PLANE_FORMATS \
210 DRM_FORMAT_RGB565, \
211 DRM_FORMAT_XRGB8888
212
213#define DRM_MIPI_DBI_PLANE_FORMAT_MODIFIERS \
214 DRM_FORMAT_MOD_LINEAR, \
215 DRM_FORMAT_MOD_INVALID
216
217#define DRM_MIPI_DBI_PLANE_FUNCS \
218 DRM_GEM_SHADOW_PLANE_FUNCS, \
219 .update_plane = drm_atomic_helper_update_plane, \
220 .disable_plane = drm_atomic_helper_disable_plane
221
223 struct drm_atomic_commit *state);
225 struct drm_atomic_commit *state);
226
227#define DRM_MIPI_DBI_PLANE_HELPER_FUNCS \
228 DRM_GEM_SHADOW_PLANE_HELPER_FUNCS, \
229 .atomic_check = drm_mipi_dbi_plane_helper_atomic_check, \
230 .atomic_update = drm_mipi_dbi_plane_helper_atomic_update
231
232/*
233 * CRTC
234 */
235
236#define DRM_MIPI_DBI_CRTC_FUNCS \
237 .reset = drm_atomic_helper_crtc_reset, \
238 .set_config = drm_atomic_helper_set_config, \
239 .page_flip = drm_atomic_helper_page_flip, \
240 .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, \
241 .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state
242
244 const struct drm_display_mode *mode);
246 struct drm_atomic_commit *state);
248 struct drm_atomic_commit *state);
249
250#define DRM_MIPI_DBI_CRTC_HELPER_FUNCS \
251 .mode_valid = drm_mipi_dbi_crtc_helper_mode_valid, \
252 .atomic_check = drm_mipi_dbi_crtc_helper_atomic_check, \
253 .atomic_disable = drm_mipi_dbi_crtc_helper_atomic_disable
254
255/*
256 * Connector
257 */
258
259#define DRM_MIPI_DBI_CONNECTOR_FUNCS \
260 .reset = drm_atomic_helper_connector_reset, \
261 .fill_modes = drm_helper_probe_single_connector_modes, \
262 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, \
263 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state
264
266
267#define DRM_MIPI_DBI_CONNECTOR_HELPER_FUNCS \
268 .get_modes = drm_mipi_dbi_connector_helper_get_modes
269
270/*
271 * Mode config
272 */
273
274#define DRM_MIPI_DBI_MODE_CONFIG_FUNCS \
275 .fb_create = drm_gem_fb_create_with_dirty, \
276 .atomic_check = drm_atomic_helper_check, \
277 .atomic_commit = drm_atomic_helper_commit
278
279#define DRM_MIPI_DBI_MODE_CONFIG_HELPER_FUNCS \
280 .atomic_commit_tail = drm_atomic_helper_commit_tail_rpm
281
282/*
283 * Debug FS
284 */
285
286#ifdef CONFIG_DEBUG_FS
287void mipi_dbi_debugfs_init(struct drm_minor *minor);
288#else
289static inline void mipi_dbi_debugfs_init(struct drm_minor *minor) {}
290#endif
291
292#endif /* __LINUX_MIPI_DBI_H */
#define container_of(ptr, type, member)
Definition container_of.h:19
struct drm_crtc * crtc
Definition drm_crtc.h:1238
int mipi_dbi_command_stackbuf(struct mipi_dbi *dbi, u8 cmd, const u8 *data, size_t len)
int mipi_dbi_spi_init(struct spi_device *spi, struct mipi_dbi *dbi, struct gpio_desc *dc)
void drm_mipi_dbi_plane_helper_atomic_update(struct drm_plane *plane, struct drm_atomic_commit *state)
int mipi_dbi_command_buf(struct mipi_dbi *dbi, u8 cmd, u8 *data, size_t len)
int mipi_dbi_poweron_reset(struct mipi_dbi_dev *dbidev)
u32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len)
int drm_mipi_dbi_connector_helper_get_modes(struct drm_connector *connector)
void mipi_dbi_hw_reset(struct mipi_dbi *dbi)
int drm_mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev, const struct drm_display_mode *mode, u32 format, unsigned int rotation, size_t tx_buf_size)
int mipi_dbi_poweron_conditional_reset(struct mipi_dbi_dev *dbidev)
bool mipi_dbi_display_is_on(struct mipi_dbi *dbi)
void drm_mipi_dbi_crtc_helper_atomic_disable(struct drm_crtc *crtc, struct drm_atomic_commit *state)
enum drm_mode_status drm_mipi_dbi_crtc_helper_mode_valid(struct drm_crtc *crtc, const struct drm_display_mode *mode)
int mipi_dbi_command_read(struct mipi_dbi *dbi, u8 cmd, u8 *val)
int mipi_dbi_buf_copy(void *dst, struct iosys_map *src, struct drm_framebuffer *fb, struct drm_rect *clip, bool swap, struct drm_format_conv_state *fmtcnv_state)
int drm_mipi_dbi_crtc_helper_atomic_check(struct drm_crtc *crtc, struct drm_atomic_commit *state)
int drm_mipi_dbi_plane_helper_atomic_check(struct drm_plane *plane, struct drm_atomic_commit *state)
int mipi_dbi_spi_transfer(struct spi_device *spi, u32 speed_hz, u8 bpw, const void *buf, size_t len)
drm_mode_status
Definition drm_modes.h:91
struct drm_plane * plane
Definition drm_plane.h:828
const char const char * format
Definition drm_print.h:516
i32 clip(i32 x, i32 y, i32 z)
size_t len
Definition initial.c:23
void * data
Definition kthread.h:30
uint8_t u8
Definition kernel.h:14
uint16_t u16
Definition kernel.h:15
uint32_t u32
Definition kernel.h:16
#define swap(a, b)
Definition minmax.h:73
Definition drm_atomic.h:480
Definition drm_connector.h:1998
Definition drm_crtc.h:955
Definition drm_device.h:75
Definition drm_modes.h:252
Definition drm_format_helper.h:27
Definition drm_framebuffer.h:120
Definition drm_file.h:78
Definition drm_plane.h:641
Definition drm_rect.h:46
Definition iosys-map.h:109
Definition drm_mipi_dbi.h:87
u32 pixel_format
Definition drm_mipi_dbi.h:101
struct backlight_device * backlight
Definition drm_mipi_dbi.h:128
struct drm_display_mode mode
Definition drm_mipi_dbi.h:96
u16 * tx_buf
Definition drm_mipi_dbi.h:106
void * driver_private
Definition drm_mipi_dbi.h:151
struct mipi_dbi dbi
Definition drm_mipi_dbi.h:143
unsigned int top_offset
Definition drm_mipi_dbi.h:123
unsigned int left_offset
Definition drm_mipi_dbi.h:117
struct regulator * io_regulator
Definition drm_mipi_dbi.h:138
unsigned int rotation
Definition drm_mipi_dbi.h:111
struct drm_device drm
Definition drm_mipi_dbi.h:91
struct regulator * regulator
Definition drm_mipi_dbi.h:133
Definition drm_mipi_dbi.h:29
unsigned int write_memory_bpw
Definition drm_mipi_dbi.h:66
void * tx_buf9
Definition drm_mipi_dbi.h:76
size_t tx_buf9_len
Definition drm_mipi_dbi.h:81
const u8 * read_commands
Definition drm_mipi_dbi.h:44
struct spi_device * spi
Definition drm_mipi_dbi.h:61
struct gpio_desc * dc
Definition drm_mipi_dbi.h:71
int(* command)(struct mipi_dbi *dbi, u8 *cmd, u8 *param, size_t num)
Definition drm_mipi_dbi.h:38
bool swap_bytes
Definition drm_mipi_dbi.h:49
struct gpio_desc * reset
Definition drm_mipi_dbi.h:54
struct mutex cmdlock
Definition drm_mipi_dbi.h:33
Definition mutex.h:59
#define state(x)
#define mode(x)