Commit | Line | Data |
---|---|---|
29d3dedf DW |
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 |