aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/spi/spi-pl022.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
index 09c925aaf320..1ead49dbebce 100644
--- a/drivers/spi/spi-pl022.c
+++ b/drivers/spi/spi-pl022.c
@@ -1823,9 +1823,12 @@ static int pl022_setup(struct spi_device *spi)
1823 } else 1823 } else
1824 chip->cs_control = chip_info->cs_control; 1824 chip->cs_control = chip_info->cs_control;
1825 1825
1826 if (bits <= 3) { 1826 /* Check bits per word with vendor specific range */
1827 /* PL022 doesn't support less than 4-bits */ 1827 if ((bits <= 3) || (bits > pl022->vendor->max_bpw)) {
1828 status = -ENOTSUPP; 1828 status = -ENOTSUPP;
1829 dev_err(&spi->dev, "illegal data size for this controller!\n");
1830 dev_err(&spi->dev, "This controller can only handle 4 <= n <= %d bit words\n",
1831 pl022->vendor->max_bpw);
1829 goto err_config_params; 1832 goto err_config_params;
1830 } else if (bits <= 8) { 1833 } else if (bits <= 8) {
1831 dev_dbg(&spi->dev, "4 <= n <=8 bits per word\n"); 1834 dev_dbg(&spi->dev, "4 <= n <=8 bits per word\n");
@@ -1838,20 +1841,10 @@ static int pl022_setup(struct spi_device *spi)
1838 chip->read = READING_U16; 1841 chip->read = READING_U16;
1839 chip->write = WRITING_U16; 1842 chip->write = WRITING_U16;
1840 } else { 1843 } else {
1841 if (pl022->vendor->max_bpw >= 32) { 1844 dev_dbg(&spi->dev, "17 <= n <= 32 bits per word\n");
1842 dev_dbg(&spi->dev, "17 <= n <= 32 bits per word\n"); 1845 chip->n_bytes = 4;
1843 chip->n_bytes = 4; 1846 chip->read = READING_U32;
1844 chip->read = READING_U32; 1847 chip->write = WRITING_U32;
1845 chip->write = WRITING_U32;
1846 } else {
1847 dev_err(&spi->dev,
1848 "illegal data size for this controller!\n");
1849 dev_err(&spi->dev,
1850 "a standard pl022 can only handle "
1851 "1 <= n <= 16 bit words\n");
1852 status = -ENOTSUPP;
1853 goto err_config_params;
1854 }
1855 } 1848 }
1856 1849
1857 /* Now Initialize all register settings required for this chip */ 1850 /* Now Initialize all register settings required for this chip */