/*******************************************************************************
* Copyright 2011 Broadcom Corporation.  All rights reserved.
*
*             @file     drivers/video/broadcom/display_drv.h
*
* Unless you and Broadcom execute a separate written software license agreement
* governing use of this software, this software is licensed to you under the
* terms of the GNU General Public License version 2, available at
* http://www.gnu.org/copyleft/gpl.html (the "GPL").
*
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a license
* other than the GPL, without Broadcom's express prior written consent.
*******************************************************************************/
#ifndef _DISPLAY_DRV_H_
#define _DISPLAY_DRV_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <linux/platform_device.h>
#include "dsi_timing.h"

/**
*
*  Display Driver Handle
*
*****************************************************************************/
	typedef void *DISPDRV_HANDLE_T;

/**
*
*  Display State Control
*
*****************************************************************************/
	typedef enum {
		CTRL_MIN,

		CTRL_PWR_OFF,	/*  PWR Off  : in reset */
		CTRL_PWR_ON,	///<  PWR On   : not in reset, init, screen off
		CTRL_SLEEP_IN,	///<  Sleep-in : Screen Off, low power mode
		CTRL_SLEEP_OUT,	///<  Sleep-out: full power, screen Off
		CTRL_SCREEN_ON,	/*  Sleep-out: full power, screen On */
		CTRL_SCREEN_OFF,	///<  Sleep-out: full power, screen Off

		CTRL_MAX,
	} DISPLAY_POWER_STATE_T;


/**
*
*  Display Driver's Frame Buffer Color Format
*
*****************************************************************************/
	typedef enum {
		DISPDRV_FB_FORMAT_MIN,	///<  Min Number
		DISPDRV_FB_FORMAT_RGB565,	///<  RG5565 2Bpp
		DISPDRV_FB_FORMAT_xRGB8888,	/*  xRGB8888 4Bpp */
		DISPDRV_FB_FORMAT_xBGR8888,	/*  xBGR8888 4Bpp */
		DISPDRV_FB_FORMAT_RGB666P,	/* RGB666 2Bpp */
		DISPDRV_FB_FORMAT_RGB666U,	/* RGB666 Unpacked */
		DISPDRV_FB_FORMAT_MAX,	///<  MAX Number
	} DISPDRV_FB_FORMAT_T;


/**
*
*  Display Driver CallBack Results
*
*****************************************************************************/
	typedef enum {
		DISPDRV_CB_RES_MIN,	///< Min Number
		DISPDRV_CB_RES_OK,	///< No Errors
		DISPDRV_CB_RES_ERR,	///< Error During Update
		DISPDRV_CB_RES_MAX,	///< Max Number
	} DISPDRV_CB_RES_T;

	typedef struct {
		u32 l;
		u32 t;
		u32 r;
		u32 b;
		u32 w;
		u32 h;
		u32 mode; /*0=android use case, !=0 win has 0 offset in fb */
	} DISPDRV_WIN_t;

#define dispdrv2cmIn(p) p == KONA_CM_I_RGB565  ? LCD_IF_CM_I_RGB565P : \
		p == KONA_CM_I_XRGB888 ? LCD_IF_CM_I_RGB888U : \
		LCD_IF_CM_I_INV

#define dispdrv2cmOut(p) p ==KONA_CM_O_RGB565 ? LCD_IF_CM_O_RGB565 : \
		p ==KONA_CM_O_RGB565_DSI_VM ? LCD_IF_CM_O_RGB565_DSI_VM:\
		p ==KONA_CM_O_RGB666 ? LCD_IF_CM_O_RGB666 : \
		p ==KONA_CM_O_RGB888 ? LCD_IF_CM_O_RGB888 : \
		LCD_IF_CM_O_INV


/**
*
*  Display information structure
*
*****************************************************************************/
	typedef struct {
		char *name;
		char *reg_name;
		struct hw_rst_info *rst;
		bool vmode;
		bool vburst;
		bool vid_cmnds;
		bool cmnd_LP;
		bool te_ctrl;
		uint16_t width;
		uint16_t height;
		uint8_t lanes;
		uint8_t phys_width;
		uint8_t phys_height;
		uint8_t fps;
		DISPDRV_FB_FORMAT_T in_fmt;
		DISPDRV_FB_FORMAT_T out_fmt;
		uint8_t Bpp;
		void (*init_fn)(void);
		int (*esd_check_fn)(void);
		char *init_seq;
		char *slp_in_seq;
		char *slp_out_seq;
		char *scrn_on_seq;
		char *scrn_off_seq;
		bool special_mode_panel;
		bool special_mode_on;
		bool delayed_special_mode;
		void (*fb_to_special_mode)(char *fb, uint32_t nbr_pix_w,
					uint32_t nbr_pix_h, uint32_t bytespp);
		void (*fb_from_special_mode)(char *fb, uint32_t nbr_pix_w,
					uint32_t nbr_pix_h, uint32_t bytespp);
		bool fb_converted_to_special_mode;
		void (*draw_corners)(char *fb, uint32_t width, uint32_t height,
					uint32_t bpp);
		uint32_t brightness;
		char *special_mode_on_seq;
		char *special_mode_off_seq;
		char *cabc_init_seq;
		char *cabc_on_seq;
		char *cabc_off_seq;
		bool cabc_enabled;
		char *id_seq;
		char *win_seq;
		void (*updt_win_fn)(char *buff, DISPDRV_WIN_t *p_win);
		uint8_t updt_win_seq_len;
		struct DSI_COUNTER phy_timing[18];
		uint8_t hs, hbp, hfp, hbllp;
		uint8_t vs, vbp, vfp;
		bool clear_panel_ram;
		uint16_t clear_ram_row_start;
		uint16_t clear_ram_row_end;
		bool no_te_in_sleep;
		uint32_t hs_bps;
		uint32_t lp_bps;
		int desense_offset;
		void (*vsync_cb)(void);
		bool cont_clk;
		bool sync_pulses;
	} DISPDRV_INFO_T;


/**
*
*  API CallBack Function
*
*****************************************************************************/
	typedef void (*DISPDRV_CB_T) (DISPDRV_CB_RES_T res);

/**
*
*  Display Driver structure definition
*
*  DISPLAY Driver Interface Return Values: res=0 OK  res !=0  ERR
*
*****************************************************************************/
	typedef struct {
		Int32(*init) (DISPDRV_INFO_T *display_info,
			DISPDRV_HANDLE_T *handle,
			struct platform_device *pdev);
		Int32(*exit) (DISPDRV_HANDLE_T handle);
		Int32(*open) (DISPDRV_HANDLE_T handle);
		Int32(*close) (DISPDRV_HANDLE_T handle);
		Int32(*start) (DISPDRV_HANDLE_T handle,
			struct pi_mgr_dfs_node *dfs_node);
		Int32(*stop) (DISPDRV_HANDLE_T handle,
			struct pi_mgr_dfs_node *dfs_node);
		Int32(*power_control) (DISPDRV_HANDLE_T handle,
			DISPLAY_POWER_STATE_T powerState);
		Int32(*suspend_link) (DISPDRV_HANDLE_T handle);
		Int32(*resume_link) (DISPDRV_HANDLE_T handle);
		Int32(*update_no_os) (DISPDRV_HANDLE_T handle, void *buff,
			DISPDRV_WIN_t *p_win);
		Int32(*update) (DISPDRV_HANDLE_T handle, void *buff,
			DISPDRV_WIN_t *p_win, DISPDRV_CB_T apiCb);
		Int32(*reset_win) (DISPDRV_HANDLE_T handle);
		void(*set_send_first_frame_event) (DISPDRV_HANDLE_T handle,
							bool enable);
	} DISPDRV_T;

#ifdef __cplusplus
}
#endif
#endif				//_DISPLAY_DRV_H_
