#ifndef _SCREEN_H
#define _SCREEN_H
-#define LVDS_8BIT_1 0
-#define LVDS_8BIT_2 1
-#define LVDS_8BIT_3 2
-#define LVDS_6BIT 3
-/* lvds connect config
- *
- * LVDS_8BIT_1 LVDS_8BIT_2 LVDS_8BIT_3 LVDS_6BIT
-----------------------------------------------------------------------
- TX0 R0 R2 R2 R0
- TX1 R1 R3 R3 R1
- TX2 R2 R4 R4 R2
-Y TX3 R3 R5 R5 R3
-0 TX4 R4 R6 R6 R4
- TX6 R5 R7 R7 R5
- TX7 G0 G2 G2 G0
-----------------------------------------------------------------------
- TX8 G1 G3 G3 G1
- TX9 G2 G4 G4 G2
-Y TX12 G3 G5 G5 G3
-1 TX13 G4 G6 G6 G4
- TX14 G5 G7 G7 G5
- TX15 B0 B2 B2 B0
- TX18 B1 B3 B3 B1
-----------------------------------------------------------------------
- TX19 B2 B4 B4 B2
- TX20 B3 B5 B5 B3
- TX21 B4 B6 B6 B4
-Y TX22 B5 B7 B7 B5
-2 TX24 HSYNC HSYNC HSYNC HSYNC
- TX25 VSYNC VSYNC VSYNC VSYNC
- TX26 ENABLE ENABLE ENABLE ENABLE
-----------------------------------------------------------------------
- TX27 R6 R0 GND GND
- TX5 R7 R1 GND GND
- TX10 G6 G0 GND GND
-Y TX11 G7 G1 GND GND
-3 TX16 B6 B0 GND GND
- TX17 B7 B1 GND GND
- TX23 RSVD RSVD RSVD RSVD
-----------------------------------------------------------------------
-*/
-
-typedef enum _SCREEN_TYPE {
- SCREEN_NULL = 0,
- SCREEN_RGB,
- SCREEN_LVDS,
- SCREEN_MCU,
- SCREEN_TVOUT,
- SCREEN_HDMI,
- SCREEN_MIPI,
-} SCREEN_TYPE;
-
typedef enum _REFRESH_STAGE {
REFRESH_PRE = 0,
REFRESH_END,
} MCU_STATUS;
-enum rk_disp_prop{ //display device property
- PRMRY = 1, //primary display device ,like LCD screen
- EXTEND, //extend display device ,like hdmi ,tv out
-};
-
struct rk29_fb_setting_info {
u8 data_num;
u8 vsync_en;
int (*io_disable)(void);
};
+struct overscan {
+ unsigned char left;
+ unsigned char top;
+ unsigned char right;
+ unsigned char bottom;
+};
-/* Screen description */
-typedef struct rk29fb_screen {
- /* screen type & hardware connect format & out face */
+/* Screen description
+*type:LVDS,RGB,MIPI,MCU
+*lvds_fromat:lvds data format,set it if the screen is lvds
+*face:thi display output face,18bit,24bit,etc
+*ft: the time need to display one frame time
+*/
+struct rk_screen {
u16 type;
- u16 lvds_format; //lvds data format
+ u16 lvds_format;
u16 face;
- u8 lcdc_id; //which output interface the screeen connect to
- u8 screen_id; //screen number
-
- /* Screen size */
- u16 x_res;
- u16 y_res;
+ u16 color_mode;
+ u8 lcdc_id;
+ u8 screen_id;
+ struct fb_videomode mode;
+ u32 post_dsp_stx;
+ u32 post_dsp_sty;
+ u32 post_xsize;
+ u32 post_ysize;
+ u16 x_mirror;
+ u16 y_mirror;
+ int interlace;
+ int pixelrepeat; //For 480i/576i format, pixel is repeated twice.
u16 width;
u16 height;
+ u8 ft;
+ int *dsp_lut;
+ int *cabc_lut;
+ int *cabc_gamma_base;
- u32 mode;
- /* Timing */
- u32 pixclock;
- u32 fps;
- u16 left_margin;
- u16 right_margin;
- u16 hsync_len;
- u16 upper_margin;
- u16 lower_margin;
- u16 vsync_len;
- u8 ft; //the time need to display one frame,in ms
- int *dsp_lut; //display lut
- struct rk29fb_screen *ext_screen;
-#if defined(CONFIG_HDMI_DUAL_DISP) || defined(CONFIG_ONE_LCDC_DUAL_OUTPUT_INF)
- /* Scaler mode Timing */
- u32 s_pixclock;
- u16 s_left_margin;
- u16 s_right_margin;
- u16 s_hsync_len;
- u16 s_upper_margin;
- u16 s_lower_margin;
- u16 s_vsync_len;
- u16 s_hsync_st;
- u16 s_vsync_st;
- bool s_den_inv;
- bool s_hv_sync_inv;
- bool s_clk_inv;
-#endif
-
-#if defined(CONFIG_MFD_RK616)
+#if defined(CONFIG_MFD_RK616) || defined(CONFIG_LCDC_RK312X)
u32 pll_cfg_val; //bellow are for jettaB
u32 frac;
u16 scl_vst;
u16 vif_hst;
#endif
u8 hdmi_resolution;
- /* mcu need */
u8 mcu_wrperiod;
u8 mcu_usefmk;
u8 mcu_frmrate;
- /* Pin polarity */
u8 pin_hsync;
u8 pin_vsync;
u8 pin_den;
u8 pin_dclk;
- u32 lcdc_aclk;
- u8 pin_dispon;
/* Swap rule */
u8 swap_gb;
u8 swap_rb;
u8 swap_delta;
u8 swap_dumy;
+
+#if defined(CONFIG_MIPI_DSI)
+ /* MIPI DSI */
+ u8 dsi_lane;
+ u8 dsi_video_mode;
+ u32 hs_tx_clk;
+#endif
int xpos; //horizontal display start position on the sceen ,then can be changed by application
int ypos;
int xsize; //horizontal and vertical display size on he screen,they can be changed by application
int ysize;
+ struct overscan overscan;
+ struct rk_screen *ext_screen;
/* Operation function*/
int (*init)(void);
int (*standby)(u8 enable);
int (*refresh)(u8 arg);
int (*scandir)(u16 dir);
int (*disparea)(u8 area);
- int (*sscreen_get)(struct rk29fb_screen *screen, u8 resolution);
- int (*sscreen_set)(struct rk29fb_screen *screen, bool type);// 1: use scaler 0:bypass
-} rk_screen;
+ int (*sscreen_get)(struct rk_screen *screen, u8 resolution);
+ int (*sscreen_set)(struct rk_screen *screen, bool type);// 1: use scaler 0:bypass
+};
struct rk29fb_info {
u32 fb_id;
- enum rk_disp_prop prop; //display device property,like PRMRY,EXTEND
+ int prop; //display device property,like PRMRY,EXTEND
u32 mcu_fmk_pin;
struct rk29lcd_info *lcd_info;
int (*io_init)(struct rk29_fb_setting_info *fb_setting);
int (*io_deinit)(void);
int (*io_enable)(void);
int (*io_disable)(void);
- void (*set_screen_info)(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info );
+ void (*set_screen_info)(struct rk_screen *screen, struct rk29lcd_info *lcd_info );
};
-#ifndef CONFIG_DISPLAY_SUPPORT
-static inline void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info) {}
-static inline size_t get_fb_size(void) { return 0;}
-#else
-extern void set_lcd_info(struct rk29fb_screen *screen, struct rk29lcd_info *lcd_info);
-extern size_t get_fb_size(void);
-#endif
-extern void set_tv_info(struct rk29fb_screen *screen);
-extern void set_hdmi_info(struct rk29fb_screen *screen);
+extern void set_lcd_info(struct rk_screen *screen, struct rk29lcd_info *lcd_info);
+extern size_t get_fb_size(u8 reserved_fb);
+
+extern void set_tv_info(struct rk_screen *screen);
+extern void set_hdmi_info(struct rk_screen *screen);
#endif