From: Alban Bedel <albeu@free.fr>
To: linux-kernel@vger.kernel.org
Cc: Alban Bedel <albeu@free.fr>, Mark Brown <broonie@kernel.org>,
linux-spi@vger.kernel.org
Subject: [PATCH 2/6] spi: ath79: Simplify ath79_spi_chipselect()
Date: Wed, 16 Jan 2019 19:55:45 +0100 [thread overview]
Message-ID: <20190116185549.23295-2-albeu@free.fr> (raw)
In-Reply-To: <20190116185549.23295-1-albeu@free.fr>
First of all this callback was slightly misused to setup the clock
polarity at the beginning of a transfer. Beside being at the wrong
place, it is also useless as only SPI mode 1 is supported. Instead
just make sure the base value used for IOC is suitable to start a
transfer by clearing the clock and data bits during the controller
setup.
This also remove the last direct usage of the GPIO API, so we can
remove the direct dependency on GPIOLIB.
Signed-off-by: Alban Bedel <albeu@free.fr>
---
drivers/spi/Kconfig | 2 +-
drivers/spi/spi-ath79.c | 40 +++++++++-------------------------------
2 files changed, 10 insertions(+), 32 deletions(-)
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index dc67eda1788a..128892c7e21e 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -63,7 +63,7 @@ config SPI_ALTERA
config SPI_ATH79
tristate "Atheros AR71XX/AR724X/AR913X SPI controller driver"
- depends on ATH79 && GPIOLIB
+ depends on ATH79
select SPI_BITBANG
help
This enables support for the SPI controller present on the
diff --git a/drivers/spi/spi-ath79.c b/drivers/spi/spi-ath79.c
index ed1068ac055f..edf695a359f4 100644
--- a/drivers/spi/spi-ath79.c
+++ b/drivers/spi/spi-ath79.c
@@ -21,7 +21,6 @@
#include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h>
#include <linux/bitops.h>
-#include <linux/gpio/consumer.h>
#include <linux/clk.h>
#include <linux/err.h>
@@ -67,38 +66,14 @@ static void ath79_spi_chipselect(struct spi_device *spi, int is_active)
{
struct ath79_spi *sp = ath79_spidev_to_sp(spi);
int cs_high = (spi->mode & SPI_CS_HIGH) ? is_active : !is_active;
+ u32 cs_bit = AR71XX_SPI_IOC_CS(spi->chip_select);
- if (is_active) {
- /* set initial clock polarity */
- if (spi->mode & SPI_CPOL)
- sp->ioc_base |= AR71XX_SPI_IOC_CLK;
- else
- sp->ioc_base &= ~AR71XX_SPI_IOC_CLK;
-
- ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
- }
-
- if (spi->cs_gpiod) {
- /*
- * SPI chipselect is normally active-low, but
- * inversion semantics are handled by gpiolib.
- *
- * FIXME: is this ever used? The driver doesn't
- * set SPI_MASTER_GPIO_SS so this callback should not
- * get called if a CS GPIO is found by the SPI core.
- */
- gpiod_set_value_cansleep(spi->cs_gpiod, is_active);
- } else {
- u32 cs_bit = AR71XX_SPI_IOC_CS(spi->chip_select);
-
- if (cs_high)
- sp->ioc_base |= cs_bit;
- else
- sp->ioc_base &= ~cs_bit;
-
- ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
- }
+ if (cs_high)
+ sp->ioc_base |= cs_bit;
+ else
+ sp->ioc_base &= ~cs_bit;
+ ath79_spi_wr(sp, AR71XX_SPI_REG_IOC, sp->ioc_base);
}
static void ath79_spi_enable(struct ath79_spi *sp)
@@ -110,6 +85,9 @@ static void ath79_spi_enable(struct ath79_spi *sp)
sp->reg_ctrl = ath79_spi_rr(sp, AR71XX_SPI_REG_CTRL);
sp->ioc_base = ath79_spi_rr(sp, AR71XX_SPI_REG_IOC);
+ /* clear clk and mosi in the base state */
+ sp->ioc_base &= ~(AR71XX_SPI_IOC_DO | AR71XX_SPI_IOC_CLK);
+
/* TODO: setup speed? */
ath79_spi_wr(sp, AR71XX_SPI_REG_CTRL, 0x43);
}
--
2.19.1
next prev parent reply other threads:[~2019-01-16 18:55 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-16 18:55 [PATCH 1/6] spi: bitbang: Don't call chipselect() in spi_bitbang_setup() Alban Bedel
2019-01-16 18:55 ` Alban Bedel [this message]
2019-01-17 12:40 ` Applied "spi: ath79: Simplify ath79_spi_chipselect()" to the spi tree Mark Brown
2019-01-16 18:55 ` [PATCH 3/6] spi: ath79: Enable support for compile test Alban Bedel
2019-01-17 12:40 ` Applied "spi: ath79: Enable support for compile test" to the spi tree Mark Brown
2019-01-16 18:55 ` [PATCH 4/6] spi: ath79: Remove now useless code Alban Bedel
2019-01-17 12:40 ` Applied "spi: ath79: Remove now useless code" to the spi tree Mark Brown
2019-01-16 18:55 ` [PATCH 5/6] spi: ath79: Remove some useless includes Alban Bedel
2019-01-16 20:06 ` Joe Perches
2019-01-17 12:40 ` Applied "spi: bitbang: Don't call chipselect() in spi_bitbang_setup()" to the spi tree Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190116185549.23295-2-albeu@free.fr \
--to=albeu@free.fr \
--cc=broonie@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-spi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).