Received: by 2002:a05:6a10:6d25:0:0:0:0 with SMTP id gq37csp1891265pxb; Mon, 13 Sep 2021 07:37:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzetlMPWp3243CcnhlgcwVplJohQMBtwe0HgmHFZIw39S/1BPpTFU17lsJhnoWGe+QIOzJ4 X-Received: by 2002:a05:6402:26d2:: with SMTP id x18mr13422186edd.195.1631543862831; Mon, 13 Sep 2021 07:37:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631543862; cv=none; d=google.com; s=arc-20160816; b=qAEA/jftXp1Irf4RRZdER24GGh2aFT52UiApvtWYThZfuMqsXQz1sjb2PNGPvQt2lf 4GrSb2XQjpDlMl2KOR2mzKqabHjGBKVYlCs6KY/EdnuIV/zmpateI0ERQAFwOozxXzaW UgGhlhsXy2TSib0INJmSCzK7AThQyQHAjCPexgKrnW3quYjEgm/NyJFw8zxH2SWgSog8 GzacBbT62+T42M1M5W5IEG3hZW4wUhojS4+j/6x1q3HfrYWpIyBs/JIspRjjeJrlVTL/ jOEV0NEWx2IvH+eVJLKJoNWEYjLW8cXQ5KS+9wVIPMSlCTwJbj7V5TIyR13lp3lkAIHG Beaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=kaf3qlpMpbOXzo6Cyn8rGBbCFj4I3c07pUwgZsEGgTw=; b=h08TduaxMhDQILZRa2+1ELwTcdZo3DwpejIBm6sBHjPoJZ7GKUJYr6N7qZS9CqmZKA HtNUYFvTPl4/5V936l3lT+mXn4JEaCLVKoZ8HKptpiz71DgrvsWUXYbfK42bpQcILaVJ phBZZzeHY4G4JcfozkyNdaOZRryfnQo3SjzxTI/Q8z7a+mmhY3i/ynjlzTO5HCKhDlDJ 7C8IVfz7y1zFcaYHlFGiLiN+jjg0MmIe/9T/NnpFawo8849vgHjqqfvIFGpYID2X/QUB L4c6oRkupR5VYWarLDBPySNlhHfIQJbLHe4WY2BLsSYV+IaPtujuPk+4wnVgldrrJ0K+ r8xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=1DC8TsrN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id du11si8578619ejc.389.2021.09.13.07.37.17; Mon, 13 Sep 2021 07:37:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=1DC8TsrN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347780AbhIMOfb (ORCPT + 99 others); Mon, 13 Sep 2021 10:35:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:51346 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347084AbhIMOaN (ORCPT ); Mon, 13 Sep 2021 10:30:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 044D2615E1; Mon, 13 Sep 2021 13:51:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631541065; bh=pOh5xUDiTV61O+uQgj+boLTw7u9thlar7oAAdqAFvVQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=1DC8TsrN31uczEvPq4aYx3UAqaAIvvbLoR8Ns4HCchD+NwaAhIy4upgOQyeOv9eDw prlx0LsHoLucpcW3FddPZyidPVa+lIeHPIatr/1nKQw1lVS4CwaopNk7w5OL9ahk+p MXfrOy9JFCs3uBuy6+TsNl6ZBhII8Fn5ygxXkUr4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Laurent Pinchart , Jagan Teki , Robert Foss , Sasha Levin Subject: [PATCH 5.14 149/334] drm/bridge: ti-sn65dsi86: Wrap panel with panel-bridge Date: Mon, 13 Sep 2021 15:13:23 +0200 Message-Id: <20210913131118.396364303@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131113.390368911@linuxfoundation.org> References: <20210913131113.390368911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Laurent Pinchart [ Upstream commit 4e5763f03e105fedfcd7a83bec1dccae96e334dd ] To simplify interfacing with the panel, wrap it in a panel-bridge and let the DRM bridge helpers handle chaining of operations. This also prepares for support of DRM_BRIDGE_ATTACH_NO_CONNECTOR, which requires all components in the display pipeline to be represented by bridges. Signed-off-by: Laurent Pinchart Reviewed-by: Jagan Teki Signed-off-by: Robert Foss Link: https://patchwork.freedesktop.org/patch/msgid/20210624000304.16281-5-laurent.pinchart+renesas@ideasonboard.com Signed-off-by: Sasha Levin --- drivers/gpu/drm/bridge/ti-sn65dsi86.c | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-sn65dsi86.c b/drivers/gpu/drm/bridge/ti-sn65dsi86.c index 4d1483cf7b58..970a4859eea3 100644 --- a/drivers/gpu/drm/bridge/ti-sn65dsi86.c +++ b/drivers/gpu/drm/bridge/ti-sn65dsi86.c @@ -125,7 +125,7 @@ * @host_node: Remote DSI node. * @dsi: Our MIPI DSI source. * @refclk: Our reference clock. - * @panel: Our panel. + * @next_bridge: The bridge on the eDP side. * @enable_gpio: The GPIO we toggle to enable the bridge. * @supplies: Data for bulk enabling/disabling our regulators. * @dp_lanes: Count of dp_lanes we're using. @@ -156,7 +156,7 @@ struct ti_sn65dsi86 { struct device_node *host_node; struct mipi_dsi_device *dsi; struct clk *refclk; - struct drm_panel *panel; + struct drm_bridge *next_bridge; struct gpio_desc *enable_gpio; struct regulator_bulk_data supplies[SN_REGULATOR_SUPPLY_NUM]; int dp_lanes; @@ -401,7 +401,8 @@ connector_to_ti_sn65dsi86(struct drm_connector *connector) static int ti_sn_bridge_connector_get_modes(struct drm_connector *connector) { struct ti_sn65dsi86 *pdata = connector_to_ti_sn65dsi86(connector); - return drm_panel_get_modes(pdata->panel, connector); + + return drm_bridge_get_modes(pdata->next_bridge, connector); } static enum drm_mode_status @@ -527,8 +528,16 @@ static int ti_sn_bridge_attach(struct drm_bridge *bridge, } pdata->dsi = dsi; + /* Attach the next bridge */ + ret = drm_bridge_attach(bridge->encoder, pdata->next_bridge, + &pdata->bridge, flags); + if (ret < 0) + goto err_dsi_detach; + return 0; +err_dsi_detach: + mipi_dsi_detach(dsi); err_dsi_attach: mipi_dsi_device_unregister(dsi); err_dsi_host: @@ -547,8 +556,6 @@ static void ti_sn_bridge_disable(struct drm_bridge *bridge) { struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); - drm_panel_disable(pdata->panel); - /* disable video stream */ regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, 0); /* semi auto link training mode OFF */ @@ -873,8 +880,6 @@ static void ti_sn_bridge_enable(struct drm_bridge *bridge) /* enable video stream */ regmap_update_bits(pdata->regmap, SN_ENH_FRAME_REG, VSTREAM_ENABLE, VSTREAM_ENABLE); - - drm_panel_enable(pdata->panel); } static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge) @@ -885,16 +890,12 @@ static void ti_sn_bridge_pre_enable(struct drm_bridge *bridge) if (!pdata->refclk) ti_sn65dsi86_enable_comms(pdata); - - drm_panel_prepare(pdata->panel); } static void ti_sn_bridge_post_disable(struct drm_bridge *bridge) { struct ti_sn65dsi86 *pdata = bridge_to_ti_sn65dsi86(bridge); - drm_panel_unprepare(pdata->panel); - if (!pdata->refclk) ti_sn65dsi86_disable_comms(pdata); @@ -1299,13 +1300,20 @@ static int ti_sn_bridge_probe(struct auxiliary_device *adev, { struct ti_sn65dsi86 *pdata = dev_get_drvdata(adev->dev.parent); struct device_node *np = pdata->dev->of_node; + struct drm_panel *panel; int ret; - ret = drm_of_find_panel_or_bridge(np, 1, 0, &pdata->panel, NULL); + ret = drm_of_find_panel_or_bridge(np, 1, 0, &panel, NULL); if (ret) return dev_err_probe(&adev->dev, ret, "could not find any panel node\n"); + pdata->next_bridge = devm_drm_panel_bridge_add(pdata->dev, panel); + if (IS_ERR(pdata->next_bridge)) { + DRM_ERROR("failed to create panel bridge\n"); + return PTR_ERR(pdata->next_bridge); + } + ti_sn_bridge_parse_lanes(pdata, np); ret = ti_sn_bridge_parse_dsi_host(pdata); -- 2.30.2