diff options
Diffstat (limited to 'drivers/spi/spi-geni-qcom.c')
| -rw-r--r-- | drivers/spi/spi-geni-qcom.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c index babb039bcb43..b293428760bc 100644 --- a/drivers/spi/spi-geni-qcom.c +++ b/drivers/spi/spi-geni-qcom.c @@ -294,6 +294,8 @@ static void spi_geni_set_cs(struct spi_device *slv, bool set_flag)  	mas->cs_flag = set_flag;  	/* set xfer_mode to FIFO to complete cs_done in isr */  	mas->cur_xfer_mode = GENI_SE_FIFO; +	geni_se_select_mode(se, mas->cur_xfer_mode); +  	reinit_completion(&mas->cs_done);  	if (set_flag)  		geni_se_setup_m_cmd(se, SPI_CS_ASSERT, 0); @@ -391,9 +393,9 @@ static int setup_fifo_params(struct spi_device *spi_slv,  			cpha = CPHA;  		if (spi_slv->mode & SPI_CS_HIGH) -			demux_output_inv = BIT(spi_slv->chip_select); +			demux_output_inv = BIT(spi_get_chipselect(spi_slv, 0)); -		demux_sel = spi_slv->chip_select; +		demux_sel = spi_get_chipselect(spi_slv, 0);  		mas->cur_bits_per_word = spi_slv->bits_per_word;  		spi_setup_word_len(mas, spi_slv->mode, spi_slv->bits_per_word); @@ -469,7 +471,7 @@ static int setup_gsi_xfer(struct spi_transfer *xfer, struct spi_geni_master *mas  	peripheral.loopback_en = !!(spi_slv->mode & SPI_LOOP);  	peripheral.clock_pol_high = !!(spi_slv->mode & SPI_CPOL);  	peripheral.data_pol_high = !!(spi_slv->mode & SPI_CPHA); -	peripheral.cs = spi_slv->chip_select; +	peripheral.cs = spi_get_chipselect(spi_slv, 0);  	peripheral.pack_en = true;  	peripheral.word_len = xfer->bits_per_word - MIN_WORD_LEN; @@ -644,6 +646,8 @@ static int spi_geni_init(struct spi_geni_master *mas)  			geni_se_select_mode(se, GENI_GPI_DMA);  			dev_dbg(mas->dev, "Using GPI DMA mode for SPI\n");  			break; +		} else if (ret == -EPROBE_DEFER) { +			goto out_pm;  		}  		/*  		 * in case of failure to get gpi dma channel, we can still do the @@ -1114,7 +1118,7 @@ spi_geni_probe_runtime_disable:  	return ret;  } -static int spi_geni_remove(struct platform_device *pdev) +static void spi_geni_remove(struct platform_device *pdev)  {  	struct spi_master *spi = platform_get_drvdata(pdev);  	struct spi_geni_master *mas = spi_master_get_devdata(spi); @@ -1126,7 +1130,6 @@ static int spi_geni_remove(struct platform_device *pdev)  	free_irq(mas->irq, spi);  	pm_runtime_disable(&pdev->dev); -	return 0;  }  static int __maybe_unused spi_geni_runtime_suspend(struct device *dev) @@ -1208,7 +1211,7 @@ MODULE_DEVICE_TABLE(of, spi_geni_dt_match);  static struct platform_driver spi_geni_driver = {  	.probe  = spi_geni_probe, -	.remove = spi_geni_remove, +	.remove_new = spi_geni_remove,  	.driver = {  		.name = "geni_spi",  		.pm = &spi_geni_pm_ops,  |