2010-10-12 14:18:31 +04:00
/*
* Freescale SPI / eSPI controller driver library .
*
* Maintainer : Kumar Gala
*
* Copyright 2010 Freescale Semiconductor , Inc .
* Copyright ( C ) 2006 Polycom , Inc .
*
* CPM SPI and QE buffer descriptors mode support :
* Copyright ( c ) 2009 MontaVista Software , Inc .
* Author : Anton Vorontsov < avorontsov @ ru . mvista . com >
*
* 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 .
*/
# ifndef __SPI_FSL_LIB_H__
# define __SPI_FSL_LIB_H__
2010-10-14 17:55:47 +04:00
# include <asm/io.h>
2010-10-12 14:18:31 +04:00
/* SPI/eSPI Controller driver's private data. */
struct mpc8xxx_spi {
struct device * dev ;
2016-09-14 00:16:02 +03:00
void __iomem * reg_base ;
2010-10-12 14:18:31 +04:00
/* rx & tx bufs from the spi_transfer */
const void * tx ;
void * rx ;
int subblock ;
struct spi_pram __iomem * pram ;
2013-02-15 19:52:21 +04:00
# ifdef CONFIG_FSL_SOC
2010-10-12 14:18:31 +04:00
struct cpm_buf_desc __iomem * tx_bd ;
struct cpm_buf_desc __iomem * rx_bd ;
2013-02-15 19:52:21 +04:00
# endif
2010-10-12 14:18:31 +04:00
struct spi_transfer * xfer_in_progress ;
/* dma addresses for CPM transfers */
dma_addr_t tx_dma ;
dma_addr_t rx_dma ;
bool map_tx_dma ;
bool map_rx_dma ;
dma_addr_t dma_dummy_tx ;
dma_addr_t dma_dummy_rx ;
/* functions to deal with different sized buffers */
void ( * get_rx ) ( u32 rx_data , struct mpc8xxx_spi * ) ;
u32 ( * get_tx ) ( struct mpc8xxx_spi * ) ;
unsigned int count ;
unsigned int irq ;
unsigned nsecs ; /* (clock cycle time)/2 */
u32 spibrg ; /* SPIBRG input clock */
u32 rx_shift ; /* RX data reg shift when in qe mode */
u32 tx_shift ; /* TX data reg shift when in qe mode */
unsigned int flags ;
2015-01-06 16:07:34 +03:00
# if IS_ENABLED(CONFIG_SPI_FSL_SPI)
2013-02-15 19:52:24 +04:00
int type ;
2013-02-15 19:52:27 +04:00
int native_chipselects ;
2013-02-15 19:52:25 +04:00
u8 max_bits_per_word ;
2013-02-15 19:52:24 +04:00
2013-02-15 19:52:23 +04:00
void ( * set_shifts ) ( u32 * rx_shift , u32 * tx_shift ,
int bits_per_word , int msb_first ) ;
# endif
2010-10-12 14:18:31 +04:00
struct completion done ;
} ;
struct spi_mpc8xxx_cs {
/* functions to deal with different sized buffers */
void ( * get_rx ) ( u32 rx_data , struct mpc8xxx_spi * ) ;
u32 ( * get_tx ) ( struct mpc8xxx_spi * ) ;
u32 rx_shift ; /* RX data reg shift when in qe mode */
u32 tx_shift ; /* TX data reg shift when in qe mode */
u32 hw_mode ; /* Holds HW mode register settings */
} ;
static inline void mpc8xxx_spi_write_reg ( __be32 __iomem * reg , u32 val )
{
2013-02-15 19:52:21 +04:00
iowrite32be ( val , reg ) ;
2010-10-12 14:18:31 +04:00
}
static inline u32 mpc8xxx_spi_read_reg ( __be32 __iomem * reg )
{
2013-02-15 19:52:21 +04:00
return ioread32be ( reg ) ;
2010-10-12 14:18:31 +04:00
}
struct mpc8xxx_spi_probe_info {
struct fsl_spi_platform_data pdata ;
int * gpios ;
bool * alow_flags ;
} ;
extern u32 mpc8xxx_spi_tx_buf_u8 ( struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern u32 mpc8xxx_spi_tx_buf_u16 ( struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern u32 mpc8xxx_spi_tx_buf_u32 ( struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern void mpc8xxx_spi_rx_buf_u8 ( u32 data , struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern void mpc8xxx_spi_rx_buf_u16 ( u32 data , struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern void mpc8xxx_spi_rx_buf_u32 ( u32 data , struct mpc8xxx_spi * mpc8xxx_spi ) ;
extern struct mpc8xxx_spi_probe_info * to_of_pinfo (
struct fsl_spi_platform_data * pdata ) ;
extern int mpc8xxx_spi_bufs ( struct mpc8xxx_spi * mspi ,
struct spi_transfer * t , unsigned int len ) ;
extern const char * mpc8xxx_spi_strmode ( unsigned int flags ) ;
2014-12-03 09:56:17 +03:00
extern void mpc8xxx_spi_probe ( struct device * dev , struct resource * mem ,
2010-10-12 14:18:31 +04:00
unsigned int irq ) ;
extern int mpc8xxx_spi_remove ( struct device * dev ) ;
2011-02-23 07:02:43 +03:00
extern int of_mpc8xxx_spi_probe ( struct platform_device * ofdev ) ;
2010-10-12 14:18:31 +04:00
# endif /* __SPI_FSL_LIB_H__ */