Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/arm/mach-msm/include/mach/msm_fb.h
17602 views
1
/* arch/arm/mach-msm/include/mach/msm_fb.h
2
*
3
* Internal shared definitions for various MSM framebuffer parts.
4
*
5
* Copyright (C) 2007 Google Incorporated
6
*
7
* This software is licensed under the terms of the GNU General Public
8
* License version 2, as published by the Free Software Foundation, and
9
* may be copied, distributed, and modified under those terms.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*/
16
17
#ifndef _MSM_FB_H_
18
#define _MSM_FB_H_
19
20
#include <linux/device.h>
21
22
struct mddi_info;
23
24
struct msm_fb_data {
25
int xres; /* x resolution in pixels */
26
int yres; /* y resolution in pixels */
27
int width; /* disply width in mm */
28
int height; /* display height in mm */
29
unsigned output_format;
30
};
31
32
struct msmfb_callback {
33
void (*func)(struct msmfb_callback *);
34
};
35
36
enum {
37
MSM_MDDI_PMDH_INTERFACE,
38
MSM_MDDI_EMDH_INTERFACE,
39
MSM_EBI2_INTERFACE,
40
};
41
42
#define MSMFB_CAP_PARTIAL_UPDATES (1 << 0)
43
44
struct msm_panel_data {
45
/* turns off the fb memory */
46
int (*suspend)(struct msm_panel_data *);
47
/* turns on the fb memory */
48
int (*resume)(struct msm_panel_data *);
49
/* turns off the panel */
50
int (*blank)(struct msm_panel_data *);
51
/* turns on the panel */
52
int (*unblank)(struct msm_panel_data *);
53
void (*wait_vsync)(struct msm_panel_data *);
54
void (*request_vsync)(struct msm_panel_data *, struct msmfb_callback *);
55
void (*clear_vsync)(struct msm_panel_data *);
56
/* from the enum above */
57
unsigned interface_type;
58
/* data to be passed to the fb driver */
59
struct msm_fb_data *fb_data;
60
61
/* capabilities supported by the panel */
62
uint32_t caps;
63
};
64
65
struct msm_mddi_client_data {
66
void (*suspend)(struct msm_mddi_client_data *);
67
void (*resume)(struct msm_mddi_client_data *);
68
void (*activate_link)(struct msm_mddi_client_data *);
69
void (*remote_write)(struct msm_mddi_client_data *, uint32_t val,
70
uint32_t reg);
71
uint32_t (*remote_read)(struct msm_mddi_client_data *, uint32_t reg);
72
void (*auto_hibernate)(struct msm_mddi_client_data *, int);
73
/* custom data that needs to be passed from the board file to a
74
* particular client */
75
void *private_client_data;
76
struct resource *fb_resource;
77
/* from the list above */
78
unsigned interface_type;
79
};
80
81
struct msm_mddi_platform_data {
82
unsigned int clk_rate;
83
void (*power_client)(struct msm_mddi_client_data *, int on);
84
85
/* fixup the mfr name, product id */
86
void (*fixup)(uint16_t *mfr_name, uint16_t *product_id);
87
88
struct resource *fb_resource; /*optional*/
89
/* number of clients in the list that follows */
90
int num_clients;
91
/* array of client information of clients */
92
struct {
93
unsigned product_id; /* mfr id in top 16 bits, product id
94
* in lower 16 bits
95
*/
96
char *name; /* the device name will be the platform
97
* device name registered for the client,
98
* it should match the name of the associated
99
* driver
100
*/
101
unsigned id; /* id for mddi client device node, will also
102
* be used as device id of panel devices, if
103
* the client device will have multiple panels
104
* space must be left here for them
105
*/
106
void *client_data; /* required private client data */
107
unsigned int clk_rate; /* optional: if the client requires a
108
* different mddi clk rate
109
*/
110
} client_platform_data[];
111
};
112
113
struct mdp_blit_req;
114
struct fb_info;
115
struct mdp_device {
116
struct device dev;
117
void (*dma)(struct mdp_device *mpd, uint32_t addr,
118
uint32_t stride, uint32_t w, uint32_t h, uint32_t x,
119
uint32_t y, struct msmfb_callback *callback, int interface);
120
void (*dma_wait)(struct mdp_device *mdp);
121
int (*blit)(struct mdp_device *mdp, struct fb_info *fb,
122
struct mdp_blit_req *req);
123
void (*set_grp_disp)(struct mdp_device *mdp, uint32_t disp_id);
124
};
125
126
struct class_interface;
127
int register_mdp_client(struct class_interface *class_intf);
128
129
/**** private client data structs go below this line ***/
130
131
struct msm_mddi_bridge_platform_data {
132
/* from board file */
133
int (*init)(struct msm_mddi_bridge_platform_data *,
134
struct msm_mddi_client_data *);
135
int (*uninit)(struct msm_mddi_bridge_platform_data *,
136
struct msm_mddi_client_data *);
137
/* passed to panel for use by the fb driver */
138
int (*blank)(struct msm_mddi_bridge_platform_data *,
139
struct msm_mddi_client_data *);
140
int (*unblank)(struct msm_mddi_bridge_platform_data *,
141
struct msm_mddi_client_data *);
142
struct msm_fb_data fb_data;
143
};
144
145
146
147
#endif
148
149