From patchwork Thu Jan 2 21:28:14 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Russell King X-Patchwork-Id: 3431551 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E5E7BC02DC for ; Fri, 3 Jan 2014 15:22:20 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C3E2C2010C for ; Fri, 3 Jan 2014 15:22:19 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id D9C6F20108 for ; Fri, 3 Jan 2014 15:22:18 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9D2C8FAA09; Fri, 3 Jan 2014 07:21:58 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from pandora.arm.linux.org.uk (gw-1.arm.linux.org.uk [78.32.30.217]) by gabe.freedesktop.org (Postfix) with ESMTP id 78E65FB77B for ; Thu, 2 Jan 2014 13:33:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=arm.linux.org.uk; s=pandora; h=Date:Sender:Message-Id:Subject:Cc:To:From:References:In-Reply-To; bh=aYNpPpMH7luBglyOxJwBiNVF0Q0oTyCNyFaPlmd0KF8=; b=OUWox1TRhqQx37G57M5CJamVO9Z4OLXn8o1jWl5ip9YTEbANRZ/IY96A7vfJcSWciiWkWHvXxYicMmZ5QYgYDOe0Ja5MJK7VIPfiffAaRxN2wpG6bC0q7voNvO2oYFC4bomN3WV8q/X1pguSS231THbdzqVydKxoTX6h1mPuTZ4=; Received: from [fd8f:7570:feb6:1:222:68ff:fe15:37dd] (port=50856 helo=rmk-PC.arm.linux.org.uk) by pandora.arm.linux.org.uk with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1VypoM-0004B0-HB; Thu, 02 Jan 2014 21:28:14 +0000 Received: from rmk by rmk-PC.arm.linux.org.uk with local (Exim 4.76) (envelope-from ) id 1VypoM-0007FS-1L; Thu, 02 Jan 2014 21:28:14 +0000 In-Reply-To: <20140102212528.GD7383@n2100.arm.linux.org.uk> References: <20140102212528.GD7383@n2100.arm.linux.org.uk> From: Russell King To: David Airlie , Greg Kroah-Hartman , Sascha Hauer , Shawn Guo Subject: [PATCH RFC 29/46] imx-drm: delay publishing sysfs connector entries Message-Id: Date: Thu, 02 Jan 2014 21:28:14 +0000 X-Mailman-Approved-At: Fri, 03 Jan 2014 07:21:56 -0800 Cc: devel@driverdev.osuosl.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Delay publishing sysfs connector entries until all components have initialised. This reduces the probability of generating false hotplug events when we're uncertain whether the driver can fully initialise. This also pulls that code out of the individual imx-drm connector drivers. Signed-off-by: Russell King --- drivers/staging/imx-drm/imx-drm-core.c | 22 +++++++++++++++++++++- 1 files changed, 21 insertions(+), 1 deletions(-) diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c index 8ece15944569..d5bf4a4646a3 100644 --- a/drivers/staging/imx-drm/imx-drm-core.c +++ b/drivers/staging/imx-drm/imx-drm-core.c @@ -355,7 +355,7 @@ static int imx_drm_connector_register( imx_drm_connector->connector->connector_type); drm_mode_group_reinit(imxdrm->drm); - return drm_sysfs_connector_add(imx_drm_connector->connector); + return 0; } /* @@ -379,6 +379,7 @@ static void imx_drm_connector_unregister( static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags) { struct imx_drm_device *imxdrm = __imx_drm_device(); + struct drm_connector *connector; int ret; imxdrm->drm = drm; @@ -431,8 +432,27 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags) ret = component_bind_all(drm->dev, drm); if (ret) goto err_relock; + + /* + * All components are now added, we can publish the connector sysfs + * entries to userspace. This will generate hotplug events and so + * userspace will expect to be able to access DRM at this point. + */ + list_for_each_entry(connector, &drm->mode_config.connector_list, head) { + ret = drm_sysfs_connector_add(connector); + if (ret) { + dev_err(drm->dev, + "[CONNECTOR:%d:%s] drm_sysfs_connector_add failed: %d\n", + connector->base.id, + drm_get_connector_name(connector), ret); + goto err_unbind; + } + } + return 0; +err_unbind: + component_unbind_all(drm->dev, drm); err_relock: mutex_lock(&imxdrm->mutex); err_vblank: