From patchwork Thu Jun 5 19:10:45 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 4309411 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id E957F9F96A for ; Fri, 6 Jun 2014 00:33:15 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 15EF720274 for ; Fri, 6 Jun 2014 00:33:15 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 3BC862022A for ; Fri, 6 Jun 2014 00:33:14 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2170F6E9FC; Thu, 5 Jun 2014 17:33:03 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 6ECD96E9B5 for ; Thu, 5 Jun 2014 12:12:39 -0700 (PDT) Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N6P006BUMP2W150@mailout1.samsung.com> for dri-devel@lists.freedesktop.org; Fri, 06 Jun 2014 04:12:38 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.125]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id F0.70.16580.521C0935; Fri, 06 Jun 2014 04:12:38 +0900 (KST) X-AuditID: cbfee691-b7f2f6d0000040c4-4a-5390c125debc Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id C8.67.07139.521C0935; Fri, 06 Jun 2014 04:12:37 +0900 (KST) Received: from chromebld-server.sisodomain.com ([107.108.73.106]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0N6P00FLRMOSKS30@mmp2.samsung.com>; Fri, 06 Jun 2014 04:12:37 +0900 (KST) From: Ajay Kumar To: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Subject: [PATCH V3 1/8] drm/bridge: add helper functions to support bridge chain Date: Fri, 06 Jun 2014 00:40:45 +0530 Message-id: <1401995452-15798-2-git-send-email-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1401995452-15798-1-git-send-email-ajaykumar.rs@samsung.com> References: <1401995452-15798-1-git-send-email-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIIsWRmVeSWpSXmKPExsWyRsSkVlft4IRgg6M9LBYH3h9ksdjwZiGz xcKHd5ktrnx9z2Yx6f4EFovLCy+xWnzf9YXdYsb5fUwWqw5vYLd4vvAHs8Xcg7kWP3fNY3Hg 8dj7bQGLx85Zd9k9Fmwq9bjffZzJo2/LKkaPz5vkAtiiuGxSUnMyy1KL9O0SuDL+TDArOCJV 8W7XLqYGxu1iXYycHBICJhJvZ2xlhLDFJC7cW8/WxcjFISSwlFHiYMNrVpiip30f2UFsIYHp jBITVrFDFE1gkrjV+YMNJMEmoC2xbfpNFhBbRMBNounwTFaQImaBb4wSf87fBysSFgiQWH7/ CROIzSKgKnHjbRPYal4BD4nTG7cBTeUA2qYgMWeSDUiYU8BTYu/eaSwQiz0klk08B3adhMAx dom3e1ezQswRkPg2+RALRK+sxKYDzBBHS0ocXHGDZQKj8AJGhlWMoqkFyQXFSelFpnrFibnF pXnpesn5uZsYgdFx+t+ziTsY7x+wPsSYDDRuIrOUaHI+MLrySuINjc2MLExNTI2NzC3NSBNW EudNf5QUJCSQnliSmp2aWpBaFF9UmpNafIiRiYNTqoHx/BKn2SdK+A8FdSr/fl8z92Wnr0Hi u70LMmd1h9huuysb88cyw6jL/ubaYOljQUHuuU8jF943+1Mpp1qXnPnI0fJLT1PWX8OjuzbP /1XmvqSKq/LwroNbdgaypBjuTNE6pzZp78y/F0X855v0bKyat7Vgp9iMTUfLHDf535bnLObN ftOzvuCNEktxRqKhFnNRcSIALtAMz6QCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrHIsWRmVeSWpSXmKPExsVy+t9jQV3VgxOCDa4tNLM48P4gi8WGNwuZ LRY+vMtsceXrezaLSfcnsFhcXniJ1eL7ri/sFjPO72OyWHV4A7vF84U/mC3mHsy1+LlrHosD j8febwtYPHbOusvusWBTqcf97uNMHn1bVjF6fN4kF8AW1cBok5GamJJapJCal5yfkpmXbqvk HRzvHG9qZmCoa2hpYa6kkJeYm2qr5OIToOuWmQN0o5JCWWJOKVAoILG4WEnfDtOE0BA3XQuY xghd35AguB4jAzSQsIYx488Es4IjUhXvdu1iamDcLtbFyMkhIWAi8bTvIzuELSZx4d56NhBb SGA6o8SEVUBxLiB7ApPErc4fYAk2AW2JbdNvsoDYIgJuEk2HZ7KCFDELfGOU+HP+PliRsECA xPL7T5hAbBYBVYkbb5sYQWxeAQ+J0xu3AU3lANqmIDFnkg1ImFPAU2Lv3mksEIs9JJZNPMc2 gZF3ASPDKkbR1ILkguKk9FwjveLE3OLSvHS95PzcTYzg2HsmvYNxVYPFIUYBDkYlHt6fPROC hVgTy4orcw8xSnAwK4nwcmwBCvGmJFZWpRblxxeV5qQWH2JMBjpqIrOUaHI+MC3klcQbGpuY mxqbWppYmJhZkiasJM57sNU6UEggPbEkNTs1tSC1CGYLEwenVANjJ+dOzxsst9jz0o4keJVn 7cjM7v9Wu2+bl18f//cTpXVv5Z7s5mttrj8Tw3hoybOLpnsPW0j6Td27tVvQTeiBrsS7knnW q5/M+H1bSndS6k6ZIO1jxhVhUeG1WX6uQv7r2M6Ue96IVGrXvnaDnyu5o+q8Zk70e961HqZz z0p8u8eloybZc1+JpTgj0VCLuag4EQCBOHH6AQMAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Mailman-Approved-At: Thu, 05 Jun 2014 17:32:52 -0700 Cc: seanpaul@google.com, daniel.vetter@ffwll.ch, joshi@samsung.com, ajaynumb@gmail.com, prashanth.g@samsung.com, Ajay Kumar X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, 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 Add helper functions to create bridge chain and to call the corresponding next_bridge functions. Signed-off-by: Ajay Kumar Suggested-by: Rob Clark --- include/drm/drm_crtc.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 5c1c31c..4665d42 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -623,6 +623,7 @@ struct drm_bridge_funcs { struct drm_bridge { struct drm_device *dev; struct list_head head; + struct drm_bridge *next_bridge; struct drm_mode_object base; @@ -1079,6 +1080,77 @@ static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev, return mo ? obj_to_encoder(mo) : NULL; } +static inline int drm_bridge_add_to_chain(struct drm_bridge *head, + struct drm_bridge *last) +{ + struct drm_bridge *temp = head; + + if (head && last) { + while (temp->next_bridge) + temp = temp->next_bridge; + + temp->next_bridge = last; + return 0; + } + + return -EINVAL; +} + +static inline void drm_next_bridge_mode_fixup(struct drm_bridge *bridge, + const struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->mode_fixup) + bridge->next_bridge->funcs->mode_fixup(bridge->next_bridge, + mode, adjusted_mode); +} + +static inline void drm_next_bridge_disable(struct drm_bridge *bridge) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->disable) + bridge->next_bridge->funcs->disable(bridge->next_bridge); +} + +static inline void drm_next_bridge_post_disable(struct drm_bridge *bridge) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->post_disable) + bridge->next_bridge->funcs->post_disable(bridge->next_bridge); +} + +static inline void drm_next_bridge_mode_set(struct drm_bridge *bridge, + struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->mode_set) + bridge->next_bridge->funcs->mode_set(bridge->next_bridge, + mode, adjusted_mode); +} + +static inline void drm_next_bridge_pre_enable(struct drm_bridge *bridge) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->pre_enable) + bridge->next_bridge->funcs->pre_enable(bridge->next_bridge); +} + +static inline void drm_next_bridge_enable(struct drm_bridge *bridge) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->enable) + bridge->next_bridge->funcs->enable(bridge->next_bridge); +} + +static inline void drm_next_bridge_destroy(struct drm_bridge *bridge) +{ + if (bridge && bridge->next_bridge && bridge->next_bridge->funcs && + bridge->next_bridge->funcs->destroy) + bridge->next_bridge->funcs->destroy(bridge->next_bridge); +} + /* Plane list iterator for legacy (overlay only) planes. */ #define drm_for_each_legacy_plane(plane, planelist) \ list_for_each_entry(plane, planelist, head) \