diff options
Diffstat (limited to 'include/linux/platform_data/video-msm_fb.h')
| -rw-r--r-- | include/linux/platform_data/video-msm_fb.h | 147 | 
1 files changed, 147 insertions, 0 deletions
diff --git a/include/linux/platform_data/video-msm_fb.h b/include/linux/platform_data/video-msm_fb.h new file mode 100644 index 00000000000..1f4fc81b3d8 --- /dev/null +++ b/include/linux/platform_data/video-msm_fb.h @@ -0,0 +1,147 @@ +/* arch/arm/mach-msm/include/mach/msm_fb.h + * + * Internal shared definitions for various MSM framebuffer parts. + * + * Copyright (C) 2007 Google Incorporated + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + */ + +#ifndef _MSM_FB_H_ +#define _MSM_FB_H_ + +#include <linux/device.h> + +struct mddi_info; + +struct msm_fb_data { +	int xres;	/* x resolution in pixels */ +	int yres;	/* y resolution in pixels */ +	int width;	/* disply width in mm */ +	int height;	/* display height in mm */ +	unsigned output_format; +}; + +struct msmfb_callback { +	void (*func)(struct msmfb_callback *); +}; + +enum { +	MSM_MDDI_PMDH_INTERFACE, +	MSM_MDDI_EMDH_INTERFACE, +	MSM_EBI2_INTERFACE, +}; + +#define MSMFB_CAP_PARTIAL_UPDATES	(1 << 0) + +struct msm_panel_data { +	/* turns off the fb memory */ +	int (*suspend)(struct msm_panel_data *); +	/* turns on the fb memory */ +	int (*resume)(struct msm_panel_data *); +	/* turns off the panel */ +	int (*blank)(struct msm_panel_data *); +	/* turns on the panel */ +	int (*unblank)(struct msm_panel_data *); +	void (*wait_vsync)(struct msm_panel_data *); +	void (*request_vsync)(struct msm_panel_data *, struct msmfb_callback *); +	void (*clear_vsync)(struct msm_panel_data *); +	/* from the enum above */ +	unsigned interface_type; +	/* data to be passed to the fb driver */ +	struct msm_fb_data *fb_data; + +	/* capabilities supported by the panel */ +	uint32_t caps; +}; + +struct msm_mddi_client_data { +	void (*suspend)(struct msm_mddi_client_data *); +	void (*resume)(struct msm_mddi_client_data *); +	void (*activate_link)(struct msm_mddi_client_data *); +	void (*remote_write)(struct msm_mddi_client_data *, uint32_t val, +			     uint32_t reg); +	uint32_t (*remote_read)(struct msm_mddi_client_data *, uint32_t reg); +	void (*auto_hibernate)(struct msm_mddi_client_data *, int); +	/* custom data that needs to be passed from the board file to a  +	 * particular client */ +	void *private_client_data; +	struct resource *fb_resource; +	/* from the list above */ +	unsigned interface_type; +}; + +struct msm_mddi_platform_data { +	unsigned int clk_rate; +	void (*power_client)(struct msm_mddi_client_data *, int on); + +	/* fixup the mfr name, product id */ +	void (*fixup)(uint16_t *mfr_name, uint16_t *product_id); + +	struct resource *fb_resource; /*optional*/ +	/* number of clients in the list that follows */ +	int num_clients; +	/* array of client information of clients */ +	struct { +		unsigned product_id; /* mfr id in top 16 bits, product id +				      * in lower 16 bits +				      */ +		char *name;	/* the device name will be the platform +				 * device name registered for the client, +				 * it should match the name of the associated +				 * driver +				 */ +		unsigned id;	/* id for mddi client device node, will also +				 * be used as device id of panel devices, if +				 * the client device will have multiple panels +				 * space must be left here for them +				 */ +		void *client_data;	/* required private client data */ +		unsigned int clk_rate;	/* optional: if the client requires a +					* different mddi clk rate +					*/ +	} client_platform_data[]; +}; + +struct mdp_blit_req; +struct fb_info; +struct mdp_device { +	struct device dev; +	void (*dma)(struct mdp_device *mpd, uint32_t addr, +		    uint32_t stride, uint32_t w, uint32_t h, uint32_t x, +		    uint32_t y, struct msmfb_callback *callback, int interface); +	void (*dma_wait)(struct mdp_device *mdp); +	int (*blit)(struct mdp_device *mdp, struct fb_info *fb, +		    struct mdp_blit_req *req); +	void (*set_grp_disp)(struct mdp_device *mdp, uint32_t disp_id); +}; + +struct class_interface; +int register_mdp_client(struct class_interface *class_intf); + +/**** private client data structs go below this line ***/ + +struct msm_mddi_bridge_platform_data { +	/* from board file */ +	int (*init)(struct msm_mddi_bridge_platform_data *, +		    struct msm_mddi_client_data *); +	int (*uninit)(struct msm_mddi_bridge_platform_data *, +		      struct msm_mddi_client_data *); +	/* passed to panel for use by the fb driver */ +	int (*blank)(struct msm_mddi_bridge_platform_data *, +		     struct msm_mddi_client_data *); +	int (*unblank)(struct msm_mddi_bridge_platform_data *, +		       struct msm_mddi_client_data *); +	struct msm_fb_data fb_data; +}; + + + +#endif  |