Skip to content

Commit

Permalink
spi/s3c64xx: Differentiate ip and rate clock
Browse files Browse the repository at this point in the history
The instance of SPI clock for controller and that used for generating
signals ought to be independently handled.

Signed-off-by: Jassi Brar <jassi.brar@samsung.com>
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
  • Loading branch information
Jassi Brar authored and Grant Likely committed Jan 20, 2010
1 parent ad7de72 commit ee64a37
Showing 1 changed file with 8 additions and 20 deletions.
28 changes: 8 additions & 20 deletions drivers/spi/spi_s3c64xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -1000,18 +1000,15 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev)
goto err4;
}

if (sci->src_clk_nr == S3C64XX_SPI_SRCCLK_PCLK)
sci->src_clk = sdd->clk;
else
sci->src_clk = clk_get(&pdev->dev, sci->src_clk_name);
sci->src_clk = clk_get(&pdev->dev, sci->src_clk_name);
if (IS_ERR(sci->src_clk)) {
dev_err(&pdev->dev,
"Unable to acquire clock '%s'\n", sci->src_clk_name);
ret = PTR_ERR(sci->src_clk);
goto err5;
}

if (sci->src_clk != sdd->clk && clk_enable(sci->src_clk)) {
if (clk_enable(sci->src_clk)) {
dev_err(&pdev->dev, "Couldn't enable clock '%s'\n",
sci->src_clk_name);
ret = -EBUSY;
Expand Down Expand Up @@ -1053,11 +1050,9 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev)
err8:
destroy_workqueue(sdd->workqueue);
err7:
if (sci->src_clk != sdd->clk)
clk_disable(sci->src_clk);
clk_disable(sci->src_clk);
err6:
if (sci->src_clk != sdd->clk)
clk_put(sci->src_clk);
clk_put(sci->src_clk);
err5:
clk_disable(sdd->clk);
err4:
Expand Down Expand Up @@ -1093,11 +1088,8 @@ static int s3c64xx_spi_remove(struct platform_device *pdev)

destroy_workqueue(sdd->workqueue);

if (sci->src_clk != sdd->clk)
clk_disable(sci->src_clk);

if (sci->src_clk != sdd->clk)
clk_put(sci->src_clk);
clk_disable(sci->src_clk);
clk_put(sci->src_clk);

clk_disable(sdd->clk);
clk_put(sdd->clk);
Expand Down Expand Up @@ -1130,9 +1122,7 @@ static int s3c64xx_spi_suspend(struct platform_device *pdev, pm_message_t state)
msleep(10);

/* Disable the clock */
if (sci->src_clk != sdd->clk)
clk_disable(sci->src_clk);

clk_disable(sci->src_clk);
clk_disable(sdd->clk);

sdd->cur_speed = 0; /* Output Clock is stopped */
Expand All @@ -1150,9 +1140,7 @@ static int s3c64xx_spi_resume(struct platform_device *pdev)
sci->cfg_gpio(pdev);

/* Enable the clock */
if (sci->src_clk != sdd->clk)
clk_enable(sci->src_clk);

clk_enable(sci->src_clk);
clk_enable(sdd->clk);

s3c64xx_spi_hwinit(sdd, pdev->id);
Expand Down

0 comments on commit ee64a37

Please sign in to comment.