From patchwork Fri Dec 10 11:17:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695587 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 36861C433EF for ; Fri, 10 Dec 2021 11:19:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=n4sfRVW2nlC7prQZpa0pvY1yDPeVL1F3FokFZ34qpL4=; b=kOyd4SceUjLO01 6I+1F3vr4upuKTeA6CPhh4UTFCiykrCTgiln/dRqXzn0kr2QjUgcY4ihRS4muLMCJxV6Ch+8KeeH6 kXEF77/5jIPuXtnzwmuZqk5rkur28SbVVZt2f9Nuvekl+M2mlFv+RRzgx7iZg0WV8T9fMpwCFBtQE aw6r94tws0ElC3UVxHJKHdXkWdMSH1YfR4YLlpZdpXLkJq52b45wz8gYUM0h33DgEK43AY2zwIepS XPmZRHSXzDbS5IgOyJke5WvexLWVloTLprD2RHiln92VO++hEC57um20B87qmPWA3YfklLpAHufo1 6tUI4b/o9LFyA3Wfv/uA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduJ-001c7E-0j; Fri, 10 Dec 2021 11:17:43 +0000 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvdu6-001c44-JH for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:32 +0000 Received: by mail-pg1-x532.google.com with SMTP id l18so3089769pgj.9 for ; Fri, 10 Dec 2021 03:17:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Wv27UtE1e1W7hQoof9oQU8Yg5PSkgE+pRTTj9nNNXMw=; b=DGYyqvxViMyJ57F2MEaNKWduCTDgDcQ24jeBymdCWZj8fC6PBTKs1qk5xRQYi/+PQ9 TjwNF/szUkRREvTA0JjR3xUQklpCmzXeCEnxQhYd+icg2XukZMblNvf/DhvS1UbbQ38V nyMxkPra2jVgC1vVDOhMp63ST1WIYYt8ohwIY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Wv27UtE1e1W7hQoof9oQU8Yg5PSkgE+pRTTj9nNNXMw=; b=k7p0BSSzrn+51nf0V5BtLrji5alY5IU6snZOfD2ExecTbF2fqV0hUlJwKh5t2g31sB l5AVWvvvk0uYTs8K+anXwD89YRCfllbmkHsriTpnfUfuKsBWMfqPzq971rJo0G2F/oWV 6dFCsMmoVzp7PXT/2Ba57+2sUgLOoYdQqhnRLEPNmErMYwoJRU+7vbDTAV34QCKtqIrz GED3S3R0xLWA6S7sLoFq71owUOxZrm9IizNMDQ4v9sEpYm2YJd1wQX1NHrYuOqjOwbJl 1rQLOK5LM6KP2XXjcRSBnft92k4qiChYCRRLLshySniUU8RhUw4LqyV42h1+kXAXMWgW cpug== X-Gm-Message-State: AOAM530+Q0vlO/r/QC7Fq8et/V8fI8pZTFk/KIVSWEB0l0cbh/Q4qpr9 vw/3ylQ1nKbf2TYU4cvBVh+d8Q== X-Google-Smtp-Source: ABdhPJyYb/+GuVLQfRhxx8RPWx20aoxhK99fRYN3KRqEq3MOSkKa1sF0FOttaXa+kAYHk+y2n4HNjw== X-Received: by 2002:a63:1413:: with SMTP id u19mr39058934pgl.109.1639135047001; Fri, 10 Dec 2021 03:17:27 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:26 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [PATCH v6 1/6] drm: sun4i: dsi: Drop DRM bind race with bridge attach Date: Fri, 10 Dec 2021 16:47:06 +0530 Message-Id: <20211210111711.2072660-2-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031730_648319_844CFF3C X-CRM114-Status: GOOD ( 19.20 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Existing host driver will keep looking for DRM pointer in sun6i_dsi_attach and defers even if the particular DSI device is found for the first time. Meanwhile it triggers the bind callback and gets the DRM pointer and then continues the sun6i_dsi_attach. This makes a deadlock situation if sun6i_dsi_attach is trying to find the bridge. If interface bridge is trying to call host attach, then host sun6i_dsi_attach is trying to find bridge and defers the interface bridge even if it found the bridge as bind callback does not complete at the movement. So, this sun6i_dsi_attach defers interface bridge and triggers the bind callback and tries to attach the bridge with a bridge pointer which is not available at the moment. Eventually these callbacks are triggered recursively, as sun6i_dsi_attach defers interface bridge and bind callback defers sun6i_dsi_attach due to invalid bridge ponter. This patch prevents this situation by probing all DSI devices on the pipeline first and then triggers the bind callback by dropping exing DRM binding logic. Signed-off-by: Jagan Teki --- Changes for v6: - none Changes for v5: - new patch drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 10 +--------- drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h | 1 - 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c index 527c7b2474da..4bdcce8f1d84 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c @@ -967,14 +967,10 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host, if (IS_ERR(panel)) return PTR_ERR(panel); - if (!dsi->drm || !dsi->drm->registered) - return -EPROBE_DEFER; dsi->panel = panel; dsi->device = device; - drm_kms_helper_hotplug_event(dsi->drm); - dev_info(host->dev, "Attached device %s\n", device->name); return 0; @@ -988,8 +984,6 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host, dsi->panel = NULL; dsi->device = NULL; - drm_kms_helper_hotplug_event(dsi->drm); - return 0; } @@ -1077,8 +1071,6 @@ static int sun6i_dsi_bind(struct device *dev, struct device *master, drm_connector_attach_encoder(&dsi->connector, &dsi->encoder); - dsi->drm = drm; - return 0; err_cleanup_connector: @@ -1091,7 +1083,7 @@ static void sun6i_dsi_unbind(struct device *dev, struct device *master, { struct sun6i_dsi *dsi = dev_get_drvdata(dev); - dsi->drm = NULL; + drm_encoder_cleanup(&dsi->encoder); } static const struct component_ops sun6i_dsi_ops = { diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h index c863900ae3b4..61e88ea6044d 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h @@ -29,7 +29,6 @@ struct sun6i_dsi { struct device *dev; struct mipi_dsi_device *device; - struct drm_device *drm; struct drm_panel *panel; }; From patchwork Fri Dec 10 11:17:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695588 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3A34AC433F5 for ; Fri, 10 Dec 2021 11:19:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tlfQbOfBYBE2ldUgk1l+xRVYNd2D30Oad0sirHDvMc4=; b=GDWoOdYgrAaJoH /Db2IJMWgM2Y5VpFmv5Xddli4pyV7szfb2Jn5s6eau/3aUWL9MJCxrhFH6L/r+AVzh21F8gYsAliL +DBITil1Le0r4Cawmu7P4kyw4CLpnUMeBdear/JlBjqFAF1YPhOQBpRBMm/eiz9LzMfXNOWNeEKJI MGV5ZOQmN4hqwuWMlZ/uI+Z7KZiFGeNaFKLPfRFN4ujCjCNTpwwDg7wteUQ3TQiT06EiCedNc6Pwp t4495GA7CIPQ7AyidyDl8KF2FiVYgxTs+wATQQL3n/mv6lVG4ReG1z5WJEA5/ZTim/2GmTilvu8C9 zCj9xiP3D+dS7QIU5uYQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduV-001cCM-VK; Fri, 10 Dec 2021 11:17:56 +0000 Received: from mail-pj1-x1029.google.com ([2607:f8b0:4864:20::1029]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduC-001c5r-Se for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:38 +0000 Received: by mail-pj1-x1029.google.com with SMTP id np3so6603686pjb.4 for ; Fri, 10 Dec 2021 03:17:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TqiplFeVk+BY4Qw9hiZLgYutFh3HymB4iR0Knju+k4M=; b=hc5MSWMSmWihwCW9f7LVkiPvI2cAZobPX13gbbARWCsv+yFWJb9+byA455H+n0HLEu zJCHuzFurAX3JI5eChIJY4GmqkbUfsTnPf5l7jPAwfpHbeoGFAPQgNHFsjIEHQ4wk9R1 rQEXYZXYddbgHX3NIMH2vzzaAQzZ3NH3uqPYY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TqiplFeVk+BY4Qw9hiZLgYutFh3HymB4iR0Knju+k4M=; b=rBl08Ox4x1MXau4+HuMee7wR1h/QlQVGw4nN82kjUBfms/xLTy76MrPZGzBkQbovX6 va2nfb3XbWQfIzcunvxPEqtb05FnoEmFagSmVgGrqllSNB8gmLnO/bdFDB2uaQkXVW0D rkcOH6NUjtXqXV8nMyd5CuHj1Gv0JA9QyIsAI2dee26vr5B2AO92ovM7eDDG1HrY/aDy 7EsuEf0xVHptRpy+ujZNZu5XXUBHUAd7UfaQDRAMEELoz18jZUBUBm715K3wWUs+9pa+ d8NwC99junfwdHBoQb/B2L3WETQE0+HmuuoWU5VaP2KjQYIwHvTXDRhAMKZEzZij8xnp W1zA== X-Gm-Message-State: AOAM530VWfQliqgLzFJueu+Lv1oE8JvK4pi4kArVWaHUrFD6VAwuys0P FhrSozi4wPh7tTiRMyRZDoke4g== X-Google-Smtp-Source: ABdhPJxbXk+Y+AkJpt/at6ihAaxF1I+qlvCRxQFcPf0bHCTVmGkPmNLdWe08qUGGXgwj8VMpqUh/TA== X-Received: by 2002:a17:90b:4ace:: with SMTP id mh14mr23232501pjb.164.1639135055791; Fri, 10 Dec 2021 03:17:35 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:35 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [PATCH v6 2/6] drm: sun4i: dsi: Add component only once DSI device attached Date: Fri, 10 Dec 2021 16:47:07 +0530 Message-Id: <20211210111711.2072660-3-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031736_963415_D6507BD3 X-CRM114-Status: GOOD ( 20.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Having component_add for running all drm bind callbacks returns error or unbound due to chain of DSI devices connected across bridge topology on a display pipeline. In a typical bridge oriented display pipeline where the host is connected to the bridge converter and that indeed connected to a panel. DRM => SUN6I DSI Host => Chipone ICN6211 => BananaPi Panel The bridge converter is looking for a panel to probe first and then attach the host. The host attach is looking for a bridge converter to probe and preserve bridge pointer, at this movement the host is trying to bind the all callbacks and one of the bind callback in the DSI host is trying to find the bridge using the bridge pointer in sun6i_dsi_attach call. chipone_probe().start drm_of_find_panel_or_bridge mipi_dsi_attach sun6i_dsi_attach drm_of_find_panel_or_bridge chipone_probe().done sun6i_dsi_probe().start mipi_dsi_host_register component_add sun6i_dsi_probe().done However, the movement when panel defers the probe, will make the bridge converter defer the host attach call which eventually found a NULL bridge pointer during DSI component bind callback. So, in order to prevent this scenario of binding invalid bridge, wait for DSI devices on the pipeline to probe first and start the binding process by moving component_add in host probe to attach call. chipone_probe().start drm_of_find_panel_or_bridge mipi_dsi_attach sun6i_dsi_attach drm_of_find_panel_or_bridge component_add chipone_probe().done sun6i_dsi_probe().start mipi_dsi_host_register sun6i_dsi_probe().done Signed-off-by: Jagan Teki --- Changes for v6: - none Changes for v5: - new patch drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 120 +++++++++++++------------ 1 file changed, 61 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c index 4bdcce8f1d84..9cf91dcac3f2 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c @@ -959,11 +959,63 @@ static int sun6i_dsi_dcs_read(struct sun6i_dsi *dsi, return 1; } +static int sun6i_dsi_bind(struct device *dev, struct device *master, + void *data) +{ + struct drm_device *drm = data; + struct sun6i_dsi *dsi = dev_get_drvdata(dev); + int ret; + + drm_encoder_helper_add(&dsi->encoder, + &sun6i_dsi_enc_helper_funcs); + ret = drm_simple_encoder_init(drm, &dsi->encoder, + DRM_MODE_ENCODER_DSI); + if (ret) { + dev_err(dsi->dev, "Couldn't initialise the DSI encoder\n"); + return ret; + } + dsi->encoder.possible_crtcs = BIT(0); + + drm_connector_helper_add(&dsi->connector, + &sun6i_dsi_connector_helper_funcs); + ret = drm_connector_init(drm, &dsi->connector, + &sun6i_dsi_connector_funcs, + DRM_MODE_CONNECTOR_DSI); + if (ret) { + dev_err(dsi->dev, + "Couldn't initialise the DSI connector\n"); + goto err_cleanup_connector; + } + + drm_connector_attach_encoder(&dsi->connector, &dsi->encoder); + + return 0; + +err_cleanup_connector: + drm_encoder_cleanup(&dsi->encoder); + return ret; +} + +static void sun6i_dsi_unbind(struct device *dev, struct device *master, + void *data) +{ + struct sun6i_dsi *dsi = dev_get_drvdata(dev); + + drm_encoder_cleanup(&dsi->encoder); +} + +static const struct component_ops sun6i_dsi_ops = { + .bind = sun6i_dsi_bind, + .unbind = sun6i_dsi_unbind, +}; + static int sun6i_dsi_attach(struct mipi_dsi_host *host, struct mipi_dsi_device *device) { struct sun6i_dsi *dsi = host_to_sun6i_dsi(host); struct drm_panel *panel = of_drm_find_panel(device->dev.of_node); + struct device *dev = dsi->dev; + int ret; if (IS_ERR(panel)) return PTR_ERR(panel); @@ -973,6 +1025,13 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host, dev_info(host->dev, "Attached device %s\n", device->name); + ret = component_add(dev, &sun6i_dsi_ops); + if (ret) { + dev_err(dev, "Couldn't register our component\n"); + mipi_dsi_host_unregister(&dsi->host); + return ret; + } + return 0; } @@ -984,6 +1043,8 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host, dsi->panel = NULL; dsi->device = NULL; + component_del(dsi->dev, &sun6i_dsi_ops); + return 0; } @@ -1041,56 +1102,6 @@ static const struct regmap_config sun6i_dsi_regmap_config = { .name = "mipi-dsi", }; -static int sun6i_dsi_bind(struct device *dev, struct device *master, - void *data) -{ - struct drm_device *drm = data; - struct sun6i_dsi *dsi = dev_get_drvdata(dev); - int ret; - - drm_encoder_helper_add(&dsi->encoder, - &sun6i_dsi_enc_helper_funcs); - ret = drm_simple_encoder_init(drm, &dsi->encoder, - DRM_MODE_ENCODER_DSI); - if (ret) { - dev_err(dsi->dev, "Couldn't initialise the DSI encoder\n"); - return ret; - } - dsi->encoder.possible_crtcs = BIT(0); - - drm_connector_helper_add(&dsi->connector, - &sun6i_dsi_connector_helper_funcs); - ret = drm_connector_init(drm, &dsi->connector, - &sun6i_dsi_connector_funcs, - DRM_MODE_CONNECTOR_DSI); - if (ret) { - dev_err(dsi->dev, - "Couldn't initialise the DSI connector\n"); - goto err_cleanup_connector; - } - - drm_connector_attach_encoder(&dsi->connector, &dsi->encoder); - - return 0; - -err_cleanup_connector: - drm_encoder_cleanup(&dsi->encoder); - return ret; -} - -static void sun6i_dsi_unbind(struct device *dev, struct device *master, - void *data) -{ - struct sun6i_dsi *dsi = dev_get_drvdata(dev); - - drm_encoder_cleanup(&dsi->encoder); -} - -static const struct component_ops sun6i_dsi_ops = { - .bind = sun6i_dsi_bind, - .unbind = sun6i_dsi_unbind, -}; - static int sun6i_dsi_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -1172,16 +1183,8 @@ static int sun6i_dsi_probe(struct platform_device *pdev) goto err_unprotect_clk; } - ret = component_add(&pdev->dev, &sun6i_dsi_ops); - if (ret) { - dev_err(dev, "Couldn't register our component\n"); - goto err_remove_dsi_host; - } - return 0; -err_remove_dsi_host: - mipi_dsi_host_unregister(&dsi->host); err_unprotect_clk: clk_rate_exclusive_put(dsi->mod_clk); err_attach_clk: @@ -1195,7 +1198,6 @@ static int sun6i_dsi_remove(struct platform_device *pdev) struct device *dev = &pdev->dev; struct sun6i_dsi *dsi = dev_get_drvdata(dev); - component_del(&pdev->dev, &sun6i_dsi_ops); mipi_dsi_host_unregister(&dsi->host); clk_rate_exclusive_put(dsi->mod_clk); From patchwork Fri Dec 10 11:17:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695589 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id F2150C433EF for ; Fri, 10 Dec 2021 11:19:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=ppBI8FJD9ZIjtCRKMFPX8LIkWDMIq4inMMqaLoDMJ3U=; b=bqdcjqk3w+0pLs ARE58TuOPyB86YMsIohc75MB5Yhqp3BTHEBxlGhjtpj2WfpmISpbpQuEg7TNs/Vu+hkHEhXH08LwM VbtCBvsNlurfu8dRS9q1GJ0Gz2qz8lLf9Lkwez5THhgxJMQpG9lYWqXXiKhhy0gLySgzbE0zwhRFP 85RJXH6MZU7m2s5Ry4oYNkGEMV6Lrq1rmYFP/MwscXzdiGNHvwuWsZUuL+mcgFGm3TnibRB5gOgJT CcsP47RfQy48tbqZ7AwT4inXeM3vVC8T9QlhSqoV6d5idFf07UZnfn2WXXWByz6BZGj5+TWWsOcmm 3CCuU98AVo5bej/d2/kQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduh-001cEl-0g; Fri, 10 Dec 2021 11:18:07 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduH-001c77-Fk for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:43 +0000 Received: by mail-pl1-x630.google.com with SMTP id y8so6079485plg.1 for ; Fri, 10 Dec 2021 03:17:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1kZgbgJmrlxw0BX7jCIeMycv2sDZ8RydaNArchhpYlI=; b=o9ENum0+0nYFVvazyNpkRTvWJqXSudt2olQi+Jm61008bSiUt71CWuBzmWmmn/VRL8 uDNG9cQrQjrHHNop1TxGJAcCQngkYZ63z9ORYyyu9jMByXZbnAgVBtZFod2+A0Ug5E/7 L6e+UoKQ5pe+zEjSptOwevvgyfBEOO8PUSbSc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1kZgbgJmrlxw0BX7jCIeMycv2sDZ8RydaNArchhpYlI=; b=3SU8ZIreyuPpGqXsQTzNB/YL5hrpCBLT09im5BU6NS4r/dq9bMTJIHcyxz5BgKZ7T4 aSF8MTdp7Cy5Qd7poNRCrQhJS9TaulPXC36tNLLicPaHJxvQVoPrtt9EiGzgOZcfnNal ONmIPWt3u0G2eL+8wOsaAVgiQQHD2pL2XSgCG2umZ2gI93k6yhH7QPkEp1QRCY1ZZKbP R9JgyX2gMRXrLWo5mMECvRNtqEebbWwcPTaWK3JT2zlhcLlnN4RMFPqQnEdk7TZQ3KKD tE3JyiB8Sddztfm+Ev25FR+8U1R+FWY7jZZY3lXwgWy+PmKQAtL9KA8VqB4V3jUuvMGx BLdw== X-Gm-Message-State: AOAM533HV/414X547nRo/+ohnHboGWxLpX2hklY/S0SLpnMvd/ZbR9CJ tJsk0y9cGjLkSH3H2/EJE2gtxQ== X-Google-Smtp-Source: ABdhPJw0GPmVtgtiW+5CYOjNVmVg0QY5ubqdArqlwjM0e7MzzI8YBXCb60Yd72H2HKLMGyRk6Be8ng== X-Received: by 2002:a17:90a:ab17:: with SMTP id m23mr22947589pjq.194.1639135060298; Fri, 10 Dec 2021 03:17:40 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:39 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [PATCH v6 3/6] drm: sun4i: dsi: Add bridge support Date: Fri, 10 Dec 2021 16:47:08 +0530 Message-Id: <20211210111711.2072660-4-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031741_585713_28C03E8F X-CRM114-Status: GOOD ( 24.32 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Some display panels would come up with a non-DSI output, those can have an option to connect the DSI host by means of interface bridge converter. This DSI to non-DSI interface bridge converter would require DSI Host to handle drm bridge functionalities in order to communicate interface bridge. This patch adds support for bridge functionalities in Allwinner DSI controller. Supporting down-stream bridge makes few changes in the driver. - It drops drm_connector and related operations as drm_bridge_attach creates connector during attachment. - It drop panel pointer and iterate the bridge, so-that it can operate the normal bridge and panel_bridge in constitutive callbacks. - It uses devm_drm_of_get_bridge for panel or bridge lookup. It uses port 0 and endpoint 0 to support I2C-based bridges eventhough the usual Allwinner DSI OF graph doesn't require this for panel and non-I2C based downstream bridges. Signed-off-by: Jagan Teki --- Changes for v6: - support donwstream bridge - drop bridge conversion - devm_drm_of_get_bridge() require child lookup https://patchwork.kernel.org/project/dri-devel/cover/20211207054747.461029-1-jagan@amarulasolutions.com/ Changes for v5: - add atomic APIs - find host and device variant DSI devices. Changes for v4, v3: - none drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c | 83 ++++++++++---------------- drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h | 9 +-- 2 files changed, 33 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c index 9cf91dcac3f2..f1d612bf1a0b 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -720,6 +721,7 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) struct mipi_dsi_device *device = dsi->device; union phy_configure_opts opts = { }; struct phy_configure_opts_mipi_dphy *cfg = &opts.mipi_dphy; + struct drm_bridge *iter; u16 delay; int err; @@ -769,8 +771,10 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) phy_configure(dsi->dphy, &opts); phy_power_on(dsi->dphy); - if (dsi->panel) - drm_panel_prepare(dsi->panel); + list_for_each_entry(iter, &dsi->bridge_chain, chain_node) { + if (iter->funcs->pre_enable) + iter->funcs->pre_enable(iter); + } /* * FIXME: This should be moved after the switch to HS mode. @@ -784,8 +788,10 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) * ordering on the panels I've tested it with, so I guess this * will do for now, until that IP is better understood. */ - if (dsi->panel) - drm_panel_enable(dsi->panel); + list_for_each_entry(iter, &dsi->bridge_chain, chain_node) { + if (iter->funcs->enable) + iter->funcs->enable(iter); + } sun6i_dsi_start(dsi, DSI_START_HSC); @@ -797,12 +803,16 @@ static void sun6i_dsi_encoder_enable(struct drm_encoder *encoder) static void sun6i_dsi_encoder_disable(struct drm_encoder *encoder) { struct sun6i_dsi *dsi = encoder_to_sun6i_dsi(encoder); + struct drm_bridge *iter; DRM_DEBUG_DRIVER("Disabling DSI output\n"); - if (dsi->panel) { - drm_panel_disable(dsi->panel); - drm_panel_unprepare(dsi->panel); + list_for_each_entry(iter, &dsi->bridge_chain, chain_node) { + if (iter->funcs->disable) + iter->funcs->disable(iter); + + if (iter->funcs->post_disable) + iter->funcs->post_disable(iter); } phy_power_off(dsi->dphy); @@ -813,35 +823,6 @@ static void sun6i_dsi_encoder_disable(struct drm_encoder *encoder) regulator_disable(dsi->regulator); } -static int sun6i_dsi_get_modes(struct drm_connector *connector) -{ - struct sun6i_dsi *dsi = connector_to_sun6i_dsi(connector); - - return drm_panel_get_modes(dsi->panel, connector); -} - -static const struct drm_connector_helper_funcs sun6i_dsi_connector_helper_funcs = { - .get_modes = sun6i_dsi_get_modes, -}; - -static enum drm_connector_status -sun6i_dsi_connector_detect(struct drm_connector *connector, bool force) -{ - struct sun6i_dsi *dsi = connector_to_sun6i_dsi(connector); - - return dsi->panel ? connector_status_connected : - connector_status_disconnected; -} - -static const struct drm_connector_funcs sun6i_dsi_connector_funcs = { - .detect = sun6i_dsi_connector_detect, - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = drm_connector_cleanup, - .reset = drm_atomic_helper_connector_reset, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, -}; - static const struct drm_encoder_helper_funcs sun6i_dsi_enc_helper_funcs = { .disable = sun6i_dsi_encoder_disable, .enable = sun6i_dsi_encoder_enable, @@ -976,22 +957,17 @@ static int sun6i_dsi_bind(struct device *dev, struct device *master, } dsi->encoder.possible_crtcs = BIT(0); - drm_connector_helper_add(&dsi->connector, - &sun6i_dsi_connector_helper_funcs); - ret = drm_connector_init(drm, &dsi->connector, - &sun6i_dsi_connector_funcs, - DRM_MODE_CONNECTOR_DSI); + ret = drm_bridge_attach(&dsi->encoder, dsi->next_bridge, NULL, 0); if (ret) { - dev_err(dsi->dev, - "Couldn't initialise the DSI connector\n"); - goto err_cleanup_connector; + dev_err(dsi->dev, "Couldn't attach drm bridge\n"); + goto err_cleanup_encoder; } - drm_connector_attach_encoder(&dsi->connector, &dsi->encoder); + list_splice_init(&dsi->encoder.bridge_chain, &dsi->bridge_chain); return 0; -err_cleanup_connector: +err_cleanup_encoder: drm_encoder_cleanup(&dsi->encoder); return ret; } @@ -1013,17 +989,18 @@ static int sun6i_dsi_attach(struct mipi_dsi_host *host, struct mipi_dsi_device *device) { struct sun6i_dsi *dsi = host_to_sun6i_dsi(host); - struct drm_panel *panel = of_drm_find_panel(device->dev.of_node); struct device *dev = dsi->dev; int ret; - if (IS_ERR(panel)) - return PTR_ERR(panel); + dsi->next_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 0, 0); + if (IS_ERR(dsi->next_bridge)) { + dev_err(dsi->dev, "Couldn't find the bridge\n"); + return PTR_ERR(dsi->next_bridge); + } - dsi->panel = panel; dsi->device = device; - dev_info(host->dev, "Attached device %s\n", device->name); + dev_info(host->dev, "Attached %s\n", device->name); ret = component_add(dev, &sun6i_dsi_ops); if (ret) { @@ -1040,7 +1017,7 @@ static int sun6i_dsi_detach(struct mipi_dsi_host *host, { struct sun6i_dsi *dsi = host_to_sun6i_dsi(host); - dsi->panel = NULL; + dsi->next_bridge = NULL; dsi->device = NULL; component_del(dsi->dev, &sun6i_dsi_ops); @@ -1118,6 +1095,8 @@ static int sun6i_dsi_probe(struct platform_device *pdev) dsi->host.ops = &sun6i_dsi_host_ops; dsi->host.dev = dev; + INIT_LIST_HEAD(&dsi->bridge_chain); + if (of_device_is_compatible(dev->of_node, "allwinner,sun6i-a31-mipi-dsi")) bus_clk_name = "bus"; diff --git a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h index 61e88ea6044d..96a219b9c275 100644 --- a/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h +++ b/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h @@ -16,7 +16,6 @@ #define SUN6I_DSI_TCON_DIV 4 struct sun6i_dsi { - struct drm_connector connector; struct drm_encoder encoder; struct mipi_dsi_host host; @@ -29,7 +28,8 @@ struct sun6i_dsi { struct device *dev; struct mipi_dsi_device *device; - struct drm_panel *panel; + struct drm_bridge *next_bridge; + struct list_head bridge_chain; }; static inline struct sun6i_dsi *host_to_sun6i_dsi(struct mipi_dsi_host *host) @@ -37,11 +37,6 @@ static inline struct sun6i_dsi *host_to_sun6i_dsi(struct mipi_dsi_host *host) return container_of(host, struct sun6i_dsi, host); }; -static inline struct sun6i_dsi *connector_to_sun6i_dsi(struct drm_connector *connector) -{ - return container_of(connector, struct sun6i_dsi, connector); -}; - static inline struct sun6i_dsi *encoder_to_sun6i_dsi(const struct drm_encoder *encoder) { return container_of(encoder, struct sun6i_dsi, encoder); From patchwork Fri Dec 10 11:17:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695590 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2513EC433EF for ; Fri, 10 Dec 2021 11:20:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=K/emg0J4kfI5hvEbYv0C0hRMjIuWT0QjySadIg5Z7oY=; b=eRpiD4udro9XS5 lnVdG38V/4WyNyivvvi65bFuusGtyH+Y9z09qY6FMFL8LrAUzfUlCp51aKuL8yg46SLvuzIQHx0Ka 4uXiEo+VCeLi+nWCLJug5feSlEBVUTkmXDAh0uf35C8O1iuzyaZ6FHHpyP7WU+xX6YDlVfL1nh/XV NqPIfjCSFAGtWoM3rdny+PfQQ1rx0fLU0JPJaSFyewutzZC8rzXlLcWteNLMwg/yTUO4alp6VHyc/ kRu8Vyt+WjX31sOV75OSm8pTclBnyFvedW5EMGztkealg3AujvPfwOLUvOUx/Yfe7m+qgjvOePNqp wuwD6CnDqYPndpcBwBxQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduv-001cI5-9D; Fri, 10 Dec 2021 11:18:21 +0000 Received: from mail-pl1-x634.google.com ([2607:f8b0:4864:20::634]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduL-001c8b-Jn for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:47 +0000 Received: by mail-pl1-x634.google.com with SMTP id b11so6045790pld.12 for ; Fri, 10 Dec 2021 03:17:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0NNSlBkMytmlUqdX2xwQU1vlLDJZ1w1h/BzLFbdr4yY=; b=RqnPQEYavJNPeWxOrBLnyw0D3NtNdnT0SH5VJa58LzdHAfh0382UeHnRRq/6cFZ4NO u7dN1MLadLcWpg8UUFfF6NZXi9w8gJoALaumO/1tJjOIAw655giypkgddgi4vMbHwBqp wMqfRhjFxlJgndUhPKZ9LpYFUx8jcIvjIH7yw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0NNSlBkMytmlUqdX2xwQU1vlLDJZ1w1h/BzLFbdr4yY=; b=giGEUTE/GfabGrhe6xVHFj4y9Q3kC9cKxeoLxGbqKtAA2MHBLxevPYyCBVhOKE/Ed/ Y/N7Hi6mc0yCQPsP6jhxbOCzKYtZ65o+0Y1QEX7/mFlEKzkSBfQdjuX/G9L2oLlDWroq yHlw0pq5M3JAkCd1aVbzYufcxeOOKOF/U9cFTuQlx4Na8b49wmXKaOERcArs+/Y5tzfA G0Jzx+6BFo3Y2A2Oob1T6OygiNvEzXeQrmXFeWDPu5ja6qsiarlF9ayHmYYKDYQOM4iQ bULhttBi8vUFS477ovx4OEIa5stJBtj+78szvzXeH5TOAN0N+ehX3XmA65QnHNaCOkJL /9/Q== X-Gm-Message-State: AOAM533CHjMVd2aodMPXsJmsJrQAdbq/WxistnPsO6PDlQO7a7bTJsHs OtRYC1lQqXdB7jx27HmZDi1vrA== X-Google-Smtp-Source: ABdhPJy/bmsOZ/tu5QGGP0pWpCMvmCixy399EDtTxuOo97cSowv1bB9e6RCMQlDQr9ybsnIaZ8geQw== X-Received: by 2002:a17:902:f092:b0:141:ccb6:897 with SMTP id p18-20020a170902f09200b00141ccb60897mr75163980pla.89.1639135064477; Fri, 10 Dec 2021 03:17:44 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:44 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [DO NOT MERGE] [PATCH v6 4/6] ARM: dts: sun8i: bananapi-m2m: Enable iS070WV20-CT16 DSI Panel Date: Fri, 10 Dec 2021 16:47:09 +0530 Message-Id: <20211210111711.2072660-5-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031745_717141_0889EBB3 X-CRM114-Status: GOOD ( 12.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Bananapi S070WV20-CT16 is a pure RGB output panel with ICN6211 DSI/RGB convertor bridge. Enable support for it. Signed-off-by: Jagan Teki --- .../boot/dts/sun8i-r16-bananapi-m2m-panel.dts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-panel.dts b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-panel.dts index bf5b5e2f6168..04392358b492 100644 --- a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-panel.dts +++ b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-panel.dts @@ -44,6 +44,7 @@ #include "sun8i-a33.dtsi" #include +#include / { model = "BananaPi M2 Magic"; @@ -55,12 +56,21 @@ aliases { i2c2 = &i2c2; serial0 = &uart0; serial1 = &uart1; + mmc0 = &mmc0; }; chosen { stdout-path = "serial0:115200n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>; + brightness-levels = <1 2 4 8 16 32 64 128 255>; + default-brightness-level = <8>; + enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* LCD-BL-EN: PL4 */ + }; + leds { compatible = "gpio-leds"; @@ -122,6 +132,27 @@ &dai { status = "okay"; }; +&de { + status = "okay"; +}; + +&dphy { + status = "okay"; +}; + +&dsi { + vcc-dsi-supply = <®_dcdc1>; /* VCC-DSI */ + status = "okay"; + + panel@0 { + compatible = "bananapi,s070wv20-ct16-icn6211"; + reg = <0>; + reset-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* LCD-RST: PL5 */ + enable-gpios = <&pio 1 7 GPIO_ACTIVE_HIGH>; /* LCD-PWR-EN: PB7 */ + backlight = <&backlight>; + }; +}; + &ehci0 { status = "okay"; }; @@ -157,6 +188,12 @@ &ohci0 { status = "okay"; }; +&pwm { + pinctrl-names = "default"; + pinctrl-0 = <&pwm0_pin>; + status = "okay"; +}; + &r_rsb { status = "okay"; @@ -269,6 +306,10 @@ &sound { status = "okay"; }; +&tcon0 { + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pb_pins>; From patchwork Fri Dec 10 11:17:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695591 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6E803C433F5 for ; Fri, 10 Dec 2021 11:20:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dHrWJ4iJR/kofg9XRx06CRmLF64FGrFo4HPjlIbwimc=; b=odNDFs34eS35dg BXSs/q5J1+/2N2SHY14+nVGcp3ViJboQuV8Y9v5mBT5IFOTW9dU9fjstDXZPc/KUjoMg62eTtL2Gw 7gjh8LHY1NkZrATTdha6u8Za/EW+nHQ+qdb9dovC1GQ+zC9KjRVuqjevcbIGnvZBMmqE5KbN8DfRf ivBb2RuoH/pwfTUTs0wxRbe7F889tJ2XSne8VfswpFTq5eMg++k5HVjKnfTuruktrXpQY9OCu/Bzx BmqhEtQ8cqxADXbAQDWyAQschVVJljJYqoOng09oupX5+d0MFlkU2Kppuk7qtm9hwgv3Ywbbq5MnB 0vfKAlwY669JfoSZR6OA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvdvC-001cOS-KG; Fri, 10 Dec 2021 11:18:38 +0000 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduP-001cAD-Sn for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:51 +0000 Received: by mail-pl1-x633.google.com with SMTP id y7so6108761plp.0 for ; Fri, 10 Dec 2021 03:17:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4LeTyuQUOX40vOSJ+axYvrUW6lyOFj2kxIyIdKNHdkA=; b=cZjFf3cN7NOfae4xxky5BtCKTowofQ3hHy2B+3z1jB2MxPKJ36FFH7qod97uUt20RQ nP0t9uIPy1RFKGNiNoqTGc7k0Lt7EyJqP7Zo6kR0+AqRCmCe1LlnReSr8RQlHiHisO9p 3coiseYvbIY0Bf3Bnu1oAGOA0Ld6Ehfaevl00= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4LeTyuQUOX40vOSJ+axYvrUW6lyOFj2kxIyIdKNHdkA=; b=bOVnlKbwlcgqSz/mcMTbWcOiXjhiCvq5U86wa3LWTJ1aMtc+FMv02m0aFHChPnVGEw dHcuDHCq0QpkYO5CkfcpPK7ls5LHLYwfTrJN3lDWcBgDKR7DFadDZ7tctQH+W2Uaw418 rS6bBjvtrGxC3DXbjaEEflw30jVselnCmNuQhGKGh1DurNr7bheMOZncG56UbY0eEpZC UwUnSFrb2+6bjAyXz0xe+z7UJrn8/sEFKt/zlfykdzXGvG0VneuiCLrz9KMTGH2fF/91 Bgeo8FMSxkNGneJpi+BqtkXtmgX//BSmd6UQeeeIQewlXvt+m2AIHIfRk+tiZHPpUx4+ bR/g== X-Gm-Message-State: AOAM532X9MV0VrgZRDEFUNdPbm6xLsme3mbVdu6Ov6vlMe/d+4a1no1W KFuX5mm3utBF/Zo+kM76n5XnlA== X-Google-Smtp-Source: ABdhPJyeY9RTXOJ9FIWAmfqqM2uCC4z2LP/XFVNSnSy+Sp9Hp5PcwZA/MTW9lYtLjKqgOsI22qGRww== X-Received: by 2002:a17:902:ab0c:b0:142:343d:4548 with SMTP id ik12-20020a170902ab0c00b00142343d4548mr73742135plb.14.1639135068822; Fri, 10 Dec 2021 03:17:48 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:48 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [DO NOT MERGE] [PATCH v6 5/6] ARM: dts: sun8i: bananapi-m2m: Enable ICN6211 DSI Bridge Date: Fri, 10 Dec 2021 16:47:10 +0530 Message-Id: <20211210111711.2072660-6-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031749_961478_2D29CBCD X-CRM114-Status: GOOD ( 12.80 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Bananapi S070WV20-CT16 is a pure RGB output panel with ICN6211 DSI/RGB convertor bridge. Enable bridge along with associated panel. Signed-off-by: Jagan Teki --- arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts | 64 ++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts index bf5b5e2f6168..501666dfb5ee 100644 --- a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts +++ b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m.dts @@ -44,6 +44,7 @@ #include "sun8i-a33.dtsi" #include +#include / { model = "BananaPi M2 Magic"; @@ -55,12 +56,21 @@ aliases { i2c2 = &i2c2; serial0 = &uart0; serial1 = &uart1; + mmc0 = &mmc0; }; chosen { stdout-path = "serial0:115200n8"; }; + backlight: backlight { + compatible = "pwm-backlight"; + pwms = <&pwm 0 50000 PWM_POLARITY_INVERTED>; + brightness-levels = <1 2 4 8 16 32 64 128 255>; + default-brightness-level = <8>; + enable-gpios = <&r_pio 0 4 GPIO_ACTIVE_HIGH>; /* LCD-BL-EN: PL4 */ + }; + leds { compatible = "gpio-leds"; @@ -81,6 +91,18 @@ led-2 { }; }; + panel { + compatible = "bananapi,s070wv20-ct16"; + enable-gpios = <&pio 1 7 GPIO_ACTIVE_HIGH>; /* LCD-PWR-EN: PB7 */ + backlight = <&backlight>; + + port { + panel_out_bridge: endpoint { + remote-endpoint = <&bridge_out_panel>; + }; + }; + }; + reg_vcc5v0: vcc5v0 { compatible = "regulator-fixed"; regulator-name = "vcc5v0"; @@ -122,6 +144,38 @@ &dai { status = "okay"; }; +&de { + status = "okay"; +}; + +&dphy { + status = "okay"; +}; + +&dsi { + vcc-dsi-supply = <®_dcdc1>; /* VCC-DSI */ + status = "okay"; + + bridge@0 { + compatible = "chipone,icn6211"; + reg = <0>; + enable-gpios = <&r_pio 0 5 GPIO_ACTIVE_HIGH>; /* LCD-RST: PL5 */ + + ports { + #address-cells = <1>; + #size-cells = <0>; + + bridge_out: port@1 { + reg = <1>; + + bridge_out_panel: endpoint { + remote-endpoint = <&panel_out_bridge>; + }; + }; + }; + }; +}; + &ehci0 { status = "okay"; }; @@ -157,6 +211,12 @@ &ohci0 { status = "okay"; }; +&pwm { + pinctrl-names = "default"; + pinctrl-0 = <&pwm0_pin>; + status = "okay"; +}; + &r_rsb { status = "okay"; @@ -269,6 +329,10 @@ &sound { status = "okay"; }; +&tcon0 { + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pb_pins>; From patchwork Fri Dec 10 11:17:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 12695592 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6B68FC433EF for ; Fri, 10 Dec 2021 11:20:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dv30MMD+JVtqIxkog5lnpBkKGVRCONdfEk+eDGiOgWE=; b=HgvHgONRXu/ONq 9OH5iA9l6saeSKN/R9OqQYySCSrVrI0xbx7Qm3+1oYHi+x0igVo2W717ObXCDmzrlL7eZmUsVYM9N 8YeeNCcQ6KuQt6slBQr57CbR8fxeyZhWqkJJSaLInX4COoZPvCRhfXURlJn6s4qOkhknrnDH8pkz+ RXff+l6LdyLDeCMtGBJTBWGihK+BMC7OoPaZp41PpUYgumhFh1jkEIjKjpIYa/q9HTsl5YgXoT+Sw QU9MzTaq83C9Zu7YmQPlsGfnVxa0Hr8Xe2rx3iO9dx3/TXTyJQgCctKOnVZ3XjJS402EoXCoOf479 /VX9tWYmMfXx3I3Rg3eQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvdvX-001cZ3-Ud; Fri, 10 Dec 2021 11:19:00 +0000 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mvduU-001cBj-5b for linux-arm-kernel@lists.infradead.org; Fri, 10 Dec 2021 11:17:55 +0000 Received: by mail-pj1-x1036.google.com with SMTP id np6-20020a17090b4c4600b001a90b011e06so7226572pjb.5 for ; Fri, 10 Dec 2021 03:17:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Y58f/408ggFS0t4Z6wIbn0XNvGpa9gF+cq3fnKbXvq4=; b=Zg94Ty4D4jUP9ylOZDPNjOkgZl2tcZVu2FobVmPWqGtBRji42lfnSaHdUtgYO4Dpdg UFJggr98af08NApIlpLdH+ZqUtaVTKVkcMPpUUpe7QAgy0uERtZNo4zr70TH+9A5XO/g wohdZ882YOeG+dPt+WIQBuIH4yIypprVc9dHU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Y58f/408ggFS0t4Z6wIbn0XNvGpa9gF+cq3fnKbXvq4=; b=uIYW3OHIwfg/4wtAZQSb3HV1pwViYwiM2nyQgve9dniA4YRcYAf+XVK8n0nG9/Ol4h Lm6hlmO2Ne+fTFJfd81/JsfjGm3jzc8hEqKVZbs3aPVZM+VkgXI0rECQRKglhWkd9cAi LRqKy6MUsD+qnnxUj1p3DnlE884UXwjDl0n25Ooqe1UqDl/05e4KQyGlmWKhHnrTBvZc l0gopmUZ1SoeFyPwjLJiL2FrLiizipaynD41Uo3s1F6AqStdIfa3eQtkddV/k8cguylu JizMzDBX1YdBianOe7R8QIySymc6pTVZN1HctTZf+Sjif/5NEO9HrcTuEwYRVq1r+xiS 5bwQ== X-Gm-Message-State: AOAM531Tm3b36dnWgSNdWGPYMZ2XHFY+P+jgJbanF2HaNNIdfFvMrvcY +8UkwH1xhi7SzJYvo3FD0S4I/A== X-Google-Smtp-Source: ABdhPJzAFDD6y2DwjF2jmlcaZlHOZhKXjj4Z/7auMyoCnoob9MAwhov/izo/HGKuwrD9GZNi9lQXdw== X-Received: by 2002:a17:90b:380e:: with SMTP id mq14mr23759146pjb.74.1639135073054; Fri, 10 Dec 2021 03:17:53 -0800 (PST) Received: from localhost.localdomain ([2405:201:c00a:a0a9:c40f:36d4:b45d:731]) by smtp.gmail.com with ESMTPSA id qe12sm13125607pjb.29.2021.12.10.03.17.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Dec 2021 03:17:52 -0800 (PST) From: Jagan Teki To: Maxime Ripard , Chen-Yu Tsai , Laurent Pinchart , Neil Armstrong , Robert Foss , Sam Ravnborg Cc: dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@googlegroups.com, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [DO NOT MERGE] [PATCH v6 6/6] ARM: dts: sun8i: bananapi-m2m: Enable DLPC3433 Bridge (I2C) Date: Fri, 10 Dec 2021 16:47:11 +0530 Message-Id: <20211210111711.2072660-7-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211210111711.2072660-1-jagan@amarulasolutions.com> References: <20211210111711.2072660-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211210_031754_256320_494B6092 X-CRM114-Status: GOOD ( 13.29 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org R16 board has DLCP3433 DSI bridge for connecting TI DMD Projectors. Enable support for it. Note: This is for testing purpose, DLPC3433 not available in BPI-M2M. Signed-off-by: Jagan Teki --- .../boot/dts/sun8i-r16-bananapi-m2m-i2c.dts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-i2c.dts b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-i2c.dts index 7713cdaf6211..a96fbfd743f7 100644 --- a/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-i2c.dts +++ b/arch/arm/boot/dts/sun8i-r16-bananapi-m2m-i2c.dts @@ -86,6 +86,16 @@ vol-down { }; }; + panel { + compatible = "panel-simple"; + + port { + panel_out_bridge: endpoint { + remote-endpoint = <&bridge_out_panel>; + }; + }; + }; + reg_vcc5v0: vcc5v0 { compatible = "regulator-fixed"; regulator-name = "vcc5v0"; @@ -125,6 +135,32 @@ &dai { status = "okay"; }; +&de { + status = "okay"; +}; + +&dphy { + status = "okay"; +}; + +&dsi { + vcc-dsi-supply = <®_dcdc1>; /* VCC-DSI */ + status = "okay"; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + port@0 { + reg = <0>; + + dsi_out_bridge: endpoint { + remote-endpoint = <&bridge_out_dsi>; + }; + }; + }; +}; + &ehci0 { status = "okay"; }; @@ -132,6 +168,35 @@ &ehci0 { &i2c1 { clock-frequency = <100000>; status = "okay"; + + bridge@1d { + compatible = "ti,dlpc3433"; + reg = <0x1d>; + enable-gpios = <&pio 4 15 GPIO_ACTIVE_HIGH>; + vcc_intf-supply = <®_dldo1>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + + bridge_in: port@0 { + reg = <0>; + + bridge_out_dsi: endpoint { + remote-endpoint = <&dsi_out_bridge>; + data-lanes = <0 1 2 3>; + }; + }; + + bridge_out: port@1 { + reg = <1>; + + bridge_out_panel: endpoint { + remote-endpoint = <&panel_out_bridge>; + }; + }; + }; + }; }; &i2c2 { @@ -289,6 +354,10 @@ &sound { "Right DAC", "AIF1 Slot 0 Right"; }; +&tcon0 { + status = "okay"; +}; + &uart0 { pinctrl-names = "default"; pinctrl-0 = <&uart0_pb_pins>;