aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-lpc32xx/phy3250.c7
-rw-r--r--arch/arm/mach-u300/dummyspichip.c5
-rw-r--r--arch/arm/mach-u300/spi.c10
-rw-r--r--arch/arm/mach-ux500/board-mop500.c8
-rw-r--r--drivers/mfd/ab8500-spi.c5
-rw-r--r--drivers/spi/amba-pl022.c121
-rw-r--r--include/linux/amba/pl022.h6
7 files changed, 63 insertions, 99 deletions
diff --git a/arch/arm/mach-lpc32xx/phy3250.c b/arch/arm/mach-lpc32xx/phy3250.c
index bc9a42da2145..0c936cf5675a 100644
--- a/arch/arm/mach-lpc32xx/phy3250.c
+++ b/arch/arm/mach-lpc32xx/phy3250.c
@@ -172,18 +172,12 @@ static void phy3250_spi_cs_set(u32 control)
172} 172}
173 173
174static struct pl022_config_chip spi0_chip_info = { 174static struct pl022_config_chip spi0_chip_info = {
175 .lbm = LOOPBACK_DISABLED,
176 .com_mode = INTERRUPT_TRANSFER, 175 .com_mode = INTERRUPT_TRANSFER,
177 .iface = SSP_INTERFACE_MOTOROLA_SPI, 176 .iface = SSP_INTERFACE_MOTOROLA_SPI,
178 .hierarchy = SSP_MASTER, 177 .hierarchy = SSP_MASTER,
179 .slave_tx_disable = 0, 178 .slave_tx_disable = 0,
180 .endian_tx = SSP_TX_LSB,
181 .endian_rx = SSP_RX_LSB,
182 .data_size = SSP_DATA_BITS_8,
183 .rx_lev_trig = SSP_RX_4_OR_MORE_ELEM, 179 .rx_lev_trig = SSP_RX_4_OR_MORE_ELEM,
184 .tx_lev_trig = SSP_TX_4_OR_MORE_EMPTY_LOC, 180 .tx_lev_trig = SSP_TX_4_OR_MORE_EMPTY_LOC,
185 .clk_phase = SSP_CLK_FIRST_EDGE,
186 .clk_pol = SSP_CLK_POL_IDLE_LOW,
187 .ctrl_len = SSP_BITS_8, 181 .ctrl_len = SSP_BITS_8,
188 .wait_state = SSP_MWIRE_WAIT_ZERO, 182 .wait_state = SSP_MWIRE_WAIT_ZERO,
189 .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, 183 .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,
@@ -239,6 +233,7 @@ static int __init phy3250_spi_board_register(void)
239 .max_speed_hz = 5000000, 233 .max_speed_hz = 5000000,
240 .bus_num = 0, 234 .bus_num = 0,
241 .chip_select = 0, 235 .chip_select = 0,
236 .mode = SPI_MODE_0,
242 .platform_data = &eeprom, 237 .platform_data = &eeprom,
243 .controller_data = &spi0_chip_info, 238 .controller_data = &spi0_chip_info,
244 }, 239 },
diff --git a/arch/arm/mach-u300/dummyspichip.c b/arch/arm/mach-u300/dummyspichip.c
index 5f55012b7c9e..03f793612594 100644
--- a/arch/arm/mach-u300/dummyspichip.c
+++ b/arch/arm/mach-u300/dummyspichip.c
@@ -46,7 +46,6 @@ static ssize_t dummy_looptest(struct device *dev,
46 * struct, this is just used here to alter the behaviour of the chip 46 * struct, this is just used here to alter the behaviour of the chip
47 * in order to perform tests. 47 * in order to perform tests.
48 */ 48 */
49 struct pl022_config_chip *chip_info = spi->controller_data;
50 int status; 49 int status;
51 u8 txbuf[14] = {0xDE, 0xAD, 0xBE, 0xEF, 0x2B, 0xAD, 50 u8 txbuf[14] = {0xDE, 0xAD, 0xBE, 0xEF, 0x2B, 0xAD,
52 0xCA, 0xFE, 0xBA, 0xBE, 0xB1, 0x05, 51 0xCA, 0xFE, 0xBA, 0xBE, 0xB1, 0x05,
@@ -72,7 +71,7 @@ static ssize_t dummy_looptest(struct device *dev,
72 * Force chip to 8 bit mode 71 * Force chip to 8 bit mode
73 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC! 72 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC!
74 */ 73 */
75 chip_info->data_size = SSP_DATA_BITS_8; 74 spi->bits_per_word = 8;
76 /* You should NOT DO THIS EITHER */ 75 /* You should NOT DO THIS EITHER */
77 spi->master->setup(spi); 76 spi->master->setup(spi);
78 77
@@ -159,7 +158,7 @@ static ssize_t dummy_looptest(struct device *dev,
159 * Force chip to 16 bit mode 158 * Force chip to 16 bit mode
160 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC! 159 * WARNING: NEVER DO THIS IN REAL DRIVER CODE, THIS SHOULD BE STATIC!
161 */ 160 */
162 chip_info->data_size = SSP_DATA_BITS_16; 161 spi->bits_per_word = 16;
163 /* You should NOT DO THIS EITHER */ 162 /* You should NOT DO THIS EITHER */
164 spi->master->setup(spi); 163 spi->master->setup(spi);
165 164
diff --git a/arch/arm/mach-u300/spi.c b/arch/arm/mach-u300/spi.c
index f0e887bea30e..edb2c0d255c2 100644
--- a/arch/arm/mach-u300/spi.c
+++ b/arch/arm/mach-u300/spi.c
@@ -30,8 +30,6 @@ static void select_dummy_chip(u32 chipselect)
30} 30}
31 31
32struct pl022_config_chip dummy_chip_info = { 32struct pl022_config_chip dummy_chip_info = {
33 /* Nominally this is LOOPBACK_DISABLED, but this is our dummy chip! */
34 .lbm = LOOPBACK_ENABLED,
35 /* 33 /*
36 * available POLLING_TRANSFER and INTERRUPT_TRANSFER, 34 * available POLLING_TRANSFER and INTERRUPT_TRANSFER,
37 * DMA_TRANSFER does not work 35 * DMA_TRANSFER does not work
@@ -42,14 +40,8 @@ struct pl022_config_chip dummy_chip_info = {
42 .hierarchy = SSP_MASTER, 40 .hierarchy = SSP_MASTER,
43 /* 0 = drive TX even as slave, 1 = do not drive TX as slave */ 41 /* 0 = drive TX even as slave, 1 = do not drive TX as slave */
44 .slave_tx_disable = 0, 42 .slave_tx_disable = 0,
45 /* LSB first */
46 .endian_tx = SSP_TX_LSB,
47 .endian_rx = SSP_RX_LSB,
48 .data_size = SSP_DATA_BITS_8, /* used to be 12 in some default */
49 .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM, 43 .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM,
50 .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC, 44 .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC,
51 .clk_phase = SSP_CLK_SECOND_EDGE,
52 .clk_pol = SSP_CLK_POL_IDLE_LOW,
53 .ctrl_len = SSP_BITS_12, 45 .ctrl_len = SSP_BITS_12,
54 .wait_state = SSP_MWIRE_WAIT_ZERO, 46 .wait_state = SSP_MWIRE_WAIT_ZERO,
55 .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX, 47 .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,
@@ -75,7 +67,7 @@ static struct spi_board_info u300_spi_devices[] = {
75 .bus_num = 0, /* Only one bus on this chip */ 67 .bus_num = 0, /* Only one bus on this chip */
76 .chip_select = 0, 68 .chip_select = 0,
77 /* Means SPI_CS_HIGH, change if e.g low CS */ 69 /* Means SPI_CS_HIGH, change if e.g low CS */
78 .mode = 0, 70 .mode = SPI_MODE_1 | SPI_LSB_FIRST | SPI_LOOP,
79 }, 71 },
80#endif 72#endif
81}; 73};
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index 0e8fd135a57d..219ae0ca4eef 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c
@@ -55,19 +55,13 @@ static void ab4500_spi_cs_control(u32 command)
55} 55}
56 56
57struct pl022_config_chip ab4500_chip_info = { 57struct pl022_config_chip ab4500_chip_info = {
58 .lbm = LOOPBACK_DISABLED,
59 .com_mode = INTERRUPT_TRANSFER, 58 .com_mode = INTERRUPT_TRANSFER,
60 .iface = SSP_INTERFACE_MOTOROLA_SPI, 59 .iface = SSP_INTERFACE_MOTOROLA_SPI,
61 /* we can act as master only */ 60 /* we can act as master only */
62 .hierarchy = SSP_MASTER, 61 .hierarchy = SSP_MASTER,
63 .slave_tx_disable = 0, 62 .slave_tx_disable = 0,
64 .endian_rx = SSP_RX_MSB,
65 .endian_tx = SSP_TX_MSB,
66 .data_size = SSP_DATA_BITS_24,
67 .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM, 63 .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM,
68 .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC, 64 .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC,
69 .clk_phase = SSP_CLK_SECOND_EDGE,
70 .clk_pol = SSP_CLK_POL_IDLE_HIGH,
71 .cs_control = ab4500_spi_cs_control, 65 .cs_control = ab4500_spi_cs_control,
72}; 66};
73 67
@@ -83,7 +77,7 @@ static struct spi_board_info u8500_spi_devices[] = {
83 .max_speed_hz = 12000000, 77 .max_speed_hz = 12000000,
84 .bus_num = 0, 78 .bus_num = 0,
85 .chip_select = 0, 79 .chip_select = 0,
86 .mode = SPI_MODE_0, 80 .mode = SPI_MODE_3,
87 .irq = IRQ_DB8500_AB8500, 81 .irq = IRQ_DB8500_AB8500,
88 }, 82 },
89}; 83};
diff --git a/drivers/mfd/ab8500-spi.c b/drivers/mfd/ab8500-spi.c
index e1c8b62b086d..01b6d584442c 100644
--- a/drivers/mfd/ab8500-spi.c
+++ b/drivers/mfd/ab8500-spi.c
@@ -83,6 +83,11 @@ static int __devinit ab8500_spi_probe(struct spi_device *spi)
83 struct ab8500 *ab8500; 83 struct ab8500 *ab8500;
84 int ret; 84 int ret;
85 85
86 spi->bits_per_word = 24;
87 ret = spi_setup(spi);
88 if (ret < 0)
89 return ret;
90
86 ab8500 = kzalloc(sizeof *ab8500, GFP_KERNEL); 91 ab8500 = kzalloc(sizeof *ab8500, GFP_KERNEL);
87 if (!ab8500) 92 if (!ab8500)
88 return -ENOMEM; 93 return -ENOMEM;
diff --git a/drivers/spi/amba-pl022.c b/drivers/spi/amba-pl022.c
index db0c67908d2b..59c90f3ccc26 100644
--- a/drivers/spi/amba-pl022.c
+++ b/drivers/spi/amba-pl022.c
@@ -1595,12 +1595,6 @@ static int destroy_queue(struct pl022 *pl022)
1595static int verify_controller_parameters(struct pl022 *pl022, 1595static int verify_controller_parameters(struct pl022 *pl022,
1596 struct pl022_config_chip *chip_info) 1596 struct pl022_config_chip *chip_info)
1597{ 1597{
1598 if ((chip_info->lbm != LOOPBACK_ENABLED)
1599 && (chip_info->lbm != LOOPBACK_DISABLED)) {
1600 dev_err(chip_info->dev,
1601 "loopback Mode is configured incorrectly\n");
1602 return -EINVAL;
1603 }
1604 if ((chip_info->iface < SSP_INTERFACE_MOTOROLA_SPI) 1598 if ((chip_info->iface < SSP_INTERFACE_MOTOROLA_SPI)
1605 || (chip_info->iface > SSP_INTERFACE_UNIDIRECTIONAL)) { 1599 || (chip_info->iface > SSP_INTERFACE_UNIDIRECTIONAL)) {
1606 dev_err(chip_info->dev, 1600 dev_err(chip_info->dev,
@@ -1626,24 +1620,6 @@ static int verify_controller_parameters(struct pl022 *pl022,
1626 "cpsdvsr is configured incorrectly\n"); 1620 "cpsdvsr is configured incorrectly\n");
1627 return -EINVAL; 1621 return -EINVAL;
1628 } 1622 }
1629 if ((chip_info->endian_rx != SSP_RX_MSB)
1630 && (chip_info->endian_rx != SSP_RX_LSB)) {
1631 dev_err(chip_info->dev,
1632 "RX FIFO endianess is configured incorrectly\n");
1633 return -EINVAL;
1634 }
1635 if ((chip_info->endian_tx != SSP_TX_MSB)
1636 && (chip_info->endian_tx != SSP_TX_LSB)) {
1637 dev_err(chip_info->dev,
1638 "TX FIFO endianess is configured incorrectly\n");
1639 return -EINVAL;
1640 }
1641 if ((chip_info->data_size < SSP_DATA_BITS_4)
1642 || (chip_info->data_size > SSP_DATA_BITS_32)) {
1643 dev_err(chip_info->dev,
1644 "DATA Size is configured incorrectly\n");
1645 return -EINVAL;
1646 }
1647 if ((chip_info->com_mode != INTERRUPT_TRANSFER) 1623 if ((chip_info->com_mode != INTERRUPT_TRANSFER)
1648 && (chip_info->com_mode != DMA_TRANSFER) 1624 && (chip_info->com_mode != DMA_TRANSFER)
1649 && (chip_info->com_mode != POLLING_TRANSFER)) { 1625 && (chip_info->com_mode != POLLING_TRANSFER)) {
@@ -1663,20 +1639,6 @@ static int verify_controller_parameters(struct pl022 *pl022,
1663 "TX FIFO Trigger Level is configured incorrectly\n"); 1639 "TX FIFO Trigger Level is configured incorrectly\n");
1664 return -EINVAL; 1640 return -EINVAL;
1665 } 1641 }
1666 if (chip_info->iface == SSP_INTERFACE_MOTOROLA_SPI) {
1667 if ((chip_info->clk_phase != SSP_CLK_FIRST_EDGE)
1668 && (chip_info->clk_phase != SSP_CLK_SECOND_EDGE)) {
1669 dev_err(chip_info->dev,
1670 "Clock Phase is configured incorrectly\n");
1671 return -EINVAL;
1672 }
1673 if ((chip_info->clk_pol != SSP_CLK_POL_IDLE_LOW)
1674 && (chip_info->clk_pol != SSP_CLK_POL_IDLE_HIGH)) {
1675 dev_err(chip_info->dev,
1676 "Clock Polarity is configured incorrectly\n");
1677 return -EINVAL;
1678 }
1679 }
1680 if (chip_info->iface == SSP_INTERFACE_NATIONAL_MICROWIRE) { 1642 if (chip_info->iface == SSP_INTERFACE_NATIONAL_MICROWIRE) {
1681 if ((chip_info->ctrl_len < SSP_BITS_4) 1643 if ((chip_info->ctrl_len < SSP_BITS_4)
1682 || (chip_info->ctrl_len > SSP_BITS_32)) { 1644 || (chip_info->ctrl_len > SSP_BITS_32)) {
@@ -1825,23 +1787,14 @@ static int calculate_effective_freq(struct pl022 *pl022,
1825 * controller hardware here, that is not done until the actual transfer 1787 * controller hardware here, that is not done until the actual transfer
1826 * commence. 1788 * commence.
1827 */ 1789 */
1828
1829/* FIXME: JUST GUESSING the spi->mode bits understood by this driver */
1830#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
1831 | SPI_LSB_FIRST | SPI_LOOP)
1832
1833static int pl022_setup(struct spi_device *spi) 1790static int pl022_setup(struct spi_device *spi)
1834{ 1791{
1835 struct pl022_config_chip *chip_info; 1792 struct pl022_config_chip *chip_info;
1836 struct chip_data *chip; 1793 struct chip_data *chip;
1837 int status = 0; 1794 int status = 0;
1838 struct pl022 *pl022 = spi_master_get_devdata(spi->master); 1795 struct pl022 *pl022 = spi_master_get_devdata(spi->master);
1839 1796 unsigned int bits = spi->bits_per_word;
1840 if (spi->mode & ~MODEBITS) { 1797 u32 tmp;
1841 dev_dbg(&spi->dev, "unsupported mode bits %x\n",
1842 spi->mode & ~MODEBITS);
1843 return -EINVAL;
1844 }
1845 1798
1846 if (!spi->max_speed_hz) 1799 if (!spi->max_speed_hz)
1847 return -EINVAL; 1800 return -EINVAL;
@@ -1884,18 +1837,12 @@ static int pl022_setup(struct spi_device *spi)
1884 * Set controller data default values: 1837 * Set controller data default values:
1885 * Polling is supported by default 1838 * Polling is supported by default
1886 */ 1839 */
1887 chip_info->lbm = LOOPBACK_DISABLED;
1888 chip_info->com_mode = POLLING_TRANSFER; 1840 chip_info->com_mode = POLLING_TRANSFER;
1889 chip_info->iface = SSP_INTERFACE_MOTOROLA_SPI; 1841 chip_info->iface = SSP_INTERFACE_MOTOROLA_SPI;
1890 chip_info->hierarchy = SSP_SLAVE; 1842 chip_info->hierarchy = SSP_SLAVE;
1891 chip_info->slave_tx_disable = DO_NOT_DRIVE_TX; 1843 chip_info->slave_tx_disable = DO_NOT_DRIVE_TX;
1892 chip_info->endian_tx = SSP_TX_LSB;
1893 chip_info->endian_rx = SSP_RX_LSB;
1894 chip_info->data_size = SSP_DATA_BITS_12;
1895 chip_info->rx_lev_trig = SSP_RX_1_OR_MORE_ELEM; 1844 chip_info->rx_lev_trig = SSP_RX_1_OR_MORE_ELEM;
1896 chip_info->tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC; 1845 chip_info->tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC;
1897 chip_info->clk_phase = SSP_CLK_SECOND_EDGE;
1898 chip_info->clk_pol = SSP_CLK_POL_IDLE_LOW;
1899 chip_info->ctrl_len = SSP_BITS_8; 1846 chip_info->ctrl_len = SSP_BITS_8;
1900 chip_info->wait_state = SSP_MWIRE_WAIT_ZERO; 1847 chip_info->wait_state = SSP_MWIRE_WAIT_ZERO;
1901 chip_info->duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX; 1848 chip_info->duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX;
@@ -1933,12 +1880,16 @@ static int pl022_setup(struct spi_device *spi)
1933 chip->xfer_type = chip_info->com_mode; 1880 chip->xfer_type = chip_info->com_mode;
1934 chip->cs_control = chip_info->cs_control; 1881 chip->cs_control = chip_info->cs_control;
1935 1882
1936 if (chip_info->data_size <= 8) { 1883 if (bits <= 3) {
1937 dev_dbg(&spi->dev, "1 <= n <=8 bits per word\n"); 1884 /* PL022 doesn't support less than 4-bits */
1885 status = -ENOTSUPP;
1886 goto err_config_params;
1887 } else if (bits <= 8) {
1888 dev_dbg(&spi->dev, "4 <= n <=8 bits per word\n");
1938 chip->n_bytes = 1; 1889 chip->n_bytes = 1;
1939 chip->read = READING_U8; 1890 chip->read = READING_U8;
1940 chip->write = WRITING_U8; 1891 chip->write = WRITING_U8;
1941 } else if (chip_info->data_size <= 16) { 1892 } else if (bits <= 16) {
1942 dev_dbg(&spi->dev, "9 <= n <= 16 bits per word\n"); 1893 dev_dbg(&spi->dev, "9 <= n <= 16 bits per word\n");
1943 chip->n_bytes = 2; 1894 chip->n_bytes = 2;
1944 chip->read = READING_U16; 1895 chip->read = READING_U16;
@@ -1955,6 +1906,7 @@ static int pl022_setup(struct spi_device *spi)
1955 dev_err(&spi->dev, 1906 dev_err(&spi->dev,
1956 "a standard pl022 can only handle " 1907 "a standard pl022 can only handle "
1957 "1 <= n <= 16 bit words\n"); 1908 "1 <= n <= 16 bit words\n");
1909 status = -ENOTSUPP;
1958 goto err_config_params; 1910 goto err_config_params;
1959 } 1911 }
1960 } 1912 }
@@ -1987,6 +1939,8 @@ static int pl022_setup(struct spi_device *spi)
1987 1939
1988 /* Special setup for the ST micro extended control registers */ 1940 /* Special setup for the ST micro extended control registers */
1989 if (pl022->vendor->extended_cr) { 1941 if (pl022->vendor->extended_cr) {
1942 u32 etx;
1943
1990 if (pl022->vendor->pl023) { 1944 if (pl022->vendor->pl023) {
1991 /* These bits are only in the PL023 */ 1945 /* These bits are only in the PL023 */
1992 SSP_WRITE_BITS(chip->cr1, chip_info->clkdelay, 1946 SSP_WRITE_BITS(chip->cr1, chip_info->clkdelay,
@@ -2002,29 +1956,51 @@ static int pl022_setup(struct spi_device *spi)
2002 SSP_WRITE_BITS(chip->cr1, chip_info->wait_state, 1956 SSP_WRITE_BITS(chip->cr1, chip_info->wait_state,
2003 SSP_CR1_MASK_MWAIT_ST, 6); 1957 SSP_CR1_MASK_MWAIT_ST, 6);
2004 } 1958 }
2005 SSP_WRITE_BITS(chip->cr0, chip_info->data_size, 1959 SSP_WRITE_BITS(chip->cr0, bits - 1,
2006 SSP_CR0_MASK_DSS_ST, 0); 1960 SSP_CR0_MASK_DSS_ST, 0);
2007 SSP_WRITE_BITS(chip->cr1, chip_info->endian_rx, 1961
2008 SSP_CR1_MASK_RENDN_ST, 4); 1962 if (spi->mode & SPI_LSB_FIRST) {
2009 SSP_WRITE_BITS(chip->cr1, chip_info->endian_tx, 1963 tmp = SSP_RX_LSB;
2010 SSP_CR1_MASK_TENDN_ST, 5); 1964 etx = SSP_TX_LSB;
1965 } else {
1966 tmp = SSP_RX_MSB;
1967 etx = SSP_TX_MSB;
1968 }
1969 SSP_WRITE_BITS(chip->cr1, tmp, SSP_CR1_MASK_RENDN_ST, 4);
1970 SSP_WRITE_BITS(chip->cr1, etx, SSP_CR1_MASK_TENDN_ST, 5);
2011 SSP_WRITE_BITS(chip->cr1, chip_info->rx_lev_trig, 1971 SSP_WRITE_BITS(chip->cr1, chip_info->rx_lev_trig,
2012 SSP_CR1_MASK_RXIFLSEL_ST, 7); 1972 SSP_CR1_MASK_RXIFLSEL_ST, 7);
2013 SSP_WRITE_BITS(chip->cr1, chip_info->tx_lev_trig, 1973 SSP_WRITE_BITS(chip->cr1, chip_info->tx_lev_trig,
2014 SSP_CR1_MASK_TXIFLSEL_ST, 10); 1974 SSP_CR1_MASK_TXIFLSEL_ST, 10);
2015 } else { 1975 } else {
2016 SSP_WRITE_BITS(chip->cr0, chip_info->data_size, 1976 SSP_WRITE_BITS(chip->cr0, bits - 1,
2017 SSP_CR0_MASK_DSS, 0); 1977 SSP_CR0_MASK_DSS, 0);
2018 SSP_WRITE_BITS(chip->cr0, chip_info->iface, 1978 SSP_WRITE_BITS(chip->cr0, chip_info->iface,
2019 SSP_CR0_MASK_FRF, 4); 1979 SSP_CR0_MASK_FRF, 4);
2020 } 1980 }
1981
2021 /* Stuff that is common for all versions */ 1982 /* Stuff that is common for all versions */
2022 SSP_WRITE_BITS(chip->cr0, chip_info->clk_pol, SSP_CR0_MASK_SPO, 6); 1983 if (spi->mode & SPI_CPOL)
2023 SSP_WRITE_BITS(chip->cr0, chip_info->clk_phase, SSP_CR0_MASK_SPH, 7); 1984 tmp = SSP_CLK_POL_IDLE_HIGH;
1985 else
1986 tmp = SSP_CLK_POL_IDLE_LOW;
1987 SSP_WRITE_BITS(chip->cr0, tmp, SSP_CR0_MASK_SPO, 6);
1988
1989 if (spi->mode & SPI_CPHA)
1990 tmp = SSP_CLK_SECOND_EDGE;
1991 else
1992 tmp = SSP_CLK_FIRST_EDGE;
1993 SSP_WRITE_BITS(chip->cr0, tmp, SSP_CR0_MASK_SPH, 7);
1994
2024 SSP_WRITE_BITS(chip->cr0, chip_info->clk_freq.scr, SSP_CR0_MASK_SCR, 8); 1995 SSP_WRITE_BITS(chip->cr0, chip_info->clk_freq.scr, SSP_CR0_MASK_SCR, 8);
2025 /* Loopback is available on all versions except PL023 */ 1996 /* Loopback is available on all versions except PL023 */
2026 if (!pl022->vendor->pl023) 1997 if (!pl022->vendor->pl023) {
2027 SSP_WRITE_BITS(chip->cr1, chip_info->lbm, SSP_CR1_MASK_LBM, 0); 1998 if (spi->mode & SPI_LOOP)
1999 tmp = LOOPBACK_ENABLED;
2000 else
2001 tmp = LOOPBACK_DISABLED;
2002 SSP_WRITE_BITS(chip->cr1, tmp, SSP_CR1_MASK_LBM, 0);
2003 }
2028 SSP_WRITE_BITS(chip->cr1, SSP_DISABLED, SSP_CR1_MASK_SSE, 1); 2004 SSP_WRITE_BITS(chip->cr1, SSP_DISABLED, SSP_CR1_MASK_SSE, 1);
2029 SSP_WRITE_BITS(chip->cr1, chip_info->hierarchy, SSP_CR1_MASK_MS, 2); 2005 SSP_WRITE_BITS(chip->cr1, chip_info->hierarchy, SSP_CR1_MASK_MS, 2);
2030 SSP_WRITE_BITS(chip->cr1, chip_info->slave_tx_disable, SSP_CR1_MASK_SOD, 3); 2006 SSP_WRITE_BITS(chip->cr1, chip_info->slave_tx_disable, SSP_CR1_MASK_SOD, 3);
@@ -2033,6 +2009,7 @@ static int pl022_setup(struct spi_device *spi)
2033 spi_set_ctldata(spi, chip); 2009 spi_set_ctldata(spi, chip);
2034 return status; 2010 return status;
2035 err_config_params: 2011 err_config_params:
2012 spi_set_ctldata(spi, NULL);
2036 err_first_setup: 2013 err_first_setup:
2037 kfree(chip); 2014 kfree(chip);
2038 return status; 2015 return status;
@@ -2095,6 +2072,14 @@ pl022_probe(struct amba_device *adev, struct amba_id *id)
2095 master->setup = pl022_setup; 2072 master->setup = pl022_setup;
2096 master->transfer = pl022_transfer; 2073 master->transfer = pl022_transfer;
2097 2074
2075 /*
2076 * Supports mode 0-3, loopback, and active low CS. Transfers are
2077 * always MS bit first on the original pl022.
2078 */
2079 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
2080 if (pl022->vendor->extended_cr)
2081 master->mode_bits |= SPI_LSB_FIRST;
2082
2098 dev_dbg(&adev->dev, "BUSNO: %d\n", master->bus_num); 2083 dev_dbg(&adev->dev, "BUSNO: %d\n", master->bus_num);
2099 2084
2100 status = amba_request_regions(adev, NULL); 2085 status = amba_request_regions(adev, NULL);
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h
index db6a191ddcf7..bf143663df81 100644
--- a/include/linux/amba/pl022.h
+++ b/include/linux/amba/pl022.h
@@ -277,19 +277,13 @@ struct pl022_ssp_controller {
277 */ 277 */
278struct pl022_config_chip { 278struct pl022_config_chip {
279 struct device *dev; 279 struct device *dev;
280 enum ssp_loopback lbm;
281 enum ssp_interface iface; 280 enum ssp_interface iface;
282 enum ssp_hierarchy hierarchy; 281 enum ssp_hierarchy hierarchy;
283 bool slave_tx_disable; 282 bool slave_tx_disable;
284 struct ssp_clock_params clk_freq; 283 struct ssp_clock_params clk_freq;
285 enum ssp_rx_endian endian_rx;
286 enum ssp_tx_endian endian_tx;
287 enum ssp_data_size data_size;
288 enum ssp_mode com_mode; 284 enum ssp_mode com_mode;
289 enum ssp_rx_level_trig rx_lev_trig; 285 enum ssp_rx_level_trig rx_lev_trig;
290 enum ssp_tx_level_trig tx_lev_trig; 286 enum ssp_tx_level_trig tx_lev_trig;
291 enum ssp_spi_clk_phase clk_phase;
292 enum ssp_spi_clk_pol clk_pol;
293 enum ssp_microwire_ctrl_len ctrl_len; 287 enum ssp_microwire_ctrl_len ctrl_len;
294 enum ssp_microwire_wait_state wait_state; 288 enum ssp_microwire_wait_state wait_state;
295 enum ssp_duplex duplex; 289 enum ssp_duplex duplex;