From patchwork Thu Nov 17 08:47:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carlo Caione X-Patchwork-Id: 21510 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f944:0:0:0:0:0 with SMTP id q4csp285960wrr; Thu, 17 Nov 2022 00:49:03 -0800 (PST) X-Google-Smtp-Source: AA0mqf7PZts7ZmZ/mAzO8KxtyIsNeqHOcHnShMsoS3rUbTG76VeUa0m+PnXCMt2DIACawhJQ54Pb X-Received: by 2002:a17:906:814f:b0:7b2:86d6:292d with SMTP id z15-20020a170906814f00b007b286d6292dmr1253322ejw.714.1668674943243; Thu, 17 Nov 2022 00:49:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668674943; cv=none; d=google.com; s=arc-20160816; b=JAT2239D0ibTA5WxNRwK0rkupgkF8BMxxyjhWmR/KUe5k+qfduFPHsdYNTtEHhVahq uhjr180Uh6/PCynUtEN//+eWEon9zv/EQhVGbnbVS1sppEopcj7F8KgRKiqmeZOodCEZ rbaeGSBwKdE3XGeAh390RgD9aOmNi3dXRC/Erp134FlPR2hPoWJVaC6I1Ujm9vwQAMpD xFesBOvALZEFjTlp0CVSsNBE5hfsc9s4nl3bX6hso980lINNkrHGEm23giuqmRQPZcco mRGOGHS7Q2egTtCqVYpWKiTP+ugIPFMEeaSTbH4qexITzT8w3tbG4RPDD1EKORvk1/Vw EEOA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=90zm8/9EgVKMcm+GcVTwlECGEPSG+I41CMXM1RTutaE=; b=z0NXNgu3s+4oL2psYz90MI1cjJvLe6nVEgoST04oNlalL+x/NsH0YyREo5a1BKRFxo +q/SQoSqYgina4j69YHyHhWQmenReMVTc3pMKAfzlQ9Y+6S3EN6U62rBled9tRwUATtX 1R5IGDkjSnuFHGfRC9uuLVQmsLz48JpcthAIUSg4D0j5CCtcz/5/vi+a1N/WjrzCqVHA vZtPPDqQ8yLf2wvcIp/7YaPg/O59+WYll93quZ7Bvf36pqs3dG+llwke74BU5ffOEnrm sBBu4C2jI02q+piXOje6w4w/E288EPKAxSuiku5k2uN04bJFYpbXRqXyaY1RJinoOXVD hDGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@baylibre-com.20210112.gappssmtp.com header.s=20210112 header.b=UnkavLeF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id et19-20020a170907295300b0078d9cec6a5asi105216ejc.191.2022.11.17.00.48.39; Thu, 17 Nov 2022 00:49:03 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@baylibre-com.20210112.gappssmtp.com header.s=20210112 header.b=UnkavLeF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239665AbiKQIsC (ORCPT + 99 others); Thu, 17 Nov 2022 03:48:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239401AbiKQIr4 (ORCPT ); Thu, 17 Nov 2022 03:47:56 -0500 Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E45E9101F0 for ; Thu, 17 Nov 2022 00:47:54 -0800 (PST) Received: by mail-ed1-x52b.google.com with SMTP id a5so1501260edb.11 for ; Thu, 17 Nov 2022 00:47:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20210112.gappssmtp.com; s=20210112; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=90zm8/9EgVKMcm+GcVTwlECGEPSG+I41CMXM1RTutaE=; b=UnkavLeF63kWpP4dt3DH3oo2hhLFs7VsnslG4t92oUQapu5uMsW0U6XFO9MEi+swRX /ohsTvFbJwQ0scQ1IYNcwQ/z036JyCSL0TqusFH7ceidILUrvk9jSNNs0P9hFMLeNW+V FGnwjC0/0OhODR4CMHeGQJEp+HL0G5XlSqf8wbQ4bMqMUukKA+CgfLE/W1wbO98Xf7iN k06oxVsEINbbzZzifkn9cqEmMGs7wwacRRZd+8Ve+L2FKO7hiz1X87dxyTl4uoSBMU72 YNLwzVDpkjjxtc3OOUB8AyHI7mAPRzIMpufnKutmnF3+8449KHQfp5KX81vW6GMUPufg IU7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=90zm8/9EgVKMcm+GcVTwlECGEPSG+I41CMXM1RTutaE=; b=rBdN8QRBbWRxqa3XmvqVC9sUn8TU+6dsITy6/mpq3YnUO234PlcrmN/V/qx8+z8tPV JfXeRKR8f8HD0xrkfP/KGt0XGeqWwuzur4/DgLHC7xEd7OgXSTumkbQYWg3vfo8Qpqt+ XK7AQ+9F3lvD8gxEwU1bOjKytUgDpexBn/b31KCqfp0+f2oR+8aiLAvRF830OgsFE5JT 5I3YRUCQwnhGKMLlyvtjk9kZc+2RubjJHf+FhT6+QU8t667FZ96I17q6hLob8W2kHoWC 6so6roc/TnHQHd8kPKFxdrMziGJFC7QYnhs8McAaN19tZWuJwhbuCMr0o7jzdEG51dZ7 9HZw== X-Gm-Message-State: ANoB5pnOr7wAL1JeRFAbJz9tUXGbi+Y1loycTArH+WQBlZQgUOJI1NcM fbjlwbGq0cfw/BjUrkSN6CUERg== X-Received: by 2002:aa7:d1c5:0:b0:461:dd11:c1bd with SMTP id g5-20020aa7d1c5000000b00461dd11c1bdmr1207044edp.406.1668674873463; Thu, 17 Nov 2022 00:47:53 -0800 (PST) Received: from [127.0.1.1] ([2a0e:41a:894f:0:7a60:27eb:954c:5ab1]) by smtp.gmail.com with ESMTPSA id s22-20020a1709067b9600b0077205dd15basm77332ejo.66.2022.11.17.00.47.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Nov 2022 00:47:53 -0800 (PST) From: Carlo Caione Date: Thu, 17 Nov 2022 09:47:40 +0100 Subject: [PATCH 2/3] drm/tiny: ili9486: Do not assume 8-bit only SPI controllers MIME-Version: 1.0 Message-Id: <20221116-s905x_spi_ili9486-v1-2-630401cb62d5@baylibre.com> References: <20221116-s905x_spi_ili9486-v1-0-630401cb62d5@baylibre.com> In-Reply-To: <20221116-s905x_spi_ili9486-v1-0-630401cb62d5@baylibre.com> To: Kamlesh Gurudasani , Mark Brown , Neil Armstrong , Jerome Brunet , David Airlie , Martin Blumenstingl , Kevin Hilman , Daniel Vetter Cc: linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, dri-devel@lists.freedesktop.org, Carlo Caione X-Mailer: b4 0.10.1 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749732497110556974?= X-GMAIL-MSGID: =?utf-8?q?1749732497110556974?= The ILI9486 driver is wrongly assuming that the SPI panel is interfaced only with 8-bit SPI controllers and consequently that the pixel data passed by the MIPI DBI subsystem are already swapped before being sent over SPI using 8 bits-per-word. This is not always true for all the SPI controllers. Make the command function more general to not only support 8-bit only SPI controllers and support sending un-swapped data over SPI using 16 bits-per-word when dealing with pixel data. Signed-off-by: Carlo Caione --- drivers/gpu/drm/tiny/ili9486.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/tiny/ili9486.c b/drivers/gpu/drm/tiny/ili9486.c index bd37dfe8dd05..4d80a413338f 100644 --- a/drivers/gpu/drm/tiny/ili9486.c +++ b/drivers/gpu/drm/tiny/ili9486.c @@ -43,6 +43,7 @@ static int waveshare_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par, size_t num) { struct spi_device *spi = mipi->spi; + unsigned int bpw = 8; void *data = par; u32 speed_hz; int i, ret; @@ -56,8 +57,6 @@ static int waveshare_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par, * The displays are Raspberry Pi HATs and connected to the 8-bit only * SPI controller, so 16-bit command and parameters need byte swapping * before being transferred as 8-bit on the big endian SPI bus. - * Pixel data bytes have already been swapped before this function is - * called. */ buf[0] = cpu_to_be16(*cmd); gpiod_set_value_cansleep(mipi->dc, 0); @@ -71,12 +70,18 @@ static int waveshare_command(struct mipi_dbi *mipi, u8 *cmd, u8 *par, for (i = 0; i < num; i++) buf[i] = cpu_to_be16(par[i]); num *= 2; - speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num); data = buf; } + /* + * Check whether pixel data bytes needs to be swapped or not + */ + if (*cmd == MIPI_DCS_WRITE_MEMORY_START && !mipi->swap_bytes) + bpw = 16; + gpiod_set_value_cansleep(mipi->dc, 1); - ret = mipi_dbi_spi_transfer(spi, speed_hz, 8, data, num); + speed_hz = mipi_dbi_spi_cmd_max_speed(spi, num); + ret = mipi_dbi_spi_transfer(spi, speed_hz, bpw, data, num); free: kfree(buf);