blob: a4f168597d4c2cc2cb6e38c49aa00019aee85821 [file] [log] [blame]
Veera Sundaram Sankaran1c0afc52015-01-02 14:42:48 -08001/* Copyright (c) 2013-2015, The Linux Foundation. All rights reserved.
Arpita Banerjee841fa062013-05-24 14:59:51 -07002 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions
5 * are met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above copyright
9 * notice, this list of conditions and the following disclaimer in
10 * the documentation and/or other materials provided with the
11 * distribution.
12 * * Neither the name of The Linux Foundation nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
19 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
20 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
22 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
23 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
25 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#ifndef _GCDB_DISPLAY_H_
31#define _GCDB_DISPLAY_H_
32
33/*---------------------------------------------------------------------------*/
34/* HEADER files */
35/*---------------------------------------------------------------------------*/
36#include <debug.h>
37#include "include/display_resource.h"
Veera Sundaram Sankaranded347c2014-12-17 17:22:52 -080038#include "panel_display.h"
Arpita Banerjee841fa062013-05-24 14:59:51 -070039
Arpita Banerjee841fa062013-05-24 14:59:51 -070040#define REGULATOR_SIZE 28
41#define PHYSICAL_SIZE 16
42#define STRENGTH_SIZE 8
43#define BIST_SIZE 6
44#define LANE_SIZE 45
45
Padmanabhan Komandurub1a7cf72015-06-23 19:00:24 +053046#define DSI_CFG_SIZE 15
47
Arpita Banerjee841fa062013-05-24 14:59:51 -070048/*---------------------------------------------------------------------------*/
49/* API */
50/*---------------------------------------------------------------------------*/
51
Kuogee Hsieh5accef12013-12-18 14:12:09 -080052int target_backlight_ctrl(struct backlight *bl, uint8_t enable);
Arpita Banerjee0906ffd2013-05-24 16:25:38 -070053int target_panel_clock(uint8_t enable, struct msm_panel_info *pinfo);
Dhaval Patel29f24492013-08-08 20:45:42 -070054int target_panel_reset(uint8_t enable, struct panel_reset_sequence *resetseq,
55 struct msm_panel_info *pinfo);
Kuogee Hsieh93bcff62014-08-22 14:02:08 -070056int target_ldo_ctrl(uint8_t enable, struct msm_panel_info *pinfo);
Vineet Bajaja83cf802015-05-07 17:31:33 +053057int target_display_dsi2hdmi_config(struct msm_panel_info *pinfo);
Dhaval Patel7709c412015-05-12 10:09:41 -070058int target_dsi_phy_config(struct mdss_dsi_phy_ctrl *phy_db);
Arpita Banerjee841fa062013-05-24 14:59:51 -070059
Aravind Venkateswarand494f962014-02-25 17:16:49 -080060int gcdb_display_init(const char *panel_name, uint32_t rev, void *base);
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053061int gcdb_display_cmdline_arg(char *pbuf, uint16_t buf_size);
Arpita Banerjee841fa062013-05-24 14:59:51 -070062void gcdb_display_shutdown();
Veera Sundaram Sankaranded347c2014-12-17 17:22:52 -080063int oem_panel_select(const char *panel_name, struct panel_struct *panelstruct,
64 struct msm_panel_info *pinfo, struct mdss_dsi_phy_ctrl *phy_db);
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053065void set_panel_cmd_string(const char *panel_name);
66struct oem_panel_data mdss_dsi_get_oem_data(void);
Padmanabhan Komanduru75f5b3b2015-07-06 18:28:51 +053067struct oem_panel_data *mdss_dsi_get_oem_data_ptr(void);
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053068struct panel_struct mdss_dsi_get_panel_data(void);
Arpita Banerjee841fa062013-05-24 14:59:51 -070069
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053070struct oem_panel_data {
71 char panel[MAX_PANEL_ID_LEN];
Padmanabhan Komandurub1a7cf72015-06-23 19:00:24 +053072 char sec_panel[MAX_PANEL_ID_LEN];
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053073 bool cont_splash;
74 bool skip;
Padmanabhan Komandurudc0eaca2015-08-28 16:29:59 +053075 bool swap_dsi_ctrl;
Padmanabhan Komandurudae7e612015-06-18 15:56:02 +053076 uint32_t sim_mode;
Padmanabhan Komandurub1a7cf72015-06-23 19:00:24 +053077 char dsi_config[DSI_CFG_SIZE];
Padmanabhan Komanduru75f5b3b2015-07-06 18:28:51 +053078 uint32_t dsi_pll_src;
Ujwal Patel41a665a2015-07-17 13:51:30 -070079 /* If dual-DSI, slave cfg will use 2nd index */
80 int cfg_num[2]; /* -ve number means no overide */
Padmanabhan Komanduru75f5b3b2015-07-06 18:28:51 +053081};
82
83enum {
84 DSI_PLL_DEFAULT,
85 DSI_PLL0,
86 DSI_PLL1,
Padmanabhan Komandurubccbcdc2015-06-30 16:19:24 +053087};
Veera Sundaram Sankaran1c0afc52015-01-02 14:42:48 -080088
Padmanabhan Komanduruaa1e6832015-08-28 14:55:24 +053089static inline bool is_dsi_config_split(void)
90{
91 struct panel_struct panelstruct = mdss_dsi_get_panel_data();
92
93 return panelstruct.paneldata->panel_node_id &&
94 panelstruct.paneldata->slave_panel_node_id &&
95 (panelstruct.paneldata->panel_operating_mode & (DUAL_DSI_FLAG |
96 SPLIT_DISPLAY_FLAG | DST_SPLIT_FLAG));
97}
98
99static inline bool is_dsi_config_dual(void)
100{
101 struct oem_panel_data *oem_data = mdss_dsi_get_oem_data_ptr();
102
103 return !is_dsi_config_split() && oem_data->sec_panel &&
104 strcmp(oem_data->sec_panel, "");
105}
106
107static inline bool is_dsi_config_single()
108{
109 struct panel_struct panelstruct = mdss_dsi_get_panel_data();
110
111 return panelstruct.paneldata->panel_node_id && !is_dsi_config_split()
112 && !is_dsi_config_dual();
113}
114
Arpita Banerjee841fa062013-05-24 14:59:51 -0700115#endif /*_GCDB_DISPLAY_H_ */