Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: S5PC1XX: Change clksrc_clks to use array of clocks

Remove the individual 'struct clksrc_clks' and place them into an array
so that we can simply use s3c_register_clksrcs to register tham all in one
go.

Since the spdif clock relies on the audio clock, move the audio clocks
into their own arrary.

Thanks to Marek Szyprowski for testing and pointing out the four clocks
what where missed from the clock list.

Signed-off-by: Ben Dooks <ben-linux@fluff.org>

Ben Dooks c837e88c 1d026d9b

+178 -236
+178 -236
arch/arm/plat-s5pc1xx/s5pc100-clock.c
··· 534 534 .nr_sources = ARRAY_SIZE(clkset_audio2_list), 535 535 }; 536 536 537 - static struct clksrc_clk clk_audio0; 538 - static struct clksrc_clk clk_audio1; 539 - static struct clksrc_clk clk_audio2; 537 + static struct clksrc_clk clksrc_audio[] = { 538 + { 539 + .clk = { 540 + .name = "audio-bus", 541 + .id = 0, 542 + .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO0, 543 + .enable = s5pc100_sclk1_ctrl, 544 + }, 545 + .sources = &clkset_audio0, 546 + .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 12, .size = 4, }, 547 + .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 12, .size = 3, }, 548 + }, { 549 + .clk = { 550 + .name = "audio-bus", 551 + .id = 1, 552 + .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO1, 553 + .enable = s5pc100_sclk1_ctrl, 554 + }, 555 + .sources = &clkset_audio1, 556 + .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 16, .size = 4, }, 557 + .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 16, .size = 3, }, 558 + }, { 559 + .clk = { 560 + .name = "audio-bus", 561 + .id = 2, 562 + .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO2, 563 + .enable = s5pc100_sclk1_ctrl, 564 + }, 565 + .sources = &clkset_audio2, 566 + .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 20, .size = 4, }, 567 + .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 20, .size = 3, }, 568 + }, 569 + }; 540 570 541 571 static struct clk *clkset_spdif_list[] = { 542 - &clk_audio0.clk, 543 - &clk_audio1.clk, 544 - &clk_audio2.clk, 572 + &clksrc_audio[0].clk, 573 + &clksrc_audio[1].clk, 574 + &clksrc_audio[2].clk, 545 575 }; 546 576 547 577 static struct clksrc_sources clkset_spdif = { ··· 615 585 .nr_sources = ARRAY_SIZE(clkset_usbhost_list), 616 586 }; 617 587 618 - static struct clksrc_clk clk_spi0 = { 619 - .clk = { 620 - .name = "spi_bus", 621 - .id = 0, 622 - .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI0, 623 - .enable = s5pc100_sclk0_ctrl, 588 + static struct clksrc_clk clksrc_clks[] = { 589 + { 590 + .clk = { 591 + .name = "spi_bus", 592 + .id = 0, 593 + .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI0, 594 + .enable = s5pc100_sclk0_ctrl, 624 595 625 - }, 626 - .sources = &clkset_spi, 627 - .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 4, .size = 4, }, 628 - .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 4, .size = 2, }, 629 - }; 630 - 631 - static struct clksrc_clk clk_spi1 = { 632 - .clk = { 633 - .name = "spi_bus", 634 - .id = 1, 635 - .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI1, 636 - .enable = s5pc100_sclk0_ctrl, 637 - }, 638 - .sources = &clkset_spi, 639 - .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 8, .size = 4, }, 640 - .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 8, .size = 2, }, 641 - }; 642 - 643 - static struct clksrc_clk clk_spi2 = { 644 - .clk = { 645 - .name = "spi_bus", 646 - .id = 2, 647 - .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI2, 648 - .enable = s5pc100_sclk0_ctrl, 649 - }, 650 - .sources = &clkset_spi, 651 - .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 12, .size = 4, }, 652 - .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 12, .size = 2, }, 653 - }; 654 - 655 - static struct clksrc_clk clk_uart_uclk1 = { 656 - .clk = { 657 - .name = "uclk1", 658 - .id = -1, 659 - .ctrlbit = S5PC100_CLKGATE_SCLK0_UART, 660 - .enable = s5pc100_sclk0_ctrl, 661 - }, 662 - .sources = &clkset_uart, 663 - .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 0, .size = 3, }, 664 - .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 0, .size = 1, }, 665 - }; 666 - 667 - static struct clksrc_clk clk_audio0 = { 668 - .clk = { 669 - .name = "audio-bus", 670 - .id = 0, 671 - .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO0, 672 - .enable = s5pc100_sclk1_ctrl, 673 - }, 674 - .sources = &clkset_audio0, 675 - .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 12, .size = 4, }, 676 - .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 12, .size = 3, }, 677 - }; 678 - 679 - static struct clksrc_clk clk_audio1 = { 680 - .clk = { 681 - .name = "audio-bus", 682 - .id = 1, 683 - .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO1, 684 - .enable = s5pc100_sclk1_ctrl, 685 - }, 686 - .sources = &clkset_audio1, 687 - .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 16, .size = 4, }, 688 - .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 16, .size = 3, }, 689 - }; 690 - 691 - 692 - static struct clksrc_clk clk_audio2 = { 693 - .clk = { 694 - .name = "audio-bus", 695 - .id = 2, 696 - .ctrlbit = S5PC100_CLKGATE_SCLK1_AUDIO2, 697 - .enable = s5pc100_sclk1_ctrl, 698 - }, 699 - .sources = &clkset_audio2, 700 - .reg_div = { .reg = S5PC100_CLKDIV4, .shift = 20, .size = 4, }, 701 - .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 20, .size = 3, }, 702 - }; 703 - 704 - static struct clksrc_clk clk_spdif = { 705 - .clk = { 706 - .name = "spdif", 707 - .id = -1, 708 - }, 709 - .sources = &clkset_spdif, 710 - .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 24, .size = 2, }, 711 - }; 712 - 713 - static struct clksrc_clk clk_lcd = { 714 - .clk = { 715 - .name = "lcd", 716 - .id = -1, 717 - .ctrlbit = S5PC100_CLKGATE_SCLK1_LCD, 718 - .enable = s5pc100_sclk1_ctrl, 719 - }, 720 - .sources = &clkset_lcd_fimc, 721 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 12, .size = 4, }, 722 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 12, .size = 2, }, 723 - }; 724 - 725 - static struct clksrc_clk clk_fimc0 = { 726 - .clk = { 727 - .name = "fimc", 728 - .id = 0, 729 - .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC0, 730 - .enable = s5pc100_sclk1_ctrl, 731 - }, 732 - .sources = &clkset_lcd_fimc, 733 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 16, .size = 4, }, 734 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 16, .size = 2, }, 735 - }; 736 - 737 - static struct clksrc_clk clk_fimc1 = { 738 - .clk = { 739 - .name = "fimc", 740 - .id = 1, 741 - .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC1, 742 - .enable = s5pc100_sclk1_ctrl, 743 - }, 744 - .sources = &clkset_lcd_fimc, 745 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 20, .size = 4, }, 746 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 20, .size = 2, }, 747 - }; 748 - 749 - static struct clksrc_clk clk_fimc2 = { 750 - .clk = { 751 - .name = "fimc", 752 - .id = 2, 753 - .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC2, 754 - .enable = s5pc100_sclk1_ctrl, 755 - }, 756 - .sources = &clkset_lcd_fimc, 757 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 24, .size = 4, }, 758 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 24, .size = 2, }, 759 - }; 760 - 761 - static struct clksrc_clk clk_mmc0 = { 762 - .clk = { 763 - .name = "mmc_bus", 764 - .id = 0, 765 - .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC0, 766 - .enable = s5pc100_sclk0_ctrl, 767 - }, 768 - .sources = &clkset_mmc, 769 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 0, .size = 4, }, 770 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 0, .size = 2, }, 771 - }; 772 - 773 - static struct clksrc_clk clk_mmc1 = { 774 - .clk = { 775 - .name = "mmc_bus", 776 - .id = 1, 777 - .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC1, 778 - .enable = s5pc100_sclk0_ctrl, 779 - }, 780 - .sources = &clkset_mmc, 781 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 4, .size = 4, }, 782 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 4, .size = 2, }, 783 - }; 784 - 785 - static struct clksrc_clk clk_mmc2 = { 786 - .clk = { 787 - .name = "mmc_bus", 788 - .id = 2, 789 - .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC2, 790 - .enable = s5pc100_sclk0_ctrl, 791 - }, 792 - .sources = &clkset_mmc, 793 - .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 8, .size = 4, }, 794 - .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 8, .size = 2, }, 795 - }; 796 - 797 - static struct clksrc_clk clk_usbhost = { 798 - .clk = { 799 - .name = "usbhost", 800 - .id = -1, 801 - .ctrlbit = S5PC100_CLKGATE_SCLK0_USBHOST, 802 - .enable = s5pc100_sclk0_ctrl, 803 - }, 804 - .sources = &clkset_usbhost, 805 - .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 20, .size = 4, }, 806 - .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 20, .size = 2, }, 596 + }, 597 + .sources = &clkset_spi, 598 + .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 4, .size = 4, }, 599 + .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 4, .size = 2, }, 600 + }, { 601 + .clk = { 602 + .name = "spi_bus", 603 + .id = 1, 604 + .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI1, 605 + .enable = s5pc100_sclk0_ctrl, 606 + }, 607 + .sources = &clkset_spi, 608 + .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 8, .size = 4, }, 609 + .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 8, .size = 2, }, 610 + }, { 611 + .clk = { 612 + .name = "spi_bus", 613 + .id = 2, 614 + .ctrlbit = S5PC100_CLKGATE_SCLK0_SPI2, 615 + .enable = s5pc100_sclk0_ctrl, 616 + }, 617 + .sources = &clkset_spi, 618 + .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 12, .size = 4, }, 619 + .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 12, .size = 2, }, 620 + }, { 621 + .clk = { 622 + .name = "uclk1", 623 + .id = -1, 624 + .ctrlbit = S5PC100_CLKGATE_SCLK0_UART, 625 + .enable = s5pc100_sclk0_ctrl, 626 + }, 627 + .sources = &clkset_uart, 628 + .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 0, .size = 3, }, 629 + .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 0, .size = 1, }, 630 + }, { 631 + .clk = { 632 + .name = "spdif", 633 + .id = -1, 634 + }, 635 + .sources = &clkset_spdif, 636 + .reg_src = { .reg = S5PC100_CLKSRC3, .shift = 24, .size = 2, }, 637 + }, { 638 + .clk = { 639 + .name = "lcd", 640 + .id = -1, 641 + .ctrlbit = S5PC100_CLKGATE_SCLK1_LCD, 642 + .enable = s5pc100_sclk1_ctrl, 643 + }, 644 + .sources = &clkset_lcd_fimc, 645 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 12, .size = 4, }, 646 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 12, .size = 2, }, 647 + }, { 648 + .clk = { 649 + .name = "fimc", 650 + .id = 0, 651 + .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC0, 652 + .enable = s5pc100_sclk1_ctrl, 653 + }, 654 + .sources = &clkset_lcd_fimc, 655 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 16, .size = 4, }, 656 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 16, .size = 2, }, 657 + }, { 658 + .clk = { 659 + .name = "fimc", 660 + .id = 1, 661 + .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC1, 662 + .enable = s5pc100_sclk1_ctrl, 663 + }, 664 + .sources = &clkset_lcd_fimc, 665 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 20, .size = 4, }, 666 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 20, .size = 2, }, 667 + }, { 668 + .clk = { 669 + .name = "fimc", 670 + .id = 2, 671 + .ctrlbit = S5PC100_CLKGATE_SCLK1_FIMC2, 672 + .enable = s5pc100_sclk1_ctrl, 673 + }, 674 + .sources = &clkset_lcd_fimc, 675 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 24, .size = 4, }, 676 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 24, .size = 2, }, 677 + }, { 678 + .clk = { 679 + .name = "mmc_bus", 680 + .id = 0, 681 + .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC0, 682 + .enable = s5pc100_sclk0_ctrl, 683 + }, 684 + .sources = &clkset_mmc, 685 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 0, .size = 4, }, 686 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 0, .size = 2, }, 687 + }, { 688 + .clk = { 689 + .name = "mmc_bus", 690 + .id = 1, 691 + .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC1, 692 + .enable = s5pc100_sclk0_ctrl, 693 + }, 694 + .sources = &clkset_mmc, 695 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 4, .size = 4, }, 696 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 4, .size = 2, }, 697 + }, { 698 + .clk = { 699 + .name = "mmc_bus", 700 + .id = 2, 701 + .ctrlbit = S5PC100_CLKGATE_SCLK0_MMC2, 702 + .enable = s5pc100_sclk0_ctrl, 703 + }, 704 + .sources = &clkset_mmc, 705 + .reg_div = { .reg = S5PC100_CLKDIV3, .shift = 8, .size = 4, }, 706 + .reg_src = { .reg = S5PC100_CLKSRC2, .shift = 8, .size = 2, }, 707 + }, { 708 + .clk = { 709 + .name = "usbhost", 710 + .id = -1, 711 + .ctrlbit = S5PC100_CLKGATE_SCLK0_USBHOST, 712 + .enable = s5pc100_sclk0_ctrl, 713 + }, 714 + .sources = &clkset_usbhost, 715 + .reg_div = { .reg = S5PC100_CLKDIV2, .shift = 20, .size = 4, }, 716 + .reg_src = { .reg = S5PC100_CLKSRC1, .shift = 20, .size = 2, }, 717 + } 807 718 }; 808 719 809 720 /* Clock initialisation code */ ··· 756 785 &clk_mout_onenand, 757 786 &clk_mout_epll, 758 787 &clk_mout_hpll, 759 - &clk_spi0, 760 - &clk_spi1, 761 - &clk_spi2, 762 - &clk_uart_uclk1, 763 - &clk_audio0, 764 - &clk_audio1, 765 - &clk_audio2, 766 - &clk_spdif, 767 - &clk_lcd, 768 - &clk_fimc0, 769 - &clk_fimc1, 770 - &clk_fimc2, 771 - &clk_mmc0, 772 - &clk_mmc1, 773 - &clk_mmc2, 774 - &clk_usbhost, 775 788 }; 776 789 777 790 #define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1) ··· 822 867 823 868 for (ptr = 0; ptr < ARRAY_SIZE(init_parents); ptr++) 824 869 s3c_set_clksrc(init_parents[ptr], true); 870 + 871 + for (ptr = 0; ptr < ARRAY_SIZE(clksrc_audio); ptr++) 872 + s3c_set_clksrc(clksrc_audio + ptr, true); 873 + 874 + for (ptr = 0; ptr < ARRAY_SIZE(clksrc_clks); ptr++) 875 + s3c_set_clksrc(clksrc_clks + ptr, true); 825 876 } 826 877 827 878 static struct clk *clks[] __initdata = { ··· 836 875 &clk_dout_d0_bus, 837 876 &clk_dout_pclkd0, 838 877 &clk_dout_apll2, 878 + &clk_mout_apll.clk, 879 + &clk_mout_mpll.clk, 880 + &clk_mout_epll.clk, 881 + &clk_mout_hpll.clk, 839 882 &clk_mout_am.clk, 840 883 &clk_dout_d1_bus, 884 + &clk_mout_onenand.clk, 841 885 &clk_dout_pclkd1, 842 886 &clk_dout_mpll2, 843 887 &clk_dout_cam, ··· 854 888 &clk_pcm_cd0, 855 889 &clk_pcm_cd1, 856 890 &clk_arm, 857 - }; 858 - 859 - /* simplest change - will aggregate clocks later */ 860 - static struct clksrc_clk *clks_src[] = { 861 - &clk_mout_apll, 862 - &clk_mout_mpll, 863 - &clk_mout_onenand, 864 - &clk_mout_epll, 865 - &clk_spi0, 866 - &clk_spi1, 867 - &clk_spi2, 868 - &clk_uart_uclk1, 869 - &clk_audio0, 870 - &clk_audio1, 871 - &clk_audio2, 872 - &clk_spdif, 873 - &clk_lcd, 874 - &clk_fimc0, 875 - &clk_fimc1, 876 - &clk_fimc2, 877 - &clk_mmc0, 878 - &clk_mmc1, 879 - &clk_mmc2, 880 - &clk_usbhost, 881 891 }; 882 892 883 893 void __init s5pc100_register_clocks(void) ··· 871 929 } 872 930 } 873 931 874 - for (ptr = 0; ptr < ARRAY_SIZE(clks_src); ptr++) 875 - s3c_register_clksrc(clks_src[ptr], 1); 932 + s3c_register_clksrc(clksrc_audio, ARRAY_SIZE(clksrc_audio)); 933 + s3c_register_clksrc(clksrc_clks, ARRAY_SIZE(clksrc_clks)); 876 934 }