Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1407007pxj; Fri, 21 May 2021 13:30:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy3EyOiYJ68Y8+IeX7dVd0Sl1OoJhJn0OmWlTvXphwafjZbuP4LhQOqFjjRiojNQDhsjsK4 X-Received: by 2002:a4a:be86:: with SMTP id o6mr9602025oop.67.1621629049472; Fri, 21 May 2021 13:30:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621629049; cv=none; d=google.com; s=arc-20160816; b=Km5cq652vDngHZ5FH2E9eOcFQA8Cd9mrfXusZJCbcVpstAV478tdIO5yCrNTO4Lo98 /RCi4CAfCDlFU3DXSv1YDMH+yfGrqRKtAxJwEjO4+pr2v4YtZwKSlR/keJZLGZ4D8KYP c+ydL9dPDVmI2ZcyMOhYGK5UWIr9kCuERcUw2HzrN9XF6OUjQ3p6bMdTmffNI3iwpfCk o0EAdhJ5x5LGSo4Z14eCuSUNIY0Y9oNs2KY5PcrxjDeZ0PnVG1QvnMrsp8LmxcLIlXRw b3XfklfZ/ldeRLiYc4/Plbl67bDP6C/T5RtJV7sc4jrRzrAktY8qTFI0ENFN94C4LT5p aaVA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=Sdba+QsRi5D+9K59pj6sZQeyS78V/gkF6zH3cr02ETI=; b=Ys59jwKsYQCxL7oOUHJl9iJ3noN2vZHyl/hqIYQJwY2a79Uy/g0B1zwhK/JHR21gRL NAApFaPIOVS9H+/zBi2vmu9PtuNYK+whUp0o1GTRmVtOXrdjRnCgBIm5kqn0DQuAOjOm X2zvs+JXDJVjAPuCUQwro7ArpkmcWFoXZexH2WbB0xFgg9lhsWr4orY74VD7/2FoOK2h IK6qEjrb6nIxyL0nQmhhbo4yj6dIeN/gX4xQdRyJBdEnvBTnsLYsKm6hk84HQJk5S6gb 01mCRom2PEc6eg6ElbKwxIa0Vo8SKC4LGx8y9mxJy0ZiaHXl7DDPTeCyls//6ks98aRX N3sw== 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 b9si6838214ilj.58.2021.05.21.13.30.35; Fri, 21 May 2021 13:30:49 -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 S230317AbhEUUUn (ORCPT + 99 others); Fri, 21 May 2021 16:20:43 -0400 Received: from tux.runtux.com ([176.9.82.136]:39680 "EHLO tux.runtux.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230297AbhEUUUm (ORCPT ); Fri, 21 May 2021 16:20:42 -0400 Received: from localhost (localhost [127.0.0.1]) by tux.runtux.com (Postfix) with ESMTP id DE1E96F00A; Fri, 21 May 2021 22:19:15 +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 idEQAUquvFTc; Fri, 21 May 2021 22:19:14 +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 EBA096EF63; Fri, 21 May 2021 22:19:13 +0200 (CEST) Received: by bee.priv.zoo (Postfix, from userid 1002) id 9233046E; Fri, 21 May 2021 22:19:13 +0200 (CEST) Date: Fri, 21 May 2021 22:19:13 +0200 From: Ralf Schlatterbeck To: Andre Przywara Cc: 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: <20210521201913.2gapcmrzynxekro7@runtux.com> References: <20210520100656.rgkdexdvrddt3upy@runtux.com> <20210521173011.1c602682@slackpad.fritz.box> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20210521173011.1c602682@slackpad.fritz.box> X-ray: beware User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Mirko Vogt 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: Mirko Vogt Signed-off-by: Ralf Schlatterbeck --- Updated patch with suggested improvements by Andre Przywara 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..23ad052528db 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 */ + reg = sun6i_spi_read(sspi, SUN6I_GBL_CTL_REG); + reg |= SUN6I_GBL_CTL_BUS_ENABLE; + sun6i_spi_write(sspi, SUN6I_GBL_CTL_REG, reg); /* 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