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