diff options
Diffstat (limited to 'drivers/spi/spi-davinci.c')
| -rw-r--r-- | drivers/spi/spi-davinci.c | 72 | 
1 files changed, 19 insertions, 53 deletions
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c index 8fbfe2483ff..50f75098925 100644 --- a/drivers/spi/spi-davinci.c +++ b/drivers/spi/spi-davinci.c @@ -279,7 +279,8 @@ static int davinci_spi_setup_transfer(struct spi_device *spi,  	struct davinci_spi *dspi;  	struct davinci_spi_config *spicfg;  	u8 bits_per_word = 0; -	u32 hz = 0, spifmt = 0, prescale = 0; +	u32 hz = 0, spifmt = 0; +	int prescale;  	dspi = spi_master_get_devdata(spi->master);  	spicfg = (struct davinci_spi_config *)spi->controller_data; @@ -395,10 +396,6 @@ static int davinci_spi_setup(struct spi_device *spi)  	dspi = spi_master_get_devdata(spi->master);  	pdata = &dspi->pdata; -	/* if bits per word length is zero then set it default 8 */ -	if (!spi->bits_per_word) -		spi->bits_per_word = 8; -  	if (!(spi->mode & SPI_NO_CS)) {  		if ((pdata->chip_sel == NULL) ||  		    (pdata->chip_sel[spi->chip_select] == SPI_INTERN_CS)) @@ -553,7 +550,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)  	clear_io_bits(dspi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK);  	set_io_bits(dspi->base + SPIGCR1, SPIGCR1_SPIENA_MASK); -	INIT_COMPLETION(dspi->done); +	reinit_completion(&dspi->done);  	if (spicfg->io_type == SPI_IO_TYPE_INTR)  		set_io_bits(dspi->base + SPIINT, SPIINT_MASKINT); @@ -805,8 +802,7 @@ static int spi_davinci_get_pdata(struct platform_device *pdev,  	pdata = &dspi->pdata;  	pdata->version = SPI_VERSION_1; -	match = of_match_device(of_match_ptr(davinci_spi_of_match), -				&pdev->dev); +	match = of_match_device(davinci_spi_of_match, &pdev->dev);  	if (!match)  		return -ENODEV; @@ -827,7 +823,6 @@ static int spi_davinci_get_pdata(struct platform_device *pdev,  	return 0;  }  #else -#define davinci_spi_of_match NULL  static struct davinci_spi_platform_data  	*spi_davinci_get_pdata(struct platform_device *pdev,  		struct davinci_spi *dspi) @@ -852,7 +847,7 @@ static int davinci_spi_probe(struct platform_device *pdev)  	struct spi_master *master;  	struct davinci_spi *dspi;  	struct davinci_spi_platform_data *pdata; -	struct resource *r, *mem; +	struct resource *r;  	resource_size_t dma_rx_chan = SPI_NO_RESOURCE;  	resource_size_t	dma_tx_chan = SPI_NO_RESOURCE;  	int i = 0, ret = 0; @@ -867,10 +862,6 @@ static int davinci_spi_probe(struct platform_device *pdev)  	platform_set_drvdata(pdev, master);  	dspi = spi_master_get_devdata(master); -	if (dspi == NULL) { -		ret = -ENOENT; -		goto free_master; -	}  	if (dev_get_platdata(&pdev->dev)) {  		pdata = dev_get_platdata(&pdev->dev); @@ -893,39 +884,29 @@ static int davinci_spi_probe(struct platform_device *pdev)  	dspi->pbase = r->start; -	mem = request_mem_region(r->start, resource_size(r), pdev->name); -	if (mem == NULL) { -		ret = -EBUSY; +	dspi->base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(dspi->base)) { +		ret = PTR_ERR(dspi->base);  		goto free_master;  	} -	dspi->base = ioremap(r->start, resource_size(r)); -	if (dspi->base == NULL) { -		ret = -ENOMEM; -		goto release_region; -	} -  	dspi->irq = platform_get_irq(pdev, 0);  	if (dspi->irq <= 0) {  		ret = -EINVAL; -		goto unmap_io; +		goto free_master;  	} -	ret = request_threaded_irq(dspi->irq, davinci_spi_irq, dummy_thread_fn, -				 0, dev_name(&pdev->dev), dspi); +	ret = devm_request_threaded_irq(&pdev->dev, dspi->irq, davinci_spi_irq, +				dummy_thread_fn, 0, dev_name(&pdev->dev), dspi);  	if (ret) -		goto unmap_io; +		goto free_master; -	dspi->bitbang.master = spi_master_get(master); -	if (dspi->bitbang.master == NULL) { -		ret = -ENODEV; -		goto irq_free; -	} +	dspi->bitbang.master = master; -	dspi->clk = clk_get(&pdev->dev, NULL); +	dspi->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(dspi->clk)) {  		ret = -ENODEV; -		goto put_master; +		goto free_master;  	}  	clk_prepare_enable(dspi->clk); @@ -962,8 +943,8 @@ static int davinci_spi_probe(struct platform_device *pdev)  			goto free_clk;  		dev_info(&pdev->dev, "DMA: supported\n"); -		dev_info(&pdev->dev, "DMA: RX channel: %d, TX channel: %d, " -				"event queue: %d\n", dma_rx_chan, dma_tx_chan, +		dev_info(&pdev->dev, "DMA: RX channel: %pa, TX channel: %pa, " +				"event queue: %d\n", &dma_rx_chan, &dma_tx_chan,  				pdata->dma_event_q);  	} @@ -1014,17 +995,8 @@ free_dma:  	dma_release_channel(dspi->dma_tx);  free_clk:  	clk_disable_unprepare(dspi->clk); -	clk_put(dspi->clk); -put_master: -	spi_master_put(master); -irq_free: -	free_irq(dspi->irq, dspi); -unmap_io: -	iounmap(dspi->base); -release_region: -	release_mem_region(dspi->pbase, resource_size(r));  free_master: -	kfree(master); +	spi_master_put(master);  err:  	return ret;  } @@ -1042,7 +1014,6 @@ static int davinci_spi_remove(struct platform_device *pdev)  {  	struct davinci_spi *dspi;  	struct spi_master *master; -	struct resource *r;  	master = platform_get_drvdata(pdev);  	dspi = spi_master_get_devdata(master); @@ -1050,12 +1021,7 @@ static int davinci_spi_remove(struct platform_device *pdev)  	spi_bitbang_stop(&dspi->bitbang);  	clk_disable_unprepare(dspi->clk); -	clk_put(dspi->clk);  	spi_master_put(master); -	free_irq(dspi->irq, dspi); -	iounmap(dspi->base); -	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	release_mem_region(dspi->pbase, resource_size(r));  	return 0;  } @@ -1064,7 +1030,7 @@ static struct platform_driver davinci_spi_driver = {  	.driver = {  		.name = "spi_davinci",  		.owner = THIS_MODULE, -		.of_match_table = davinci_spi_of_match, +		.of_match_table = of_match_ptr(davinci_spi_of_match),  	},  	.probe = davinci_spi_probe,  	.remove = davinci_spi_remove,  | 
