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

Commit e5b8aadd 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 for a custom hotplug event"

parents f8c31265 0aedc43f
Loading
Loading
Loading
Loading
+58 −1
Original line number Diff line number Diff line
@@ -26,11 +26,68 @@
#include "msm_gem.h"
#include "msm_mmu.h"

static void msm_drm_helper_hotplug_event(struct drm_device *dev)
{
	struct drm_connector *connector;
	char *event_string;
	char const *connector_name;
	char *envp[2];

	if (!dev) {
		DRM_ERROR("hotplug_event failed, invalid input\n");
		return;
	}

	if (!dev->mode_config.poll_enabled)
		return;

	event_string = kzalloc(SZ_4K, GFP_KERNEL);
	if (!event_string) {
		DRM_ERROR("failed to allocate event string\n");
		return;
	}

	mutex_lock(&dev->mode_config.mutex);
	drm_for_each_connector(connector, dev) {
		/* Only handle HPD capable connectors. */
		if (!(connector->polled & DRM_CONNECTOR_POLL_HPD))
			continue;

		connector->status = connector->funcs->detect(connector, false);

		if (connector->name)
			connector_name = connector->name;
		else
			connector_name = "unknown";

		snprintf(event_string, SZ_4K, "name=%s status=%s\n",
			connector_name,
			drm_get_connector_status_name(connector->status));
		DRM_DEBUG("generating hotplug event [%s]\n", event_string);
		envp[0] = event_string;
		envp[1] = NULL;
		kobject_uevent_env(&dev->primary->kdev->kobj, KOBJ_CHANGE,
				envp);
	}
	mutex_unlock(&dev->mode_config.mutex);
	kfree(event_string);
}

static void msm_fb_output_poll_changed(struct drm_device *dev)
{
	struct msm_drm_private *priv = dev->dev_private;
	struct msm_drm_private *priv = NULL;

	if (!dev) {
		DRM_ERROR("output_poll_changed failed, invalid input\n");
		return;
	}

	priv = dev->dev_private;

	if (priv->fbdev)
		drm_fb_helper_hotplug_event(priv->fbdev);
	else
		msm_drm_helper_hotplug_event(dev);
}

static const struct drm_mode_config_funcs mode_config_funcs = {