summaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-01-29 00:53:55 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2014-01-29 00:53:55 -0500
commite9a371100dfdfa4c9f994059d19d98c9b4fd80af (patch)
tree11e9d240d87834f9da927aaa4027e7dfcbd01eb8 /drivers/spi
parentd891ea23d5203e5c47439b2a174f86a00b356a6c (diff)
parentbc75059422338197ce487d338ac9c898761e1e61 (diff)
Merge remote-tracking branch 'agust/next' into next
<< Switch mpc512x to the common clock framework and adapt mpc512x drivers to use the new clock driver. Old PPC_CLOCK code is removed entirely since there are no users any more. >>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/spi-mpc512x-psc.c26
1 files changed, 18 insertions, 8 deletions
diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c
index 46d2313f7c6f..5032141eeeec 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -40,6 +40,7 @@ struct mpc512x_psc_spi {
40 unsigned int irq; 40 unsigned int irq;
41 u8 bits_per_word; 41 u8 bits_per_word;
42 struct clk *clk_mclk; 42 struct clk *clk_mclk;
43 struct clk *clk_ipg;
43 u32 mclk_rate; 44 u32 mclk_rate;
44 45
45 struct completion txisrdone; 46 struct completion txisrdone;
@@ -475,8 +476,6 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
475 struct spi_master *master; 476 struct spi_master *master;
476 int ret; 477 int ret;
477 void *tempp; 478 void *tempp;
478 int psc_num;
479 char clk_name[16];
480 struct clk *clk; 479 struct clk *clk;
481 480
482 master = spi_alloc_master(dev, sizeof *mps); 481 master = spi_alloc_master(dev, sizeof *mps);
@@ -519,9 +518,7 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
519 goto free_master; 518 goto free_master;
520 init_completion(&mps->txisrdone); 519 init_completion(&mps->txisrdone);
521 520
522 psc_num = master->bus_num; 521 clk = devm_clk_get(dev, "mclk");
523 snprintf(clk_name, sizeof(clk_name), "psc%d_mclk", psc_num);
524 clk = devm_clk_get(dev, clk_name);
525 if (IS_ERR(clk)) { 522 if (IS_ERR(clk)) {
526 ret = PTR_ERR(clk); 523 ret = PTR_ERR(clk);
527 goto free_master; 524 goto free_master;
@@ -532,17 +529,29 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 regaddr,
532 mps->clk_mclk = clk; 529 mps->clk_mclk = clk;
533 mps->mclk_rate = clk_get_rate(clk); 530 mps->mclk_rate = clk_get_rate(clk);
534 531
532 clk = devm_clk_get(dev, "ipg");
533 if (IS_ERR(clk)) {
534 ret = PTR_ERR(clk);
535 goto free_mclk_clock;
536 }
537 ret = clk_prepare_enable(clk);
538 if (ret)
539 goto free_mclk_clock;
540 mps->clk_ipg = clk;
541
535 ret = mpc512x_psc_spi_port_config(master, mps); 542 ret = mpc512x_psc_spi_port_config(master, mps);
536 if (ret < 0) 543 if (ret < 0)
537 goto free_clock; 544 goto free_ipg_clock;
538 545
539 ret = devm_spi_register_master(dev, master); 546 ret = devm_spi_register_master(dev, master);
540 if (ret < 0) 547 if (ret < 0)
541 goto free_clock; 548 goto free_ipg_clock;
542 549
543 return ret; 550 return ret;
544 551
545free_clock: 552free_ipg_clock:
553 clk_disable_unprepare(mps->clk_ipg);
554free_mclk_clock:
546 clk_disable_unprepare(mps->clk_mclk); 555 clk_disable_unprepare(mps->clk_mclk);
547free_master: 556free_master:
548 spi_master_put(master); 557 spi_master_put(master);
@@ -556,6 +565,7 @@ static int mpc512x_psc_spi_do_remove(struct device *dev)
556 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master); 565 struct mpc512x_psc_spi *mps = spi_master_get_devdata(master);
557 566
558 clk_disable_unprepare(mps->clk_mclk); 567 clk_disable_unprepare(mps->clk_mclk);
568 clk_disable_unprepare(mps->clk_ipg);
559 569
560 return 0; 570 return 0;
561} 571}