diff mbox

[v4,01/14] spi: qup: Enable chip select support

Message ID 1498556731-13087-2-git-send-email-varada@codeaurora.org (mailing list archive)
State New, archived
Headers show

Commit Message

Varadarajan Narayanan June 27, 2017, 9:45 a.m. UTC
Enable chip select support for QUP versions later than v1.
The chip select support was broken in QUP version 1. Hence
the chip select support was removed earlier in commit
4a8573abe965115bc5b064401fd669b74e985258. Since the chip
select support is functional in recent versions of QUP,
re-enabling it for QUP versions later than v1.

Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org>
---
 drivers/spi/spi-qup.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Mark Brown July 17, 2017, 4:01 p.m. UTC | #1
On Tue, Jun 27, 2017 at 03:15:18PM +0530, Varadarajan Narayanan wrote:

> the chip select support was removed earlier in commit
> 4a8573abe965115bc5b064401fd669b74e985258. Since the chip

Please include human readable descriptions of things like commits and
issues being discussed in e-mail in your mails, this makes them much
easier for humans to read especially when they have no internet access.
I do frequently catch up on my mail on flights or while otherwise
travelling so this is even more pressing for me than just being about
making things a bit easier to read.
Varadarajan Narayanan July 20, 2017, 5:30 a.m. UTC | #2
Brown,

On Mon, Jul 17, 2017 at 05:01:51PM +0100, Mark Brown wrote:
> On Tue, Jun 27, 2017 at 03:15:18PM +0530, Varadarajan Narayanan wrote:
>
> > the chip select support was removed earlier in commit
> > 4a8573abe965115bc5b064401fd669b74e985258. Since the chip
>
> Please include human readable descriptions of things like commits and
> issues being discussed in e-mail in your mails, this makes them much
> easier for humans to read especially when they have no internet access.
> I do frequently catch up on my mail on flights or while otherwise
> travelling so this is even more pressing for me than just being about
> making things a bit easier to read.

Sorry. The commit being referred to is (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a8573abe965115bc5b064401fd669b74e985258)

	commit 4a8573abe965115bc5b064401fd669b74e985258
	Author: Andy Gross <agross@codeaurora.org>
	Date:   Thu Jun 12 14:34:10 2014 -0500

	spi: qup: Remove chip select function

	This patch removes the chip select function.  Chip select should instead be
	supported using GPIOs, defining the DT entry "cs-gpios", and letting the SPI
	core assert/deassert the chip select as it sees fit.

	The chip select control inside the controller is buggy.  It is supposed to
	automatically assert the chip select based on the activity in the controller,
	but it is buggy and doesn't work at all.  So instead we elect to use GPIOs.

	Signed-off-by: Andy Gross <agross@codeaurora.org>
	Signed-off-by: Mark Brown <broonie@linaro.org>

Will update the commit log and repost the patches.

Thanks
Varada

--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Geert Uytterhoeven July 20, 2017, 7:03 a.m. UTC | #3
Hi Varadarajan,

On Tue, Jun 27, 2017 at 11:45 AM, Varadarajan Narayanan
<varada@codeaurora.org> wrote:
> Enable chip select support for QUP versions later than v1.
> The chip select support was broken in QUP version 1. Hence
> the chip select support was removed earlier in commit
> 4a8573abe965115bc5b064401fd669b74e985258. Since the chip
> select support is functional in recent versions of QUP,
> re-enabling it for QUP versions later than v1.
>
> Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org>
> Signed-off-by: Varadarajan Narayanan <varada@codeaurora.org>

> --- a/drivers/spi/spi-qup.c
> +++ b/drivers/spi/spi-qup.c

> @@ -846,6 +864,9 @@ static int spi_qup_probe(struct platform_device *pdev)
>         if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1"))
>                 controller->qup_v1 = 1;

I know it was not introduced by your patch, but the proper way is to obtain
the version flag from spi_qup_dt_match[].data.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c
index 1bfa889..c0d4def 100644
--- a/drivers/spi/spi-qup.c
+++ b/drivers/spi/spi-qup.c
@@ -750,6 +750,24 @@  static int spi_qup_init_dma(struct spi_master *master, resource_size_t base)
 	return ret;
 }
 
+static void spi_qup_set_cs(struct spi_device *spi, bool val)
+{
+	struct spi_qup *controller;
+	u32 spi_ioc;
+	u32 spi_ioc_orig;
+
+	controller = spi_master_get_devdata(spi->master);
+	spi_ioc = readl_relaxed(controller->base + SPI_IO_CONTROL);
+	spi_ioc_orig = spi_ioc;
+	if (!val)
+		spi_ioc |= SPI_IO_C_FORCE_CS;
+	else
+		spi_ioc &= ~SPI_IO_C_FORCE_CS;
+
+	if (spi_ioc != spi_ioc_orig)
+		writel_relaxed(spi_ioc, controller->base + SPI_IO_CONTROL);
+}
+
 static int spi_qup_probe(struct platform_device *pdev)
 {
 	struct spi_master *master;
@@ -846,6 +864,9 @@  static int spi_qup_probe(struct platform_device *pdev)
 	if (of_device_is_compatible(dev->of_node, "qcom,spi-qup-v1.1.1"))
 		controller->qup_v1 = 1;
 
+	if (!controller->qup_v1)
+		master->set_cs = spi_qup_set_cs;
+
 	spin_lock_init(&controller->lock);
 	init_completion(&controller->done);