Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf9a25a8 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: sde: support rotator power enable through rsc" into msm-4.9

parents 9f33bdfc 1c5b3b0f
Loading
Loading
Loading
Loading
+29 −5
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
#include <linux/msm-bus-board.h>
#include <linux/regulator/consumer.h>
#include <linux/dma-direction.h>
#include <linux/sde_rsc.h>
#include <soc/qcom/scm.h>
#include <soc/qcom/secure_buffer.h>
#include <asm/cacheflush.h>
@@ -318,6 +319,11 @@ static void sde_rotator_footswitch_ctrl(struct sde_rot_mgr *mgr, bool on)
	if (mgr->ops_hw_pre_pmevent)
		mgr->ops_hw_pre_pmevent(mgr, on);

	if (mgr->rsc_client)
		ret = sde_rsc_client_state_update(mgr->rsc_client,
				on ? SDE_RSC_CLK_STATE : SDE_RSC_IDLE_STATE,
				NULL, -1);
	else
		ret = sde_rot_enable_vreg(mgr->module_power.vreg_config,
			mgr->module_power.num_vreg, on);
	if (ret) {
@@ -2780,9 +2786,21 @@ static int sde_rotator_res_init(struct platform_device *pdev,
{
	int ret;

	ret = sde_rotator_get_dt_vreg_data(&pdev->dev, &mgr->module_power);
	mgr->rsc_client = sde_rsc_client_create(
			SDE_RSC_INDEX, "sde_rotator_core", false);
	if (IS_ERR(mgr->rsc_client)) {
		ret = PTR_ERR(mgr->rsc_client);
		pr_err("rsc client create returned %d\n", ret);
		mgr->rsc_client = NULL;
		return ret;
	}

	if (!mgr->rsc_client) {
		ret = sde_rotator_get_dt_vreg_data(
				&pdev->dev, &mgr->module_power);
		if (ret)
			return ret;
	}

	ret = sde_rotator_register_clk(pdev, mgr);
	if (ret)
@@ -2802,9 +2820,15 @@ static void sde_rotator_res_destroy(struct sde_rot_mgr *mgr)
{
	struct platform_device *pdev = mgr->pdev;

	sde_rotator_put_dt_vreg_data(&pdev->dev, &mgr->module_power);
	sde_rotator_unregister_clk(mgr);
	sde_rotator_bus_scale_unregister(mgr);

	if (mgr->rsc_client) {
		sde_rsc_client_destroy(mgr->rsc_client);
		mgr->rsc_client = NULL;
	} else {
		sde_rotator_put_dt_vreg_data(&pdev->dev, &mgr->module_power);
	}
}

int sde_rotator_core_init(struct sde_rot_mgr **pmgr,
+3 −0
Original line number Diff line number Diff line
@@ -373,6 +373,7 @@ struct sde_rot_bus_data_type {
 * @reg_bus: register bus configuration state
 * @module_power: power/clock configuration state
 * @regulator_enable: true if foot switch is enabled; false otherwise
 * @rsc_client: pointer to rsc client handle
 * @res_ref_cnt: reference count of how many times resource is requested
 * @rot_enable_clk_cnt: reference count of how many times clock is requested
 * @rot_clk: array of rotator and periphery clocks
@@ -417,6 +418,8 @@ struct sde_rot_mgr {
	struct sde_module_power module_power;
	bool regulator_enable;

	struct sde_rsc_client *rsc_client;

	int res_ref_cnt;
	int rot_enable_clk_cnt;
	struct sde_rot_clk *rot_clk;