From patchwork Tue Sep 15 09:37:11 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: kongxinwei X-Patchwork-Id: 53628 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-wi0-f198.google.com (mail-wi0-f198.google.com [209.85.212.198]) by patches.linaro.org (Postfix) with ESMTPS id 0C88E22A22 for ; Tue, 15 Sep 2015 09:42:52 +0000 (UTC) Received: by wicgb1 with SMTP id gb1sf5902916wic.3 for ; Tue, 15 Sep 2015 02:42:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-type:sender:precedence :list-id:x-original-sender:x-original-authentication-results :mailing-list:list-post:list-help:list-archive:list-unsubscribe; bh=1QqFO7ceUQ1cBuGwwvcgkvyYx63ooCKezYeSief0pic=; b=nEFvzsWnl3pnq4qbrHfxVXwbSrucanCHOidsp9z9DRTpro3Bqzr6GYN2I2qwMecS8M aSTJ9YXTDRSW0gGVuWb3xGTsVaXvAwibUWMYj3vw/pU0Rijq3MRYF9QM3qSYlnqF7aq5 RpgJ4lv9SRunxGGcezl/HBnvAoU4D6d/pmWnV6iL7Qo9610kI3ZH1f1wBMGM65dxBBMG FUm1C7K59yFDO1EChRXifN8Vdwcxj3dSHTibON7sQ/Cy1d5YJpBvUS1GTbLxbT27zQ7a QTefhiqTQAuOzAx596NKRGY1H4FFSIBOmnkod2Ab/6hLdcjQECo3ugbLsrgJ1n8RAOon 74qw== X-Gm-Message-State: ALoCoQkyJpcaQYaeGFfwDg0HNVuxuYLYb252t5prTgwMyPSQQY9SpW2li0/x69Xph+R8KMlt5Auu X-Received: by 10.180.79.66 with SMTP id h2mr577278wix.3.1442310171293; Tue, 15 Sep 2015 02:42:51 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.37.97 with SMTP id x1ls285543laj.7.gmail; Tue, 15 Sep 2015 02:42:51 -0700 (PDT) X-Received: by 10.112.168.194 with SMTP id zy2mr19639602lbb.79.1442310171048; Tue, 15 Sep 2015 02:42:51 -0700 (PDT) Received: from mail-la0-f53.google.com (mail-la0-f53.google.com. [209.85.215.53]) by mx.google.com with ESMTPS id w8si9451606law.96.2015.09.15.02.42.50 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 Sep 2015 02:42:51 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.53 as permitted sender) client-ip=209.85.215.53; Received: by lahg1 with SMTP id g1so73987086lah.1 for ; Tue, 15 Sep 2015 02:42:50 -0700 (PDT) X-Received: by 10.152.43.137 with SMTP id w9mr19956945lal.56.1442310170867; Tue, 15 Sep 2015 02:42:50 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.59.35 with SMTP id w3csp1681531lbq; Tue, 15 Sep 2015 02:42:49 -0700 (PDT) X-Received: by 10.68.137.161 with SMTP id qj1mr45403735pbb.14.1442310169085; Tue, 15 Sep 2015 02:42:49 -0700 (PDT) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id sh6si30462054pbc.169.2015.09.15.02.42.46; Tue, 15 Sep 2015 02:42:49 -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; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755373AbbIOJmo (ORCPT + 29 others); Tue, 15 Sep 2015 05:42:44 -0400 Received: from szxga03-in.huawei.com ([119.145.14.66]:49285 "EHLO szxga03-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753134AbbIOJlE (ORCPT ); Tue, 15 Sep 2015 05:41:04 -0400 Received: from 172.24.1.50 (EHLO SZXEML424-HUB.china.huawei.com) ([172.24.1.50]) by szxrg03-dlp.huawei.com (MOS 4.4.3-GA FastPath queued) with ESMTP id BMY28259; Tue, 15 Sep 2015 17:37:40 +0800 (CST) Received: from localhost (10.46.72.58) by SZXEML424-HUB.china.huawei.com (10.82.67.153) with Microsoft SMTP Server id 14.3.235.1; Tue, 15 Sep 2015 17:37:31 +0800 From: Xinwei Kong To: , , , CC: , , , , , , , , , , , , , , , , , , , , , , , , Subject: [PATCH RFC 5/8] drm: hisilicon: fill interface function of encoder\connector part Date: Tue, 15 Sep 2015 17:37:11 +0800 Message-ID: <1442309834-21420-6-git-send-email-kong.kongxinwei@hisilicon.com> X-Mailer: git-send-email 1.9.4.msysgit.2 In-Reply-To: <1442309834-21420-1-git-send-email-kong.kongxinwei@hisilicon.com> References: <1442309834-21420-1-git-send-email-kong.kongxinwei@hisilicon.com> MIME-Version: 1.0 X-Originating-IP: [10.46.72.58] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090204.55F7E6E5.026D, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-05-26 15:14:31, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 3824eb4742523985ed8c262b535c470a Sender: linux-kernel-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: kong.kongxinwei@hisilicon.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.53 as permitted sender) smtp.mailfrom=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , This patch enables the adv7533 module which is connecting hisilicon SOC by dsi module. while using DSI module and adv7533 module to implement the encoder/connector interface of DRM\KMS. Signed-off-by: Xinliang Liu Signed-off-by: Xinwei Kong Signed-off-by: Andy Green Signed-off-by: Jiwen Qi Signed-off-by: Yu Gong --- drivers/gpu/drm/hisilicon/Kconfig | 10 + drivers/gpu/drm/hisilicon/hisi_drm_connector.c | 34 ++ drivers/gpu/drm/hisilicon/hisi_drm_connector.h | 8 + drivers/gpu/drm/hisilicon/hisi_drm_dsi.c | 670 +++++++++++++++++++++++++ drivers/gpu/drm/hisilicon/hisi_drm_encoder.c | 52 ++ drivers/gpu/drm/hisilicon/hisi_drm_encoder.h | 19 + drivers/gpu/drm/hisilicon/hisi_dsi_reg.h | 91 ++++ 7 files changed, 884 insertions(+) create mode 100644 drivers/gpu/drm/hisilicon/hisi_dsi_reg.h diff --git a/drivers/gpu/drm/hisilicon/Kconfig b/drivers/gpu/drm/hisilicon/Kconfig index 60b42e4..105dbcb 100644 --- a/drivers/gpu/drm/hisilicon/Kconfig +++ b/drivers/gpu/drm/hisilicon/Kconfig @@ -7,3 +7,13 @@ config DRM_HISI Choose this option if you have a hisilicon terminal chipset. If M is selected the module will be called hisi-drm. +if DRM_HISI + +config DRM_HISI_HAS_SLAVE_ENCODER + bool "Support slave encoder output" + default y + help + Support slave encoder output device such as DSI interface connecting + HDMI converter by i2c. + +endif diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_connector.c b/drivers/gpu/drm/hisilicon/hisi_drm_connector.c index 62efdc7..57ab2e8 100644 --- a/drivers/gpu/drm/hisilicon/hisi_drm_connector.c +++ b/drivers/gpu/drm/hisilicon/hisi_drm_connector.c @@ -23,8 +23,21 @@ int hisi_drm_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) { + struct hisi_connector *hconnector = to_hisi_connector(connector); + struct drm_encoder *encoder = hconnector->encoder; + struct hisi_connector_funcs *ops = hconnector->ops; + struct drm_encoder_slave_funcs *sfuncs = get_slave_funcs(encoder); int ret = MODE_OK; + if (ops->modes_valid) + ops->modes_valid(connector); + + if (sfuncs && sfuncs->mode_valid) { + ret = sfuncs->mode_valid(encoder, mode); + if (ret != MODE_OK) + return ret; + } + return ret; } @@ -39,8 +52,19 @@ hisi_drm_best_encoder(struct drm_connector *connector) int hisi_drm_get_modes(struct drm_connector *connector) { + struct hisi_connector *hconnector = to_hisi_connector(connector); + struct hisi_connector_funcs *ops = hconnector->ops; + struct drm_encoder *encoder = hconnector->encoder; + struct drm_encoder_slave_funcs *sfuncs = get_slave_funcs(encoder); int count = 0; + if (ops->get_modes) { + count += ops->get_modes(connector); + } else { + if (sfuncs && sfuncs->get_modes) + count += sfuncs->get_modes(encoder, connector); + } + return count; } @@ -59,8 +83,18 @@ void hisi_drm_connector_destroy(struct drm_connector *connector) enum drm_connector_status hisi_drm_detect(struct drm_connector *connector, bool force) { + struct hisi_connector *hconnector = to_hisi_connector(connector); + struct drm_encoder *encoder = hconnector->encoder; + struct hisi_connector_funcs *ops = hconnector->ops; + struct drm_encoder_slave_funcs *sfuncs = get_slave_funcs(encoder); enum drm_connector_status status = connector_status_unknown; + if (ops->detect) + ops->detect(connector); + + if (sfuncs && sfuncs->detect) + status = sfuncs->detect(encoder, connector); + return status; } diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_connector.h b/drivers/gpu/drm/hisilicon/hisi_drm_connector.h index 114391c..a8b8409 100644 --- a/drivers/gpu/drm/hisilicon/hisi_drm_connector.h +++ b/drivers/gpu/drm/hisilicon/hisi_drm_connector.h @@ -13,9 +13,17 @@ #ifndef __HISI_DRM_CONNECTOR_H__ #define __HISI_DRM_CONNECTOR_H__ +struct hisi_connector_funcs { + enum drm_connector_status + (*detect) (struct drm_connector *connector); + int (*get_modes)(struct drm_connector *connector); + int (*modes_valid)(struct drm_connector *connector); +}; + struct hisi_connector { struct drm_connector connector; struct drm_encoder *encoder; + void *ops; }; void hisi_drm_connector_init(struct drm_device *dev, diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c index 046fd8e..8509ced 100644 --- a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c +++ b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c @@ -12,18 +12,72 @@ #include #include +#include