mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
spi/s3c64xx: Move src_clk to local driver data
The pointer to SPI rate source clock had better be the member of driver local data structure rather than platform specific. Also, remove definitions of variable 'sci' that are rendered useless as a consequence. Signed-off-by: Jassi Brar <jassi.brar@samsung.com> Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
This commit is contained in:
parent
ee64a37732
commit
b0d5d6e553
1 changed files with 17 additions and 19 deletions
|
@ -137,6 +137,7 @@
|
||||||
/**
|
/**
|
||||||
* struct s3c64xx_spi_driver_data - Runtime info holder for SPI driver.
|
* struct s3c64xx_spi_driver_data - Runtime info holder for SPI driver.
|
||||||
* @clk: Pointer to the spi clock.
|
* @clk: Pointer to the spi clock.
|
||||||
|
* @src_clk: Pointer to the clock used to generate SPI signals.
|
||||||
* @master: Pointer to the SPI Protocol master.
|
* @master: Pointer to the SPI Protocol master.
|
||||||
* @workqueue: Work queue for the SPI xfer requests.
|
* @workqueue: Work queue for the SPI xfer requests.
|
||||||
* @cntrlr_info: Platform specific data for the controller this driver manages.
|
* @cntrlr_info: Platform specific data for the controller this driver manages.
|
||||||
|
@ -157,6 +158,7 @@
|
||||||
struct s3c64xx_spi_driver_data {
|
struct s3c64xx_spi_driver_data {
|
||||||
void __iomem *regs;
|
void __iomem *regs;
|
||||||
struct clk *clk;
|
struct clk *clk;
|
||||||
|
struct clk *src_clk;
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
struct spi_master *master;
|
struct spi_master *master;
|
||||||
struct workqueue_struct *workqueue;
|
struct workqueue_struct *workqueue;
|
||||||
|
@ -389,7 +391,6 @@ static inline void disable_cs(struct s3c64xx_spi_driver_data *sdd,
|
||||||
|
|
||||||
static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
|
static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
|
||||||
{
|
{
|
||||||
struct s3c64xx_spi_info *sci = sdd->cntrlr_info;
|
|
||||||
void __iomem *regs = sdd->regs;
|
void __iomem *regs = sdd->regs;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
@ -435,7 +436,7 @@ static void s3c64xx_spi_config(struct s3c64xx_spi_driver_data *sdd)
|
||||||
/* Configure Clock */
|
/* Configure Clock */
|
||||||
val = readl(regs + S3C64XX_SPI_CLK_CFG);
|
val = readl(regs + S3C64XX_SPI_CLK_CFG);
|
||||||
val &= ~S3C64XX_SPI_PSR_MASK;
|
val &= ~S3C64XX_SPI_PSR_MASK;
|
||||||
val |= ((clk_get_rate(sci->src_clk) / sdd->cur_speed / 2 - 1)
|
val |= ((clk_get_rate(sdd->src_clk) / sdd->cur_speed / 2 - 1)
|
||||||
& S3C64XX_SPI_PSR_MASK);
|
& S3C64XX_SPI_PSR_MASK);
|
||||||
writel(val, regs + S3C64XX_SPI_CLK_CFG);
|
writel(val, regs + S3C64XX_SPI_CLK_CFG);
|
||||||
|
|
||||||
|
@ -831,17 +832,17 @@ static int s3c64xx_spi_setup(struct spi_device *spi)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check if we can provide the requested rate */
|
/* Check if we can provide the requested rate */
|
||||||
speed = clk_get_rate(sci->src_clk) / 2 / (0 + 1); /* Max possible */
|
speed = clk_get_rate(sdd->src_clk) / 2 / (0 + 1); /* Max possible */
|
||||||
|
|
||||||
if (spi->max_speed_hz > speed)
|
if (spi->max_speed_hz > speed)
|
||||||
spi->max_speed_hz = speed;
|
spi->max_speed_hz = speed;
|
||||||
|
|
||||||
psr = clk_get_rate(sci->src_clk) / 2 / spi->max_speed_hz - 1;
|
psr = clk_get_rate(sdd->src_clk) / 2 / spi->max_speed_hz - 1;
|
||||||
psr &= S3C64XX_SPI_PSR_MASK;
|
psr &= S3C64XX_SPI_PSR_MASK;
|
||||||
if (psr == S3C64XX_SPI_PSR_MASK)
|
if (psr == S3C64XX_SPI_PSR_MASK)
|
||||||
psr--;
|
psr--;
|
||||||
|
|
||||||
speed = clk_get_rate(sci->src_clk) / 2 / (psr + 1);
|
speed = clk_get_rate(sdd->src_clk) / 2 / (psr + 1);
|
||||||
if (spi->max_speed_hz < speed) {
|
if (spi->max_speed_hz < speed) {
|
||||||
if (psr+1 < S3C64XX_SPI_PSR_MASK) {
|
if (psr+1 < S3C64XX_SPI_PSR_MASK) {
|
||||||
psr++;
|
psr++;
|
||||||
|
@ -851,7 +852,7 @@ static int s3c64xx_spi_setup(struct spi_device *spi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
speed = clk_get_rate(sci->src_clk) / 2 / (psr + 1);
|
speed = clk_get_rate(sdd->src_clk) / 2 / (psr + 1);
|
||||||
if (spi->max_speed_hz >= speed)
|
if (spi->max_speed_hz >= speed)
|
||||||
spi->max_speed_hz = speed;
|
spi->max_speed_hz = speed;
|
||||||
else
|
else
|
||||||
|
@ -1000,15 +1001,15 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev)
|
||||||
goto err4;
|
goto err4;
|
||||||
}
|
}
|
||||||
|
|
||||||
sci->src_clk = clk_get(&pdev->dev, sci->src_clk_name);
|
sdd->src_clk = clk_get(&pdev->dev, sci->src_clk_name);
|
||||||
if (IS_ERR(sci->src_clk)) {
|
if (IS_ERR(sdd->src_clk)) {
|
||||||
dev_err(&pdev->dev,
|
dev_err(&pdev->dev,
|
||||||
"Unable to acquire clock '%s'\n", sci->src_clk_name);
|
"Unable to acquire clock '%s'\n", sci->src_clk_name);
|
||||||
ret = PTR_ERR(sci->src_clk);
|
ret = PTR_ERR(sdd->src_clk);
|
||||||
goto err5;
|
goto err5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clk_enable(sci->src_clk)) {
|
if (clk_enable(sdd->src_clk)) {
|
||||||
dev_err(&pdev->dev, "Couldn't enable clock '%s'\n",
|
dev_err(&pdev->dev, "Couldn't enable clock '%s'\n",
|
||||||
sci->src_clk_name);
|
sci->src_clk_name);
|
||||||
ret = -EBUSY;
|
ret = -EBUSY;
|
||||||
|
@ -1050,9 +1051,9 @@ static int __init s3c64xx_spi_probe(struct platform_device *pdev)
|
||||||
err8:
|
err8:
|
||||||
destroy_workqueue(sdd->workqueue);
|
destroy_workqueue(sdd->workqueue);
|
||||||
err7:
|
err7:
|
||||||
clk_disable(sci->src_clk);
|
clk_disable(sdd->src_clk);
|
||||||
err6:
|
err6:
|
||||||
clk_put(sci->src_clk);
|
clk_put(sdd->src_clk);
|
||||||
err5:
|
err5:
|
||||||
clk_disable(sdd->clk);
|
clk_disable(sdd->clk);
|
||||||
err4:
|
err4:
|
||||||
|
@ -1073,7 +1074,6 @@ static int s3c64xx_spi_remove(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
|
struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
|
||||||
struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
|
struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
|
||||||
struct s3c64xx_spi_info *sci = sdd->cntrlr_info;
|
|
||||||
struct resource *mem_res;
|
struct resource *mem_res;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
@ -1088,8 +1088,8 @@ static int s3c64xx_spi_remove(struct platform_device *pdev)
|
||||||
|
|
||||||
destroy_workqueue(sdd->workqueue);
|
destroy_workqueue(sdd->workqueue);
|
||||||
|
|
||||||
clk_disable(sci->src_clk);
|
clk_disable(sdd->src_clk);
|
||||||
clk_put(sci->src_clk);
|
clk_put(sdd->src_clk);
|
||||||
|
|
||||||
clk_disable(sdd->clk);
|
clk_disable(sdd->clk);
|
||||||
clk_put(sdd->clk);
|
clk_put(sdd->clk);
|
||||||
|
@ -1110,8 +1110,6 @@ static int s3c64xx_spi_suspend(struct platform_device *pdev, pm_message_t state)
|
||||||
{
|
{
|
||||||
struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
|
struct spi_master *master = spi_master_get(platform_get_drvdata(pdev));
|
||||||
struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
|
struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master);
|
||||||
struct s3c64xx_spi_info *sci = sdd->cntrlr_info;
|
|
||||||
struct s3c64xx_spi_csinfo *cs;
|
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
spin_lock_irqsave(&sdd->lock, flags);
|
spin_lock_irqsave(&sdd->lock, flags);
|
||||||
|
@ -1122,7 +1120,7 @@ static int s3c64xx_spi_suspend(struct platform_device *pdev, pm_message_t state)
|
||||||
msleep(10);
|
msleep(10);
|
||||||
|
|
||||||
/* Disable the clock */
|
/* Disable the clock */
|
||||||
clk_disable(sci->src_clk);
|
clk_disable(sdd->src_clk);
|
||||||
clk_disable(sdd->clk);
|
clk_disable(sdd->clk);
|
||||||
|
|
||||||
sdd->cur_speed = 0; /* Output Clock is stopped */
|
sdd->cur_speed = 0; /* Output Clock is stopped */
|
||||||
|
@ -1140,7 +1138,7 @@ static int s3c64xx_spi_resume(struct platform_device *pdev)
|
||||||
sci->cfg_gpio(pdev);
|
sci->cfg_gpio(pdev);
|
||||||
|
|
||||||
/* Enable the clock */
|
/* Enable the clock */
|
||||||
clk_enable(sci->src_clk);
|
clk_enable(sdd->src_clk);
|
||||||
clk_enable(sdd->clk);
|
clk_enable(sdd->clk);
|
||||||
|
|
||||||
s3c64xx_spi_hwinit(sdd, pdev->id);
|
s3c64xx_spi_hwinit(sdd, pdev->id);
|
||||||
|
|
Loading…
Reference in a new issue