mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	spi: tegra: add spi driver for SLINK controller
Tegra20/Tegra30 supports the spi interface through its SLINK controller. Add spi driver for SLINK controller. Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
		
							parent
							
								
									8f0d8163b5
								
							
						
					
					
						commit
						dc4dc36056
					
				
					 5 changed files with 1432 additions and 1 deletions
				
			
		| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					NVIDIA Tegra20/Tegra30 SLINK controller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Required properties:
 | 
				
			||||||
 | 
					- compatible : should be "nvidia,tegra20-slink", "nvidia,tegra30-slink".
 | 
				
			||||||
 | 
					- reg: Should contain SLINK registers location and length.
 | 
				
			||||||
 | 
					- interrupts: Should contain SLINK interrupts.
 | 
				
			||||||
 | 
					- nvidia,dma-request-selector : The Tegra DMA controller's phandle and
 | 
				
			||||||
 | 
					  request selector for this SLINK controller.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Recommended properties:
 | 
				
			||||||
 | 
					- spi-max-frequency: Definition as per
 | 
				
			||||||
 | 
					                     Documentation/devicetree/bindings/spi/spi-bus.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					slink@7000d600 {
 | 
				
			||||||
 | 
						compatible = "nvidia,tegra20-slink";
 | 
				
			||||||
 | 
						reg = <0x7000d600 0x200>;
 | 
				
			||||||
 | 
						interrupts = <0 82 0x04>;
 | 
				
			||||||
 | 
						nvidia,dma-request-selector = <&apbdma 16>;
 | 
				
			||||||
 | 
						spi-max-frequency = <25000000>;
 | 
				
			||||||
 | 
						#address-cells = <1>;
 | 
				
			||||||
 | 
						#size-cells = <0>;
 | 
				
			||||||
 | 
						status = "disabled";
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -385,6 +385,12 @@ config SPI_MXS
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  SPI driver for Freescale MXS devices.
 | 
						  SPI driver for Freescale MXS devices.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config SPI_TEGRA20_SLINK
 | 
				
			||||||
 | 
						tristate "Nvidia Tegra20/Tegra30 SLINK Controller"
 | 
				
			||||||
 | 
						depends on ARCH_TEGRA && TEGRA20_APB_DMA
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  SPI driver for Nvidia Tegra20/Tegra30 SLINK Controller interface.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config SPI_TI_SSP
 | 
					config SPI_TI_SSP
 | 
				
			||||||
	tristate "TI Sequencer Serial Port - SPI Support"
 | 
						tristate "TI Sequencer Serial Port - SPI Support"
 | 
				
			||||||
	depends on MFD_TI_SSP
 | 
						depends on MFD_TI_SSP
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -60,10 +60,10 @@ obj-$(CONFIG_SPI_SH_MSIOF)		+= spi-sh-msiof.o
 | 
				
			||||||
obj-$(CONFIG_SPI_SH_SCI)		+= spi-sh-sci.o
 | 
					obj-$(CONFIG_SPI_SH_SCI)		+= spi-sh-sci.o
 | 
				
			||||||
obj-$(CONFIG_SPI_SIRF)		+= spi-sirf.o
 | 
					obj-$(CONFIG_SPI_SIRF)		+= spi-sirf.o
 | 
				
			||||||
obj-$(CONFIG_SPI_STMP3XXX)		+= spi-stmp.o
 | 
					obj-$(CONFIG_SPI_STMP3XXX)		+= spi-stmp.o
 | 
				
			||||||
 | 
					obj-$(CONFIG_SPI_TEGRA20_SLINK)		+= spi-tegra20-slink.o
 | 
				
			||||||
obj-$(CONFIG_SPI_TI_SSP)		+= spi-ti-ssp.o
 | 
					obj-$(CONFIG_SPI_TI_SSP)		+= spi-ti-ssp.o
 | 
				
			||||||
obj-$(CONFIG_SPI_TLE62X0)		+= spi-tle62x0.o
 | 
					obj-$(CONFIG_SPI_TLE62X0)		+= spi-tle62x0.o
 | 
				
			||||||
obj-$(CONFIG_SPI_TOPCLIFF_PCH)		+= spi-topcliff-pch.o
 | 
					obj-$(CONFIG_SPI_TOPCLIFF_PCH)		+= spi-topcliff-pch.o
 | 
				
			||||||
obj-$(CONFIG_SPI_TXX9)			+= spi-txx9.o
 | 
					obj-$(CONFIG_SPI_TXX9)			+= spi-txx9.o
 | 
				
			||||||
obj-$(CONFIG_SPI_XCOMM)		+= spi-xcomm.o
 | 
					obj-$(CONFIG_SPI_XCOMM)		+= spi-xcomm.o
 | 
				
			||||||
obj-$(CONFIG_SPI_XILINX)		+= spi-xilinx.o
 | 
					obj-$(CONFIG_SPI_XILINX)		+= spi-xilinx.o
 | 
				
			||||||
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1359
									
								
								drivers/spi/spi-tegra20-slink.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1359
									
								
								drivers/spi/spi-tegra20-slink.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										40
									
								
								include/linux/spi/spi-tegra.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								include/linux/spi/spi-tegra.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * spi-tegra.h: SPI interface for Nvidia Tegra20 SLINK controller.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Copyright (C) 2011 NVIDIA Corporation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful, but WITHOUT
 | 
				
			||||||
 | 
					 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
				
			||||||
 | 
					 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 | 
				
			||||||
 | 
					 * more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License along
 | 
				
			||||||
 | 
					 * with this program; if not, write to the Free Software Foundation, Inc.,
 | 
				
			||||||
 | 
					 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _LINUX_SPI_TEGRA_H
 | 
				
			||||||
 | 
					#define _LINUX_SPI_TEGRA_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct tegra_spi_platform_data {
 | 
				
			||||||
 | 
						int dma_req_sel;
 | 
				
			||||||
 | 
						unsigned int spi_max_frequency;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Controller data from device to pass some info like
 | 
				
			||||||
 | 
					 * hw based chip select can be used or not and if yes
 | 
				
			||||||
 | 
					 * then CS hold and setup time.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct tegra_spi_device_controller_data {
 | 
				
			||||||
 | 
						bool is_hw_based_cs;
 | 
				
			||||||
 | 
						int cs_setup_clk_count;
 | 
				
			||||||
 | 
						int cs_hold_clk_count;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif /* _LINUX_SPI_TEGRA_H */
 | 
				
			||||||
		Loading…
	
		Reference in a new issue