Merge remote-tracking branches 'spi/fix/omap2' and 'spi/fix/rockchip' into spi-linus
authorMark Brown <broonie@kernel.org>
Mon, 4 Apr 2016 17:05:49 +0000 (10:05 -0700)
committerMark Brown <broonie@kernel.org>
Mon, 4 Apr 2016 17:05:49 +0000 (10:05 -0700)
1  2  3 
drivers/spi/spi-rockchip.c

@@@@ -191,7 -191,6 -191,6 +191,7 @@@@ struct rockchip_spi 
        struct sg_table rx_sg;
        struct rockchip_spi_dma_data dma_rx;
        struct rockchip_spi_dma_data dma_tx;
 ++     struct dma_slave_caps dma_caps;
   };
   
   static inline void spi_enable_chip(struct rockchip_spi *rs, int enable)
@@@@ -447,10 -446,7 -446,7 +447,10 @@@@ static int rockchip_spi_prepare_dma(str
                rxconf.direction = rs->dma_rx.direction;
                rxconf.src_addr = rs->dma_rx.addr;
                rxconf.src_addr_width = rs->n_bytes;
 --             rxconf.src_maxburst = rs->n_bytes;
 ++             if (rs->dma_caps.max_burst > 4)
 ++                     rxconf.src_maxburst = 4;
 ++             else
 ++                     rxconf.src_maxburst = 1;
                dmaengine_slave_config(rs->dma_rx.ch, &rxconf);
   
                rxdesc = dmaengine_prep_slave_sg(
                txconf.direction = rs->dma_tx.direction;
                txconf.dst_addr = rs->dma_tx.addr;
                txconf.dst_addr_width = rs->n_bytes;
 --             txconf.dst_maxburst = rs->n_bytes;
 ++             if (rs->dma_caps.max_burst > 4)
 ++                     txconf.dst_maxburst = 4;
 ++             else
 ++                     txconf.dst_maxburst = 1;
                dmaengine_slave_config(rs->dma_tx.ch, &txconf);
   
                txdesc = dmaengine_prep_slave_sg(
@@@@ -534,7 -527,7 -527,7 +534,7 @@@@ static void rockchip_spi_config(struct 
        if (WARN_ON(rs->speed > MAX_SCLK_OUT))
                rs->speed = MAX_SCLK_OUT;
   
--      /* the minimum divsor is 2 */
++      /* the minimum divisor is 2 */
        if (rs->max_freq < 2 * rs->speed) {
                clk_set_rate(rs->spiclk, 2 * rs->speed);
                rs->max_freq = clk_get_rate(rs->spiclk);
@@@@ -730,27 -723,26 -723,30 +730,31 @@@@ static int rockchip_spi_probe(struct pl
        master->transfer_one = rockchip_spi_transfer_one;
        master->handle_err = rockchip_spi_handle_err;
   
--      rs->dma_tx.ch = dma_request_slave_channel(rs->dev, "tx");
--      if (IS_ERR_OR_NULL(rs->dma_tx.ch)) {
++      rs->dma_tx.ch = dma_request_chan(rs->dev, "tx");
++      if (IS_ERR(rs->dma_tx.ch)) {
                /* Check tx to see if we need defer probing driver */
                if (PTR_ERR(rs->dma_tx.ch) == -EPROBE_DEFER) {
                        ret = -EPROBE_DEFER;
                        goto err_get_fifo_len;
                }
                dev_warn(rs->dev, "Failed to request TX DMA channel\n");
++              rs->dma_tx.ch = NULL;
        }
   
--      rs->dma_rx.ch = dma_request_slave_channel(rs->dev, "rx");
--      if (!rs->dma_rx.ch) {
--              if (rs->dma_tx.ch) {
++      rs->dma_rx.ch = dma_request_chan(rs->dev, "rx");
++      if (IS_ERR(rs->dma_rx.ch)) {
++              if (PTR_ERR(rs->dma_rx.ch) == -EPROBE_DEFER) {
                        dma_release_channel(rs->dma_tx.ch);
                        rs->dma_tx.ch = NULL;
++                      ret = -EPROBE_DEFER;
++                      goto err_get_fifo_len;
                }
                dev_warn(rs->dev, "Failed to request RX DMA channel\n");
++              rs->dma_rx.ch = NULL;
        }
   
        if (rs->dma_tx.ch && rs->dma_rx.ch) {
 ++             dma_get_slave_caps(rs->dma_rx.ch, &(rs->dma_caps));
                rs->dma_tx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_TXDR);
                rs->dma_rx.addr = (dma_addr_t)(mem->start + ROCKCHIP_SPI_RXDR);
                rs->dma_tx.direction = DMA_MEM_TO_DEV;