diff options
Diffstat (limited to 'drivers/spi/spi-qup.c')
| -rw-r--r-- | drivers/spi/spi-qup.c | 37 | 
1 files changed, 18 insertions, 19 deletions
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index 944ef6b42bce..00e5e88e72c4 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c @@ -1028,23 +1028,8 @@ static int spi_qup_probe(struct platform_device *pdev)  		return -ENXIO;  	} -	ret = clk_prepare_enable(cclk); -	if (ret) { -		dev_err(dev, "cannot enable core clock\n"); -		return ret; -	} - -	ret = clk_prepare_enable(iclk); -	if (ret) { -		clk_disable_unprepare(cclk); -		dev_err(dev, "cannot enable iface clock\n"); -		return ret; -	} -  	master = spi_alloc_master(dev, sizeof(struct spi_qup));  	if (!master) { -		clk_disable_unprepare(cclk); -		clk_disable_unprepare(iclk);  		dev_err(dev, "cannot allocate master\n");  		return -ENOMEM;  	} @@ -1092,6 +1077,19 @@ static int spi_qup_probe(struct platform_device *pdev)  	spin_lock_init(&controller->lock);  	init_completion(&controller->done); +	ret = clk_prepare_enable(cclk); +	if (ret) { +		dev_err(dev, "cannot enable core clock\n"); +		goto error_dma; +	} + +	ret = clk_prepare_enable(iclk); +	if (ret) { +		clk_disable_unprepare(cclk); +		dev_err(dev, "cannot enable iface clock\n"); +		goto error_dma; +	} +  	iomode = readl_relaxed(base + QUP_IO_M_MODES);  	size = QUP_IO_M_OUTPUT_BLOCK_SIZE(iomode); @@ -1121,7 +1119,7 @@ static int spi_qup_probe(struct platform_device *pdev)  	ret = spi_qup_set_state(controller, QUP_STATE_RESET);  	if (ret) {  		dev_err(dev, "cannot set RESET state\n"); -		goto error_dma; +		goto error_clk;  	}  	writel_relaxed(0, base + QUP_OPERATIONAL); @@ -1145,7 +1143,7 @@ static int spi_qup_probe(struct platform_device *pdev)  	ret = devm_request_irq(dev, irq, spi_qup_qup_irq,  			       IRQF_TRIGGER_HIGH, pdev->name, controller);  	if (ret) -		goto error_dma; +		goto error_clk;  	pm_runtime_set_autosuspend_delay(dev, MSEC_PER_SEC);  	pm_runtime_use_autosuspend(dev); @@ -1160,11 +1158,12 @@ static int spi_qup_probe(struct platform_device *pdev)  disable_pm:  	pm_runtime_disable(&pdev->dev); +error_clk: +	clk_disable_unprepare(cclk); +	clk_disable_unprepare(iclk);  error_dma:  	spi_qup_release_dma(master);  error: -	clk_disable_unprepare(cclk); -	clk_disable_unprepare(iclk);  	spi_master_put(master);  	return ret;  }  |