Received: by 2002:a05:6520:4211:b029:f4:110d:56bc with SMTP id o17csp2093967lkv; Thu, 20 May 2021 03:16:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2Ca/bKURQFVlLaACW1MsiD2uIFNy4PwAiwNkbUiu/guGELq3F3RqDLpNOSX1lBgI+RTdt X-Received: by 2002:a17:906:a1d2:: with SMTP id bx18mr3824714ejb.423.1621505786702; Thu, 20 May 2021 03:16:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621505786; cv=none; d=google.com; s=arc-20160816; b=VqYBoNARAhlLUe1HgziYTjAv55ojngdD3cQRg82PFwHlvpYfeTndYiXMQjqs0t0Srm DOVaQfk3BIWoVNLsS2VM9riaO8t6KvTQk53SNIR+Aaxd1SVqCFQZXtGaBuss0omBk+ku xTw1loDPMSI863bKNDd7sAeP+dcQicgR3lr2YVkTOKr9cgrhwitdvNztfKp8nTIp0IT3 3DGGUw4Ra91lp3RU8hxyPEyTMwp0BF6NM7ybpiiMo1coCwc4sNKSlJ2GoIOu2CCANiEI aEvSnO/gZpNt/OUfuLd5y4yH7Ot2zM4+1yx0ZcD2K1hfEmbWItenpF+pYs/PtMHf6qeK zAxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:content-disposition:mime-version :message-id:subject:to:from:date; bh=vuHkKg1MBKlgquQRzGuBIfvPrxp4ghpN1xJ4YqiPUJ0=; b=prdA27GQaKi7mXJgrP2owJopx5pneu+MKSxRjWlPO17ompyguSWeo6pBTNSesLuTZx V12u73+g1x0pZfh7GshQZ1MUj/Asr9nHutynixtft/L8tddCjoh35U4fDRaa3n0+xe7U Tmr35zk4GpVxsRGjNK9lO93Wc8012IUqALoz0CNypNXU0hyy3xS935hw9HMbRFg+eGzd Kbfrm75E+PtB/MmuTLM45YG0s8CeFvQvkDRyKlBCxY1yg5iHdhw2wN2teXoG11nEvulP nC3p2HmiRFIW/d5/YvdmE9jxfSu2X3KfMt8+R8eJ6cHtfWZzrz2Al7+2iFwd4W0mYIZm GxVQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u22si1848675edq.34.2021.05.20.03.15.58; Thu, 20 May 2021 03:16:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236420AbhETKPL (ORCPT + 99 others); Thu, 20 May 2021 06:15:11 -0400 Received: from tux.runtux.com ([176.9.82.136]:43702 "EHLO tux.runtux.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234987AbhETKI2 (ORCPT ); Thu, 20 May 2021 06:08:28 -0400 X-Greylist: delayed 384 seconds by postgrey-1.27 at vger.kernel.org; Thu, 20 May 2021 06:08:27 EDT Received: from localhost (localhost [127.0.0.1]) by tux.runtux.com (Postfix) with ESMTP id 90D2F6F0C7; Thu, 20 May 2021 12:06:58 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at tux.runtux.com Received: from tux.runtux.com ([127.0.0.1]) by localhost (tux2.runtux.com [127.0.0.1]) (amavisd-new, port 10026) with LMTP id SlQcJyNvDttS; Thu, 20 May 2021 12:06:57 +0200 (CEST) Received: from bee.priv.zoo (62-99-217-90.static.upcbusiness.at [62.99.217.90]) (Authenticated sender: postmaster@runtux.com) by tux.runtux.com (Postfix) with ESMTPSA id 099B66EFFE; Thu, 20 May 2021 12:06:57 +0200 (CEST) Received: by bee.priv.zoo (Postfix, from userid 1002) id 8D429471; Thu, 20 May 2021 12:06:56 +0200 (CEST) Date: Thu, 20 May 2021 12:06:56 +0200 From: Ralf Schlatterbeck To: Mark Brown , Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , linux-spi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-kernel@vger.kernel.org, Mirko Vogt Subject: [PATCH 1/1] spi-sun6i: Fix chipselect/clock bug Message-ID: <20210520100656.rgkdexdvrddt3upy@runtux.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline X-ray: beware User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The current sun6i SPI implementation initializes the transfer too early, resulting in SCK going high before the transfer. When using an additional (gpio) chipselect with sun6i, the chipselect is asserted at a time when clock is high, making the SPI transfer fail. This is due to SUN6I_GBL_CTL_BUS_ENABLE being written into SUN6I_GBL_CTL_REG at an early stage. Moving that to the transfer function, hence, right before the transfer starts, mitigates that problem. Signed-off-by: Ralf Schlatterbeck Signed-off-by: Mirko Vogt --- For oscilloscope screenshots with/without the patch, see my blog post https://blog.runtux.com/posts/2019/04/18/ or the discussion in the armbian forum at https://forum.armbian.com/topic/4330-spi-gpio-chip-select-support/ (my logo there is a penguin). drivers/spi/spi-sun6i.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/spi/spi-sun6i.c b/drivers/spi/spi-sun6i.c index cc8401980125..2db075c87f51 100644 --- a/drivers/spi/spi-sun6i.c +++ b/drivers/spi/spi-sun6i.c @@ -379,6 +379,10 @@ static int sun6i_spi_transfer_one(struct spi_master *master, } sun6i_spi_write(sspi, SUN6I_CLK_CTL_REG, reg); + /* Finally enable the bus - doing so before might raise SCK to HIGH */ + sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, + sun6i_spi_read(sspi, SUN6I_GBL_CTL_REG) + | SUN6I_GBL_CTL_BUS_ENABLE); /* Setup the transfer now... */ if (sspi->tx_buf) @@ -504,7 +508,7 @@ static int sun6i_spi_runtime_resume(struct device *dev) } sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, - SUN6I_GBL_CTL_BUS_ENABLE | SUN6I_GBL_CTL_MASTER | SUN6I_GBL_CTL_TP); + SUN6I_GBL_CTL_MASTER | SUN6I_GBL_CTL_TP); return 0; -- 2.20.1