XenevaOS
Loading...
Searching...
No Matches
drm_mipi_dsi.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * MIPI DSI Bus
4 *
5 * Copyright (C) 2012-2013, Samsung Electronics, Co., Ltd.
6 * Andrzej Hajda <a.hajda@samsung.com>
7 */
8
9#ifndef __DRM_MIPI_DSI_H__
10#define __DRM_MIPI_DSI_H__
11
12#include <linux/device.h>
13#include <linux/delay.h>
14
15struct mipi_dsi_host;
16struct mipi_dsi_device;
17struct drm_dsc_picture_parameter_set;
18
19/* request ACK from peripheral */
20#define MIPI_DSI_MSG_REQ_ACK BIT(0)
21/* use Low Power Mode to transmit message */
22#define MIPI_DSI_MSG_USE_LPM BIT(1)
23
38
39 size_t tx_len;
40 const void *tx_buf;
41
42 size_t rx_len;
43 void *rx_buf;
44};
45
48
58 size_t size;
61 const u8 *payload;
62};
63
65 const struct mipi_dsi_msg *msg);
66
91 int (*attach)(struct mipi_dsi_host *host,
92 struct mipi_dsi_device *dsi);
93 int (*detach)(struct mipi_dsi_host *host,
94 struct mipi_dsi_device *dsi);
96 const struct mipi_dsi_msg *msg);
97};
98
106 struct device *dev;
107 const struct mipi_dsi_host_ops *ops;
109};
110
114
115/* DSI mode flags */
116
117/* video mode */
118#define MIPI_DSI_MODE_VIDEO BIT(0)
119/* video burst mode */
120#define MIPI_DSI_MODE_VIDEO_BURST BIT(1)
121/* video pulse mode */
122#define MIPI_DSI_MODE_VIDEO_SYNC_PULSE BIT(2)
123/* enable auto vertical count mode */
124#define MIPI_DSI_MODE_VIDEO_AUTO_VERT BIT(3)
125/* enable hsync-end packets in vsync-pulse and v-porch area */
126#define MIPI_DSI_MODE_VIDEO_HSE BIT(4)
127/* disable hfront-porch area */
128#define MIPI_DSI_MODE_VIDEO_NO_HFP BIT(5)
129/* disable hback-porch area */
130#define MIPI_DSI_MODE_VIDEO_NO_HBP BIT(6)
131/* disable hsync-active area */
132#define MIPI_DSI_MODE_VIDEO_NO_HSA BIT(7)
133/* disable EoT packets in HS mode */
134#define MIPI_DSI_MODE_NO_EOT_PACKET BIT(9)
135/* device supports non-continuous clock behavior (DSI spec 5.6.1) */
136#define MIPI_DSI_CLOCK_NON_CONTINUOUS BIT(10)
137/* transmit data in low power */
138#define MIPI_DSI_MODE_LPM BIT(11)
139/* transmit data ending at the same time for all lanes within one hsync */
140#define MIPI_DSI_HS_PKT_END_ALIGNED BIT(12)
141
149
150#define DSI_DEV_NAME_SIZE 20
151
164 struct device_node *node;
165};
166
187 struct device dev;
189
191 unsigned int channel;
192 unsigned int lanes;
194 unsigned long mode_flags;
195 unsigned long hs_rate;
196 unsigned long lp_rate;
197 struct drm_dsc_config *dsc;
198};
199
220
221#define MIPI_DSI_MODULE_PREFIX "mipi-dsi:"
222
223#define to_mipi_dsi_device(__dev) container_of_const(__dev, struct mipi_dsi_device, dev)
224
225extern const struct bus_type mipi_dsi_bus_type;
226#define dev_is_mipi_dsi(dev) ((dev)->bus == &mipi_dsi_bus_type)
227
236static inline int mipi_dsi_pixel_format_to_bpp(enum mipi_dsi_pixel_format fmt)
237{
238 switch (fmt) {
240 return 30;
241
244 return 24;
245
247 return 18;
248
250 return 16;
251 }
252
253 return -EINVAL;
254}
255
259 /* other two values are reserved, DSI 1.3 */
260};
261
262struct mipi_dsi_device *
264 const struct mipi_dsi_device_info *info);
266struct mipi_dsi_device *
268 const struct mipi_dsi_device_info *info);
269struct mipi_dsi_device *of_find_mipi_dsi_device_by_node(struct device_node *np);
276 u16 value);
277int mipi_dsi_compression_mode(struct mipi_dsi_device *dsi, bool enable);
280 unsigned int pps_selector);
282 const struct drm_dsc_picture_parameter_set *pps);
283
285 bool enable,
287 unsigned int pps_selector);
289 bool enable);
291 const struct drm_dsc_picture_parameter_set *pps);
292
293ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload,
294 size_t size);
296 const void *payload, size_t size);
298 struct mipi_dsi_device *dsi1,
299 struct mipi_dsi_device *dsi2,
300 const void *payload, size_t size);
301ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params,
302 size_t num_params, void *data, size_t size);
304
305#define mipi_dsi_msleep(ctx, delay) \
306 do { \
307 if (!(ctx)->accum_err) \
308 msleep(delay); \
309 } while (0)
310
311#define mipi_dsi_usleep_range(ctx, min, max) \
312 do { \
313 if (!(ctx)->accum_err) \
314 usleep_range(min, max); \
315 } while (0)
316
328
329#define MIPI_DSI_DCS_POWER_MODE_DISPLAY (1 << 2)
330#define MIPI_DSI_DCS_POWER_MODE_NORMAL (1 << 3)
331#define MIPI_DSI_DCS_POWER_MODE_SLEEP (1 << 4)
332#define MIPI_DSI_DCS_POWER_MODE_PARTIAL (1 << 5)
333#define MIPI_DSI_DCS_POWER_MODE_IDLE (1 << 6)
334
336 const void *data, size_t len);
338 const void *data, size_t len);
340 const void *data, size_t len);
342 struct mipi_dsi_device *dsi1,
343 struct mipi_dsi_device *dsi2,
344 const void *data, size_t len);
346 const void *data, size_t len);
348 size_t len);
350 void *data, size_t len);
360 u16 end);
362 u16 end);
368 u16 brightness);
370 u16 *brightness);
372 u16 brightness);
374 u16 *brightness);
375
386 u16 brightness);
388 u8 format);
390 u16 start, u16 end);
392 u16 start, u16 end);
394 u16 scanline);
397
407#define mipi_dsi_generic_write_seq_multi(ctx, seq...) \
408 do { \
409 static const u8 d[] = { seq }; \
410 mipi_dsi_generic_write_multi(ctx, d, ARRAY_SIZE(d)); \
411 } while (0)
412
423#define mipi_dsi_generic_write_var_seq_multi(ctx, seq...) \
424 do { \
425 const u8 d[] = { seq }; \
426 mipi_dsi_generic_write_multi(ctx, d, ARRAY_SIZE(d)); \
427 } while (0)
428
439#define mipi_dsi_dcs_write_seq_multi(ctx, cmd, seq...) \
440 do { \
441 static const u8 d[] = { cmd, seq }; \
442 mipi_dsi_dcs_write_buffer_multi(ctx, d, ARRAY_SIZE(d)); \
443 } while (0)
444
456#define mipi_dsi_dcs_write_var_seq_multi(ctx, cmd, seq...) \
457 do { \
458 const u8 d[] = { cmd, seq }; \
459 mipi_dsi_dcs_write_buffer_multi(ctx, d, ARRAY_SIZE(d)); \
460 } while (0)
461
487#define mipi_dsi_dual(_func, _ctx, _dsi1, _dsi2, ...) \
488 do { \
489 struct mipi_dsi_multi_context *_ctxcpy = (_ctx); \
490 _ctxcpy->dsi = (_dsi1); \
491 (_func)(_ctxcpy, ##__VA_ARGS__); \
492 _ctxcpy->dsi = (_dsi2); \
493 (_func)(_ctxcpy, ##__VA_ARGS__); \
494 } while (0)
495
515#define mipi_dsi_dual_generic_write_seq_multi(_ctx, _dsi1, _dsi2, _seq...) \
516 do { \
517 static const u8 d[] = { _seq }; \
518 mipi_dsi_dual_generic_write_multi(_ctx, _dsi1, _dsi2, d, \
519 ARRAY_SIZE(d)); \
520 } while (0)
521
542#define mipi_dsi_dual_dcs_write_seq_multi(_ctx, _dsi1, _dsi2, _cmd, _seq...) \
543 do { \
544 static const u8 d[] = { _cmd, _seq }; \
545 mipi_dsi_dual_dcs_write_buffer_multi(_ctx, _dsi1, _dsi2, d, \
546 ARRAY_SIZE(d)); \
547 } while (0)
548
558 int(*probe)(struct mipi_dsi_device *dsi);
559 void (*remove)(struct mipi_dsi_device *dsi);
560 void (*shutdown)(struct mipi_dsi_device *dsi);
561};
562
563static inline struct mipi_dsi_driver *
564to_mipi_dsi_driver(struct device_driver *driver)
565{
566 return container_of(driver, struct mipi_dsi_driver, driver);
567}
568
569static inline void *mipi_dsi_get_drvdata(const struct mipi_dsi_device *dsi)
570{
571 return dev_get_drvdata(&dsi->dev);
572}
573
574static inline void mipi_dsi_set_drvdata(struct mipi_dsi_device *dsi, void *data)
575{
576 dev_set_drvdata(&dsi->dev, data);
577}
578
580 struct module *owner);
582
583#define mipi_dsi_driver_register(driver) \
584 mipi_dsi_driver_register_full(driver, THIS_MODULE)
585
586#define module_mipi_dsi_driver(__mipi_dsi_driver) \
587 module_driver(__mipi_dsi_driver, mipi_dsi_driver_register, \
588 mipi_dsi_driver_unregister)
589
590#endif /* __DRM_MIPI_DSI__ */
int64_t ssize_t
Definition stddef.h:38
#define EINVAL
Definition acclib.h:198
#define container_of(ptr, type, member)
Definition container_of.h:19
size_t size
Definition drm_bridge.h:1299
const char * fmt
Definition drm_file.h:466
void mipi_dsi_compression_mode_ext_multi(struct mipi_dsi_multi_context *ctx, bool enable, enum mipi_dsi_compression_algo algo, unsigned int pps_selector)
int mipi_dsi_dcs_set_display_brightness(struct mipi_dsi_device *dsi, u16 brightness)
void mipi_dsi_dcs_set_column_address_multi(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)
int mipi_dsi_dcs_set_display_off(struct mipi_dsi_device *dsi)
int mipi_dsi_dcs_set_tear_on(struct mipi_dsi_device *dsi, enum mipi_dsi_dcs_tear_mode mode)
struct mipi_dsi_device * of_find_mipi_dsi_device_by_node(struct device_node *np)
u32 drm_mipi_dsi_get_input_bus_fmt(enum mipi_dsi_pixel_format dsi_format)
int mipi_dsi_dcs_nop(struct mipi_dsi_device *dsi)
int mipi_dsi_dcs_exit_sleep_mode(struct mipi_dsi_device *dsi)
ssize_t mipi_dsi_dcs_write_buffer(struct mipi_dsi_device *dsi, const void *data, size_t len)
bool mipi_dsi_packet_format_is_short(u8 type)
int devm_mipi_dsi_attach(struct device *dev, struct mipi_dsi_device *dsi)
mipi_dsi_pixel_format
Definition drm_mipi_dsi.h:142
@ MIPI_DSI_FMT_RGB565
Definition drm_mipi_dsi.h:146
@ MIPI_DSI_FMT_RGB666
Definition drm_mipi_dsi.h:144
@ MIPI_DSI_FMT_RGB101010
Definition drm_mipi_dsi.h:147
@ MIPI_DSI_FMT_RGB666_PACKED
Definition drm_mipi_dsi.h:145
@ MIPI_DSI_FMT_RGB888
Definition drm_mipi_dsi.h:143
int mipi_dsi_picture_parameter_set(struct mipi_dsi_device *dsi, const struct drm_dsc_picture_parameter_set *pps)
int mipi_dsi_dcs_set_display_on(struct mipi_dsi_device *dsi)
int mipi_dsi_dcs_set_display_brightness_large(struct mipi_dsi_device *dsi, u16 brightness)
ssize_t mipi_dsi_generic_write(struct mipi_dsi_device *dsi, const void *payload, size_t size)
int mipi_dsi_compression_mode_ext(struct mipi_dsi_device *dsi, bool enable, enum mipi_dsi_compression_algo algo, unsigned int pps_selector)
void mipi_dsi_dcs_read_multi(struct mipi_dsi_multi_context *ctx, u8 cmd, void *data, size_t len)
void mipi_dsi_dcs_write_buffer_multi(struct mipi_dsi_multi_context *ctx, const void *data, size_t len)
void mipi_dsi_dcs_soft_reset_multi(struct mipi_dsi_multi_context *ctx)
void mipi_dsi_dcs_set_display_brightness_multi(struct mipi_dsi_multi_context *ctx, u16 brightness)
void mipi_dsi_dual_dcs_write_buffer_multi(struct mipi_dsi_multi_context *ctx, struct mipi_dsi_device *dsi1, struct mipi_dsi_device *dsi2, const void *data, size_t len)
int mipi_dsi_dcs_set_page_address(struct mipi_dsi_device *dsi, u16 start, u16 end)
void mipi_dsi_dcs_set_pixel_format_multi(struct mipi_dsi_multi_context *ctx, u8 format)
void mipi_dsi_dcs_exit_sleep_mode_multi(struct mipi_dsi_multi_context *ctx)
#define DSI_DEV_NAME_SIZE
Definition drm_mipi_dsi.h:150
int mipi_dsi_dcs_soft_reset(struct mipi_dsi_device *dsi)
void mipi_dsi_dcs_set_page_address_multi(struct mipi_dsi_multi_context *ctx, u16 start, u16 end)
mipi_dsi_compression_algo
Definition drm_mipi_dsi.h:256
@ MIPI_DSI_COMPRESSION_VENDOR
Definition drm_mipi_dsi.h:258
@ MIPI_DSI_COMPRESSION_DSC
Definition drm_mipi_dsi.h:257
void mipi_dsi_dcs_set_display_off_multi(struct mipi_dsi_multi_context *ctx)
void mipi_dsi_dcs_set_display_on_multi(struct mipi_dsi_multi_context *ctx)
int mipi_dsi_dcs_get_power_mode(struct mipi_dsi_device *dsi, u8 *mode)
int mipi_dsi_set_maximum_return_packet_size(struct mipi_dsi_device *dsi, u16 value)
int mipi_dsi_dcs_write_buffer_chatty(struct mipi_dsi_device *dsi, const void *data, size_t len)
int mipi_dsi_compression_mode(struct mipi_dsi_device *dsi, bool enable)
void mipi_dsi_generic_write_multi(struct mipi_dsi_multi_context *ctx, const void *payload, size_t size)
int mipi_dsi_host_register(struct mipi_dsi_host *host)
int mipi_dsi_dcs_get_pixel_format(struct mipi_dsi_device *dsi, u8 *format)
int mipi_dsi_driver_register_full(struct mipi_dsi_driver *driver, struct module *owner)
struct mipi_dsi_device * devm_mipi_dsi_device_register_full(struct device *dev, struct mipi_dsi_host *host, const struct mipi_dsi_device_info *info)
int mipi_dsi_detach(struct mipi_dsi_device *dsi)
void mipi_dsi_dcs_set_tear_on_multi(struct mipi_dsi_multi_context *ctx, enum mipi_dsi_dcs_tear_mode mode)
int mipi_dsi_dcs_set_tear_scanline(struct mipi_dsi_device *dsi, u16 scanline)
void mipi_dsi_dcs_enter_sleep_mode_multi(struct mipi_dsi_multi_context *ctx)
int mipi_dsi_dcs_set_pixel_format(struct mipi_dsi_device *dsi, u8 format)
void mipi_dsi_dcs_nop_multi(struct mipi_dsi_multi_context *ctx)
void mipi_dsi_shutdown_peripheral_multi(struct mipi_dsi_multi_context *ctx)
const struct bus_type mipi_dsi_bus_type
void mipi_dsi_turn_on_peripheral_multi(struct mipi_dsi_multi_context *ctx)
int mipi_dsi_dcs_enter_sleep_mode(struct mipi_dsi_device *dsi)
void mipi_dsi_device_unregister(struct mipi_dsi_device *dsi)
ssize_t mipi_dsi_dcs_read(struct mipi_dsi_device *dsi, u8 cmd, void *data, size_t len)
void mipi_dsi_picture_parameter_set_multi(struct mipi_dsi_multi_context *ctx, const struct drm_dsc_picture_parameter_set *pps)
bool mipi_dsi_packet_format_is_long(u8 type)
struct mipi_dsi_device * mipi_dsi_device_register_full(struct mipi_dsi_host *host, const struct mipi_dsi_device_info *info)
int mipi_dsi_dcs_get_display_brightness_large(struct mipi_dsi_device *dsi, u16 *brightness)
int mipi_dsi_turn_on_peripheral(struct mipi_dsi_device *dsi)
void mipi_dsi_compression_mode_multi(struct mipi_dsi_multi_context *ctx, bool enable)
int mipi_dsi_attach(struct mipi_dsi_device *dsi)
struct mipi_dsi_host * of_find_mipi_dsi_host_by_node(struct device_node *node)
mipi_dsi_dcs_tear_mode
Definition drm_mipi_dsi.h:324
@ MIPI_DSI_DCS_TEAR_MODE_VHBLANK
Definition drm_mipi_dsi.h:326
@ MIPI_DSI_DCS_TEAR_MODE_VBLANK
Definition drm_mipi_dsi.h:325
int mipi_dsi_dcs_get_display_brightness(struct mipi_dsi_device *dsi, u16 *brightness)
void mipi_dsi_dcs_set_tear_scanline_multi(struct mipi_dsi_multi_context *ctx, u16 scanline)
ssize_t mipi_dsi_generic_read(struct mipi_dsi_device *dsi, const void *params, size_t num_params, void *data, size_t size)
void mipi_dsi_driver_unregister(struct mipi_dsi_driver *driver)
void mipi_dsi_dual_generic_write_multi(struct mipi_dsi_multi_context *ctx, struct mipi_dsi_device *dsi1, struct mipi_dsi_device *dsi2, const void *payload, size_t size)
int mipi_dsi_create_packet(struct mipi_dsi_packet *packet, const struct mipi_dsi_msg *msg)
int mipi_dsi_shutdown_peripheral(struct mipi_dsi_device *dsi)
int mipi_dsi_dcs_set_column_address(struct mipi_dsi_device *dsi, u16 start, u16 end)
void mipi_dsi_host_unregister(struct mipi_dsi_host *host)
void mipi_dsi_dcs_set_tear_off_multi(struct mipi_dsi_multi_context *ctx)
ssize_t mipi_dsi_dcs_write(struct mipi_dsi_device *dsi, u8 cmd, const void *data, size_t len)
const struct device * dev
Definition drm_print.h:519
const char const char * format
Definition drm_print.h:516
size_t len
Definition initial.c:23
void * data
Definition kthread.h:30
void int node
Definition kthread.h:31
uint8_t u8
Definition kernel.h:14
uint16_t u16
Definition kernel.h:15
uint32_t u32
Definition kernel.h:16
char end[]
AuProcess * owner
Definition netproxy.c:38
Definition driver.h:39
Definition fs.h:255
Definition list.h:11
Definition drm_mipi_dsi.h:161
char type[DSI_DEV_NAME_SIZE]
Definition drm_mipi_dsi.h:162
struct device_node * node
Definition drm_mipi_dsi.h:164
u32 channel
Definition drm_mipi_dsi.h:163
Definition drm_mipi_dsi.h:185
enum mipi_dsi_pixel_format format
Definition drm_mipi_dsi.h:193
struct mipi_dsi_host * host
Definition drm_mipi_dsi.h:186
unsigned int channel
Definition drm_mipi_dsi.h:191
struct drm_dsc_config * dsc
Definition drm_mipi_dsi.h:197
unsigned long mode_flags
Definition drm_mipi_dsi.h:194
char name[DSI_DEV_NAME_SIZE]
Definition drm_mipi_dsi.h:190
unsigned long hs_rate
Definition drm_mipi_dsi.h:195
bool attached
Definition drm_mipi_dsi.h:188
unsigned int lanes
Definition drm_mipi_dsi.h:192
unsigned long lp_rate
Definition drm_mipi_dsi.h:196
struct device dev
Definition drm_mipi_dsi.h:187
Definition drm_mipi_dsi.h:556
void(* remove)(struct mipi_dsi_device *dsi)
Definition drm_mipi_dsi.h:559
void(* shutdown)(struct mipi_dsi_device *dsi)
Definition drm_mipi_dsi.h:560
struct device_driver driver
Definition drm_mipi_dsi.h:557
int(* probe)(struct mipi_dsi_device *dsi)
Definition drm_mipi_dsi.h:558
Definition drm_mipi_dsi.h:90
ssize_t(* transfer)(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg)
Definition drm_mipi_dsi.h:95
int(* detach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi)
Definition drm_mipi_dsi.h:93
int(* attach)(struct mipi_dsi_host *host, struct mipi_dsi_device *dsi)
Definition drm_mipi_dsi.h:91
Definition drm_mipi_dsi.h:105
const struct mipi_dsi_host_ops * ops
Definition drm_mipi_dsi.h:107
struct list_head list
Definition drm_mipi_dsi.h:108
struct device * dev
Definition drm_mipi_dsi.h:106
Definition drm_mipi_dsi.h:34
u8 type
Definition drm_mipi_dsi.h:36
u16 flags
Definition drm_mipi_dsi.h:37
size_t tx_len
Definition drm_mipi_dsi.h:39
const void * tx_buf
Definition drm_mipi_dsi.h:40
void * rx_buf
Definition drm_mipi_dsi.h:43
size_t rx_len
Definition drm_mipi_dsi.h:42
u8 channel
Definition drm_mipi_dsi.h:35
Definition drm_mipi_dsi.h:203
struct mipi_dsi_device * dsi
Definition drm_mipi_dsi.h:207
int accum_err
Definition drm_mipi_dsi.h:218
Definition drm_mipi_dsi.h:57
size_t size
Definition drm_mipi_dsi.h:58
size_t payload_length
Definition drm_mipi_dsi.h:60
const u8 * payload
Definition drm_mipi_dsi.h:61
u8 header[4]
Definition drm_mipi_dsi.h:59
#define mode(x)