Merge "disp: msm: make msm_drm as module for GKI"
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

commit
6a5956b36e
8
Makefile
8
Makefile
@@ -10,8 +10,13 @@ LINUXINCLUDE += -include $(srctree)/techpack/display/config/konadispconf.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_ARCH_LAHAINA), y)
|
ifeq ($(CONFIG_ARCH_LAHAINA), y)
|
||||||
include $(srctree)/techpack/display/config/lahainadisp.conf
|
ifeq ($(CONFIG_QGKI), y)
|
||||||
|
include $(srctree)/techpack/display/config/lahainadisp.conf
|
||||||
LINUXINCLUDE += -include $(srctree)/techpack/display/config/lahainadispconf.h
|
LINUXINCLUDE += -include $(srctree)/techpack/display/config/lahainadispconf.h
|
||||||
|
else
|
||||||
|
include $(srctree)/techpack/display/config/gki_lahainadisp.conf
|
||||||
|
LINUXINCLUDE += -include $(srctree)/techpack/display/config/gki_lahainadispconf.h
|
||||||
|
endif
|
||||||
LINUXINCLUDE += \
|
LINUXINCLUDE += \
|
||||||
-I$(srctree)/techpack/display/include/uapi/display \
|
-I$(srctree)/techpack/display/include/uapi/display \
|
||||||
-I$(srctree)/techpack/display/include
|
-I$(srctree)/techpack/display/include
|
||||||
@@ -36,4 +41,3 @@ endif
|
|||||||
|
|
||||||
obj-$(CONFIG_DRM_MSM) += msm/
|
obj-$(CONFIG_DRM_MSM) += msm/
|
||||||
obj-$(CONFIG_MSM_SDE_ROTATOR) += rotator/
|
obj-$(CONFIG_MSM_SDE_ROTATOR) += rotator/
|
||||||
obj-$(CONFIG_HDCP_QSEECOM) += hdcp/
|
|
||||||
|
11
config/gki_lahainadisp.conf
Normal file
11
config/gki_lahainadisp.conf
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export CONFIG_DRM_MSM=y
|
||||||
|
export CONFIG_DRM_MSM_SDE=y
|
||||||
|
export CONFIG_SYNC_FILE=y
|
||||||
|
export CONFIG_DRM_MSM_DSI=y
|
||||||
|
export CONFIG_DRM_MSM_DP=y
|
||||||
|
export CONFIG_DSI_PARSER=y
|
||||||
|
export CONFIG_QCOM_MDSS_PLL=y
|
||||||
|
export CONFIG_DRM_SDE_WB=y
|
||||||
|
export CONFIG_DRM_MSM_REGISTER_LOGGING=y
|
||||||
|
export CONFIG_DRM_SDE_RSC=y
|
||||||
|
export CONFIG_DISPLAY_BUILD=m
|
18
config/gki_lahainadispconf.h
Normal file
18
config/gki_lahainadispconf.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CONFIG_DRM_MSM 1
|
||||||
|
#define CONFIG_DRM_MSM_SDE 1
|
||||||
|
#define CONFIG_SYNC_FILE 1
|
||||||
|
#define CONFIG_DRM_MSM_DSI 1
|
||||||
|
#define CONFIG_DRM_MSM_DP 1
|
||||||
|
#define CONFIG_DSI_PARSER 1
|
||||||
|
#define CONFIG_DRM_SDE_WB 1
|
||||||
|
#define CONFIG_DRM_MSM_REGISTER_LOGGING 1
|
||||||
|
#define CONFIG_DRM_SDE_EVTLOG_DEBUG 1
|
||||||
|
#define CONFIG_QCOM_MDSS_PLL 1
|
||||||
|
#define CONFIG_GKI_DISPLAY 1
|
||||||
|
#define CONFIG_DRM_SDE_RSC 1
|
||||||
|
|
@@ -1,4 +1,3 @@
|
|||||||
ifeq ($(CONFIG_QGKI),y)
|
|
||||||
export CONFIG_DRM_MSM=y
|
export CONFIG_DRM_MSM=y
|
||||||
export CONFIG_DRM_MSM_SDE=y
|
export CONFIG_DRM_MSM_SDE=y
|
||||||
export CONFIG_DRM_MSM_DP=y
|
export CONFIG_DRM_MSM_DP=y
|
||||||
@@ -9,4 +8,4 @@ export CONFIG_DRM_SDE_WB=y
|
|||||||
export CONFIG_DRM_MSM_REGISTER_LOGGING=y
|
export CONFIG_DRM_MSM_REGISTER_LOGGING=y
|
||||||
export CONFIG_QCOM_MDSS_PLL=y
|
export CONFIG_QCOM_MDSS_PLL=y
|
||||||
export CONFIG_DRM_SDE_RSC=y
|
export CONFIG_DRM_SDE_RSC=y
|
||||||
endif
|
export CONFIG_DISPLAY_BUILD=y
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
|
|
||||||
obj-$(CONFIG_HDCP_QSEECOM) += msm_hdcp.o \
|
|
@@ -328,18 +328,12 @@ static struct platform_driver msm_hdcp_driver = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init msm_hdcp_init(void)
|
void __init msm_hdcp_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&msm_hdcp_driver);
|
platform_driver_register(&msm_hdcp_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit msm_hdcp_exit(void)
|
void __exit msm_hdcp_unregister(void)
|
||||||
{
|
{
|
||||||
return platform_driver_unregister(&msm_hdcp_driver);
|
platform_driver_unregister(&msm_hdcp_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(msm_hdcp_init);
|
|
||||||
module_exit(msm_hdcp_exit);
|
|
||||||
|
|
||||||
MODULE_DESCRIPTION("MSM HDCP driver");
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
|
@@ -141,7 +141,7 @@ struct sde_rsc_cmd_config {
|
|||||||
u32 prefill_lines;
|
u32 prefill_lines;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_SDE_RSC
|
#if IS_ENABLED(CONFIG_DRM_SDE_RSC)
|
||||||
/**
|
/**
|
||||||
* sde_rsc_client_create() - create the client for sde rsc.
|
* sde_rsc_client_create() - create the client for sde rsc.
|
||||||
* Different displays like DSI, HDMI, DP, WB, etc should call this
|
* Different displays like DSI, HDMI, DP, WB, etc should call this
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
ccflags-y := -I$(srctree)/include/drm -I$(srctree)/techpack/display/msm -I$(srctree)/techpack/display/msm/dsi -I$(srctree)/techpack/display/msm/dp
|
ccflags-y := -I$(srctree)/include/drm -I$(srctree)/techpack/display/msm -I$(srctree)/techpack/display/msm/dsi -I$(srctree)/techpack/display/msm/dp
|
||||||
ccflags-y += -I$(srctree)/techpack/display/msm/sde
|
ccflags-y += -I$(srctree)/techpack/display/msm/sde
|
||||||
ccflags-y += -I$(srctree)/techpack/display/rotator
|
ccflags-y += -I$(srctree)/techpack/display/rotator
|
||||||
|
ccflags-y += -I$(srctree)/techpack/display/hdcp
|
||||||
ccflags-y += -I$(srctree)/drivers/clk/qcom/
|
ccflags-y += -I$(srctree)/drivers/clk/qcom/
|
||||||
|
|
||||||
msm_drm-$(CONFIG_DRM_MSM_DP) += dp/dp_altmode.o \
|
msm_drm-$(CONFIG_DRM_MSM_DP) += dp/dp_altmode.o \
|
||||||
@@ -127,4 +128,6 @@ msm_drm-$(CONFIG_DRM_MSM) += \
|
|||||||
msm_smmu.o \
|
msm_smmu.o \
|
||||||
msm_prop.o \
|
msm_prop.o \
|
||||||
|
|
||||||
obj-$(CONFIG_DRM_MSM) += msm_drm.o
|
msm_drm-$(CONFIG_HDCP_QSEECOM) += ../hdcp/msm_hdcp.o \
|
||||||
|
|
||||||
|
obj-$(CONFIG_DISPLAY_BUILD) += msm_drm.o
|
||||||
|
@@ -3347,22 +3347,13 @@ static struct platform_driver dp_display_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init dp_display_init(void)
|
void __init dp_display_register(void)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = platform_driver_register(&dp_display_driver);
|
platform_driver_register(&dp_display_driver);
|
||||||
if (ret) {
|
|
||||||
DP_ERR("driver register failed\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
late_initcall(dp_display_init);
|
|
||||||
|
|
||||||
static void __exit dp_display_cleanup(void)
|
void __exit dp_display_unregister(void)
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&dp_display_driver);
|
platform_driver_unregister(&dp_display_driver);
|
||||||
}
|
}
|
||||||
module_exit(dp_display_cleanup);
|
|
||||||
|
@@ -127,7 +127,7 @@ struct dp_display {
|
|||||||
bool wakeup);
|
bool wakeup);
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_MSM_DP
|
#if IS_ENABLED(CONFIG_DRM_MSM_DP)
|
||||||
int dp_display_get_num_of_displays(void);
|
int dp_display_get_num_of_displays(void);
|
||||||
int dp_display_get_displays(void **displays, int count);
|
int dp_display_get_displays(void **displays, int count);
|
||||||
int dp_display_get_num_of_streams(void);
|
int dp_display_get_num_of_streams(void);
|
||||||
@@ -149,5 +149,5 @@ static inline int dp_connector_update_pps(struct drm_connector *connector,
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_DP */
|
||||||
#endif /* _DP_DISPLAY_H_ */
|
#endif /* _DP_DISPLAY_H_ */
|
||||||
|
@@ -24,7 +24,7 @@ struct dp_bridge {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_MSM_DP
|
#if IS_ENABLED(CONFIG_DRM_MSM_DP)
|
||||||
/**
|
/**
|
||||||
* dp_connector_config_hdr - callback to configure HDR
|
* dp_connector_config_hdr - callback to configure HDR
|
||||||
* @connector: Pointer to drm connector structure
|
* @connector: Pointer to drm connector structure
|
||||||
@@ -231,6 +231,6 @@ static inline void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
|
|||||||
struct drm_display_mode *drm_mode)
|
struct drm_display_mode *drm_mode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_DP */
|
||||||
|
|
||||||
#endif /* _DP_DRM_H_ */
|
#endif /* _DP_DRM_H_ */
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include "dp_display.h"
|
#include "dp_display.h"
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_MSM_DP_MST
|
#if IS_ENABLED(CONFIG_DRM_MSM_DP_MST)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_mst_drm_bridge_init - initialize mst bridge
|
* dp_mst_drm_bridge_init - initialize mst bridge
|
||||||
@@ -60,6 +60,6 @@ static inline int dp_mst_deinit(struct dp_display *dp_display)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_DP_MST */
|
||||||
|
|
||||||
#endif /* _DP_MST_DRM_H_ */
|
#endif /* _DP_MST_DRM_H_ */
|
||||||
|
@@ -46,7 +46,7 @@ struct dp_usbpd {
|
|||||||
bool debug_en;
|
bool debug_en;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_MSM_DP_USBPD_LEGACY
|
#if IS_ENABLED(CONFIG_DRM_MSM_DP_USBPD_LEGACY)
|
||||||
/**
|
/**
|
||||||
* dp_usbpd_get() - setup usbpd module
|
* dp_usbpd_get() - setup usbpd module
|
||||||
*
|
*
|
||||||
|
@@ -5059,6 +5059,17 @@ static int dsi_display_bind(struct device *dev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove the panel vote that was added during dsi display probe */
|
||||||
|
if (display->panel) {
|
||||||
|
rc = dsi_pwr_enable_regulator(&display->panel->power_info,
|
||||||
|
false);
|
||||||
|
if (rc) {
|
||||||
|
DSI_ERR("[%s] failed to disable vregs, rc=%d\n",
|
||||||
|
display->panel->name, rc);
|
||||||
|
goto error_host_deinit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* register te irq handler */
|
/* register te irq handler */
|
||||||
dsi_display_register_te_irq(display);
|
dsi_display_register_te_irq(display);
|
||||||
|
|
||||||
@@ -5169,6 +5180,24 @@ static int dsi_display_init(struct dsi_display *display)
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Vote on panel regulator is added to make sure panel regulators
|
||||||
|
* are ON until dsi bind is completed for cont-splash enabled usecase.
|
||||||
|
* This panel regulator vote will be removed after bind is done.
|
||||||
|
* For GKI, adding this vote will make sure that sync_state
|
||||||
|
* kernel driver doesn't disable the panel regulators before
|
||||||
|
* splash_config() function adds vote for these regulators.
|
||||||
|
*/
|
||||||
|
if (display->panel) {
|
||||||
|
rc = dsi_pwr_enable_regulator(&display->panel->power_info,
|
||||||
|
true);
|
||||||
|
if (rc) {
|
||||||
|
DSI_ERR("[%s] failed to enable vregs, rc=%d\n",
|
||||||
|
display->panel->name, rc);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rc = component_add(&pdev->dev, &dsi_display_comp_ops);
|
rc = component_add(&pdev->dev, &dsi_display_comp_ops);
|
||||||
if (rc)
|
if (rc)
|
||||||
DSI_ERR("component add failed, rc=%d\n", rc);
|
DSI_ERR("component add failed, rc=%d\n", rc);
|
||||||
@@ -7765,17 +7794,17 @@ int dsi_display_unprepare(struct dsi_display *display)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init dsi_display_register(void)
|
void __init dsi_display_register(void)
|
||||||
{
|
{
|
||||||
dsi_phy_drv_register();
|
dsi_phy_drv_register();
|
||||||
dsi_ctrl_drv_register();
|
dsi_ctrl_drv_register();
|
||||||
|
|
||||||
dsi_display_parse_boot_display_selection();
|
dsi_display_parse_boot_display_selection();
|
||||||
|
|
||||||
return platform_driver_register(&dsi_display_driver);
|
platform_driver_register(&dsi_display_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit dsi_display_unregister(void)
|
void __exit dsi_display_unregister(void)
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&dsi_display_driver);
|
platform_driver_unregister(&dsi_display_driver);
|
||||||
dsi_ctrl_drv_unregister();
|
dsi_ctrl_drv_unregister();
|
||||||
@@ -7789,5 +7818,3 @@ module_param_string(dsi_display1, dsi_display_secondary, MAX_CMDLINE_PARAM_LEN,
|
|||||||
0600);
|
0600);
|
||||||
MODULE_PARM_DESC(dsi_display1,
|
MODULE_PARM_DESC(dsi_display1,
|
||||||
"msm_drm.dsi_display1=<display node>:<configX> where <display node> is 'secondary dsi display node name' and <configX> where x represents index in the topology list");
|
"msm_drm.dsi_display1=<display node>:<configX> where <display node> is 'secondary dsi display node name' and <configX> where x represents index in the topology list");
|
||||||
module_init(dsi_display_register);
|
|
||||||
module_exit(dsi_display_unregister);
|
|
||||||
|
@@ -3283,6 +3283,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent,
|
|||||||
if (rc)
|
if (rc)
|
||||||
DSI_DEBUG("failed to parse esd config, rc=%d\n", rc);
|
DSI_DEBUG("failed to parse esd config, rc=%d\n", rc);
|
||||||
|
|
||||||
|
rc = dsi_panel_vreg_get(panel);
|
||||||
|
if (rc) {
|
||||||
|
DSI_ERR("[%s] failed to get panel regulators, rc=%d\n",
|
||||||
|
panel->name, rc);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
panel->power_mode = SDE_MODE_DPMS_OFF;
|
panel->power_mode = SDE_MODE_DPMS_OFF;
|
||||||
drm_panel_init(&panel->drm_panel);
|
drm_panel_init(&panel->drm_panel);
|
||||||
panel->drm_panel.dev = &panel->mipi_device.dev;
|
panel->drm_panel.dev = &panel->mipi_device.dev;
|
||||||
@@ -3290,11 +3297,13 @@ struct dsi_panel *dsi_panel_get(struct device *parent,
|
|||||||
|
|
||||||
rc = drm_panel_add(&panel->drm_panel);
|
rc = drm_panel_add(&panel->drm_panel);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto error;
|
goto error_vreg_put;
|
||||||
|
|
||||||
mutex_init(&panel->panel_lock);
|
mutex_init(&panel->panel_lock);
|
||||||
|
|
||||||
return panel;
|
return panel;
|
||||||
|
error_vreg_put:
|
||||||
|
(void)dsi_panel_vreg_put(panel);
|
||||||
error:
|
error:
|
||||||
kfree(panel);
|
kfree(panel);
|
||||||
return ERR_PTR(rc);
|
return ERR_PTR(rc);
|
||||||
@@ -3335,18 +3344,11 @@ int dsi_panel_drv_init(struct dsi_panel *panel,
|
|||||||
dev->lanes = 4;
|
dev->lanes = 4;
|
||||||
|
|
||||||
panel->host = host;
|
panel->host = host;
|
||||||
rc = dsi_panel_vreg_get(panel);
|
|
||||||
if (rc) {
|
|
||||||
DSI_ERR("[%s] failed to get panel regulators, rc=%d\n",
|
|
||||||
panel->name, rc);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = dsi_panel_pinctrl_init(panel);
|
rc = dsi_panel_pinctrl_init(panel);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
DSI_ERR("[%s] failed to init pinctrl, rc=%d\n",
|
DSI_ERR("[%s] failed to init pinctrl, rc=%d\n",
|
||||||
panel->name, rc);
|
panel->name, rc);
|
||||||
goto error_vreg_put;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = dsi_panel_gpio_request(panel);
|
rc = dsi_panel_gpio_request(panel);
|
||||||
@@ -3370,8 +3372,6 @@ error_gpio_release:
|
|||||||
(void)dsi_panel_gpio_release(panel);
|
(void)dsi_panel_gpio_release(panel);
|
||||||
error_pinctrl_deinit:
|
error_pinctrl_deinit:
|
||||||
(void)dsi_panel_pinctrl_deinit(panel);
|
(void)dsi_panel_pinctrl_deinit(panel);
|
||||||
error_vreg_put:
|
|
||||||
(void)dsi_panel_vreg_put(panel);
|
|
||||||
exit:
|
exit:
|
||||||
mutex_unlock(&panel->panel_lock);
|
mutex_unlock(&panel->panel_lock);
|
||||||
return rc;
|
return rc;
|
||||||
|
@@ -704,7 +704,6 @@ static struct msm_kms *_msm_drm_component_init_helper(
|
|||||||
return kms;
|
return kms;
|
||||||
}
|
}
|
||||||
priv->kms = kms;
|
priv->kms = kms;
|
||||||
pm_runtime_enable(dev);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Since kms->funcs->hw_init(kms) might call
|
* Since kms->funcs->hw_init(kms) might call
|
||||||
@@ -762,6 +761,14 @@ static int msm_drm_device_init(struct platform_device *pdev,
|
|||||||
goto dbg_init_fail;
|
goto dbg_init_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pm_runtime_enable(dev);
|
||||||
|
|
||||||
|
ret = pm_runtime_get_sync(dev);
|
||||||
|
if (ret < 0) {
|
||||||
|
dev_err(dev, "resource enable failed: %d\n", ret);
|
||||||
|
goto pm_runtime_error;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
for (i = 0; i < SDE_POWER_HANDLE_DBUS_ID_MAX; i++)
|
||||||
sde_power_data_bus_set_quota(&priv->phandle, i,
|
sde_power_data_bus_set_quota(&priv->phandle, i,
|
||||||
SDE_POWER_HANDLE_CONT_SPLASH_BUS_AB_QUOTA,
|
SDE_POWER_HANDLE_CONT_SPLASH_BUS_AB_QUOTA,
|
||||||
@@ -769,6 +776,8 @@ static int msm_drm_device_init(struct platform_device *pdev,
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
pm_runtime_error:
|
||||||
|
sde_dbg_destroy();
|
||||||
dbg_init_fail:
|
dbg_init_fail:
|
||||||
sde_power_resource_deinit(pdev, &priv->phandle);
|
sde_power_resource_deinit(pdev, &priv->phandle);
|
||||||
power_init_fail:
|
power_init_fail:
|
||||||
@@ -1927,6 +1936,30 @@ static const struct component_master_ops msm_drm_ops = {
|
|||||||
.unbind = msm_drm_unbind,
|
.unbind = msm_drm_unbind,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int msm_drm_component_dependency_check(struct device *dev)
|
||||||
|
{
|
||||||
|
struct device_node *node;
|
||||||
|
struct device_node *np = dev->of_node;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
if (!of_device_is_compatible(dev->of_node, "qcom,sde-kms"))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; ; i++) {
|
||||||
|
node = of_parse_phandle(np, "connectors", i);
|
||||||
|
if (!node)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (of_node_name_eq(node,"qcom,sde_rscc") &&
|
||||||
|
of_device_is_available(node) &&
|
||||||
|
!of_node_check_flag(node, OF_POPULATED)) {
|
||||||
|
dev_err(dev, "qcom,sde_rscc device not probed yet\n");
|
||||||
|
return -EPROBE_DEFER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
/*
|
/*
|
||||||
* Platform driver:
|
* Platform driver:
|
||||||
*/
|
*/
|
||||||
@@ -1936,6 +1969,10 @@ static int msm_pdev_probe(struct platform_device *pdev)
|
|||||||
int ret;
|
int ret;
|
||||||
struct component_match *match = NULL;
|
struct component_match *match = NULL;
|
||||||
|
|
||||||
|
ret = msm_drm_component_dependency_check(&pdev->dev);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
|
|
||||||
ret = msm_drm_device_init(pdev, &msm_driver);
|
ret = msm_drm_device_init(pdev, &msm_driver);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@@ -2008,10 +2045,18 @@ static int __init msm_drm_register(void)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
DBG("init");
|
DBG("init");
|
||||||
|
sde_rsc_rpmh_register();
|
||||||
|
sde_rsc_register();
|
||||||
|
dsi_display_register();
|
||||||
|
msm_hdcp_register();
|
||||||
|
dp_display_register();
|
||||||
msm_smmu_driver_init();
|
msm_smmu_driver_init();
|
||||||
|
sde_rotator_register();
|
||||||
|
sde_rotator_smmu_driver_register();
|
||||||
msm_dsi_register();
|
msm_dsi_register();
|
||||||
msm_edp_register();
|
msm_edp_register();
|
||||||
msm_hdmi_register();
|
msm_hdmi_register();
|
||||||
|
sde_wb_register();
|
||||||
return platform_driver_register(&msm_platform_driver);
|
return platform_driver_register(&msm_platform_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2019,10 +2064,17 @@ static void __exit msm_drm_unregister(void)
|
|||||||
{
|
{
|
||||||
DBG("fini");
|
DBG("fini");
|
||||||
platform_driver_unregister(&msm_platform_driver);
|
platform_driver_unregister(&msm_platform_driver);
|
||||||
|
sde_wb_unregister();
|
||||||
msm_hdmi_unregister();
|
msm_hdmi_unregister();
|
||||||
msm_edp_unregister();
|
msm_edp_unregister();
|
||||||
msm_dsi_unregister();
|
msm_dsi_unregister();
|
||||||
|
sde_rotator_smmu_driver_unregister();
|
||||||
|
sde_rotator_unregister();
|
||||||
msm_smmu_driver_cleanup();
|
msm_smmu_driver_cleanup();
|
||||||
|
msm_hdcp_unregister();
|
||||||
|
dp_display_unregister();
|
||||||
|
dsi_display_unregister();
|
||||||
|
sde_rsc_unregister();
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(msm_drm_register);
|
module_init(msm_drm_register);
|
||||||
|
114
msm/msm_drv.h
114
msm/msm_drv.h
@@ -1101,7 +1101,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev);
|
|||||||
void msm_fbdev_free(struct drm_device *dev);
|
void msm_fbdev_free(struct drm_device *dev);
|
||||||
|
|
||||||
struct hdmi;
|
struct hdmi;
|
||||||
#ifdef CONFIG_DRM_MSM_HDMI
|
#if IS_ENABLED(CONFIG_DRM_MSM_HDMI)
|
||||||
int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev,
|
int msm_hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev,
|
||||||
struct drm_encoder *encoder);
|
struct drm_encoder *encoder);
|
||||||
void __init msm_hdmi_register(void);
|
void __init msm_hdmi_register(void);
|
||||||
@@ -1113,10 +1113,10 @@ static inline void __init msm_hdmi_register(void)
|
|||||||
static inline void __exit msm_hdmi_unregister(void)
|
static inline void __exit msm_hdmi_unregister(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_HDMI */
|
||||||
|
|
||||||
struct msm_edp;
|
struct msm_edp;
|
||||||
#ifdef CONFIG_DRM_MSM_EDP
|
#if IS_ENABLED(CONFIG_DRM_MSM_EDP)
|
||||||
void __init msm_edp_register(void);
|
void __init msm_edp_register(void);
|
||||||
void __exit msm_edp_unregister(void);
|
void __exit msm_edp_unregister(void);
|
||||||
int msm_edp_modeset_init(struct msm_edp *edp, struct drm_device *dev,
|
int msm_edp_modeset_init(struct msm_edp *edp, struct drm_device *dev,
|
||||||
@@ -1134,7 +1134,7 @@ static inline int msm_edp_modeset_init(struct msm_edp *edp,
|
|||||||
{
|
{
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_EDP */
|
||||||
|
|
||||||
struct msm_dsi;
|
struct msm_dsi;
|
||||||
|
|
||||||
@@ -1147,12 +1147,7 @@ struct msm_dsi;
|
|||||||
*/
|
*/
|
||||||
void msm_mode_object_event_notify(struct drm_mode_object *obj,
|
void msm_mode_object_event_notify(struct drm_mode_object *obj,
|
||||||
struct drm_device *dev, struct drm_event *event, u8 *payload);
|
struct drm_device *dev, struct drm_event *event, u8 *payload);
|
||||||
#ifndef CONFIG_DRM_MSM_DSI
|
#if IS_ENABLED(CONFIG_DRM_MSM_DSI)
|
||||||
void __init msm_dsi_register(void);
|
|
||||||
void __exit msm_dsi_unregister(void);
|
|
||||||
int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
|
|
||||||
struct drm_encoder *encoder);
|
|
||||||
#else
|
|
||||||
static inline void __init msm_dsi_register(void)
|
static inline void __init msm_dsi_register(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -1165,9 +1160,14 @@ static inline int msm_dsi_modeset_init(struct msm_dsi *msm_dsi,
|
|||||||
{
|
{
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
#endif
|
#else
|
||||||
|
void __init msm_dsi_register(void);
|
||||||
|
void __exit msm_dsi_unregister(void);
|
||||||
|
int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
|
||||||
|
struct drm_encoder *encoder);
|
||||||
|
#endif /* CONFIG_DRM_MSM_DSI */
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_MSM_MDP5
|
#if IS_ENABLED(CONFIG_DRM_MSM_MDP5)
|
||||||
void __init msm_mdp_register(void);
|
void __init msm_mdp_register(void);
|
||||||
void __exit msm_mdp_unregister(void);
|
void __exit msm_mdp_unregister(void);
|
||||||
#else
|
#else
|
||||||
@@ -1177,7 +1177,7 @@ static inline void __init msm_mdp_register(void)
|
|||||||
static inline void __exit msm_mdp_unregister(void)
|
static inline void __exit msm_mdp_unregister(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_MDP5 */
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_FS
|
#ifdef CONFIG_DEBUG_FS
|
||||||
void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m);
|
void msm_gem_describe(struct drm_gem_object *obj, struct seq_file *m);
|
||||||
@@ -1200,6 +1200,94 @@ static inline void msm_rd_debugfs_cleanup(struct msm_drm_private *priv) {}
|
|||||||
static inline void msm_perf_debugfs_cleanup(struct msm_drm_private *priv) {}
|
static inline void msm_perf_debugfs_cleanup(struct msm_drm_private *priv) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_DRM_MSM_DSI)
|
||||||
|
void __init dsi_display_register(void);
|
||||||
|
void __exit dsi_display_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init dsi_display_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit dsi_display_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DRM_MSM_DSI */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_HDCP_QSEECOM)
|
||||||
|
void __init msm_hdcp_register(void);
|
||||||
|
void __exit msm_hdcp_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init msm_hdcp_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit msm_hdcp_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_HDCP_QSEECOM */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_DRM_MSM_DP)
|
||||||
|
void __init dp_display_register(void);
|
||||||
|
void __exit dp_display_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init dp_display_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit dp_display_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DRM_MSM_DP */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_DRM_SDE_RSC)
|
||||||
|
void __init sde_rsc_register(void);
|
||||||
|
void __exit sde_rsc_unregister(void);
|
||||||
|
void __init sde_rsc_rpmh_register(void);
|
||||||
|
#else
|
||||||
|
static inline void __init sde_rsc_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit sde_rsc_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __init sde_rsc_rpmh_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DRM_SDE_RSC */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_DRM_SDE_WB)
|
||||||
|
void __init sde_wb_register(void);
|
||||||
|
void __exit sde_wb_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init sde_wb_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit sde_wb_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_DRM_SDE_WB */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR)
|
||||||
|
void __init sde_rotator_register(void);
|
||||||
|
void __exit sde_rotator_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init sde_rotator_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit sde_rotator_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_MSM_SDE_ROTATOR */
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR)
|
||||||
|
void __init sde_rotator_smmu_driver_register(void);
|
||||||
|
void __exit sde_rotator_smmu_driver_unregister(void);
|
||||||
|
#else
|
||||||
|
static inline void __init sde_rotator_smmu_driver_register(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
static inline void __exit sde_rotator_smmu_driver_unregister(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_MSM_SDE_ROTATOR */
|
||||||
|
|
||||||
struct clk *msm_clk_get(struct platform_device *pdev, const char *name);
|
struct clk *msm_clk_get(struct platform_device *pdev, const char *name);
|
||||||
int msm_clk_bulk_get(struct device *dev, struct clk_bulk_data **bulk);
|
int msm_clk_bulk_get(struct device *dev, struct clk_bulk_data **bulk);
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
|
||||||
* Copyright (C) 2013 Red Hat
|
* Copyright (C) 2013 Red Hat
|
||||||
* Author: Rob Clark <robdclark@gmail.com>
|
* Author: Rob Clark <robdclark@gmail.com>
|
||||||
*
|
*
|
||||||
@@ -163,7 +163,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev);
|
|||||||
static inline
|
static inline
|
||||||
struct msm_kms *mdp4_kms_init(struct drm_device *dev) { return NULL; };
|
struct msm_kms *mdp4_kms_init(struct drm_device *dev) { return NULL; };
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_DRM_MSM_MDP5
|
#if IS_ENABLED(CONFIG_DRM_MSM_MDP5)
|
||||||
struct msm_kms *mdp5_kms_init(struct drm_device *dev);
|
struct msm_kms *mdp5_kms_init(struct drm_device *dev);
|
||||||
int msm_mdss_init(struct drm_device *dev);
|
int msm_mdss_init(struct drm_device *dev);
|
||||||
void msm_mdss_destroy(struct drm_device *dev);
|
void msm_mdss_destroy(struct drm_device *dev);
|
||||||
@@ -190,7 +190,7 @@ static inline int msm_mdss_disable(struct msm_mdss *mdss)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_MSM_MDP5 */
|
||||||
|
|
||||||
struct msm_kms *sde_kms_init(struct drm_device *dev);
|
struct msm_kms *sde_kms_init(struct drm_device *dev);
|
||||||
|
|
||||||
|
@@ -511,7 +511,7 @@ struct sde_encoder_phys *sde_encoder_phys_cmd_init(
|
|||||||
* @p: Pointer to init params structure
|
* @p: Pointer to init params structure
|
||||||
* Return: Error code or newly allocated encoder
|
* Return: Error code or newly allocated encoder
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_DRM_SDE_WB
|
#if IS_ENABLED(CONFIG_DRM_SDE_WB)
|
||||||
struct sde_encoder_phys *sde_encoder_phys_wb_init(
|
struct sde_encoder_phys *sde_encoder_phys_wb_init(
|
||||||
struct sde_enc_phys_init_params *p);
|
struct sde_enc_phys_init_params *p);
|
||||||
#else
|
#else
|
||||||
@@ -521,7 +521,7 @@ struct sde_encoder_phys *sde_encoder_phys_wb_init(
|
|||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_SDE_WB */
|
||||||
|
|
||||||
void sde_encoder_phys_setup_cdm(struct sde_encoder_phys *phys_enc,
|
void sde_encoder_phys_setup_cdm(struct sde_encoder_phys *phys_enc,
|
||||||
struct drm_framebuffer *fb, const struct sde_format *format,
|
struct drm_framebuffer *fb, const struct sde_format *format,
|
||||||
|
@@ -24,7 +24,6 @@
|
|||||||
#include <linux/of_address.h>
|
#include <linux/of_address.h>
|
||||||
#include <linux/of_irq.h>
|
#include <linux/of_irq.h>
|
||||||
#include <linux/dma-buf.h>
|
#include <linux/dma-buf.h>
|
||||||
#include <linux/memblock.h>
|
|
||||||
#include <drm/drm_atomic_uapi.h>
|
#include <drm/drm_atomic_uapi.h>
|
||||||
#include <drm/drm_probe_helper.h>
|
#include <drm/drm_probe_helper.h>
|
||||||
|
|
||||||
@@ -61,6 +60,8 @@
|
|||||||
#define MEM_PROTECT_SD_CTRL_SWITCH 0x18
|
#define MEM_PROTECT_SD_CTRL_SWITCH 0x18
|
||||||
#define MDP_DEVICE_ID 0x1A
|
#define MDP_DEVICE_ID 0x1A
|
||||||
|
|
||||||
|
EXPORT_TRACEPOINT_SYMBOL(sde_drm_tracing_mark_write);
|
||||||
|
|
||||||
static const char * const iommu_ports[] = {
|
static const char * const iommu_ports[] = {
|
||||||
"mdp_0",
|
"mdp_0",
|
||||||
};
|
};
|
||||||
@@ -727,7 +728,6 @@ static int _sde_kms_release_splash_buffer(unsigned int mem_addr,
|
|||||||
pfn_start = mem_addr >> PAGE_SHIFT;
|
pfn_start = mem_addr >> PAGE_SHIFT;
|
||||||
pfn_end = (mem_addr + splash_buffer_size) >> PAGE_SHIFT;
|
pfn_end = (mem_addr + splash_buffer_size) >> PAGE_SHIFT;
|
||||||
|
|
||||||
ret = memblock_free(mem_addr, splash_buffer_size);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
SDE_ERROR("continuous splash memory free failed:%d\n", ret);
|
SDE_ERROR("continuous splash memory free failed:%d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
@@ -3491,15 +3491,9 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
|||||||
if (rc)
|
if (rc)
|
||||||
SDE_DEBUG("sde splash data fetch failed: %d\n", rc);
|
SDE_DEBUG("sde splash data fetch failed: %d\n", rc);
|
||||||
|
|
||||||
rc = pm_runtime_get_sync(sde_kms->dev->dev);
|
|
||||||
if (rc < 0) {
|
|
||||||
SDE_ERROR("resource enable failed: %d\n", rc);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = _sde_kms_hw_init_blocks(sde_kms, dev, priv);
|
rc = _sde_kms_hw_init_blocks(sde_kms, dev, priv);
|
||||||
if (rc)
|
if (rc)
|
||||||
goto hw_init_err;
|
goto error;
|
||||||
|
|
||||||
dev->mode_config.min_width = sde_kms->catalog->min_display_width;
|
dev->mode_config.min_width = sde_kms->catalog->min_display_width;
|
||||||
dev->mode_config.min_height = sde_kms->catalog->min_display_height;
|
dev->mode_config.min_height = sde_kms->catalog->min_display_height;
|
||||||
@@ -3546,8 +3540,6 @@ static int sde_kms_hw_init(struct msm_kms *kms)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
hw_init_err:
|
|
||||||
pm_runtime_put_sync(sde_kms->dev->dev);
|
|
||||||
error:
|
error:
|
||||||
_sde_kms_hw_destroy(sde_kms, platformdev);
|
_sde_kms_hw_destroy(sde_kms, platformdev);
|
||||||
end:
|
end:
|
||||||
|
@@ -113,7 +113,7 @@ TRACE_EVENT(sde_encoder_underrun,
|
|||||||
__entry->underrun_cnt)
|
__entry->underrun_cnt)
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_EVENT(tracing_mark_write,
|
TRACE_EVENT(sde_drm_tracing_mark_write,
|
||||||
TP_PROTO(char trace_type, const struct task_struct *task,
|
TP_PROTO(char trace_type, const struct task_struct *task,
|
||||||
const char *name, int value),
|
const char *name, int value),
|
||||||
TP_ARGS(trace_type, task, name, value),
|
TP_ARGS(trace_type, task, name, value),
|
||||||
@@ -390,7 +390,7 @@ TRACE_EVENT(sde_perf_uidle_status,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
#define sde_atrace trace_tracing_mark_write
|
#define sde_atrace trace_sde_drm_tracing_mark_write
|
||||||
|
|
||||||
#define SDE_ATRACE_END(name) sde_atrace('E', current, name, 0)
|
#define SDE_ATRACE_END(name) sde_atrace('E', current, name, 0)
|
||||||
#define SDE_ATRACE_BEGIN(name) sde_atrace('B', current, name, 0)
|
#define SDE_ATRACE_BEGIN(name) sde_atrace('B', current, name, 0)
|
||||||
|
@@ -824,15 +824,12 @@ static struct platform_driver sde_wb_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init sde_wb_register(void)
|
void __init sde_wb_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&sde_wb_driver);
|
platform_driver_register(&sde_wb_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit sde_wb_unregister(void)
|
void __exit sde_wb_unregister(void)
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&sde_wb_driver);
|
platform_driver_unregister(&sde_wb_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(sde_wb_register);
|
|
||||||
module_exit(sde_wb_unregister);
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __SDE_WB_H__
|
#ifndef __SDE_WB_H__
|
||||||
@@ -60,7 +60,7 @@ int sde_wb_get_index(struct sde_wb_device *wb_dev)
|
|||||||
return wb_dev ? wb_dev->index : -1;
|
return wb_dev ? wb_dev->index : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_SDE_WB
|
#if IS_ENABLED(CONFIG_DRM_SDE_WB)
|
||||||
/**
|
/**
|
||||||
* sde_wb_get_output_fb - get framebuffer in current atomic state
|
* sde_wb_get_output_fb - get framebuffer in current atomic state
|
||||||
* @wb_dev: Pointer to writeback device
|
* @wb_dev: Pointer to writeback device
|
||||||
@@ -357,6 +357,6 @@ int sde_wb_get_mode_info(struct drm_connector *connector,
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif /* CONFIG_DRM_SDE_WB */
|
||||||
#endif /* __SDE_WB_H__ */
|
#endif /* __SDE_WB_H__ */
|
||||||
|
|
||||||
|
@@ -82,7 +82,6 @@ static struct resource *msm_dss_get_res_byname(struct platform_device *pdev,
|
|||||||
|
|
||||||
return res;
|
return res;
|
||||||
} /* msm_dss_get_res_byname */
|
} /* msm_dss_get_res_byname */
|
||||||
EXPORT_SYMBOL(msm_dss_get_res_byname);
|
|
||||||
|
|
||||||
int msm_dss_ioremap_byname(struct platform_device *pdev,
|
int msm_dss_ioremap_byname(struct platform_device *pdev,
|
||||||
struct dss_io_data *io_data, const char *name)
|
struct dss_io_data *io_data, const char *name)
|
||||||
|
@@ -928,11 +928,7 @@ int sde_rsc_client_state_update(struct sde_rsc_client *caller_client,
|
|||||||
caller_client->crtc_id = crtc_id;
|
caller_client->crtc_id = crtc_id;
|
||||||
caller_client->current_state = state;
|
caller_client->current_state = state;
|
||||||
|
|
||||||
if (rsc->master_drm == NULL) {
|
if ((rsc->current_state == state) && !config) {
|
||||||
pr_err("invalid master component binding\n");
|
|
||||||
rc = -EINVAL;
|
|
||||||
goto end;
|
|
||||||
} else if ((rsc->current_state == state) && !config) {
|
|
||||||
pr_debug("no state change: %d\n", state);
|
pr_debug("no state change: %d\n", state);
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
@@ -1636,10 +1632,6 @@ static int sde_rsc_bind(struct device *dev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&rsc->client_lock);
|
|
||||||
rsc->master_drm = drm;
|
|
||||||
mutex_unlock(&rsc->client_lock);
|
|
||||||
|
|
||||||
sde_dbg_reg_register_base(SDE_RSC_DRV_DBG_NAME, rsc->drv_io.base,
|
sde_dbg_reg_register_base(SDE_RSC_DRV_DBG_NAME, rsc->drv_io.base,
|
||||||
rsc->drv_io.len);
|
rsc->drv_io.len);
|
||||||
sde_dbg_reg_register_base(SDE_RSC_WRAPPER_DBG_NAME,
|
sde_dbg_reg_register_base(SDE_RSC_WRAPPER_DBG_NAME,
|
||||||
@@ -1669,10 +1661,6 @@ static void sde_rsc_unbind(struct device *dev,
|
|||||||
pr_err("invalid display rsc\n");
|
pr_err("invalid display rsc\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_lock(&rsc->client_lock);
|
|
||||||
rsc->master_drm = NULL;
|
|
||||||
mutex_unlock(&rsc->client_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct component_ops sde_rsc_comp_ops = {
|
static const struct component_ops sde_rsc_comp_ops = {
|
||||||
@@ -1855,8 +1843,6 @@ static const struct of_device_id dt_match[] = {
|
|||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
|
|
||||||
MODULE_DEVICE_TABLE(of, dt_match);
|
|
||||||
|
|
||||||
static struct platform_driver sde_rsc_platform_driver = {
|
static struct platform_driver sde_rsc_platform_driver = {
|
||||||
.probe = sde_rsc_probe,
|
.probe = sde_rsc_probe,
|
||||||
.remove = sde_rsc_remove,
|
.remove = sde_rsc_remove,
|
||||||
@@ -1881,21 +1867,17 @@ static struct platform_driver sde_rsc_rpmh_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init sde_rsc_register(void)
|
void __init sde_rsc_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&sde_rsc_platform_driver);
|
platform_driver_register(&sde_rsc_platform_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit sde_rsc_unregister(void)
|
void __exit sde_rsc_unregister(void)
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&sde_rsc_platform_driver);
|
platform_driver_unregister(&sde_rsc_platform_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init sde_rsc_rpmh_register(void)
|
void __init sde_rsc_rpmh_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&sde_rsc_rpmh_driver);
|
platform_driver_register(&sde_rsc_rpmh_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(sde_rsc_rpmh_register);
|
|
||||||
module_init(sde_rsc_register);
|
|
||||||
module_exit(sde_rsc_unregister);
|
|
||||||
|
@@ -184,8 +184,6 @@ struct sde_rsc_bw_config {
|
|||||||
* mode_threshold_time_ns: time to wake TCS in mode-0, must be greater than
|
* mode_threshold_time_ns: time to wake TCS in mode-0, must be greater than
|
||||||
* backoff time
|
* backoff time
|
||||||
* time_slot_0_ns: time for sleep & wake TCS in mode-1
|
* time_slot_0_ns: time for sleep & wake TCS in mode-1
|
||||||
* master_drm: Primary client waits for vsync on this drm object based
|
|
||||||
* on crtc id
|
|
||||||
* rsc_vsync_wait: Refcount to indicate if we have to wait for the vsync.
|
* rsc_vsync_wait: Refcount to indicate if we have to wait for the vsync.
|
||||||
* rsc_vsync_waitq: Queue to wait for the vsync.
|
* rsc_vsync_waitq: Queue to wait for the vsync.
|
||||||
* bw_config: check sde_rsc_bw_config structure description.
|
* bw_config: check sde_rsc_bw_config structure description.
|
||||||
@@ -228,7 +226,6 @@ struct sde_rsc_priv {
|
|||||||
u32 mode_threshold_time_ns;
|
u32 mode_threshold_time_ns;
|
||||||
u32 time_slot_0_ns;
|
u32 time_slot_0_ns;
|
||||||
|
|
||||||
struct drm_device *master_drm;
|
|
||||||
atomic_t rsc_vsync_wait;
|
atomic_t rsc_vsync_wait;
|
||||||
wait_queue_head_t rsc_vsync_waitq;
|
wait_queue_head_t rsc_vsync_waitq;
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2015-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
#define pr_fmt(fmt) "%s:%d: " fmt, __func__, __LINE__
|
#define pr_fmt(fmt) "%s:%d: " fmt, __func__, __LINE__
|
||||||
|
|
||||||
@@ -3618,16 +3618,12 @@ static struct platform_driver rotator_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init sde_rotator_init_module(void)
|
void __init sde_rotator_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&rotator_driver);
|
platform_driver_register(&rotator_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit sde_rotator_exit_module(void)
|
void __exit sde_rotator_unregister(void)
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&rotator_driver);
|
platform_driver_unregister(&rotator_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
late_initcall(sde_rotator_init_module);
|
|
||||||
module_exit(sde_rotator_exit_module);
|
|
||||||
MODULE_DESCRIPTION("MSM SDE ROTATOR driver");
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __SDE_ROTATOR_INLINE_H__
|
#ifndef __SDE_ROTATOR_INLINE_H__
|
||||||
@@ -96,7 +96,7 @@ struct sde_rotator_inline_cmd {
|
|||||||
void *priv_handle;
|
void *priv_handle;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_MSM_SDE_ROTATOR)
|
#if IS_ENABLED(CONFIG_MSM_SDE_ROTATOR)
|
||||||
|
|
||||||
void *sde_rotator_inline_open(struct platform_device *pdev);
|
void *sde_rotator_inline_open(struct platform_device *pdev);
|
||||||
int sde_rotator_inline_get_dst_pixfmt(struct platform_device *pdev,
|
int sde_rotator_inline_get_dst_pixfmt(struct platform_device *pdev,
|
||||||
|
@@ -494,7 +494,6 @@ static const struct of_device_id sde_smmu_dt_match[] = {
|
|||||||
{ .compatible = SMMU_SDE_ROT_SEC, .data = &sde_rot_sec},
|
{ .compatible = SMMU_SDE_ROT_SEC, .data = &sde_rot_sec},
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, sde_smmu_dt_match);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sde_smmu_probe()
|
* sde_smmu_probe()
|
||||||
@@ -673,28 +672,12 @@ static struct platform_driver sde_smmu_driver = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int sde_smmu_register_driver(void)
|
void __init sde_rotator_smmu_driver_register(void)
|
||||||
{
|
{
|
||||||
return platform_driver_register(&sde_smmu_driver);
|
platform_driver_register(&sde_smmu_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init sde_smmu_driver_init(void)
|
void __exit sde_rotator_smmu_driver_unregister(void)
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = sde_smmu_register_driver();
|
|
||||||
if (ret)
|
|
||||||
SDEROT_ERR("sde_smmu_register_driver() failed!\n");
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
module_init(sde_smmu_driver_init);
|
|
||||||
|
|
||||||
static void __exit sde_smmu_driver_cleanup(void)
|
|
||||||
{
|
{
|
||||||
platform_driver_unregister(&sde_smmu_driver);
|
platform_driver_unregister(&sde_smmu_driver);
|
||||||
}
|
}
|
||||||
module_exit(sde_smmu_driver_cleanup);
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL v2");
|
|
||||||
MODULE_DESCRIPTION("SDE SMMU driver");
|
|
||||||
|
Reference in New Issue
Block a user