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: 10714115 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6851E13AF for ; Wed, 5 Dec 2018 13:03:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A70A6287B6 for ; Wed, 5 Dec 2018 13:03:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 962432CEE4; Wed, 5 Dec 2018 13:03:36 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id A4EAB2CEE2 for ; Wed, 5 Dec 2018 13:03:35 +0000 (UTC) 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=EkslAbW4OSeZGapjpUxqgI5BcgQ1aDOPvDQn7Z39XiY=; b=my+5MVlwv3moom e2/1bfxXzMTqvPbhUGia4Gein/nVe44MKzEJD5+7CX4VVTtX9zCPhDRibldBOX/tWdySYwgZJ7pY+ igV+XuQmbl2FPp/Lnhy9PPNO+UyDFS8YaDXL+uimJ8xnmYPft1kkvPAis3PSM15vKyL1h+oQ358aF f2CUF3qnwDy83MXKlei3JQGaIsszR8gTYcLLBBb9k7ZsVV4DciXGBL9EL8JvwQwnQyDrG7rje44nX VGQ3i1Jpdj7or1glLvAF03lH9zyOAKKsTGRNpaLqUZU+YbZjdakWucInqja4erhq2VaL/ap1cABYl 9NGzBSZFrN9DNdOUk1cw==; 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 1gUWpw-0002yK-00; Wed, 05 Dec 2018 13:03:32 +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_R=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-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Heiko Stuebner , =?utf-8?q?Richard_R=C3=B6jfors?= Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP 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);