soc: rockchip: add virtual poweroff support
[firefly-linux-kernel-4.4.55.git] / include / linux / display-sys.h
1 #ifndef _LINUX_DISPLAY_RK_H
2 #define _LINUX_DISPLAY_RK_H
3
4 #include <linux/device.h>
5 #include <linux/fb.h>
6 #include <linux/list.h>
7 #include <dt-bindings/display/rk_fb.h>
8
9 struct rk_display_device;
10
11 enum rk_display_priority {
12         DISPLAY_PRIORITY_TV = 0,
13         DISPLAY_PRIORITY_YPBPR,
14         DISPLAY_PRIORITY_VGA,
15         DISPLAY_PRIORITY_HDMI,
16         DISPLAY_PRIORITY_LCD,
17 };
18
19 enum {
20         DISPLAY_SCALE_X = 0,
21         DISPLAY_SCALE_Y
22 };
23
24 enum rk_display_property {
25         DISPLAY_MAIN = 0,
26         DISPLAY_AUX
27 };
28
29
30 /* HDMI mode list*/
31 struct display_modelist {
32         struct list_head        list;
33         struct fb_videomode     mode;
34         unsigned int            vic;
35         unsigned int            format_3d;
36         unsigned int            detail_3d;
37 };
38
39 /* This structure defines all the properties of a Display. */
40 struct rk_display_driver {
41         void (*suspend)(struct rk_display_device *, pm_message_t state);
42         void (*resume)(struct rk_display_device *);
43         int  (*probe)(struct rk_display_device *, void *);
44         int  (*remove)(struct rk_display_device *);
45 };
46
47 struct rk_display_ops {
48         int (*setenable)(struct rk_display_device *, int enable);
49         int (*getenable)(struct rk_display_device *);
50         int (*getstatus)(struct rk_display_device *);
51         int (*getmodelist)(struct rk_display_device *,
52                            struct list_head **modelist);
53         int (*setmode)(struct rk_display_device *,
54                        struct fb_videomode *mode);
55         int (*getmode)(struct rk_display_device *,
56                        struct fb_videomode *mode);
57         int (*setscale)(struct rk_display_device *, int, int);
58         int (*getscale)(struct rk_display_device *, int);
59         int (*get3dmode)(struct rk_display_device *);
60         int (*set3dmode)(struct rk_display_device *, int);
61         int (*getcolor)(struct rk_display_device *, char *);
62         int (*setcolor)(struct rk_display_device *, const char *, int);
63         int (*setdebug)(struct rk_display_device *, int);
64         int (*getdebug)(struct rk_display_device *, char *);
65         int (*getedidaudioinfo)(struct rk_display_device *,
66                                 char *audioinfo, int len);
67         int (*getmonspecs)(struct rk_display_device *,
68                            struct fb_monspecs *monspecs);
69         int (*getvrinfo)(struct rk_display_device *, char *);
70 };
71
72 struct rk_display_device {
73         struct module *owner;           /* Owner module */
74         struct rk_display_driver *driver;
75         struct device *parent;          /* This is the parent */
76         struct device *dev;             /* This is this display device */
77         struct mutex lock;
78         void *priv_data;
79         char type[16];
80         char *name;
81         int idx;
82         struct rk_display_ops *ops;
83         int priority;
84         int property;
85         struct list_head list;
86 };
87
88 struct rk_display_devicelist {
89         struct list_head list;
90         struct rk_display_device *dev;
91 };
92
93 struct rk_display_device
94         *rk_display_device_register(struct rk_display_driver *driver,
95                                     struct device *parent, void *devdata);
96 void rk_display_device_unregister(struct rk_display_device *dev);
97 void rk_display_device_enable(struct rk_display_device *ddev);
98 void rk_display_device_enable_other(struct rk_display_device *ddev);
99 void rk_display_device_disable_other(struct rk_display_device *ddev);
100 void rk_display_device_select(int property, int priority);
101
102 int display_add_videomode(const struct fb_videomode *mode,
103                           struct list_head *head);
104 #endif