Merge "disp: msm: dp: Add support for USB3 GDSC vote from displayport driver"
This commit is contained in:
committed by
Gerrit - the friendly Code Review server
commit
2eada9cae3
@@ -81,6 +81,23 @@ static void dp_power_regulator_deinit(struct dp_power_private *power)
|
||||
}
|
||||
}
|
||||
|
||||
static void dp_power_phy_gdsc(struct dp_power *dp_power, bool on)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
if (IS_ERR_OR_NULL(dp_power->dp_phy_gdsc))
|
||||
return;
|
||||
|
||||
if (on)
|
||||
rc = regulator_enable(dp_power->dp_phy_gdsc);
|
||||
else
|
||||
rc = regulator_disable(dp_power->dp_phy_gdsc);
|
||||
|
||||
if (rc)
|
||||
DP_ERR("Fail to %s dp_phy_gdsc regulator ret =%d\n",
|
||||
on ? "enable" : "disable", rc);
|
||||
}
|
||||
|
||||
static int dp_power_regulator_ctrl(struct dp_power_private *power, bool enable)
|
||||
{
|
||||
int rc = 0, i = 0, j = 0;
|
||||
@@ -94,6 +111,8 @@ static int dp_power_regulator_ctrl(struct dp_power_private *power, bool enable)
|
||||
* on the link configuration.
|
||||
*/
|
||||
if (i == DP_PLL_PM) {
|
||||
/* DP GDSC vote is needed for new chipsets, define gdsc phandle if needed */
|
||||
dp_power_phy_gdsc(&power->dp_power, enable);
|
||||
DP_DEBUG("skipping: '%s' vregs for %s\n",
|
||||
enable ? "enable" : "disable",
|
||||
dp_parser_pm_name(i));
|
||||
@@ -822,6 +841,7 @@ struct dp_power *dp_power_get(struct dp_parser *parser, struct dp_pll *pll)
|
||||
int rc = 0;
|
||||
struct dp_power_private *power;
|
||||
struct dp_power *dp_power;
|
||||
struct device *dev;
|
||||
|
||||
if (!parser || !pll) {
|
||||
DP_ERR("invalid input\n");
|
||||
@@ -840,6 +860,7 @@ struct dp_power *dp_power_get(struct dp_parser *parser, struct dp_pll *pll)
|
||||
power->pdev = parser->pdev;
|
||||
|
||||
dp_power = &power->dp_power;
|
||||
dev = &power->pdev->dev;
|
||||
|
||||
dp_power->init = dp_power_init;
|
||||
dp_power->deinit = dp_power_deinit;
|
||||
@@ -852,6 +873,12 @@ struct dp_power *dp_power_get(struct dp_parser *parser, struct dp_pll *pll)
|
||||
dp_power->power_client_deinit = dp_power_client_deinit;
|
||||
dp_power->power_mmrm_init = dp_power_mmrm_init;
|
||||
|
||||
dp_power->dp_phy_gdsc = devm_regulator_get(dev, "dp_phy_gdsc");
|
||||
if (IS_ERR(dp_power->dp_phy_gdsc)) {
|
||||
dp_power->dp_phy_gdsc = NULL;
|
||||
DP_DEBUG("Optional GDSC regulator is missing\n");
|
||||
}
|
||||
|
||||
return dp_power;
|
||||
error:
|
||||
return ERR_PTR(rc);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -13,6 +14,7 @@
|
||||
/**
|
||||
* sruct dp_power - DisplayPort's power related data
|
||||
*
|
||||
* @dp_phy_gdsc: GDSC regulator
|
||||
* @init: initializes the regulators/core clocks/GPIOs/pinctrl
|
||||
* @deinit: turns off the regulators/core clocks/GPIOs/pinctrl
|
||||
* @clk_enable: enable/disable the DP clocks
|
||||
@@ -27,6 +29,7 @@
|
||||
struct dp_power {
|
||||
struct drm_device *drm_dev;
|
||||
struct sde_power_handle *phandle;
|
||||
struct regulator *dp_phy_gdsc;
|
||||
int (*init)(struct dp_power *power, bool flip);
|
||||
int (*deinit)(struct dp_power *power);
|
||||
int (*clk_enable)(struct dp_power *power, enum dp_pm_type pm_type,
|
||||
|
||||
Reference in New Issue
Block a user