diff options
Diffstat (limited to 'drivers/spi/spi-dw.h')
| -rw-r--r-- | drivers/spi/spi-dw.h | 29 | 
1 files changed, 12 insertions, 17 deletions
diff --git a/drivers/spi/spi-dw.h b/drivers/spi/spi-dw.h index 9c57c078031..6d2acad34f6 100644 --- a/drivers/spi/spi-dw.h +++ b/drivers/spi/spi-dw.h @@ -3,6 +3,7 @@  #include <linux/io.h>  #include <linux/scatterlist.h> +#include <linux/gpio.h>  /* Register offsets */  #define DW_SPI_CTRL0			0x00 @@ -92,13 +93,11 @@ struct dw_spi_dma_ops {  struct dw_spi {  	struct spi_master	*master;  	struct spi_device	*cur_dev; -	struct device		*parent_dev;  	enum dw_ssi_type	type;  	char			name[16];  	void __iomem		*regs;  	unsigned long		paddr; -	u32			iolen;  	int			irq;  	u32			fifo_len;	/* depth of the FIFO buffer */  	u32			max_freq;	/* max bus freq supported */ @@ -106,14 +105,6 @@ struct dw_spi {  	u16			bus_num;  	u16			num_cs;		/* supported slave numbers */ -	/* Driver message queue */ -	struct workqueue_struct	*workqueue; -	struct work_struct	pump_messages; -	spinlock_t		lock; -	struct list_head	queue; -	int			busy; -	int			run; -  	/* Message Transfer pump */  	struct tasklet_struct	pump_transfers; @@ -135,7 +126,6 @@ struct dw_spi {  	u8			n_bytes;	/* current is a 1/2 bytes op */  	u8			max_bits_per_word;	/* maxim is 16b */  	u32			dma_width; -	int			cs_change;  	irqreturn_t		(*transfer_handler)(struct dw_spi *dws);  	void			(*cs_control)(u32 command); @@ -189,15 +179,20 @@ static inline void spi_set_clk(struct dw_spi *dws, u16 div)  	dw_writel(dws, DW_SPI_BAUDR, div);  } -static inline void spi_chip_sel(struct dw_spi *dws, u16 cs) +static inline void spi_chip_sel(struct dw_spi *dws, struct spi_device *spi, +		int active)  { -	if (cs > dws->num_cs) -		return; +	u16 cs = spi->chip_select; +	int gpio_val = active ? (spi->mode & SPI_CS_HIGH) : +		!(spi->mode & SPI_CS_HIGH);  	if (dws->cs_control) -		dws->cs_control(1); +		dws->cs_control(active); +	if (gpio_is_valid(spi->cs_gpio)) +		gpio_set_value(spi->cs_gpio, gpio_val); -	dw_writel(dws, DW_SPI_SER, 1 << cs); +	if (active) +		dw_writel(dws, DW_SPI_SER, 1 << cs);  }  /* Disable IRQ bits */ @@ -231,7 +226,7 @@ struct dw_spi_chip {  	void (*cs_control)(u32 command);  }; -extern int dw_spi_add_host(struct dw_spi *dws); +extern int dw_spi_add_host(struct device *dev, struct dw_spi *dws);  extern void dw_spi_remove_host(struct dw_spi *dws);  extern int dw_spi_suspend_host(struct dw_spi *dws);  extern int dw_spi_resume_host(struct dw_spi *dws);  | 
