xref: /OK3568_Linux_fs/u-boot/include/display.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright 2014 Google Inc.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * SPDX-License-Identifier:     GPL-2.0+
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _DISPLAY_H
8*4882a593Smuzhiyun #define _DISPLAY_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun struct udevice;
11*4882a593Smuzhiyun struct display_timing;
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /**
14*4882a593Smuzhiyun  * Display uclass platform data for each device
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * @source_id:	ID for the source of the display data, typically a video
17*4882a593Smuzhiyun  * controller
18*4882a593Smuzhiyun  * @src_dev:	Source device providing the video
19*4882a593Smuzhiyun  * @in_use:	Display is being used
20*4882a593Smuzhiyun  */
21*4882a593Smuzhiyun struct display_plat {
22*4882a593Smuzhiyun 	int source_id;
23*4882a593Smuzhiyun 	struct udevice *src_dev;
24*4882a593Smuzhiyun 	bool in_use;
25*4882a593Smuzhiyun };
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /**
28*4882a593Smuzhiyun  * display_read_timing() - Read timing information
29*4882a593Smuzhiyun  *
30*4882a593Smuzhiyun  * @dev:	Device to read from
31*4882a593Smuzhiyun  * @return 0 if OK, -ve on error
32*4882a593Smuzhiyun  */
33*4882a593Smuzhiyun int display_read_timing(struct udevice *dev, struct display_timing *timing);
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun /**
36*4882a593Smuzhiyun  * display_port_enable() - Enable a display port device
37*4882a593Smuzhiyun  *
38*4882a593Smuzhiyun  * @dev:	Device to enable
39*4882a593Smuzhiyun  * @panel_bpp:	Number of bits per pixel for panel
40*4882a593Smuzhiyun  * @timing:	Display timings
41*4882a593Smuzhiyun  * @return 0 if OK, -ve on error
42*4882a593Smuzhiyun  */
43*4882a593Smuzhiyun int display_enable(struct udevice *dev, int panel_bpp,
44*4882a593Smuzhiyun 		   const struct display_timing *timing);
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /**
47*4882a593Smuzhiyun  * display_in_use() - Check if a display is in use by any device
48*4882a593Smuzhiyun  *
49*4882a593Smuzhiyun  * @return true if the device is in use (display_enable() has been called
50*4882a593Smuzhiyun  * successfully), else false
51*4882a593Smuzhiyun  */
52*4882a593Smuzhiyun bool display_in_use(struct udevice *dev);
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun struct dm_display_ops {
55*4882a593Smuzhiyun 	/**
56*4882a593Smuzhiyun 	 * read_timing() - Read information directly
57*4882a593Smuzhiyun 	 *
58*4882a593Smuzhiyun 	 * @dev:	Device to read from
59*4882a593Smuzhiyun 	 * @timing:	Display timings
60*4882a593Smuzhiyun 	 * @return 0 if OK, -ve on error
61*4882a593Smuzhiyun 	 */
62*4882a593Smuzhiyun 	int (*read_timing)(struct udevice *dev, struct display_timing *timing);
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun 	/**
65*4882a593Smuzhiyun 	 * read_edid() - Read information from EDID
66*4882a593Smuzhiyun 	 *
67*4882a593Smuzhiyun 	 * @dev:	Device to read from
68*4882a593Smuzhiyun 	 * @buf:	Buffer to read into (should be EDID_SIZE bytes)
69*4882a593Smuzhiyun 	 * @buf_size:	Buffer size (should be EDID_SIZE)
70*4882a593Smuzhiyun 	 * @return number of bytes read, <=0 for error
71*4882a593Smuzhiyun 	 */
72*4882a593Smuzhiyun 	int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size);
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	/**
75*4882a593Smuzhiyun 	 * enable() - Enable the display port device
76*4882a593Smuzhiyun 	 *
77*4882a593Smuzhiyun 	 * @dev:	Device to enable
78*4882a593Smuzhiyun 	 * @panel_bpp:	Number of bits per pixel for panel
79*4882a593Smuzhiyun 	 * @timing:	Display timings
80*4882a593Smuzhiyun 	 * @return 0 if OK, -ve on error
81*4882a593Smuzhiyun 	 */
82*4882a593Smuzhiyun 	int (*enable)(struct udevice *dev, int panel_bpp,
83*4882a593Smuzhiyun 		      const struct display_timing *timing);
84*4882a593Smuzhiyun };
85*4882a593Smuzhiyun 
86*4882a593Smuzhiyun #define display_get_ops(dev)	((struct dm_display_ops *)(dev)->driver->ops)
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun #endif
89