Received: by 10.213.65.68 with SMTP id h4csp437093imn; Tue, 20 Mar 2018 06:57:04 -0700 (PDT) X-Google-Smtp-Source: AG47ELtiu1eNle5oHlaUIGy9RAYl/inzYcI/5DNxMBHgjC1KbAS0dxV0gmIaYgYMky4F5vrzes9B X-Received: by 2002:a17:902:5814:: with SMTP id m20-v6mr15720767pli.311.1521554224716; Tue, 20 Mar 2018 06:57:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521554224; cv=none; d=google.com; s=arc-20160816; b=xj9H6N5iBxoc8pFngyfZi3ON3gs0Hwuh38/ycG9W/Z00obavGLXtOq1ORMx0/Vc0Bg 1AMgiq98dhjskaQBF260bAje2KSVCWb9S0D24s/LAz4Vqfg8mvSw/TUIonVAO1+eR+gN yFUTjXbszaGPhBMnBKf2mT3nUHRrCtYZdATFslhLfNI1KMeVv1zsoRkjdS5+/bB7gjRL 072ldvyo08hbkQSsVm9COe6BjIj8ELyPaZ023xndo1xHLV/04cjKqCYKX+D90CykVLD/ H4YYTNe5ICk222ormTZe4+evqDmedA8rVNgNtii7gKVAt3UWlp1gDUO1sd5rNUhhM3To rbTg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:organization:message-id:date:subject:cc:to :from:dkim-signature:arc-authentication-results; bh=F4Wf/8gYUaA5oTtG2CwEsVJQfq1Mo5Im9GzqQNULXkw=; b=Pmsps5NlDCjwH+O7CgRy+QA2Zink17S9oDNjTPapqdCZL64maqHBa21gigt66HODxU iPm2CnbqCVc9iyekY54H+QGsHcS02FPVUxu1UG04lMJ+C4bKjA+sN+Pr7ZJlezfgx7Ga /2fVS9BMise4+ebAU1zAgeDipt+41EwN+W6039cNr65v3KGLpuM/1bUIknzg72gYDGIW 0DpWV6WP/6S+gg6a//mWSosokOQezthz3d4pT1zvuiv6KMLgV3DdAVtBy9WQaLl47YF+ ZtcOHTlPhHC55cnLLh6LqSDJRo1S/H43Vng99DsZvr/DwQMi0hg2ihNSdy8+8ri9XluL UjIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=Xb/M93cg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bi10-v6si1642727plb.105.2018.03.20.06.56.50; Tue, 20 Mar 2018 06:57:04 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=Xb/M93cg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753667AbeCTNzx (ORCPT + 99 others); Tue, 20 Mar 2018 09:55:53 -0400 Received: from galahad.ideasonboard.com ([185.26.127.97]:34089 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753227AbeCTNzr (ORCPT ); Tue, 20 Mar 2018 09:55:47 -0400 Received: from avalon.localnet (unknown [IPv6:2a02:2788:664:35f:7f37:41ef:e87f:aea9]) by galahad.ideasonboard.com (Postfix) with ESMTPSA id 8F0F9202DC; Tue, 20 Mar 2018 14:53:25 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1521554005; bh=roQaUTmI7RbnLFm7snEMLG4YdXKVSgXC75sN9WD2NC8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Xb/M93cgzuhH7eyqSXpK7bhzlUsaGmszjNhbTPQ4yzYO+9KiO5ye59tWH+1mg8dzg BS52jiif+N7BZ1R4VzFteNt4zl30cpEmKG2w4+XN8QuxPjd/51P3d2D+LxdkxRMYR9 RxP9Hh40Jl+kq6pOnxzCguE/SpKK8TUoExJsPBBk= From: Laurent Pinchart To: Peter Rosin Cc: linux-kernel@vger.kernel.org, David Airlie , Rob Herring , Mark Rutland , Archit Taneja , Andrzej Hajda , Daniel Vetter , Gustavo Padovan , Sean Paul , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Subject: Re: [RFC PATCH 2/3] drm: bridge: panel: allow override of the bus format Date: Tue, 20 Mar 2018 15:56:52 +0200 Message-ID: <7015227.p44CVkfgjM@avalon> Organization: Ideas on Board Oy In-Reply-To: <20180317221525.18534-3-peda@axentia.se> References: <20180317221525.18534-1-peda@axentia.se> <20180317221525.18534-3-peda@axentia.se> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Peter, Thank you for the patch. On Sunday, 18 March 2018 00:15:24 EET Peter Rosin wrote: > Useful if the bridge does some kind of conversion of the bus format. > > Signed-off-by: Peter Rosin > --- > drivers/gpu/drm/bridge/panel.c | 22 +++++++++++++++++++++- > include/drm/drm_bridge.h | 1 + > 2 files changed, 22 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c > index 6d99d4a3beb3..ccef0283ff41 100644 > --- a/drivers/gpu/drm/bridge/panel.c > +++ b/drivers/gpu/drm/bridge/panel.c > @@ -22,6 +22,7 @@ struct panel_bridge { > struct drm_connector connector; > struct drm_panel *panel; > u32 connector_type; > + u32 bus_format; > }; > > static inline struct panel_bridge * > @@ -40,8 +41,15 @@ static int panel_bridge_connector_get_modes(struct > drm_connector *connector) { > struct panel_bridge *panel_bridge = > drm_connector_to_panel_bridge(connector); > + int ret; > + > + ret = drm_panel_get_modes(panel_bridge->panel); > + > + if (panel_bridge->bus_format) > + drm_display_info_set_bus_formats(&connector->display_info, > + &panel_bridge->bus_format, 1); While I agree with the problem statement and, to some extent, the DT bindings, I don't think this is the right implementation. You've correctly noted that display controller shouldn't blindly use the formats reported by the panel through the connector formats, and that hacking the panel driver to override the formats isn't a good idea, so I wouldn't override the formats reported by the connector. I would instead extend the drm_bridge API to report formats at bridge inputs. This would be more generic and allow each bridge to configure itself according to the next bridge in the chain. I'm not sure whether this API extension should be in the form of a new bridge function, or if the formats should be stored in the drm_bridge structure directly as done for connectors in the display info structure. I'm tempted by the former, but I'm open to discussions. > - return drm_panel_get_modes(panel_bridge->panel); > + return ret; > } > > static const struct drm_connector_helper_funcs > @@ -203,6 +211,18 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge) > } > EXPORT_SYMBOL(drm_panel_bridge_remove); > > +void drm_panel_bridge_set_bus_format(struct drm_bridge *bridge, u32 > bus_format) +{ > + struct panel_bridge *panel_bridge; > + > + if (!bridge) > + return; > + > + panel_bridge = drm_bridge_to_panel_bridge(bridge); > + panel_bridge->bus_format = bus_format; > +} > +EXPORT_SYMBOL(drm_panel_bridge_set_bus_format); > + > static void devm_drm_panel_bridge_release(struct device *dev, void *res) > { > struct drm_bridge **bridge = res; > diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h > index 682d01ba920c..81903b92f187 100644 > --- a/include/drm/drm_bridge.h > +++ b/include/drm/drm_bridge.h > @@ -268,6 +268,7 @@ void drm_bridge_enable(struct drm_bridge *bridge); > struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, > u32 connector_type); > void drm_panel_bridge_remove(struct drm_bridge *bridge); > +void drm_panel_bridge_set_bus_format(struct drm_bridge *bridge, u32 > bus_format); > struct drm_bridge *devm_drm_panel_bridge_add(struct device > *dev, > struct drm_panel *panel, > u32 connector_type); -- Regards, Laurent Pinchart