All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandru Ardelean <alexandru.ardelean@analog.com>
To: linux-spi@vger.kernel.org, linux-iio@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org,
	bcm-kernel-feedback-list@broadcom.com
Cc: jic23@kernel.org, broonie@kernel.org, f.fainelli@gmail.com,
	linus.walleij@linaro.org, orsonzhai@gmail.com,
	baolin.wang@linaro.org, zhang.lyra@gmail.com,
	Alexandru Ardelean <alexandru.ardelean@analog.com>
Subject: [RFC PATCH 05/15] spi: sprd: convert transfer word delay to spi_delay struct
Date: Fri, 13 Sep 2019 14:45:40 +0300	[thread overview]
Message-ID: <20190913114550.956-6-alexandru.ardelean@analog.com> (raw)
In-Reply-To: <20190913114550.956-1-alexandru.ardelean@analog.com>

The Spreadtrum SPI driver is the only user of the `word_delay` field in
the `spi_transfer` struct.

This change converts the field to use the `spi_delay` struct. This also
enforces the users to specify the delay unit to be `SPI_DELAY_UNIT_SCK`.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/spi/spi-sprd.c  | 11 +++++++++--
 include/linux/spi/spi.h |  4 ++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c
index 1b7eebb72c07..5634cd3e4a8d 100644
--- a/drivers/spi/spi-sprd.c
+++ b/drivers/spi/spi-sprd.c
@@ -671,9 +671,13 @@ static void sprd_spi_set_speed(struct sprd_spi *ss, u32 speed_hz)
 
 static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 {
+	struct spi_delay *d = &t->word_delay;
 	u16 word_delay, interval;
 	u32 val;
 
+	if (t->unit != SPI_DELAY_UNIT_SCK)
+		return -EINVAL;
+
 	val = readl_relaxed(ss->base + SPRD_SPI_CTL7);
 	val &= ~(SPRD_SPI_SCK_REV | SPRD_SPI_NG_TX | SPRD_SPI_NG_RX);
 	/* Set default chip selection, clock phase and clock polarity */
@@ -686,7 +690,7 @@ static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 	 * formula as below per datasheet:
 	 * interval time (source clock cycles) = interval * 4 + 10.
 	 */
-	word_delay = clamp_t(u16, t->word_delay, SPRD_SPI_MIN_DELAY_CYCLE,
+	word_delay = clamp_t(u16, d->value, SPRD_SPI_MIN_DELAY_CYCLE,
 			     SPRD_SPI_MAX_DELAY_CYCLE);
 	interval = DIV_ROUND_UP(word_delay - 10, 4);
 	ss->word_delay = interval * 4 + 10;
@@ -719,13 +723,16 @@ static int sprd_spi_setup_transfer(struct spi_device *sdev,
 	struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller);
 	u8 bits_per_word = t->bits_per_word;
 	u32 val, mode = 0;
+	int ret;
 
 	ss->len = t->len;
 	ss->tx_buf = t->tx_buf;
 	ss->rx_buf = t->rx_buf;
 
 	ss->hw_mode = sdev->mode;
-	sprd_spi_init_hw(ss, t);
+	ret = sprd_spi_init_hw(ss, t);
+	if (ret)
+		return ret;
 
 	/* Set tansfer speed and valid bits */
 	sprd_spi_set_speed(ss, t->speed_hz);
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 9ded3f44d58e..16397b210e0c 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -759,7 +759,7 @@ extern void spi_res_release(struct spi_controller *ctlr,
  *	the next transfer or completing this @spi_message.
  * @word_delay_usecs: microseconds to inter word delay after each word size
  *	(set by bits_per_word) transmission.
- * @word_delay: clock cycles to inter word delay after each word size
+ * @word_delay: inter word delay to be introduced after each word size
  *	(set by bits_per_word) transmission.
  * @effective_speed_hz: the effective SCK-speed that was used to
  *      transfer this transfer. Set to 0 if the spi bus driver does
@@ -847,8 +847,8 @@ struct spi_transfer {
 	u8		word_delay_usecs;
 	u16		delay_usecs;
 	struct spi_delay	cs_change_delay;
+	struct spi_delay	word_delay;
 	u32		speed_hz;
-	u16		word_delay;
 
 	u32		effective_speed_hz;
 
-- 
2.20.1

WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Ardelean <alexandru.ardelean@analog.com>
To: <linux-spi@vger.kernel.org>, <linux-iio@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<bcm-kernel-feedback-list@broadcom.com>
Cc: <jic23@kernel.org>, <broonie@kernel.org>, <f.fainelli@gmail.com>,
	<linus.walleij@linaro.org>, <orsonzhai@gmail.com>,
	<baolin.wang@linaro.org>, <zhang.lyra@gmail.com>,
	Alexandru Ardelean <alexandru.ardelean@analog.com>
Subject: [RFC PATCH 05/15] spi: sprd: convert transfer word delay to spi_delay struct
Date: Fri, 13 Sep 2019 14:45:40 +0300	[thread overview]
Message-ID: <20190913114550.956-6-alexandru.ardelean@analog.com> (raw)
In-Reply-To: <20190913114550.956-1-alexandru.ardelean@analog.com>

The Spreadtrum SPI driver is the only user of the `word_delay` field in
the `spi_transfer` struct.

This change converts the field to use the `spi_delay` struct. This also
enforces the users to specify the delay unit to be `SPI_DELAY_UNIT_SCK`.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/spi/spi-sprd.c  | 11 +++++++++--
 include/linux/spi/spi.h |  4 ++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c
index 1b7eebb72c07..5634cd3e4a8d 100644
--- a/drivers/spi/spi-sprd.c
+++ b/drivers/spi/spi-sprd.c
@@ -671,9 +671,13 @@ static void sprd_spi_set_speed(struct sprd_spi *ss, u32 speed_hz)
 
 static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 {
+	struct spi_delay *d = &t->word_delay;
 	u16 word_delay, interval;
 	u32 val;
 
+	if (t->unit != SPI_DELAY_UNIT_SCK)
+		return -EINVAL;
+
 	val = readl_relaxed(ss->base + SPRD_SPI_CTL7);
 	val &= ~(SPRD_SPI_SCK_REV | SPRD_SPI_NG_TX | SPRD_SPI_NG_RX);
 	/* Set default chip selection, clock phase and clock polarity */
@@ -686,7 +690,7 @@ static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 	 * formula as below per datasheet:
 	 * interval time (source clock cycles) = interval * 4 + 10.
 	 */
-	word_delay = clamp_t(u16, t->word_delay, SPRD_SPI_MIN_DELAY_CYCLE,
+	word_delay = clamp_t(u16, d->value, SPRD_SPI_MIN_DELAY_CYCLE,
 			     SPRD_SPI_MAX_DELAY_CYCLE);
 	interval = DIV_ROUND_UP(word_delay - 10, 4);
 	ss->word_delay = interval * 4 + 10;
@@ -719,13 +723,16 @@ static int sprd_spi_setup_transfer(struct spi_device *sdev,
 	struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller);
 	u8 bits_per_word = t->bits_per_word;
 	u32 val, mode = 0;
+	int ret;
 
 	ss->len = t->len;
 	ss->tx_buf = t->tx_buf;
 	ss->rx_buf = t->rx_buf;
 
 	ss->hw_mode = sdev->mode;
-	sprd_spi_init_hw(ss, t);
+	ret = sprd_spi_init_hw(ss, t);
+	if (ret)
+		return ret;
 
 	/* Set tansfer speed and valid bits */
 	sprd_spi_set_speed(ss, t->speed_hz);
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 9ded3f44d58e..16397b210e0c 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -759,7 +759,7 @@ extern void spi_res_release(struct spi_controller *ctlr,
  *	the next transfer or completing this @spi_message.
  * @word_delay_usecs: microseconds to inter word delay after each word size
  *	(set by bits_per_word) transmission.
- * @word_delay: clock cycles to inter word delay after each word size
+ * @word_delay: inter word delay to be introduced after each word size
  *	(set by bits_per_word) transmission.
  * @effective_speed_hz: the effective SCK-speed that was used to
  *      transfer this transfer. Set to 0 if the spi bus driver does
@@ -847,8 +847,8 @@ struct spi_transfer {
 	u8		word_delay_usecs;
 	u16		delay_usecs;
 	struct spi_delay	cs_change_delay;
+	struct spi_delay	word_delay;
 	u32		speed_hz;
-	u16		word_delay;
 
 	u32		effective_speed_hz;
 
-- 
2.20.1


WARNING: multiple messages have this Message-ID (diff)
From: Alexandru Ardelean <alexandru.ardelean@analog.com>
To: <linux-spi@vger.kernel.org>, <linux-iio@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-tegra@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	<bcm-kernel-feedback-list@broadcom.com>
Cc: f.fainelli@gmail.com, baolin.wang@linaro.org,
	zhang.lyra@gmail.com, linus.walleij@linaro.org,
	broonie@kernel.org, orsonzhai@gmail.com,
	Alexandru Ardelean <alexandru.ardelean@analog.com>,
	jic23@kernel.org
Subject: [RFC PATCH 05/15] spi: sprd: convert transfer word delay to spi_delay struct
Date: Fri, 13 Sep 2019 14:45:40 +0300	[thread overview]
Message-ID: <20190913114550.956-6-alexandru.ardelean@analog.com> (raw)
In-Reply-To: <20190913114550.956-1-alexandru.ardelean@analog.com>

The Spreadtrum SPI driver is the only user of the `word_delay` field in
the `spi_transfer` struct.

This change converts the field to use the `spi_delay` struct. This also
enforces the users to specify the delay unit to be `SPI_DELAY_UNIT_SCK`.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
---
 drivers/spi/spi-sprd.c  | 11 +++++++++--
 include/linux/spi/spi.h |  4 ++--
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c
index 1b7eebb72c07..5634cd3e4a8d 100644
--- a/drivers/spi/spi-sprd.c
+++ b/drivers/spi/spi-sprd.c
@@ -671,9 +671,13 @@ static void sprd_spi_set_speed(struct sprd_spi *ss, u32 speed_hz)
 
 static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 {
+	struct spi_delay *d = &t->word_delay;
 	u16 word_delay, interval;
 	u32 val;
 
+	if (t->unit != SPI_DELAY_UNIT_SCK)
+		return -EINVAL;
+
 	val = readl_relaxed(ss->base + SPRD_SPI_CTL7);
 	val &= ~(SPRD_SPI_SCK_REV | SPRD_SPI_NG_TX | SPRD_SPI_NG_RX);
 	/* Set default chip selection, clock phase and clock polarity */
@@ -686,7 +690,7 @@ static void sprd_spi_init_hw(struct sprd_spi *ss, struct spi_transfer *t)
 	 * formula as below per datasheet:
 	 * interval time (source clock cycles) = interval * 4 + 10.
 	 */
-	word_delay = clamp_t(u16, t->word_delay, SPRD_SPI_MIN_DELAY_CYCLE,
+	word_delay = clamp_t(u16, d->value, SPRD_SPI_MIN_DELAY_CYCLE,
 			     SPRD_SPI_MAX_DELAY_CYCLE);
 	interval = DIV_ROUND_UP(word_delay - 10, 4);
 	ss->word_delay = interval * 4 + 10;
@@ -719,13 +723,16 @@ static int sprd_spi_setup_transfer(struct spi_device *sdev,
 	struct sprd_spi *ss = spi_controller_get_devdata(sdev->controller);
 	u8 bits_per_word = t->bits_per_word;
 	u32 val, mode = 0;
+	int ret;
 
 	ss->len = t->len;
 	ss->tx_buf = t->tx_buf;
 	ss->rx_buf = t->rx_buf;
 
 	ss->hw_mode = sdev->mode;
-	sprd_spi_init_hw(ss, t);
+	ret = sprd_spi_init_hw(ss, t);
+	if (ret)
+		return ret;
 
 	/* Set tansfer speed and valid bits */
 	sprd_spi_set_speed(ss, t->speed_hz);
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 9ded3f44d58e..16397b210e0c 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -759,7 +759,7 @@ extern void spi_res_release(struct spi_controller *ctlr,
  *	the next transfer or completing this @spi_message.
  * @word_delay_usecs: microseconds to inter word delay after each word size
  *	(set by bits_per_word) transmission.
- * @word_delay: clock cycles to inter word delay after each word size
+ * @word_delay: inter word delay to be introduced after each word size
  *	(set by bits_per_word) transmission.
  * @effective_speed_hz: the effective SCK-speed that was used to
  *      transfer this transfer. Set to 0 if the spi bus driver does
@@ -847,8 +847,8 @@ struct spi_transfer {
 	u8		word_delay_usecs;
 	u16		delay_usecs;
 	struct spi_delay	cs_change_delay;
+	struct spi_delay	word_delay;
 	u32		speed_hz;
-	u16		word_delay;
 
 	u32		effective_speed_hz;
 
-- 
2.20.1


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2019-09-13 11:45 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-13 11:45 [RFC PATCH 00/15] Unify SPI delays into an `struct spi_delay` Alexandru Ardelean
2019-09-13 11:45 ` Alexandru Ardelean
2019-09-13 11:45 ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 01/15] spi: move `cs_change_delay` backwards compat logic outside switch Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 02/15] spi: introduce spi_delay struct as "value + unit" & spi_delay_exec() Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 03/15] spi: make `cs_change_delay` the first user of the `spi_delay` logic Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-16 12:25   ` Mark Brown
2019-09-16 12:25     ` Mark Brown
2019-09-16 12:37     ` Ardelean, Alexandru
2019-09-16 12:37       ` Ardelean, Alexandru
2019-09-16 12:37       ` Ardelean, Alexandru
2019-09-16 12:47       ` Mark Brown
2019-09-16 12:47         ` Mark Brown
2019-09-16 12:47         ` Mark Brown
2019-09-16 13:04         ` Ardelean, Alexandru
2019-09-16 13:04           ` Ardelean, Alexandru
2019-09-16 13:04           ` Ardelean, Alexandru
2019-09-16 13:43           ` Mark Brown
2019-09-16 13:43             ` Mark Brown
2019-09-16 13:43             ` Mark Brown
2019-09-17  6:05             ` Ardelean, Alexandru
2019-09-17  6:05               ` Ardelean, Alexandru
2019-09-17  6:05               ` Ardelean, Alexandru
2019-09-13 11:45 ` [RFC PATCH 04/15] iio: imu: adis: convert cs_change_delay to spi_delay struct Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` Alexandru Ardelean [this message]
2019-09-13 11:45   ` [RFC PATCH 05/15] spi: sprd: convert transfer word delay " Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 06/15] spi: orion: use new `word_delay` field for SPI transfers Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 07/15] spi: spidev: use new `word_delay` field for spi transfers Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 08/15] spi: core,atmel: convert `word_delay_usecs` -> `word_delay` for spi_device Alexandru Ardelean
2019-09-13 11:45   ` [RFC PATCH 08/15] spi: core, atmel: " Alexandru Ardelean
2019-09-13 11:45   ` [RFC PATCH 08/15] spi: core,atmel: " Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 09/15] spi: introduce `delay` field for `spi_transfer` + spi_transfer_exec() Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 10/15] spi: use new `spi_transfer_delay` helper where straightforward Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 11/15] spi: tegra114: use `spi_transfer_delay` helper Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 12/15] spi: spi-loopback-test: use new `delay` field Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 13/15] spi: spidev: use new `delay` field for spi transfers Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 14/15] spi: tegra114: change format for `spi_set_cs_timing()` function Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45 ` [RFC PATCH 15/15] spi: implement SW control for CS times Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-13 11:45   ` Alexandru Ardelean
2019-09-15 10:22 ` [RFC PATCH 00/15] Unify SPI delays into an `struct spi_delay` Jonathan Cameron
2019-09-15 10:22   ` Jonathan Cameron
2019-09-15 10:22   ` Jonathan Cameron

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=20190913114550.956-6-alexandru.ardelean@analog.com \
    --to=alexandru.ardelean@analog.com \
    --cc=baolin.wang@linaro.org \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=broonie@kernel.org \
    --cc=f.fainelli@gmail.com \
    --cc=jic23@kernel.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=orsonzhai@gmail.com \
    --cc=zhang.lyra@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.