From patchwork Thu Apr 14 17:42:26 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jesse Barnes X-Patchwork-Id: 708521 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3EI9bSq011816 for ; Thu, 14 Apr 2011 18:10:02 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id F035C9F78A for ; Thu, 14 Apr 2011 11:09:36 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from lists.sourceforge.net (lists.sourceforge.net [216.34.181.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 3F6B59E8D1; Thu, 14 Apr 2011 11:09:27 -0700 (PDT) Received: from localhost ([127.0.0.1] helo=sfs-ml-2.v29.ch3.sourceforge.com) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.74) (envelope-from ) id 1QAQyk-0000cY-0S; Thu, 14 Apr 2011 18:09:18 +0000 Received: from sog-mx-1.v43.ch3.sourceforge.com ([172.29.43.191] helo=mx.sourceforge.net) by sfs-ml-2.v29.ch3.sourceforge.com with esmtp (Exim 4.74) (envelope-from ) id 1QAQyi-0000cR-GQ for dri-devel@lists.sourceforge.net; Thu, 14 Apr 2011 18:09:16 +0000 Received-SPF: pass (sog-mx-1.v43.ch3.sourceforge.com: domain of virtuousgeek.org designates 69.89.21.11 as permitted sender) client-ip=69.89.21.11; envelope-from=jbarnes@virtuousgeek.org; helo=cpoproxy1-pub.bluehost.com; Received: from cpoproxy1-pub.bluehost.com ([69.89.21.11]) by sog-mx-1.v43.ch3.sourceforge.com with smtp (Exim 4.74) id 1QAQyh-0001Eg-DK for dri-devel@lists.sourceforge.net; Thu, 14 Apr 2011 18:09:16 +0000 Received: (qmail 28305 invoked by uid 0); 14 Apr 2011 17:42:29 -0000 Received: from unknown (HELO box514.bluehost.com) (74.220.219.114) by cpoproxy1.bluehost.com with SMTP; 14 Apr 2011 17:42:29 -0000 Received: from [216.239.45.19] (helo=jbarnes-vaio.home) by box514.bluehost.com with esmtpsa (TLSv1:AES128-SHA:128) (Exim 4.69) (envelope-from ) id 1QAQYm-00085N-SR for dri-devel@lists.sourceforge.net; Thu, 14 Apr 2011 11:42:29 -0600 Date: Thu, 14 Apr 2011 10:42:26 -0700 From: Jesse Barnes To: dri-devel@lists.sourceforge.net Subject: [RFC] drm: emit change events when mode config changes Message-ID: <20110414104226.4ee49e06@jbarnes-vaio.home> X-Mailer: Claws Mail 3.7.8 (GTK+ 2.24.3; x86_64-pc-linux-gnu) Mime-Version: 1.0 X-Identified-User: {10642:box514.bluehost.com:virtuous:virtuousgeek.org} {sentby:smtp auth 216.239.45.19 authed with jbarnes@virtuousgeek.org} X-Spam-Score: -1.6 (-) X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, low trust [69.89.21.11 listed in list.dnswl.org] -1.5 SPF_CHECK_PASS SPF reports sender host as permitted sender for sender-domain -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1QAQyh-0001Eg-DK X-BeenThere: dri-devel@lists.sourceforge.net X-Mailman-Version: 2.1.9 Precedence: list X-BeenThere: dri-devel@lists.freedesktop.org List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Thu, 14 Apr 2011 18:10:02 +0000 (UTC) We've already seen that apps want to monitor the display config, and some (like upowerd) poll for changes since we don't provide a notification for general mode config changes, just hotplug events. So add a new drm event, with CHANGE=1 set in the event, to allow for it. Signed-off-by: Jesse Barnes ------------------------------------------------------------------------------ Benefiting from Server Virtualization: Beyond Initial Workload Consolidation -- Increasing the use of server virtualization is a top priority.Virtualization can reduce costs, simplify management, and improve application availability and disaster protection. Learn more about boosting the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev Reviewed-by: Adam Jackson diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 4c95b5f..174ee64 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -1589,6 +1589,8 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, set.fb = fb; ret = crtc->funcs->set_config(&set); + drm_sysfs_change_event(dev); + out: kfree(connector_set); mutex_unlock(&dev->mode_config.mutex); diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 9507204..df946d4 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -822,6 +822,8 @@ int drm_fb_helper_set_par(struct fb_info *info) return ret; } } + + drm_sysfs_change_event(dev); mutex_unlock(&dev->mode_config.mutex); if (fb_helper->delayed_hotplug) { diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c index 2eee8e0..fd3af31 100644 --- a/drivers/gpu/drm/drm_sysfs.c +++ b/drivers/gpu/drm/drm_sysfs.c @@ -467,9 +467,9 @@ EXPORT_SYMBOL(drm_sysfs_connector_remove); * drm_sysfs_hotplug_event - generate a DRM uevent * @dev: DRM device * - * Send a uevent for the DRM device specified by @dev. Currently we only - * set HOTPLUG=1 in the uevent environment, but this could be expanded to - * deal with other types of events. + * Send a uevent for the DRM device specified by @dev. Set HOTPLUG=1 in the + * event to indicate a display config change occurred, probably due to a + * display being added or removed. */ void drm_sysfs_hotplug_event(struct drm_device *dev) { @@ -483,6 +483,24 @@ void drm_sysfs_hotplug_event(struct drm_device *dev) EXPORT_SYMBOL(drm_sysfs_hotplug_event); /** + * drm_sysfs_change_event - generate a DRM uevent indicating a display config change + * @dev: DRM device + * + * Send a uevent for the DRM device specified by @dev. Set CHANGE=1 to + * indicate that a userspace initiated display configuration change occurred. + */ +void drm_sysfs_change_event(struct drm_device *dev) +{ + char *event_string = "CHANGE=1"; + char *envp[] = { event_string, NULL }; + + DRM_DEBUG("generating hotplug event\n"); + + kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, envp); +} +EXPORT_SYMBOL(drm_sysfs_change_event); + +/** * drm_sysfs_device_add - adds a class device to sysfs for a character driver * @dev: DRM device to be added * @head: DRM head in question diff --git a/include/drm/drmP.h b/include/drm/drmP.h index ad5770f..3aff8fc 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -1506,6 +1506,7 @@ extern struct class *drm_sysfs_create(struct module *owner, char *name); extern void drm_sysfs_destroy(void); extern int drm_sysfs_device_add(struct drm_minor *minor); extern void drm_sysfs_hotplug_event(struct drm_device *dev); +extern void drm_sysfs_change_event(struct drm_device *dev); extern void drm_sysfs_device_remove(struct drm_minor *minor); extern char *drm_get_connector_status_name(enum drm_connector_status status); extern int drm_sysfs_connector_add(struct drm_connector *connector);