linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
To: spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Cc: Grant Likely
	<grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org>,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org,
	David Brownell
	<dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Subject: [PATCH 09/49] spi: davinci: enable GPIO lines to be used as chip selects
Date: Wed, 17 Nov 2010 16:13:41 +0530	[thread overview]
Message-ID: <1289990661-30126-10-git-send-email-nsekhar@ti.com> (raw)
In-Reply-To: <1289990661-30126-9-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>

From: Brian Niebuhr <bniebuhr-JaPwekKOx1yaMJb+Lgu22Q@public.gmane.org>

Sometimes, the chip selects provided by SPI module are
muxed with other functionality and cannot be used in
some designs. In such cases, it becomes convenient to use
an available GPIO line as chip select.

This patch enables the DaVinci SPI driver to treat specific
GPIO lines as chip selects based on information provided in
platform data.

Signed-off-by: Brian Niebuhr <bniebuhr-JaPwekKOx1yaMJb+Lgu22Q@public.gmane.org>
Tested-By: Michael Williamson <michael.williamson-wZX4cNJlHJ2sVWG7oymsAA@public.gmane.org>
Signed-off-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
---
 arch/arm/mach-davinci/include/mach/spi.h |    3 ++
 drivers/spi/davinci_spi.c                |   39 ++++++++++++++++++++++++-----
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-davinci/include/mach/spi.h b/arch/arm/mach-davinci/include/mach/spi.h
index 2cb326e..734d1fb 100644
--- a/arch/arm/mach-davinci/include/mach/spi.h
+++ b/arch/arm/mach-davinci/include/mach/spi.h
@@ -19,6 +19,8 @@
 #ifndef __ARCH_ARM_DAVINCI_SPI_H
 #define __ARCH_ARM_DAVINCI_SPI_H
 
+#define SPI_INTERN_CS	0xFF
+
 enum {
 	SPI_VERSION_1, /* For DM355/DM365/DM6467 */
 	SPI_VERSION_2, /* For DA8xx */
@@ -38,6 +40,7 @@ struct davinci_spi_platform_data {
 	u8	use_dma;
 	u8	c2tdelay;
 	u8	t2cdelay;
+	u8	*chip_sel;
 };
 
 #endif	/* __ARCH_ARM_DAVINCI_SPI_H */
diff --git a/drivers/spi/davinci_spi.c b/drivers/spi/davinci_spi.c
index 82dddf8..d5d7014 100644
--- a/drivers/spi/davinci_spi.c
+++ b/drivers/spi/davinci_spi.c
@@ -238,20 +238,32 @@ static void davinci_spi_chipselect(struct spi_device *spi, int value)
 	struct davinci_spi_platform_data *pdata;
 	u8 chip_sel = spi->chip_select;
 	u16 spidat1_cfg = CS_DEFAULT;
+	bool gpio_chipsel = false;
 
 	davinci_spi = spi_master_get_devdata(spi->master);
 	pdata = davinci_spi->pdata;
 
+	if (pdata->chip_sel && chip_sel < pdata->num_chipselect &&
+				pdata->chip_sel[chip_sel] != SPI_INTERN_CS)
+		gpio_chipsel = true;
+
 	/*
 	 * Board specific chip select logic decides the polarity and cs
 	 * line for the controller
 	 */
-	if (value == BITBANG_CS_ACTIVE) {
-		spidat1_cfg |= SPIDAT1_CSHOLD_MASK;
-		spidat1_cfg &= ~(0x1 << chip_sel);
-	}
+	if (gpio_chipsel) {
+		if (value == BITBANG_CS_ACTIVE)
+			gpio_set_value(pdata->chip_sel[chip_sel], 0);
+		else
+			gpio_set_value(pdata->chip_sel[chip_sel], 1);
+	} else {
+		if (value == BITBANG_CS_ACTIVE) {
+			spidat1_cfg |= SPIDAT1_CSHOLD_MASK;
+			spidat1_cfg &= ~(0x1 << chip_sel);
+		}
 
-	iowrite16(spidat1_cfg, davinci_spi->base + SPIDAT1 + 2);
+		iowrite16(spidat1_cfg, davinci_spi->base + SPIDAT1 + 2);
+	}
 }
 
 /**
@@ -546,6 +558,7 @@ static void davinci_spi_cleanup(struct spi_device *spi)
 static int davinci_spi_bufs_prep(struct spi_device *spi,
 				 struct davinci_spi *davinci_spi)
 {
+	struct davinci_spi_platform_data *pdata;
 	int op_mode = 0;
 
 	/*
@@ -558,8 +571,12 @@ static int davinci_spi_bufs_prep(struct spi_device *spi,
 	op_mode = SPIPC0_DIFUN_MASK
 		| SPIPC0_DOFUN_MASK
 		| SPIPC0_CLKFUN_MASK;
-	if (!(spi->mode & SPI_NO_CS))
-		op_mode |= 1 << spi->chip_select;
+	if (!(spi->mode & SPI_NO_CS)) {
+		pdata = davinci_spi->pdata;
+		if (!pdata->chip_sel ||
+		     pdata->chip_sel[spi->chip_select] == SPI_INTERN_CS)
+			op_mode |= 1 << spi->chip_select;
+	}
 	if (spi->mode & SPI_READY)
 		op_mode |= SPIPC0_SPIENA_MASK;
 
@@ -1101,6 +1118,14 @@ static int davinci_spi_probe(struct platform_device *pdev)
 	udelay(100);
 	iowrite32(1, davinci_spi->base + SPIGCR0);
 
+	/* initialize chip selects */
+	if (pdata->chip_sel) {
+		for (i = 0; i < pdata->num_chipselect; i++) {
+			if (pdata->chip_sel[i] != SPI_INTERN_CS)
+				gpio_direction_output(pdata->chip_sel[i], 1);
+		}
+	}
+
 	/* Clock internal */
 	if (davinci_spi->pdata->clk_internal)
 		set_io_bits(davinci_spi->base + SPIGCR1,
-- 
1.7.3.2

  parent reply	other threads:[~2010-11-17 10:43 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-17 10:43 [PATCH 00/49] spi: davinci: re-write existing driver Sekhar Nori
     [not found] ` <1289990661-30126-1-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43   ` [PATCH 01/49] spi: davinci: fix checkpatch errors Sekhar Nori
     [not found]     ` <1289990661-30126-2-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43       ` [PATCH 02/49] spi: davinci: whitespace cleanup Sekhar Nori
     [not found]         ` <1289990661-30126-3-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43           ` [PATCH 03/49] spi: davinci: remove unused variable 'pdata' Sekhar Nori
     [not found]             ` <1289990661-30126-4-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43               ` [PATCH 04/49] spi: davinci: removed unused #defines Sekhar Nori
     [not found]                 ` <1289990661-30126-5-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                   ` [PATCH 05/49] spi: davinci: remove unnecessary typecast Sekhar Nori
     [not found]                     ` <1289990661-30126-6-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                       ` [PATCH 06/49] spi: davinci: set chip-select mode in SPIDEF only once Sekhar Nori
     [not found]                         ` <1289990661-30126-7-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                           ` [PATCH 07/49] spi: davinci: enable both activation and deactivation of chip-selects Sekhar Nori
     [not found]                             ` <1289990661-30126-8-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                               ` [PATCH 08/49] spi: davinci: remove unnecessary data transmit on CS disable Sekhar Nori
     [not found]                                 ` <1289990661-30126-9-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                   ` Sekhar Nori [this message]
     [not found]                                     ` <1289990661-30126-10-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                       ` [PATCH 10/49] spi: davinci: simplify prescalar calculation Sekhar Nori
     [not found]                                         ` <1289990661-30126-11-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                           ` [PATCH 11/49] spi: davinci: remove 'wait_enable' platform data member Sekhar Nori
     [not found]                                             ` <1289990661-30126-12-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                               ` [PATCH 12/49] spi: davinci: make chip-slect specific parameters really chip-select specific Sekhar Nori
     [not found]                                                 ` <1289990661-30126-13-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                   ` [PATCH 13/49] spi: davinci: consolidate setup of SPIFMTn in one function Sekhar Nori
     [not found]                                                     ` <1289990661-30126-14-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                       ` [PATCH 14/49] spi: davinci: setup chip-select timers values only if timer enabled Sekhar Nori
     [not found]                                                         ` <1289990661-30126-15-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                           ` [PATCH 15/49] spi: davinci: add support for wait enable timeouts Sekhar Nori
     [not found]                                                             ` <1289990661-30126-16-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                               ` [PATCH 16/49] spi: davinci: remove unused members of davinci_spi_slave Sekhar Nori
     [not found]                                                                 ` <1289990661-30126-17-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                   ` [PATCH 17/49] spi: davinci: eliminate the single member structure davinci_spi_slave Sekhar Nori
     [not found]                                                                     ` <1289990661-30126-18-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                       ` [PATCH 18/49] spi: davinci: eliminate unnecessary update of davinci_spi->count Sekhar Nori
     [not found]                                                                         ` <1289990661-30126-19-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                           ` [PATCH 19/49] spi: davinci: simplify calculation of edma acount value Sekhar Nori
     [not found]                                                                             ` <1289990661-30126-20-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                               ` [PATCH 20/49] spi: davinci: check for NULL buffer pointer before using it Sekhar Nori
     [not found]                                                                                 ` <1289990661-30126-21-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                   ` [PATCH 21/49] spi: davinci: remove unnecessary disable of SPI Sekhar Nori
     [not found]                                                                                     ` <1289990661-30126-22-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                       ` [PATCH 22/49] spi: davinci: remove unnecessary 'count' variable in driver private data Sekhar Nori
     [not found]                                                                                         ` <1289990661-30126-23-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                           ` [PATCH 23/49] spi: davinci: do not treat Tx interrupt being set as error Sekhar Nori
     [not found]                                                                                             ` <1289990661-30126-24-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                               ` [PATCH 24/49] spi: davinci: remove unnecessary completion variable initialization Sekhar Nori
     [not found]                                                                                                 ` <1289990661-30126-25-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                                   ` [PATCH 25/49] spi: davinci: remove non-useful interrupt mode support Sekhar Nori
     [not found]                                                                                                     ` <1289990661-30126-26-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                                       ` [PATCH 26/49] spi: davinci: simplify poll mode transfers Sekhar Nori
     [not found]                                                                                                         ` <1289990661-30126-27-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:43                                                                                                           ` [PATCH 27/49] spi: davinci: add support for interrupt mode Sekhar Nori
     [not found]                                                                                                             ` <1289990661-30126-28-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                               ` [PATCH 28/49] spi: davinci: configure the invariable bits in spipc0 only once Sekhar Nori
     [not found]                                                                                                                 ` <1289990661-30126-29-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                   ` [PATCH 29/49] spi: davinci: remove unnecessary function davinci_spi_bufs_prep() Sekhar Nori
     [not found]                                                                                                                     ` <1289990661-30126-30-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                       ` [PATCH 30/49] spi: davinci: remove unnecessary call to davinci_spi_setup_transfer() Sekhar Nori
     [not found]                                                                                                                         ` <1289990661-30126-31-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                           ` [PATCH 31/49] spi: davinci: do not store DMA channel information per chip select Sekhar Nori
     [not found]                                                                                                                             ` <1289990661-30126-32-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                               ` [PATCH 32/49] spi: davinci: always start transmit DMA Sekhar Nori
     [not found]                                                                                                                                 ` <1289990661-30126-33-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                   ` [PATCH 33/49] spi: davinci: do not use temporary buffer if no transmit data provided Sekhar Nori
     [not found]                                                                                                                                     ` <1289990661-30126-34-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                       ` [PATCH 34/49] spi: davinci: always start receive DMA Sekhar Nori
     [not found]                                                                                                                                         ` <1289990661-30126-35-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                           ` [PATCH 35/49] spi: davinci: use edma_write_slot() to setup EDMA PaRAM slot Sekhar Nori
     [not found]                                                                                                                                             ` <1289990661-30126-36-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                               ` [PATCH 36/49] spi: davinci: fix DMA event generation stoppage Sekhar Nori
     [not found]                                                                                                                                                 ` <1289990661-30126-37-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                   ` [PATCH 37/49] spi: davinci: do not allocate DMA channels during SPI device setup Sekhar Nori
     [not found]                                                                                                                                                     ` <1289990661-30126-38-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                       ` [PATCH 38/49] spi: davinci: fix EDMA CC errors at end of transfers Sekhar Nori
     [not found]                                                                                                                                                         ` <1289990661-30126-39-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                           ` [PATCH 39/49] spi: davinci: handle DMA completion errors correctly Sekhar Nori
     [not found]                                                                                                                                                             ` <1289990661-30126-40-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                               ` [PATCH 40/49] spi: davinci: remove usage of additional completion variables for DMA Sekhar Nori
     [not found]                                                                                                                                                                 ` <1289990661-30126-41-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                   ` [PATCH 41/49] spi: davinci: let DMA operation be specified on per-device basis Sekhar Nori
     [not found]                                                                                                                                                                     ` <1289990661-30126-42-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                       ` [PATCH 42/49] spi: davinci: remove non-useful "clk_internal" platform data Sekhar Nori
     [not found]                                                                                                                                                                         ` <1289990661-30126-43-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                           ` [PATCH 43/49] spi: davinci: enable and power-up SPI only when required Sekhar Nori
     [not found]                                                                                                                                                                             ` <1289990661-30126-44-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                               ` [PATCH 44/49] spi: davinci: setup the driver owner Sekhar Nori
     [not found]                                                                                                                                                                                 ` <1289990661-30126-45-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                                   ` [PATCH 45/49] spi: davinci: add additional comments Sekhar Nori
     [not found]                                                                                                                                                                                     ` <1289990661-30126-46-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                                       ` [PATCH 46/49] spi: davinci: add EF Johnson Technologies copyright Sekhar Nori
     [not found]                                                                                                                                                                                         ` <1289990661-30126-47-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                                           ` [PATCH 47/49] spi: davinci: remove unnecessary private data member 'region_size' Sekhar Nori
     [not found]                                                                                                                                                                                             ` <1289990661-30126-48-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                                               ` [PATCH 48/49] spi: davinci: shorten variable names Sekhar Nori
     [not found]                                                                                                                                                                                                 ` <1289990661-30126-49-git-send-email-nsekhar-l0cyMroinI0@public.gmane.org>
2010-11-17 10:44                                                                                                                                                                                                   ` [PATCH 49/49] spi: davinci: kconfig: add manufacturer name to prompt string Sekhar Nori
2010-11-17 11:15                       ` [PATCH 05/49] spi: davinci: remove unnecessary typecast Sergei Shtylyov
     [not found]                         ` <4CE3B93A.7090408-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2010-11-17 11:35                           ` Nori, Sekhar
2010-11-17 15:24   ` [PATCH 00/49] spi: davinci: re-write existing driver Grant Likely
     [not found]     ` <20101117152426.GA5757-MrY2KI0G/OVr83L8+7iqerDks+cytr/Z@public.gmane.org>
2010-11-18  6:53       ` Nori, Sekhar
     [not found]         ` <B85A65D85D7EB246BE421B3FB0FBB5930247388244-/tLxBxkBPtCIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2010-11-18 11:31           ` Nori, Sekhar
     [not found]             ` <B85A65D85D7EB246BE421B3FB0FBB59302473884F7-/tLxBxkBPtCIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2010-11-18 13:14               ` Nori, Sekhar
     [not found]                 ` <B85A65D85D7EB246BE421B3FB0FBB59302473885A3-/tLxBxkBPtCIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2010-12-11 15:34                   ` Michael Williamson
     [not found]                     ` <4D0399EB.6070204-wZX4cNJlHJ2sVWG7oymsAA@public.gmane.org>
2010-12-11 20:54                       ` Grant Likely

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=1289990661-30126-10-git-send-email-nsekhar@ti.com \
    --to=nsekhar-l0cymroini0@public.gmane.org \
    --cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
    --cc=dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
    --cc=grant.likely-s3s/WqlpOiPyB63q8FvJNQ@public.gmane.org \
    --cc=spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.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).