123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- /* Copyright (c) 2008-2013, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * 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_PANEL_H
- #define MSM_FB_PANEL_H
- #include "msm_fb_def.h"
- struct msm_fb_data_type;
- typedef void (*msm_fb_vsync_handler_type) (void *arg);
- /* panel id type */
- typedef struct panel_id_s {
- uint16 id;
- uint16 type;
- } panel_id_type;
- /* panel type list */
- #define NO_PANEL 0xffff /* No Panel */
- #define MDDI_PANEL 1 /* MDDI */
- #define EBI2_PANEL 2 /* EBI2 */
- #define LCDC_PANEL 3 /* internal LCDC type */
- #define EXT_MDDI_PANEL 4 /* Ext.MDDI */
- #define TV_PANEL 5 /* TV */
- #define HDMI_PANEL 6 /* HDMI TV */
- #define DTV_PANEL 7 /* DTV */
- #define MIPI_VIDEO_PANEL 8 /* MIPI */
- #define MIPI_CMD_PANEL 9 /* MIPI */
- #define WRITEBACK_PANEL 10 /* Wifi display */
- #define LVDS_PANEL 11 /* LVDS */
- /* panel class */
- typedef enum {
- DISPLAY_LCD = 0, /* lcd = ebi2/mddi */
- DISPLAY_LCDC, /* lcdc */
- DISPLAY_TV, /* TV Out */
- DISPLAY_EXT_MDDI, /* External MDDI */
- } DISP_TARGET;
- /* panel device locaiton */
- typedef enum {
- DISPLAY_1 = 0, /* attached as first device */
- DISPLAY_2, /* attached on second device */
- DISPLAY_3, /* attached on third writeback device */
- MAX_PHYS_TARGET_NUM,
- } DISP_TARGET_PHYS;
- enum {
- BLT_SWITCH_TG_OFF,
- BLT_SWITCH_TG_ON
- };
- /* panel info type */
- struct lcd_panel_info {
- __u32 vsync_enable;
- __u32 refx100;
- __u32 v_back_porch;
- __u32 v_front_porch;
- __u32 v_pulse_width;
- __u32 hw_vsync_mode;
- __u32 vsync_notifier_period;
- __u32 blt_ctrl;
- __u32 blt_mode;
- __u32 rev;
- };
- struct lcdc_panel_info {
- __u32 h_back_porch;
- __u32 h_front_porch;
- __u32 h_pulse_width;
- __u32 v_back_porch;
- __u32 v_front_porch;
- __u32 v_pulse_width;
- __u32 border_clr;
- __u32 underflow_clr;
- __u32 hsync_skew;
- /* Pad width */
- uint32 xres_pad;
- /* Pad height */
- uint32 yres_pad;
- boolean is_sync_active_high;
- };
- struct mddi_panel_info {
- __u32 vdopkt;
- boolean is_type1;
- };
- struct mipi_panel_info {
- char mode; /* video/cmd */
- char interleave_mode;
- char crc_check;
- char ecc_check;
- char dst_format; /* shared by video and command */
- char data_lane0;
- char data_lane1;
- char data_lane2;
- char data_lane3;
- char dlane_swap; /* data lane swap */
- char rgb_swap;
- char b_sel;
- char g_sel;
- char r_sel;
- char rx_eot_ignore;
- char tx_eot_append;
- char t_clk_post; /* 0xc0, DSI_CLKOUT_TIMING_CTRL */
- char t_clk_pre; /* 0xc0, DSI_CLKOUT_TIMING_CTRL */
- char vc; /* virtual channel */
- struct mipi_dsi_phy_ctrl *dsi_phy_db;
- /* video mode */
- char pulse_mode_hsa_he;
- char hfp_power_stop;
- char hbp_power_stop;
- char hsa_power_stop;
- char eof_bllp_power_stop;
- char bllp_power_stop;
- char traffic_mode;
- char frame_rate;
- /* command mode */
- char interleave_max;
- char insert_dcs_cmd;
- char wr_mem_continue;
- char wr_mem_start;
- char te_sel;
- char stream; /* 0 or 1 */
- char mdp_trigger;
- char dma_trigger;
- uint32 dsi_pclk_rate;
- /* byte to esc clk ratio */
- uint32 esc_byte_ratio;
- /* The packet-size should not bet changed */
- char no_max_pkt_size;
- /* Clock required during LP commands */
- char force_clk_lane_hs;
- };
- enum lvds_mode {
- LVDS_SINGLE_CHANNEL_MODE,
- LVDS_DUAL_CHANNEL_MODE,
- };
- struct lvds_panel_info {
- enum lvds_mode channel_mode;
- /* Channel swap in dual mode */
- char channel_swap;
- };
- struct msm_panel_info {
- __u32 xres;
- __u32 yres;
- __u32 bpp;
- __u32 mode2_xres;
- __u32 mode2_yres;
- __u32 mode2_bpp;
- __u32 type;
- __u32 wait_cycle;
- DISP_TARGET_PHYS pdest;
- __u32 bl_max;
- __u32 bl_min;
- __u32 fb_num;
- __u32 clk_rate;
- __u32 clk_min;
- __u32 clk_max;
- __u32 frame_count;
- __u32 is_3d_panel;
- __u32 frame_rate;
- __u32 frame_interval;
- struct mddi_panel_info mddi;
- struct lcd_panel_info lcd;
- struct lcdc_panel_info lcdc;
- struct mipi_panel_info mipi;
- struct lvds_panel_info lvds;
- };
- #define MSM_FB_SINGLE_MODE_PANEL(pinfo) \
- do { \
- (pinfo)->mode2_xres = 0; \
- (pinfo)->mode2_yres = 0; \
- (pinfo)->mode2_bpp = 0; \
- } while (0)
- struct msm_fb_panel_data {
- struct msm_panel_info panel_info;
- void (*set_rect) (int x, int y, int xres, int yres);
- void (*set_vsync_notifier) (msm_fb_vsync_handler_type, void *arg);
- void (*set_backlight) (struct msm_fb_data_type *);
- /* function entry chain */
- int (*on) (struct platform_device *pdev);
- int (*off) (struct platform_device *pdev);
- int (*late_init) (struct platform_device *pdev);
- int (*power_ctrl) (boolean enable);
- struct platform_device *next;
- int (*clk_func) (int enable);
- int (*fps_level_change) (struct platform_device *pdev,
- u32 fps_level);
- };
- enum {
- MDP4_OVERLAY_BLT_SWITCH_TG_OFF,
- MDP4_OVERLAY_BLT_SWITCH_TG_ON,
- MDP4_OVERLAY_BLT_SWITCH_POLL
- };
- enum {
- MDP4_OVERLAY_MODE_BLT_CTRL,
- MDP4_OVERLAY_MODE_BLT_ALWAYS_ON,
- MDP4_OVERLAY_MODE_BLT_ALWAYS_OFF
- };
- /*===========================================================================
- FUNCTIONS PROTOTYPES
- ============================================================================*/
- struct platform_device *msm_fb_device_alloc(struct msm_fb_panel_data *pdata,
- u32 type, u32 id);
- int panel_next_on(struct platform_device *pdev);
- int panel_next_off(struct platform_device *pdev);
- int panel_next_fps_level_change(struct platform_device *pdev,
- u32 fps_level);
- int panel_next_late_init(struct platform_device *pdev);
- int lcdc_device_register(struct msm_panel_info *pinfo);
- int mddi_toshiba_device_register(struct msm_panel_info *pinfo,
- u32 channel, u32 panel);
- #endif /* MSM_FB_PANEL_H */
|