diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2016-01-12 05:01:12 -0500 |
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2016-01-12 05:01:12 -0500 |
| commit | 1f16f116b01c110db20ab808562c8b8bc3ee3d6e (patch) | |
| tree | 44db563f64cf5f8d62af8f99a61e2b248c44ea3a /drivers/spi | |
| parent | 03724ac3d48f8f0e3caf1d30fa134f8fd96c94e2 (diff) | |
| parent | f9eccf24615672896dc13251410c3f2f33a14f95 (diff) | |
Merge branches 'clockevents/4.4-fixes' and 'clockevents/4.5-fixes' of http://git.linaro.org/people/daniel.lezcano/linux into timers/urgent
Pull in fixes from Daniel Lezcano:
- Fix the vt8500 timer leading to a system lock up when dealing with too
small delta (Roman Volkov)
- Select the CLKSRC_MMIO when the fsl_ftm_timer is enabled with COMPILE_TEST
(Daniel Lezcano)
- Prevent to compile timers using the 'iomem' API when the architecture has
not HAS_IOMEM set (Richard Weinberger)
Diffstat (limited to 'drivers/spi')
| -rw-r--r-- | drivers/spi/spi-bcm63xx.c | 4 | ||||
| -rw-r--r-- | drivers/spi/spi-fsl-dspi.c | 12 | ||||
| -rw-r--r-- | drivers/spi/spi-mt65xx.c | 26 | ||||
| -rw-r--r-- | drivers/spi/spi-pl022.c | 28 | ||||
| -rw-r--r-- | drivers/spi/spi.c | 4 | ||||
| -rw-r--r-- | drivers/spi/spidev.c | 2 |
6 files changed, 52 insertions, 24 deletions
diff --git a/drivers/spi/spi-bcm63xx.c b/drivers/spi/spi-bcm63xx.c index 06858e04ec59..bf9a610e5b89 100644 --- a/drivers/spi/spi-bcm63xx.c +++ b/drivers/spi/spi-bcm63xx.c | |||
| @@ -562,8 +562,8 @@ static int bcm63xx_spi_probe(struct platform_device *pdev) | |||
| 562 | goto out_clk_disable; | 562 | goto out_clk_disable; |
| 563 | } | 563 | } |
| 564 | 564 | ||
| 565 | dev_info(dev, "at 0x%08x (irq %d, FIFOs size %d)\n", | 565 | dev_info(dev, "at %pr (irq %d, FIFOs size %d)\n", |
| 566 | r->start, irq, bs->fifo_size); | 566 | r, irq, bs->fifo_size); |
| 567 | 567 | ||
| 568 | return 0; | 568 | return 0; |
| 569 | 569 | ||
diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c index 59a11437db70..39412c9097c6 100644 --- a/drivers/spi/spi-fsl-dspi.c +++ b/drivers/spi/spi-fsl-dspi.c | |||
| @@ -167,7 +167,7 @@ static inline int is_double_byte_mode(struct fsl_dspi *dspi) | |||
| 167 | { | 167 | { |
| 168 | unsigned int val; | 168 | unsigned int val; |
| 169 | 169 | ||
| 170 | regmap_read(dspi->regmap, SPI_CTAR(dspi->cs), &val); | 170 | regmap_read(dspi->regmap, SPI_CTAR(0), &val); |
| 171 | 171 | ||
| 172 | return ((val & SPI_FRAME_BITS_MASK) == SPI_FRAME_BITS(8)) ? 0 : 1; | 172 | return ((val & SPI_FRAME_BITS_MASK) == SPI_FRAME_BITS(8)) ? 0 : 1; |
| 173 | } | 173 | } |
| @@ -257,7 +257,7 @@ static u32 dspi_data_to_pushr(struct fsl_dspi *dspi, int tx_word) | |||
| 257 | 257 | ||
| 258 | return SPI_PUSHR_TXDATA(d16) | | 258 | return SPI_PUSHR_TXDATA(d16) | |
| 259 | SPI_PUSHR_PCS(dspi->cs) | | 259 | SPI_PUSHR_PCS(dspi->cs) | |
| 260 | SPI_PUSHR_CTAS(dspi->cs) | | 260 | SPI_PUSHR_CTAS(0) | |
| 261 | SPI_PUSHR_CONT; | 261 | SPI_PUSHR_CONT; |
| 262 | } | 262 | } |
| 263 | 263 | ||
| @@ -290,7 +290,7 @@ static int dspi_eoq_write(struct fsl_dspi *dspi) | |||
| 290 | */ | 290 | */ |
| 291 | if (tx_word && (dspi->len == 1)) { | 291 | if (tx_word && (dspi->len == 1)) { |
| 292 | dspi->dataflags |= TRAN_STATE_WORD_ODD_NUM; | 292 | dspi->dataflags |= TRAN_STATE_WORD_ODD_NUM; |
| 293 | regmap_update_bits(dspi->regmap, SPI_CTAR(dspi->cs), | 293 | regmap_update_bits(dspi->regmap, SPI_CTAR(0), |
| 294 | SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(8)); | 294 | SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(8)); |
| 295 | tx_word = 0; | 295 | tx_word = 0; |
| 296 | } | 296 | } |
| @@ -339,7 +339,7 @@ static int dspi_tcfq_write(struct fsl_dspi *dspi) | |||
| 339 | 339 | ||
| 340 | if (tx_word && (dspi->len == 1)) { | 340 | if (tx_word && (dspi->len == 1)) { |
| 341 | dspi->dataflags |= TRAN_STATE_WORD_ODD_NUM; | 341 | dspi->dataflags |= TRAN_STATE_WORD_ODD_NUM; |
| 342 | regmap_update_bits(dspi->regmap, SPI_CTAR(dspi->cs), | 342 | regmap_update_bits(dspi->regmap, SPI_CTAR(0), |
| 343 | SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(8)); | 343 | SPI_FRAME_BITS_MASK, SPI_FRAME_BITS(8)); |
| 344 | tx_word = 0; | 344 | tx_word = 0; |
| 345 | } | 345 | } |
| @@ -407,7 +407,7 @@ static int dspi_transfer_one_message(struct spi_master *master, | |||
| 407 | regmap_update_bits(dspi->regmap, SPI_MCR, | 407 | regmap_update_bits(dspi->regmap, SPI_MCR, |
| 408 | SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF, | 408 | SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF, |
| 409 | SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF); | 409 | SPI_MCR_CLR_TXF | SPI_MCR_CLR_RXF); |
| 410 | regmap_write(dspi->regmap, SPI_CTAR(dspi->cs), | 410 | regmap_write(dspi->regmap, SPI_CTAR(0), |
| 411 | dspi->cur_chip->ctar_val); | 411 | dspi->cur_chip->ctar_val); |
| 412 | 412 | ||
| 413 | trans_mode = dspi->devtype_data->trans_mode; | 413 | trans_mode = dspi->devtype_data->trans_mode; |
| @@ -566,7 +566,7 @@ static irqreturn_t dspi_interrupt(int irq, void *dev_id) | |||
| 566 | if (!dspi->len) { | 566 | if (!dspi->len) { |
| 567 | if (dspi->dataflags & TRAN_STATE_WORD_ODD_NUM) { | 567 | if (dspi->dataflags & TRAN_STATE_WORD_ODD_NUM) { |
| 568 | regmap_update_bits(dspi->regmap, | 568 | regmap_update_bits(dspi->regmap, |
| 569 | SPI_CTAR(dspi->cs), | 569 | SPI_CTAR(0), |
| 570 | SPI_FRAME_BITS_MASK, | 570 | SPI_FRAME_BITS_MASK, |
| 571 | SPI_FRAME_BITS(16)); | 571 | SPI_FRAME_BITS(16)); |
| 572 | dspi->dataflags &= ~TRAN_STATE_WORD_ODD_NUM; | 572 | dspi->dataflags &= ~TRAN_STATE_WORD_ODD_NUM; |
diff --git a/drivers/spi/spi-mt65xx.c b/drivers/spi/spi-mt65xx.c index 563954a61424..7840067062a8 100644 --- a/drivers/spi/spi-mt65xx.c +++ b/drivers/spi/spi-mt65xx.c | |||
| @@ -410,7 +410,7 @@ static int mtk_spi_setup(struct spi_device *spi) | |||
| 410 | if (!spi->controller_data) | 410 | if (!spi->controller_data) |
| 411 | spi->controller_data = (void *)&mtk_default_chip_info; | 411 | spi->controller_data = (void *)&mtk_default_chip_info; |
| 412 | 412 | ||
| 413 | if (mdata->dev_comp->need_pad_sel) | 413 | if (mdata->dev_comp->need_pad_sel && gpio_is_valid(spi->cs_gpio)) |
| 414 | gpio_direction_output(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH)); | 414 | gpio_direction_output(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH)); |
| 415 | 415 | ||
| 416 | return 0; | 416 | return 0; |
| @@ -632,13 +632,23 @@ static int mtk_spi_probe(struct platform_device *pdev) | |||
| 632 | goto err_put_master; | 632 | goto err_put_master; |
| 633 | } | 633 | } |
| 634 | 634 | ||
| 635 | for (i = 0; i < master->num_chipselect; i++) { | 635 | if (!master->cs_gpios && master->num_chipselect > 1) { |
| 636 | ret = devm_gpio_request(&pdev->dev, master->cs_gpios[i], | 636 | dev_err(&pdev->dev, |
| 637 | dev_name(&pdev->dev)); | 637 | "cs_gpios not specified and num_chipselect > 1\n"); |
| 638 | if (ret) { | 638 | ret = -EINVAL; |
| 639 | dev_err(&pdev->dev, | 639 | goto err_put_master; |
| 640 | "can't get CS GPIO %i\n", i); | 640 | } |
| 641 | goto err_put_master; | 641 | |
| 642 | if (master->cs_gpios) { | ||
| 643 | for (i = 0; i < master->num_chipselect; i++) { | ||
| 644 | ret = devm_gpio_request(&pdev->dev, | ||
| 645 | master->cs_gpios[i], | ||
| 646 | dev_name(&pdev->dev)); | ||
| 647 | if (ret) { | ||
| 648 | dev_err(&pdev->dev, | ||
| 649 | "can't get CS GPIO %i\n", i); | ||
| 650 | goto err_put_master; | ||
| 651 | } | ||
| 642 | } | 652 | } |
| 643 | } | 653 | } |
| 644 | } | 654 | } |
diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c index 94af80676684..5e5fd77e2711 100644 --- a/drivers/spi/spi-pl022.c +++ b/drivers/spi/spi-pl022.c | |||
| @@ -1171,19 +1171,31 @@ err_no_rxchan: | |||
| 1171 | static int pl022_dma_autoprobe(struct pl022 *pl022) | 1171 | static int pl022_dma_autoprobe(struct pl022 *pl022) |
| 1172 | { | 1172 | { |
| 1173 | struct device *dev = &pl022->adev->dev; | 1173 | struct device *dev = &pl022->adev->dev; |
| 1174 | struct dma_chan *chan; | ||
| 1175 | int err; | ||
| 1174 | 1176 | ||
| 1175 | /* automatically configure DMA channels from platform, normally using DT */ | 1177 | /* automatically configure DMA channels from platform, normally using DT */ |
| 1176 | pl022->dma_rx_channel = dma_request_slave_channel(dev, "rx"); | 1178 | chan = dma_request_slave_channel_reason(dev, "rx"); |
| 1177 | if (!pl022->dma_rx_channel) | 1179 | if (IS_ERR(chan)) { |
| 1180 | err = PTR_ERR(chan); | ||
| 1178 | goto err_no_rxchan; | 1181 | goto err_no_rxchan; |
| 1182 | } | ||
| 1183 | |||
| 1184 | pl022->dma_rx_channel = chan; | ||
| 1179 | 1185 | ||
| 1180 | pl022->dma_tx_channel = dma_request_slave_channel(dev, "tx"); | 1186 | chan = dma_request_slave_channel_reason(dev, "tx"); |
| 1181 | if (!pl022->dma_tx_channel) | 1187 | if (IS_ERR(chan)) { |
| 1188 | err = PTR_ERR(chan); | ||
| 1182 | goto err_no_txchan; | 1189 | goto err_no_txchan; |
| 1190 | } | ||
| 1191 | |||
| 1192 | pl022->dma_tx_channel = chan; | ||
| 1183 | 1193 | ||
| 1184 | pl022->dummypage = kmalloc(PAGE_SIZE, GFP_KERNEL); | 1194 | pl022->dummypage = kmalloc(PAGE_SIZE, GFP_KERNEL); |
| 1185 | if (!pl022->dummypage) | 1195 | if (!pl022->dummypage) { |
| 1196 | err = -ENOMEM; | ||
| 1186 | goto err_no_dummypage; | 1197 | goto err_no_dummypage; |
| 1198 | } | ||
| 1187 | 1199 | ||
| 1188 | return 0; | 1200 | return 0; |
| 1189 | 1201 | ||
| @@ -1194,7 +1206,7 @@ err_no_txchan: | |||
| 1194 | dma_release_channel(pl022->dma_rx_channel); | 1206 | dma_release_channel(pl022->dma_rx_channel); |
| 1195 | pl022->dma_rx_channel = NULL; | 1207 | pl022->dma_rx_channel = NULL; |
| 1196 | err_no_rxchan: | 1208 | err_no_rxchan: |
| 1197 | return -ENODEV; | 1209 | return err; |
| 1198 | } | 1210 | } |
| 1199 | 1211 | ||
| 1200 | static void terminate_dma(struct pl022 *pl022) | 1212 | static void terminate_dma(struct pl022 *pl022) |
| @@ -2236,6 +2248,10 @@ static int pl022_probe(struct amba_device *adev, const struct amba_id *id) | |||
| 2236 | 2248 | ||
| 2237 | /* Get DMA channels, try autoconfiguration first */ | 2249 | /* Get DMA channels, try autoconfiguration first */ |
| 2238 | status = pl022_dma_autoprobe(pl022); | 2250 | status = pl022_dma_autoprobe(pl022); |
| 2251 | if (status == -EPROBE_DEFER) { | ||
| 2252 | dev_dbg(dev, "deferring probe to get DMA channel\n"); | ||
| 2253 | goto err_no_irq; | ||
| 2254 | } | ||
| 2239 | 2255 | ||
| 2240 | /* If that failed, use channels from platform_info */ | 2256 | /* If that failed, use channels from platform_info */ |
| 2241 | if (status == 0) | 2257 | if (status == 0) |
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index e2415be209d5..dee1cb87d24f 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c | |||
| @@ -376,6 +376,7 @@ static void spi_drv_shutdown(struct device *dev) | |||
| 376 | 376 | ||
| 377 | /** | 377 | /** |
| 378 | * __spi_register_driver - register a SPI driver | 378 | * __spi_register_driver - register a SPI driver |
| 379 | * @owner: owner module of the driver to register | ||
| 379 | * @sdrv: the driver to register | 380 | * @sdrv: the driver to register |
| 380 | * Context: can sleep | 381 | * Context: can sleep |
| 381 | * | 382 | * |
| @@ -1704,7 +1705,7 @@ struct spi_master *spi_alloc_master(struct device *dev, unsigned size) | |||
| 1704 | master->bus_num = -1; | 1705 | master->bus_num = -1; |
| 1705 | master->num_chipselect = 1; | 1706 | master->num_chipselect = 1; |
| 1706 | master->dev.class = &spi_master_class; | 1707 | master->dev.class = &spi_master_class; |
| 1707 | master->dev.parent = get_device(dev); | 1708 | master->dev.parent = dev; |
| 1708 | spi_master_set_devdata(master, &master[1]); | 1709 | spi_master_set_devdata(master, &master[1]); |
| 1709 | 1710 | ||
| 1710 | return master; | 1711 | return master; |
| @@ -2130,6 +2131,7 @@ static int __spi_validate(struct spi_device *spi, struct spi_message *message) | |||
| 2130 | * Set transfer tx_nbits and rx_nbits as single transfer default | 2131 | * Set transfer tx_nbits and rx_nbits as single transfer default |
| 2131 | * (SPI_NBITS_SINGLE) if it is not set for this transfer. | 2132 | * (SPI_NBITS_SINGLE) if it is not set for this transfer. |
| 2132 | */ | 2133 | */ |
| 2134 | message->frame_length = 0; | ||
| 2133 | list_for_each_entry(xfer, &message->transfers, transfer_list) { | 2135 | list_for_each_entry(xfer, &message->transfers, transfer_list) { |
| 2134 | message->frame_length += xfer->len; | 2136 | message->frame_length += xfer->len; |
| 2135 | if (!xfer->bits_per_word) | 2137 | if (!xfer->bits_per_word) |
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index 91a0fcd72423..d0e7dfc647cf 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c | |||
| @@ -651,11 +651,11 @@ static int spidev_release(struct inode *inode, struct file *filp) | |||
| 651 | kfree(spidev->rx_buffer); | 651 | kfree(spidev->rx_buffer); |
| 652 | spidev->rx_buffer = NULL; | 652 | spidev->rx_buffer = NULL; |
| 653 | 653 | ||
| 654 | spin_lock_irq(&spidev->spi_lock); | ||
| 654 | if (spidev->spi) | 655 | if (spidev->spi) |
| 655 | spidev->speed_hz = spidev->spi->max_speed_hz; | 656 | spidev->speed_hz = spidev->spi->max_speed_hz; |
| 656 | 657 | ||
| 657 | /* ... after we unbound from the underlying device? */ | 658 | /* ... after we unbound from the underlying device? */ |
| 658 | spin_lock_irq(&spidev->spi_lock); | ||
| 659 | dofree = (spidev->spi == NULL); | 659 | dofree = (spidev->spi == NULL); |
| 660 | spin_unlock_irq(&spidev->spi_lock); | 660 | spin_unlock_irq(&spidev->spi_lock); |
| 661 | 661 | ||
