Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.2 117 lines 3.6 kB view raw
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#include <drm/drm_device.h> 13#include <drm/drm_simple_kms_helper.h> 14 15struct drm_rect; 16struct spi_device; 17struct gpio_desc; 18struct regulator; 19 20/** 21 * struct mipi_dbi - MIPI DBI controller 22 * @spi: SPI device 23 * @enabled: Pipeline is enabled 24 * @cmdlock: Command lock 25 * @command: Bus specific callback executing commands. 26 * @read_commands: Array of read commands terminated by a zero entry. 27 * Reading is disabled if this is NULL. 28 * @dc: Optional D/C gpio. 29 * @tx_buf: Buffer used for transfer (copy clip rect area) 30 * @tx_buf9: Buffer used for Option 1 9-bit conversion 31 * @tx_buf9_len: Size of tx_buf9. 32 * @swap_bytes: Swap bytes in buffer before transfer 33 * @reset: Optional reset gpio 34 * @rotation: initial rotation in degrees Counter Clock Wise 35 * @backlight: backlight device (optional) 36 * @regulator: power regulator (optional) 37 */ 38struct mipi_dbi { 39 /** 40 * @drm: DRM device 41 */ 42 struct drm_device drm; 43 44 /** 45 * @pipe: Display pipe structure 46 */ 47 struct drm_simple_display_pipe pipe; 48 49 struct spi_device *spi; 50 bool enabled; 51 struct mutex cmdlock; 52 int (*command)(struct mipi_dbi *mipi, u8 *cmd, u8 *param, size_t num); 53 const u8 *read_commands; 54 struct gpio_desc *dc; 55 u16 *tx_buf; 56 void *tx_buf9; 57 size_t tx_buf9_len; 58 bool swap_bytes; 59 struct gpio_desc *reset; 60 unsigned int rotation; 61 struct backlight_device *backlight; 62 struct regulator *regulator; 63}; 64 65static inline struct mipi_dbi *drm_to_mipi_dbi(struct drm_device *drm) 66{ 67 return container_of(drm, struct mipi_dbi, drm); 68} 69 70int mipi_dbi_spi_init(struct spi_device *spi, struct mipi_dbi *mipi, 71 struct gpio_desc *dc); 72int mipi_dbi_init(struct mipi_dbi *mipi, 73 const struct drm_simple_display_pipe_funcs *funcs, 74 const struct drm_display_mode *mode, unsigned int rotation); 75void mipi_dbi_release(struct drm_device *drm); 76void mipi_dbi_pipe_update(struct drm_simple_display_pipe *pipe, 77 struct drm_plane_state *old_state); 78void mipi_dbi_enable_flush(struct mipi_dbi *mipi, 79 struct drm_crtc_state *crtc_state, 80 struct drm_plane_state *plan_state); 81void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe); 82void mipi_dbi_hw_reset(struct mipi_dbi *mipi); 83bool mipi_dbi_display_is_on(struct mipi_dbi *mipi); 84int mipi_dbi_poweron_reset(struct mipi_dbi *mipi); 85int mipi_dbi_poweron_conditional_reset(struct mipi_dbi *mipi); 86u32 mipi_dbi_spi_cmd_max_speed(struct spi_device *spi, size_t len); 87 88int mipi_dbi_command_read(struct mipi_dbi *mipi, u8 cmd, u8 *val); 89int mipi_dbi_command_buf(struct mipi_dbi *mipi, u8 cmd, u8 *data, size_t len); 90int mipi_dbi_command_stackbuf(struct mipi_dbi *mipi, u8 cmd, u8 *data, size_t len); 91int mipi_dbi_buf_copy(void *dst, struct drm_framebuffer *fb, 92 struct drm_rect *clip, bool swap); 93/** 94 * mipi_dbi_command - MIPI DCS command with optional parameter(s) 95 * @mipi: MIPI structure 96 * @cmd: Command 97 * @seq...: Optional parameter(s) 98 * 99 * Send MIPI DCS command to the controller. Use mipi_dbi_command_read() for 100 * get/read. 101 * 102 * Returns: 103 * Zero on success, negative error code on failure. 104 */ 105#define mipi_dbi_command(mipi, cmd, seq...) \ 106({ \ 107 u8 d[] = { seq }; \ 108 mipi_dbi_command_stackbuf(mipi, cmd, d, ARRAY_SIZE(d)); \ 109}) 110 111#ifdef CONFIG_DEBUG_FS 112int mipi_dbi_debugfs_init(struct drm_minor *minor); 113#else 114#define mipi_dbi_debugfs_init NULL 115#endif 116 117#endif /* __LINUX_MIPI_DBI_H */