forked from mirrors/linux
		
	spi: geni-qcom: Undo runtime PM changes at driver exit time
It's important to undo pm_runtime_use_autosuspend() with
pm_runtime_dont_use_autosuspend() at driver exit time unless driver
initially enabled pm_runtime with devm_pm_runtime_enable()
(which handles it for you).
Hence, switch to devm_pm_runtime_enable() to fix it, so the
pm_runtime_disable() in probe error path and remove function
can be removed.
Fixes: cfdab2cd85 ("spi: spi-geni-qcom: Set an autosuspend delay of 250 ms")
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Suggested-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://patch.msgid.link/20240909073141.951494-2-ruanjinjie@huawei.com
Signed-off-by: Mark Brown <broonie@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									c9ca76e823
								
							
						
					
					
						commit
						89e362c883
					
				
					 1 changed files with 6 additions and 7 deletions
				
			
		|  | @ -1110,25 +1110,27 @@ static int spi_geni_probe(struct platform_device *pdev) | ||||||
| 	spin_lock_init(&mas->lock); | 	spin_lock_init(&mas->lock); | ||||||
| 	pm_runtime_use_autosuspend(&pdev->dev); | 	pm_runtime_use_autosuspend(&pdev->dev); | ||||||
| 	pm_runtime_set_autosuspend_delay(&pdev->dev, 250); | 	pm_runtime_set_autosuspend_delay(&pdev->dev, 250); | ||||||
| 	pm_runtime_enable(dev); | 	ret = devm_pm_runtime_enable(dev); | ||||||
|  | 	if (ret) | ||||||
|  | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	if (device_property_read_bool(&pdev->dev, "spi-slave")) | 	if (device_property_read_bool(&pdev->dev, "spi-slave")) | ||||||
| 		spi->target = true; | 		spi->target = true; | ||||||
| 
 | 
 | ||||||
| 	ret = geni_icc_get(&mas->se, NULL); | 	ret = geni_icc_get(&mas->se, NULL); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto spi_geni_probe_runtime_disable; | 		return ret; | ||||||
| 	/* Set the bus quota to a reasonable value for register access */ | 	/* Set the bus quota to a reasonable value for register access */ | ||||||
| 	mas->se.icc_paths[GENI_TO_CORE].avg_bw = Bps_to_icc(CORE_2X_50_MHZ); | 	mas->se.icc_paths[GENI_TO_CORE].avg_bw = Bps_to_icc(CORE_2X_50_MHZ); | ||||||
| 	mas->se.icc_paths[CPU_TO_GENI].avg_bw = GENI_DEFAULT_BW; | 	mas->se.icc_paths[CPU_TO_GENI].avg_bw = GENI_DEFAULT_BW; | ||||||
| 
 | 
 | ||||||
| 	ret = geni_icc_set_bw(&mas->se); | 	ret = geni_icc_set_bw(&mas->se); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto spi_geni_probe_runtime_disable; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	ret = spi_geni_init(mas); | 	ret = spi_geni_init(mas); | ||||||
| 	if (ret) | 	if (ret) | ||||||
| 		goto spi_geni_probe_runtime_disable; | 		return ret; | ||||||
| 
 | 
 | ||||||
| 	/*
 | 	/*
 | ||||||
| 	 * check the mode supported and set_cs for fifo mode only | 	 * check the mode supported and set_cs for fifo mode only | ||||||
|  | @ -1157,8 +1159,6 @@ static int spi_geni_probe(struct platform_device *pdev) | ||||||
| 	free_irq(mas->irq, spi); | 	free_irq(mas->irq, spi); | ||||||
| spi_geni_release_dma: | spi_geni_release_dma: | ||||||
| 	spi_geni_release_dma_chan(mas); | 	spi_geni_release_dma_chan(mas); | ||||||
| spi_geni_probe_runtime_disable: |  | ||||||
| 	pm_runtime_disable(dev); |  | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -1173,7 +1173,6 @@ static void spi_geni_remove(struct platform_device *pdev) | ||||||
| 	spi_geni_release_dma_chan(mas); | 	spi_geni_release_dma_chan(mas); | ||||||
| 
 | 
 | ||||||
| 	free_irq(mas->irq, spi); | 	free_irq(mas->irq, spi); | ||||||
| 	pm_runtime_disable(&pdev->dev); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int __maybe_unused spi_geni_runtime_suspend(struct device *dev) | static int __maybe_unused spi_geni_runtime_suspend(struct device *dev) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jinjie Ruan
						Jinjie Ruan