diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-01-29 00:53:55 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-01-29 00:53:55 -0500 |
commit | e9a371100dfdfa4c9f994059d19d98c9b4fd80af (patch) | |
tree | 11e9d240d87834f9da927aaa4027e7dfcbd01eb8 /drivers/spi | |
parent | d891ea23d5203e5c47439b2a174f86a00b356a6c (diff) | |
parent | bc75059422338197ce487d338ac9c898761e1e61 (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.c | 26 |
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 | ||
545 | free_clock: | 552 | free_ipg_clock: |
553 | clk_disable_unprepare(mps->clk_ipg); | ||
554 | free_mclk_clock: | ||
546 | clk_disable_unprepare(mps->clk_mclk); | 555 | clk_disable_unprepare(mps->clk_mclk); |
547 | free_master: | 556 | free_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 | } |