18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef _DP_PARSER_H_ 78c2ecf20Sopenharmony_ci#define _DP_PARSER_H_ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/platform_device.h> 108c2ecf20Sopenharmony_ci#include <linux/phy/phy.h> 118c2ecf20Sopenharmony_ci#include <linux/phy/phy-dp.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include "dpu_io_util.h" 148c2ecf20Sopenharmony_ci#include "msm_drv.h" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#define DP_LABEL "MDSS DP DISPLAY" 178c2ecf20Sopenharmony_ci#define DP_MAX_PIXEL_CLK_KHZ 675000 188c2ecf20Sopenharmony_ci#define DP_MAX_NUM_DP_LANES 4 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_cienum dp_pm_type { 218c2ecf20Sopenharmony_ci DP_CORE_PM, 228c2ecf20Sopenharmony_ci DP_CTRL_PM, 238c2ecf20Sopenharmony_ci DP_STREAM_PM, 248c2ecf20Sopenharmony_ci DP_PHY_PM, 258c2ecf20Sopenharmony_ci DP_MAX_PM 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistruct dss_io_data { 298c2ecf20Sopenharmony_ci u32 len; 308c2ecf20Sopenharmony_ci void __iomem *base; 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistatic inline const char *dp_parser_pm_name(enum dp_pm_type module) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci switch (module) { 368c2ecf20Sopenharmony_ci case DP_CORE_PM: return "DP_CORE_PM"; 378c2ecf20Sopenharmony_ci case DP_CTRL_PM: return "DP_CTRL_PM"; 388c2ecf20Sopenharmony_ci case DP_STREAM_PM: return "DP_STREAM_PM"; 398c2ecf20Sopenharmony_ci case DP_PHY_PM: return "DP_PHY_PM"; 408c2ecf20Sopenharmony_ci default: return "???"; 418c2ecf20Sopenharmony_ci } 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci/** 458c2ecf20Sopenharmony_ci * struct dp_display_data - display related device tree data. 468c2ecf20Sopenharmony_ci * 478c2ecf20Sopenharmony_ci * @ctrl_node: referece to controller device 488c2ecf20Sopenharmony_ci * @phy_node: reference to phy device 498c2ecf20Sopenharmony_ci * @is_active: is the controller currently active 508c2ecf20Sopenharmony_ci * @name: name of the display 518c2ecf20Sopenharmony_ci * @display_type: type of the display 528c2ecf20Sopenharmony_ci */ 538c2ecf20Sopenharmony_cistruct dp_display_data { 548c2ecf20Sopenharmony_ci struct device_node *ctrl_node; 558c2ecf20Sopenharmony_ci struct device_node *phy_node; 568c2ecf20Sopenharmony_ci bool is_active; 578c2ecf20Sopenharmony_ci const char *name; 588c2ecf20Sopenharmony_ci const char *display_type; 598c2ecf20Sopenharmony_ci}; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci/** 628c2ecf20Sopenharmony_ci * struct dp_ctrl_resource - controller's IO related data 638c2ecf20Sopenharmony_ci * 648c2ecf20Sopenharmony_ci * @dp_controller: Display Port controller mapped memory address 658c2ecf20Sopenharmony_ci * @phy_io: phy's mapped memory address 668c2ecf20Sopenharmony_ci */ 678c2ecf20Sopenharmony_cistruct dp_io { 688c2ecf20Sopenharmony_ci struct dss_io_data dp_controller; 698c2ecf20Sopenharmony_ci struct phy *phy; 708c2ecf20Sopenharmony_ci union phy_configure_opts phy_opts; 718c2ecf20Sopenharmony_ci}; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci/** 748c2ecf20Sopenharmony_ci * struct dp_pinctrl - DP's pin control 758c2ecf20Sopenharmony_ci * 768c2ecf20Sopenharmony_ci * @pin: pin-controller's instance 778c2ecf20Sopenharmony_ci * @state_active: active state pin control 788c2ecf20Sopenharmony_ci * @state_hpd_active: hpd active state pin control 798c2ecf20Sopenharmony_ci * @state_suspend: suspend state pin control 808c2ecf20Sopenharmony_ci */ 818c2ecf20Sopenharmony_cistruct dp_pinctrl { 828c2ecf20Sopenharmony_ci struct pinctrl *pin; 838c2ecf20Sopenharmony_ci struct pinctrl_state *state_active; 848c2ecf20Sopenharmony_ci struct pinctrl_state *state_hpd_active; 858c2ecf20Sopenharmony_ci struct pinctrl_state *state_suspend; 868c2ecf20Sopenharmony_ci}; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci#define DP_DEV_REGULATOR_MAX 4 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci/* Regulators for DP devices */ 918c2ecf20Sopenharmony_cistruct dp_reg_entry { 928c2ecf20Sopenharmony_ci char name[32]; 938c2ecf20Sopenharmony_ci int enable_load; 948c2ecf20Sopenharmony_ci int disable_load; 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistruct dp_regulator_cfg { 988c2ecf20Sopenharmony_ci int num; 998c2ecf20Sopenharmony_ci struct dp_reg_entry regs[DP_DEV_REGULATOR_MAX]; 1008c2ecf20Sopenharmony_ci}; 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci/** 1038c2ecf20Sopenharmony_ci * struct dp_parser - DP parser's data exposed to clients 1048c2ecf20Sopenharmony_ci * 1058c2ecf20Sopenharmony_ci * @pdev: platform data of the client 1068c2ecf20Sopenharmony_ci * @mp: gpio, regulator and clock related data 1078c2ecf20Sopenharmony_ci * @pinctrl: pin-control related data 1088c2ecf20Sopenharmony_ci * @disp_data: controller's display related data 1098c2ecf20Sopenharmony_ci * @parse: function to be called by client to parse device tree. 1108c2ecf20Sopenharmony_ci */ 1118c2ecf20Sopenharmony_cistruct dp_parser { 1128c2ecf20Sopenharmony_ci struct platform_device *pdev; 1138c2ecf20Sopenharmony_ci struct dss_module_power mp[DP_MAX_PM]; 1148c2ecf20Sopenharmony_ci struct dp_pinctrl pinctrl; 1158c2ecf20Sopenharmony_ci struct dp_io io; 1168c2ecf20Sopenharmony_ci struct dp_display_data disp_data; 1178c2ecf20Sopenharmony_ci const struct dp_regulator_cfg *regulator_cfg; 1188c2ecf20Sopenharmony_ci u32 max_dp_lanes; 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci int (*parse)(struct dp_parser *parser); 1218c2ecf20Sopenharmony_ci}; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci/** 1248c2ecf20Sopenharmony_ci * dp_parser_get() - get the DP's device tree parser module 1258c2ecf20Sopenharmony_ci * 1268c2ecf20Sopenharmony_ci * @pdev: platform data of the client 1278c2ecf20Sopenharmony_ci * return: pointer to dp_parser structure. 1288c2ecf20Sopenharmony_ci * 1298c2ecf20Sopenharmony_ci * This function provides client capability to parse the 1308c2ecf20Sopenharmony_ci * device tree and populate the data structures. The data 1318c2ecf20Sopenharmony_ci * related to clock, regulators, pin-control and other 1328c2ecf20Sopenharmony_ci * can be parsed using this module. 1338c2ecf20Sopenharmony_ci */ 1348c2ecf20Sopenharmony_cistruct dp_parser *dp_parser_get(struct platform_device *pdev); 1358c2ecf20Sopenharmony_ci 1368c2ecf20Sopenharmony_ci#endif 137