mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
spi_mpc8xxx: Turn qe_mode into flags
Soon there will be more flags introduced in subsequent patches, so let's turn qe_mode into flags. Also introduce mpc8xxx_spi_strmode() and print current SPI mode. Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com> Acked-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:
parent
a35c171095
commit
87ec0e98cf
@ -96,7 +96,8 @@ struct mpc8xxx_spi {
|
|||||||
u32 rx_shift; /* RX data reg shift when in qe mode */
|
u32 rx_shift; /* RX data reg shift when in qe mode */
|
||||||
u32 tx_shift; /* TX data reg shift when in qe mode */
|
u32 tx_shift; /* TX data reg shift when in qe mode */
|
||||||
|
|
||||||
bool qe_mode;
|
unsigned int flags;
|
||||||
|
#define SPI_QE_CPU_MODE (1 << 0) /* QE CPU ("PIO") mode */
|
||||||
|
|
||||||
struct workqueue_struct *workqueue;
|
struct workqueue_struct *workqueue;
|
||||||
struct work_struct work;
|
struct work_struct work;
|
||||||
@ -235,14 +236,14 @@ int mpc8xxx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
|
|||||||
if (bits_per_word <= 8) {
|
if (bits_per_word <= 8) {
|
||||||
cs->get_rx = mpc8xxx_spi_rx_buf_u8;
|
cs->get_rx = mpc8xxx_spi_rx_buf_u8;
|
||||||
cs->get_tx = mpc8xxx_spi_tx_buf_u8;
|
cs->get_tx = mpc8xxx_spi_tx_buf_u8;
|
||||||
if (mpc8xxx_spi->qe_mode) {
|
if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
|
||||||
cs->rx_shift = 16;
|
cs->rx_shift = 16;
|
||||||
cs->tx_shift = 24;
|
cs->tx_shift = 24;
|
||||||
}
|
}
|
||||||
} else if (bits_per_word <= 16) {
|
} else if (bits_per_word <= 16) {
|
||||||
cs->get_rx = mpc8xxx_spi_rx_buf_u16;
|
cs->get_rx = mpc8xxx_spi_rx_buf_u16;
|
||||||
cs->get_tx = mpc8xxx_spi_tx_buf_u16;
|
cs->get_tx = mpc8xxx_spi_tx_buf_u16;
|
||||||
if (mpc8xxx_spi->qe_mode) {
|
if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
|
||||||
cs->rx_shift = 16;
|
cs->rx_shift = 16;
|
||||||
cs->tx_shift = 16;
|
cs->tx_shift = 16;
|
||||||
}
|
}
|
||||||
@ -252,7 +253,8 @@ int mpc8xxx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
|
|||||||
} else
|
} else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (mpc8xxx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
|
if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE &&
|
||||||
|
spi->mode & SPI_LSB_FIRST) {
|
||||||
cs->tx_shift = 0;
|
cs->tx_shift = 0;
|
||||||
if (bits_per_word <= 8)
|
if (bits_per_word <= 8)
|
||||||
cs->rx_shift = 8;
|
cs->rx_shift = 8;
|
||||||
@ -518,6 +520,13 @@ static void mpc8xxx_spi_cleanup(struct spi_device *spi)
|
|||||||
kfree(spi->controller_state);
|
kfree(spi->controller_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *mpc8xxx_spi_strmode(unsigned int flags)
|
||||||
|
{
|
||||||
|
if (flags & SPI_QE_CPU_MODE)
|
||||||
|
return "QE CPU";
|
||||||
|
return "CPU";
|
||||||
|
}
|
||||||
|
|
||||||
static struct spi_master * __devinit
|
static struct spi_master * __devinit
|
||||||
mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
|
mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
|
||||||
{
|
{
|
||||||
@ -544,14 +553,14 @@ mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
|
|||||||
master->cleanup = mpc8xxx_spi_cleanup;
|
master->cleanup = mpc8xxx_spi_cleanup;
|
||||||
|
|
||||||
mpc8xxx_spi = spi_master_get_devdata(master);
|
mpc8xxx_spi = spi_master_get_devdata(master);
|
||||||
mpc8xxx_spi->qe_mode = pdata->qe_mode;
|
|
||||||
mpc8xxx_spi->get_rx = mpc8xxx_spi_rx_buf_u8;
|
mpc8xxx_spi->get_rx = mpc8xxx_spi_rx_buf_u8;
|
||||||
mpc8xxx_spi->get_tx = mpc8xxx_spi_tx_buf_u8;
|
mpc8xxx_spi->get_tx = mpc8xxx_spi_tx_buf_u8;
|
||||||
|
mpc8xxx_spi->flags = pdata->flags;
|
||||||
mpc8xxx_spi->spibrg = pdata->sysclk;
|
mpc8xxx_spi->spibrg = pdata->sysclk;
|
||||||
|
|
||||||
mpc8xxx_spi->rx_shift = 0;
|
mpc8xxx_spi->rx_shift = 0;
|
||||||
mpc8xxx_spi->tx_shift = 0;
|
mpc8xxx_spi->tx_shift = 0;
|
||||||
if (mpc8xxx_spi->qe_mode) {
|
if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE) {
|
||||||
mpc8xxx_spi->rx_shift = 16;
|
mpc8xxx_spi->rx_shift = 16;
|
||||||
mpc8xxx_spi->tx_shift = 24;
|
mpc8xxx_spi->tx_shift = 24;
|
||||||
}
|
}
|
||||||
@ -584,7 +593,7 @@ mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
|
|||||||
|
|
||||||
/* Enable SPI interface */
|
/* Enable SPI interface */
|
||||||
regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
|
regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
|
||||||
if (pdata->qe_mode)
|
if (mpc8xxx_spi->flags & SPI_QE_CPU_MODE)
|
||||||
regval |= SPMODE_OP;
|
regval |= SPMODE_OP;
|
||||||
|
|
||||||
mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, regval);
|
mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, regval);
|
||||||
@ -604,9 +613,8 @@ mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto unreg_master;
|
goto unreg_master;
|
||||||
|
|
||||||
printk(KERN_INFO
|
dev_info(dev, "at 0x%p (irq = %d), %s mode\n", mpc8xxx_spi->base,
|
||||||
"%s: MPC8xxx SPI Controller driver at 0x%p (irq = %d)\n",
|
mpc8xxx_spi->irq, mpc8xxx_spi_strmode(mpc8xxx_spi->flags));
|
||||||
dev_name(dev), mpc8xxx_spi->base, mpc8xxx_spi->irq);
|
|
||||||
|
|
||||||
return master;
|
return master;
|
||||||
|
|
||||||
@ -797,7 +805,7 @@ static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
|
|||||||
|
|
||||||
prop = of_get_property(np, "mode", NULL);
|
prop = of_get_property(np, "mode", NULL);
|
||||||
if (prop && !strcmp(prop, "cpu-qe"))
|
if (prop && !strcmp(prop, "cpu-qe"))
|
||||||
pdata->qe_mode = 1;
|
pdata->flags = SPI_QE_CPU_MODE;
|
||||||
|
|
||||||
ret = of_mpc8xxx_spi_get_chipselects(dev);
|
ret = of_mpc8xxx_spi_get_chipselects(dev);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -74,7 +74,7 @@ struct spi_device;
|
|||||||
struct fsl_spi_platform_data {
|
struct fsl_spi_platform_data {
|
||||||
u32 initial_spmode; /* initial SPMODE value */
|
u32 initial_spmode; /* initial SPMODE value */
|
||||||
s16 bus_num;
|
s16 bus_num;
|
||||||
bool qe_mode;
|
unsigned int flags;
|
||||||
/* board specific information */
|
/* board specific information */
|
||||||
u16 max_chipselect;
|
u16 max_chipselect;
|
||||||
void (*cs_control)(struct spi_device *spi, bool on);
|
void (*cs_control)(struct spi_device *spi, bool on);
|
||||||
|
Loading…
Reference in New Issue
Block a user