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

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

Merge "drm: msm: Add support AD4 custom event notifications" into msm-4.9

parents 503bfaf7 84b4f670
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -1271,22 +1271,20 @@ static int msm_ioctl_deregister_event(struct drm_device *dev, void *data,
	return ret;
}

void msm_send_crtc_notification(struct drm_crtc *crtc,
				struct drm_event *event, u8 *payload)
void msm_mode_object_event_nofity(struct drm_mode_object *obj,
		struct drm_device *dev, struct drm_event *event, u8 *payload)
{
	struct drm_device *dev = NULL;
	struct msm_drm_private *priv = NULL;
	unsigned long flags;
	struct msm_drm_event *notify, *node;
	int len = 0, ret;

	if (!crtc || !event || !event->length || !payload) {
		DRM_ERROR("err param crtc %pK event %pK len %d payload %pK\n",
			crtc, event, ((event) ? (event->length) : -1),
	if (!obj || !event || !event->length || !payload) {
		DRM_ERROR("err param obj %pK event %pK len %d payload %pK\n",
			obj, event, ((event) ? (event->length) : -1),
			payload);
		return;
	}
	dev = crtc->dev;
	priv = (dev) ? dev->dev_private : NULL;
	if (!dev || !priv) {
		DRM_ERROR("invalid dev %pK priv %pK\n", dev, priv);
@@ -1296,7 +1294,7 @@ void msm_send_crtc_notification(struct drm_crtc *crtc,
	spin_lock_irqsave(&dev->event_lock, flags);
	list_for_each_entry(node, &priv->client_event_list, base.link) {
		if (node->event.type != event->type ||
			crtc->base.id != node->info.object_id)
			obj->id != node->info.object_id)
			continue;
		len = event->length + sizeof(struct drm_msm_event_resp);
		if (node->base.file_priv->event_space < len) {
+5 −4
Original line number Diff line number Diff line
@@ -710,13 +710,14 @@ enum msm_dsi_encoder_id {
};

/* *
 * msm_send_crtc_notification - notify user-space clients of crtc events.
 * @crtc: crtc that is generating the event.
 * msm_mode_object_event_notify - notify user-space clients of drm object
 *                                events.
 * @obj: mode object (crtc/connector) that is generating the event.
 * @event: event that needs to be notified.
 * @payload: payload for the event.
 */
void msm_send_crtc_notification(struct drm_crtc *crtc,
		struct drm_event *event, u8 *payload);
void msm_mode_object_event_nofity(struct drm_mode_object *obj,
		struct drm_device *dev, struct drm_event *event, u8 *payload);
#ifdef CONFIG_DRM_MSM_DSI
void __init msm_dsi_register(void);
void __exit msm_dsi_unregister(void);
+2 −1
Original line number Diff line number Diff line
@@ -1357,7 +1357,8 @@ static void sde_cp_notify_ad_event(struct drm_crtc *crtc_drm, void *arg)
	hw_dspp->ops.ad_read_intr_resp(hw_dspp, AD4_BACKLIGHT, &bl);
	event.length = sizeof(u32);
	event.type = DRM_EVENT_AD_BACKLIGHT;
	msm_send_crtc_notification(&crtc->base, &event, (u8 *)&bl);
	msm_mode_object_event_nofity(&crtc_drm->base, crtc_drm->dev,
			&event, (u8 *)&bl);
}

int sde_cp_ad_interrupt(struct drm_crtc *crtc_drm, bool en,
+17 −2
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
	struct dsi_display *display;
	struct sde_connector *c_conn;
	int bl_lvl;
	struct drm_event event;

	brightness = bd->props.brightness;

@@ -79,8 +80,13 @@ static int sde_backlight_device_update_status(struct backlight_device *bd)
	if (!bl_lvl && brightness)
		bl_lvl = 1;

	if (c_conn->ops.set_backlight)
	if (c_conn->ops.set_backlight) {
		event.type = DRM_EVENT_SYS_BACKLIGHT;
		event.length = sizeof(u32);
		msm_mode_object_event_nofity(&c_conn->base.base,
				c_conn->base.dev, &event, (u8 *)&brightness);
		c_conn->ops.set_backlight(c_conn->display, bl_lvl);
	}

	return 0;
}
@@ -1165,5 +1171,14 @@ struct drm_connector *sde_connector_init(struct drm_device *dev,
int sde_connector_register_custom_event(struct sde_kms *kms,
		struct drm_connector *conn_drm, u32 event, bool val)
{
	return -EINVAL;
	int ret = -EINVAL;

	switch (event) {
	case DRM_EVENT_SYS_BACKLIGHT:
		ret = 0;
		break;
	default:
		break;
	}
	return ret;
}
+22 −4
Original line number Diff line number Diff line
@@ -51,8 +51,12 @@ struct sde_crtc_custom_events {
			struct sde_irq_callback *irq);
};

static int sde_crtc_power_interrupt_handler(struct drm_crtc *crtc_drm,
	bool en, struct sde_irq_callback *ad_irq);

static struct sde_crtc_custom_events custom_events[] = {
	{DRM_EVENT_AD_BACKLIGHT, sde_cp_ad_interrupt}
	{DRM_EVENT_AD_BACKLIGHT, sde_cp_ad_interrupt},
	{DRM_EVENT_CRTC_POWER, sde_crtc_power_interrupt_handler}
};

/* default input fence timeout, in ms */
@@ -2022,6 +2026,8 @@ static void _sde_crtc_set_suspend(struct drm_crtc *crtc, bool enable)
	struct sde_crtc *sde_crtc;
	struct msm_drm_private *priv;
	struct sde_kms *sde_kms;
	struct drm_event event;
	u32 power_on;

	if (!crtc || !crtc->dev || !crtc->dev->dev_private) {
		SDE_ERROR("invalid crtc\n");
@@ -2040,13 +2046,18 @@ static void _sde_crtc_set_suspend(struct drm_crtc *crtc, bool enable)

	mutex_lock(&sde_crtc->crtc_lock);

	event.type = DRM_EVENT_CRTC_POWER;
	event.length = sizeof(u32);
	/*
	 * Update CP on suspend/resume transitions
	 */
	if (enable && !sde_crtc->suspend)
	if (enable && !sde_crtc->suspend) {
		sde_cp_crtc_suspend(crtc);
	else if (!enable && sde_crtc->suspend)
		power_on = 0;
	} else if (!enable && sde_crtc->suspend) {
		sde_cp_crtc_resume(crtc);
		power_on = 1;
	}

	/*
	 * If the vblank refcount != 0, release a power reference on suspend
@@ -2059,7 +2070,8 @@ static void _sde_crtc_set_suspend(struct drm_crtc *crtc, bool enable)
		_sde_crtc_vblank_enable_nolock(sde_crtc, !enable);

	sde_crtc->suspend = enable;

	msm_mode_object_event_nofity(&crtc->base, crtc->dev, &event,
			(u8 *)&power_on);
	mutex_unlock(&sde_crtc->crtc_lock);
}

@@ -3620,3 +3632,9 @@ int sde_crtc_register_custom_event(struct sde_kms *kms,

	return ret;
}

static int sde_crtc_power_interrupt_handler(struct drm_crtc *crtc_drm,
	bool en, struct sde_irq_callback *irq)
{
	return 0;
}
Loading