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

Commit 750b51d2 authored by Ch Ganesh Kumar's avatar Ch Ganesh Kumar
Browse files

drm/msm/sde: add reg bus vote for histogram and AD



This change will add AHB vote for histogram and AD. This is
needed to access the histogram and AD registers in respective
histogram and AD read handler.

Change-Id: I2e99f8d34722cb0cf9c9516798b20641c1e1cb5a
Signed-off-by: default avatarCh Ganesh Kumar <chganesh@codeaurora.org>
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
parent c2aa9c2a
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -1639,6 +1639,9 @@ static void sde_cp_notify_ad_event(struct drm_crtc *crtc_drm, void *arg)
	struct sde_crtc *crtc;
	struct drm_event event;
	int i;
	struct msm_drm_private *priv;
	struct sde_kms *kms;
	int ret;

	crtc = to_sde_crtc(crtc_drm);
	num_mixers = crtc->num_mixers;
@@ -1655,9 +1658,25 @@ static void sde_cp_notify_ad_event(struct drm_crtc *crtc_drm, void *arg)
	if (!hw_dspp)
		return;

	kms = get_kms(crtc_drm);
	if (!kms || !kms->dev) {
		SDE_ERROR("invalid arg(s)\n");
		return;
	}

	priv = kms->dev->dev_private;
	ret = sde_power_resource_enable(&priv->phandle, kms->core_client, true);
	if (ret) {
		SDE_ERROR("failed to enable power resource %d\n", ret);
		SDE_EVT32(ret, SDE_EVTLOG_ERROR);
		return;
	}

	hw_dspp->ops.ad_read_intr_resp(hw_dspp, AD4_IN_OUT_BACKLIGHT,
			&input_bl, &output_bl);

	sde_power_resource_enable(&priv->phandle, kms->core_client,
					false);
	if (!input_bl || input_bl < output_bl)
		return;

@@ -1898,6 +1917,9 @@ static void sde_cp_notify_hist_event(struct drm_crtc *crtc_drm, void *arg)
	struct drm_event event;
	struct drm_msm_hist *hist_data;
	struct drm_msm_hist tmp_hist_data;
	struct msm_drm_private *priv;
	struct sde_kms *kms;
	int ret;
	u32 i, j;

	if (!crtc_drm) {
@@ -1914,6 +1936,20 @@ static void sde_cp_notify_hist_event(struct drm_crtc *crtc_drm, void *arg)
	if (!crtc->hist_blob)
		return;

	kms = get_kms(crtc_drm);
	if (!kms || !kms->dev) {
		SDE_ERROR("invalid arg(s)\n");
		return;
	}

	priv = kms->dev->dev_private;
	ret = sde_power_resource_enable(&priv->phandle, kms->core_client, true);
	if (ret) {
		SDE_ERROR("failed to enable power resource %d\n", ret);
		SDE_EVT32(ret, SDE_EVTLOG_ERROR);
		return;
	}

	/* read histogram data into blob */
	hist_data = (struct drm_msm_hist *)crtc->hist_blob->data;
	for (i = 0; i < crtc->num_mixers; i++) {
@@ -1921,6 +1957,8 @@ static void sde_cp_notify_hist_event(struct drm_crtc *crtc_drm, void *arg)
		if (!hw_dspp || !hw_dspp->ops.read_histogram) {
			DRM_ERROR("invalid dspp %pK or read_histogram func\n",
				hw_dspp);
			sde_power_resource_enable(&priv->phandle,
						kms->core_client, false);
			return;
		}
		if (!i) {
@@ -1933,6 +1971,8 @@ static void sde_cp_notify_hist_event(struct drm_crtc *crtc_drm, void *arg)
		}
	}

	sde_power_resource_enable(&priv->phandle, kms->core_client,
					false);
	/* send histogram event with blob id */
	event.length = sizeof(u32);
	event.type = DRM_EVENT_HISTOGRAM;