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