From patchwork Wed Dec 5 13:02:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Richard_R=C3=B6jfors?= X-Patchwork-Id: 1008228 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Agw9VWEZ"; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nmIVDgvP"; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 438zSH5Pvhz9sBh for ; Thu, 6 Dec 2018 00:03:27 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To :From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=JOU/0CZNS4yFzY8z+qozseKAtdJKWRh+Z3xpoHA1ymQ=; b=Agw9VWEZAiqqel mnhx0MJsf1EiDIbGkUT4X9e8VxYkgRGo78Pxzv/Yc4gNQYd9dAlub4xVvMx/Lr4zaKq432n/o1u/L xynxl1AGr8ydZihWuiXMnTmNAALpGXjOTEmd2O94qpkQxRFzdl6A8J6jYM9kqB3X8wr/z53tNbmwR Jcqegcro+sHcEdMpp9txmk9eIg5XovkiCyoHeJ1HhlQ0UZxd+sP1fustTSIkoD9yj74xhbcvnNRfO pBJsC+IwYnFN6BUk2bOqguQ9dGldkhdu3wQTRQRGZcWAssrW24ijDXNdrtfeXk1Rkl/OZXv1L+6fX GLScMiiwD03G3uZXYvfQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUWpm-0002oO-88; Wed, 05 Dec 2018 13:03:22 +0000 Received: from mail-lf1-x141.google.com ([2a00:1450:4864:20::141]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1gUWpi-0002e2-8o; Wed, 05 Dec 2018 13:03:19 +0000 Received: by mail-lf1-x141.google.com with SMTP id a16so14665011lfg.3; Wed, 05 Dec 2018 05:03:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=iUtbnnUbK/Q6AFvywUasR5BVnWy2hzFrr7nV15jhZEU=; b=nmIVDgvPMnpPfGE7qp0O6ygIVYhKcIucNKzd0UzdyFgxLWn2bLYV71MrT8j3aB6UaH RxP7o6ynqCPgVfuYWv7gya3+974QAFr613ACt03ULNoji3dicqxm3RjKXO+5znDwZemX 0hMrLXGeZvsmAyxfdnC0Zw587K0ODD1Av4j3KFPhncTH9gODPuRTbO+bJBh3ETRFk6Gn 6yN7XYRqhbSRXnqDzFr5ihDpO56nifsJNw1vNwrwdjO+hgo4ZuvjMzJC3jThOodbPCOr JA/r7RlTUydS+VZrtc86HdQ7frUe9mwM5XPsyZJfjDLqA8N+6qjPfA0bNBrDbThYaXZw pHvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=iUtbnnUbK/Q6AFvywUasR5BVnWy2hzFrr7nV15jhZEU=; b=Y+cQzz3Jsle2VZue1YGEa1+i+Yc4r6X1YUqnu+c7TumoOBMnNUYsug8AamrO2VflSw YFstzg7wpVALLgCjN9lQKiD4bVbCzN6dnIq/JFFqfsU8ZDbQDs/0M+AvkVRGicfJ+hve jBAl+pOFj4GrNDV29tr55oZe1QMYLYwY3R6pNTRWnPabWhNfTE4YFXxUg2wxZOPnezG4 jLiX7GKtuoZ5hDBJbe0hd6Fi7+Bw36hooLMariYzM7UkqmkmNwe2vjLZvbDts3ozU3SK f+YRoeauiDGgK0Nqgs/4joLZv9QO7V7JEqPUqzqF0In06Kh79A2z/Myyb8JSFpGoKwXc vSbg== X-Gm-Message-State: AA+aEWaKONWYd+RLHCkTQToqnTm8hWYUH7oBu3ZQpWr44PBwHMuL68c+ ooWJ8cEj1KfdyvpweFUTDwPpu6ol X-Google-Smtp-Source: AFSGD/W+8D9l/IhbulHk0Tb8g73naE8nhGczi9k8gLcKChhncKeMyvrZmuj+QiOjWZdrc7Z7LqFlvQ== X-Received: by 2002:a19:2395:: with SMTP id j143mr13833840lfj.107.1544014985064; Wed, 05 Dec 2018 05:03:05 -0800 (PST) Received: from xellan.internal.elektron.se ([80.252.208.56]) by smtp.gmail.com with ESMTPSA id q4-v6sm3688062ljb.4.2018.12.05.05.03.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 05 Dec 2018 05:03:04 -0800 (PST) From: "=?UTF-8?q?Richard=20R=C3=B6jfors?=" X-Google-Original-From: =?utf-8?q?Richard_R=C3=B6jfors?= To: linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org Subject: [PATCH] drm/rockchip: dw-mipi-dsi: Support MIPI_DSI_DCS_READ Date: Wed, 5 Dec 2018 14:02:43 +0100 Message-Id: <20181205130243.5810-1-richard@puffinpack.se> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20181205_050318_332298_B2B8C38D X-CRM114-Status: GOOD ( 12.32 ) X-Spam-Score: -0.2 (/) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-0.2 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [2a00:1450:4864:20:0:0:0:141 listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (richard.rojfors[at]gmail.com) -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Heiko Stuebner , =?utf-8?q?Richard_R=C3=B6jfors?= Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org List-Id: linux-imx-kernel.lists.patchwork.ozlabs.org There is sometimes a need to be able to read from the other end for instance to identify panels. Signed-off-by: Richard Röjfors --- drivers/gpu/drm/rockchip/dw-mipi-dsi.c | 50 ++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c index 662b6cb5d3f0..88403954f3c4 100644 --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi.c +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi.c @@ -719,6 +719,53 @@ static int dw_mipi_dsi_dcs_long_write(struct dw_mipi_dsi *dsi, return dw_mipi_dsi_gen_pkt_hdr_write(dsi, hdr_val); } +static int dw_mipi_dsi_dcs_read(struct dw_mipi_dsi *dsi, + const struct mipi_dsi_msg *msg) +{ + int ret; + int bytes_read = 0; + u32 status; + + ret = dw_mipi_dsi_dcs_short_write(dsi, msg); + if (ret < 0) { + DRM_DEV_ERROR(dsi->dev, "failed to issue read command\n"); + return ret; + } + + /* Loop and empty the RX FIFO */ + do { + u32 val; + + /* Wait for data to reach the fifo or command termination */ + ret = readl_poll_timeout(dsi->base + DSI_CMD_PKT_STATUS, + val, ((val & GEN_PLD_R_EMPTY)) == 0 || + ((val & GEN_RD_CMD_BUSY) == 0), + 1000, CMD_PKT_STATUS_TIMEOUT_US); + if (ret < 0) { + DRM_DEV_ERROR(dsi->dev, + "failed to read payload from FIFO\n"); + return ret; + } + + status = dsi_read(dsi, DSI_CMD_PKT_STATUS); + + if ((status & GEN_PLD_R_EMPTY) == 0) { + int i; + u8 *rx_buf = msg->rx_buf; + + val = dsi_read(dsi, DSI_GEN_PLD_DATA); + + for (i = 0; i < sizeof(u32) && bytes_read < msg->rx_len; + i++) { + rx_buf[bytes_read++] = val & 0xff; + val >>= 8; + } + } + } while ((status & GEN_PLD_R_EMPTY) == 0); + + return bytes_read; +} + static ssize_t dw_mipi_dsi_host_transfer(struct mipi_dsi_host *host, const struct mipi_dsi_msg *msg) { @@ -736,6 +783,9 @@ static ssize_t dw_mipi_dsi_host_transfer(struct mipi_dsi_host *host, case MIPI_DSI_DCS_LONG_WRITE: ret = dw_mipi_dsi_dcs_long_write(dsi, msg); break; + case MIPI_DSI_DCS_READ: + ret = dw_mipi_dsi_dcs_read(dsi, msg); + break; default: DRM_DEV_ERROR(dsi->dev, "unsupported message type 0x%02x\n", msg->type);