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

Merge branch 'ib-mfd-omap' into HEAD

Lee Jones 1a55361e 507792c9

+137 -115
+23
Documentation/devicetree/bindings/mfd/omap-usb-host.txt
··· 32 32 - single-ulpi-bypass: Must be present if the controller contains a single 33 33 ULPI bypass control bit. e.g. OMAP3 silicon <= ES2.1 34 34 35 + - clocks: a list of phandles and clock-specifier pairs, one for each entry in 36 + clock-names. 37 + 38 + - clock-names: should include: 39 + For OMAP3 40 + * "usbhost_120m_fck" - 120MHz Functional clock. 41 + 42 + For OMAP4+ 43 + * "refclk_60m_int" - 60MHz internal reference clock for UTMI clock mux 44 + * "refclk_60m_ext_p1" - 60MHz external ref. clock for Port 1's UTMI clock mux. 45 + * "refclk_60m_ext_p2" - 60MHz external ref. clock for Port 2's UTMI clock mux 46 + * "utmi_p1_gfclk" - Port 1 UTMI clock mux. 47 + * "utmi_p2_gfclk" - Port 2 UTMI clock mux. 48 + * "usb_host_hs_utmi_p1_clk" - Port 1 UTMI clock gate. 49 + * "usb_host_hs_utmi_p2_clk" - Port 2 UTMI clock gate. 50 + * "usb_host_hs_utmi_p3_clk" - Port 3 UTMI clock gate. 51 + * "usb_host_hs_hsic480m_p1_clk" - Port 1 480MHz HSIC clock gate. 52 + * "usb_host_hs_hsic480m_p2_clk" - Port 2 480MHz HSIC clock gate. 53 + * "usb_host_hs_hsic480m_p3_clk" - Port 3 480MHz HSIC clock gate. 54 + * "usb_host_hs_hsic60m_p1_clk" - Port 1 60MHz HSIC clock gate. 55 + * "usb_host_hs_hsic60m_p2_clk" - Port 2 60MHz HSIC clock gate. 56 + * "usb_host_hs_hsic60m_p3_clk" - Port 3 60MHz HSIC clock gate. 57 + 35 58 Required properties if child node exists: 36 59 37 60 - #address-cells: Must be 1
+10
Documentation/devicetree/bindings/mfd/omap-usb-tll.txt
··· 7 7 - interrupts : should contain the TLL module's interrupt 8 8 - ti,hwmod : must contain "usb_tll_hs" 9 9 10 + Optional properties: 11 + 12 + - clocks: a list of phandles and clock-specifier pairs, one for each entry in 13 + clock-names. 14 + 15 + - clock-names: should include: 16 + * "usb_tll_hs_usb_ch0_clk" - USB TLL channel 0 clock 17 + * "usb_tll_hs_usb_ch1_clk" - USB TLL channel 1 clock 18 + * "usb_tll_hs_usb_ch2_clk" - USB TLL channel 2 clock 19 + 10 20 Example: 11 21 12 22 usbhstll: usbhstll@4a062000 {
+6
arch/arm/boot/dts/omap4.dtsi
··· 697 697 #address-cells = <1>; 698 698 #size-cells = <1>; 699 699 ranges; 700 + clocks = <&init_60m_fclk>, 701 + <&xclk60mhsp1_ck>, 702 + <&xclk60mhsp2_ck>; 703 + clock-names = "refclk_60m_int", 704 + "refclk_60m_ext_p1", 705 + "refclk_60m_ext_p2"; 700 706 701 707 usbhsohci: ohci@4a064800 { 702 708 compatible = "ti,ohci-omap3", "usb-ohci";
+6
arch/arm/boot/dts/omap5.dtsi
··· 775 775 #address-cells = <1>; 776 776 #size-cells = <1>; 777 777 ranges; 778 + clocks = <&l3init_60m_fclk>, 779 + <&xclk60mhsp1_ck>, 780 + <&xclk60mhsp2_ck>; 781 + clock-names = "refclk_60m_int", 782 + "refclk_60m_ext_p1", 783 + "refclk_60m_ext_p2"; 778 784 779 785 usbhsohci: ohci@4a064800 { 780 786 compatible = "ti,ohci-omap3", "usb-ohci";
-4
arch/arm/mach-omap2/cclock3xxx_data.c
··· 3495 3495 CLK(NULL, "dss_tv_fck", &dss_tv_fck), 3496 3496 CLK(NULL, "dss_96m_fck", &dss_96m_fck), 3497 3497 CLK(NULL, "dss2_alwon_fck", &dss2_alwon_fck), 3498 - CLK(NULL, "utmi_p1_gfclk", &dummy_ck), 3499 - CLK(NULL, "utmi_p2_gfclk", &dummy_ck), 3500 - CLK(NULL, "xclk60mhsp1_ck", &dummy_ck), 3501 - CLK(NULL, "xclk60mhsp2_ck", &dummy_ck), 3502 3498 CLK(NULL, "init_60m_fclk", &dummy_ck), 3503 3499 CLK(NULL, "gpt1_fck", &gpt1_fck), 3504 3500 CLK(NULL, "aes2_ick", &aes2_ick),
-6
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
··· 1955 1955 .sysc = &omap3xxx_usb_host_hs_sysc, 1956 1956 }; 1957 1957 1958 - static struct omap_hwmod_opt_clk omap3xxx_usb_host_hs_opt_clks[] = { 1959 - { .role = "ehci_logic_fck", .clk = "usbhost_120m_fck", }, 1960 - }; 1961 - 1962 1958 static struct omap_hwmod_irq_info omap3xxx_usb_host_hs_irqs[] = { 1963 1959 { .name = "ohci-irq", .irq = 76 + OMAP_INTC_START, }, 1964 1960 { .name = "ehci-irq", .irq = 77 + OMAP_INTC_START, }, ··· 1977 1981 .idlest_stdby_bit = OMAP3430ES2_ST_USBHOST_STDBY_SHIFT, 1978 1982 }, 1979 1983 }, 1980 - .opt_clks = omap3xxx_usb_host_hs_opt_clks, 1981 - .opt_clks_cnt = ARRAY_SIZE(omap3xxx_usb_host_hs_opt_clks), 1982 1984 1983 1985 /* 1984 1986 * Errata: USBHOST Configured In Smart-Idle Can Lead To a Deadlock
-4
drivers/clk/ti/clk-3xxx.c
··· 130 130 DT_CLK(NULL, "dss_tv_fck", "dss_tv_fck"), 131 131 DT_CLK(NULL, "dss_96m_fck", "dss_96m_fck"), 132 132 DT_CLK(NULL, "dss2_alwon_fck", "dss2_alwon_fck"), 133 - DT_CLK(NULL, "utmi_p1_gfclk", "dummy_ck"), 134 - DT_CLK(NULL, "utmi_p2_gfclk", "dummy_ck"), 135 - DT_CLK(NULL, "xclk60mhsp1_ck", "dummy_ck"), 136 - DT_CLK(NULL, "xclk60mhsp2_ck", "dummy_ck"), 137 133 DT_CLK(NULL, "init_60m_fclk", "dummy_ck"), 138 134 DT_CLK(NULL, "gpt1_fck", "gpt1_fck"), 139 135 DT_CLK(NULL, "aes2_ick", "aes2_ick"),
+91 -100
drivers/mfd/omap-usb-host.c
··· 665 665 goto err_mem; 666 666 } 667 667 668 - need_logic_fck = false; 668 + /* Set all clocks as invalid to begin with */ 669 + omap->ehci_logic_fck = ERR_PTR(-ENODEV); 670 + omap->init_60m_fclk = ERR_PTR(-ENODEV); 671 + omap->utmi_p1_gfclk = ERR_PTR(-ENODEV); 672 + omap->utmi_p2_gfclk = ERR_PTR(-ENODEV); 673 + omap->xclk60mhsp1_ck = ERR_PTR(-ENODEV); 674 + omap->xclk60mhsp2_ck = ERR_PTR(-ENODEV); 675 + 669 676 for (i = 0; i < omap->nports; i++) { 670 - if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) || 671 - is_ehci_hsic_mode(i)) 677 + omap->utmi_clk[i] = ERR_PTR(-ENODEV); 678 + omap->hsic480m_clk[i] = ERR_PTR(-ENODEV); 679 + omap->hsic60m_clk[i] = ERR_PTR(-ENODEV); 680 + } 681 + 682 + /* for OMAP3 i.e. USBHS REV1 */ 683 + if (omap->usbhs_rev == OMAP_USBHS_REV1) { 684 + need_logic_fck = false; 685 + for (i = 0; i < omap->nports; i++) { 686 + if (is_ehci_phy_mode(pdata->port_mode[i]) || 687 + is_ehci_tll_mode(pdata->port_mode[i]) || 688 + is_ehci_hsic_mode(pdata->port_mode[i])) 689 + 672 690 need_logic_fck |= true; 673 - } 674 - 675 - omap->ehci_logic_fck = ERR_PTR(-EINVAL); 676 - if (need_logic_fck) { 677 - omap->ehci_logic_fck = clk_get(dev, "ehci_logic_fck"); 678 - if (IS_ERR(omap->ehci_logic_fck)) { 679 - ret = PTR_ERR(omap->ehci_logic_fck); 680 - dev_dbg(dev, "ehci_logic_fck failed:%d\n", ret); 681 691 } 692 + 693 + if (need_logic_fck) { 694 + omap->ehci_logic_fck = devm_clk_get(dev, 695 + "usbhost_120m_fck"); 696 + if (IS_ERR(omap->ehci_logic_fck)) { 697 + ret = PTR_ERR(omap->ehci_logic_fck); 698 + dev_err(dev, "usbhost_120m_fck failed:%d\n", 699 + ret); 700 + goto err_mem; 701 + } 702 + } 703 + goto initialize; 682 704 } 683 705 684 - omap->utmi_p1_gfclk = clk_get(dev, "utmi_p1_gfclk"); 706 + /* for OMAP4+ i.e. USBHS REV2+ */ 707 + omap->utmi_p1_gfclk = devm_clk_get(dev, "utmi_p1_gfclk"); 685 708 if (IS_ERR(omap->utmi_p1_gfclk)) { 686 709 ret = PTR_ERR(omap->utmi_p1_gfclk); 687 710 dev_err(dev, "utmi_p1_gfclk failed error:%d\n", ret); 688 - goto err_p1_gfclk; 711 + goto err_mem; 689 712 } 690 713 691 - omap->utmi_p2_gfclk = clk_get(dev, "utmi_p2_gfclk"); 714 + omap->utmi_p2_gfclk = devm_clk_get(dev, "utmi_p2_gfclk"); 692 715 if (IS_ERR(omap->utmi_p2_gfclk)) { 693 716 ret = PTR_ERR(omap->utmi_p2_gfclk); 694 717 dev_err(dev, "utmi_p2_gfclk failed error:%d\n", ret); 695 - goto err_p2_gfclk; 718 + goto err_mem; 696 719 } 697 720 698 - omap->xclk60mhsp1_ck = clk_get(dev, "xclk60mhsp1_ck"); 721 + omap->xclk60mhsp1_ck = devm_clk_get(dev, "refclk_60m_ext_p1"); 699 722 if (IS_ERR(omap->xclk60mhsp1_ck)) { 700 723 ret = PTR_ERR(omap->xclk60mhsp1_ck); 701 - dev_err(dev, "xclk60mhsp1_ck failed error:%d\n", ret); 702 - goto err_xclk60mhsp1; 724 + dev_err(dev, "refclk_60m_ext_p1 failed error:%d\n", ret); 725 + goto err_mem; 703 726 } 704 727 705 - omap->xclk60mhsp2_ck = clk_get(dev, "xclk60mhsp2_ck"); 728 + omap->xclk60mhsp2_ck = devm_clk_get(dev, "refclk_60m_ext_p2"); 706 729 if (IS_ERR(omap->xclk60mhsp2_ck)) { 707 730 ret = PTR_ERR(omap->xclk60mhsp2_ck); 708 - dev_err(dev, "xclk60mhsp2_ck failed error:%d\n", ret); 709 - goto err_xclk60mhsp2; 731 + dev_err(dev, "refclk_60m_ext_p2 failed error:%d\n", ret); 732 + goto err_mem; 710 733 } 711 734 712 - omap->init_60m_fclk = clk_get(dev, "init_60m_fclk"); 735 + omap->init_60m_fclk = devm_clk_get(dev, "refclk_60m_int"); 713 736 if (IS_ERR(omap->init_60m_fclk)) { 714 737 ret = PTR_ERR(omap->init_60m_fclk); 715 - dev_err(dev, "init_60m_fclk failed error:%d\n", ret); 716 - goto err_init60m; 738 + dev_err(dev, "refclk_60m_int failed error:%d\n", ret); 739 + goto err_mem; 717 740 } 718 741 719 742 for (i = 0; i < omap->nports; i++) { ··· 750 727 * platforms have all clocks and we can function without 751 728 * them 752 729 */ 753 - omap->utmi_clk[i] = clk_get(dev, clkname); 754 - if (IS_ERR(omap->utmi_clk[i])) 755 - dev_dbg(dev, "Failed to get clock : %s : %ld\n", 756 - clkname, PTR_ERR(omap->utmi_clk[i])); 730 + omap->utmi_clk[i] = devm_clk_get(dev, clkname); 731 + if (IS_ERR(omap->utmi_clk[i])) { 732 + ret = PTR_ERR(omap->utmi_clk[i]); 733 + dev_err(dev, "Failed to get clock : %s : %d\n", 734 + clkname, ret); 735 + goto err_mem; 736 + } 757 737 758 738 snprintf(clkname, sizeof(clkname), 759 739 "usb_host_hs_hsic480m_p%d_clk", i + 1); 760 - omap->hsic480m_clk[i] = clk_get(dev, clkname); 761 - if (IS_ERR(omap->hsic480m_clk[i])) 762 - dev_dbg(dev, "Failed to get clock : %s : %ld\n", 763 - clkname, PTR_ERR(omap->hsic480m_clk[i])); 740 + omap->hsic480m_clk[i] = devm_clk_get(dev, clkname); 741 + if (IS_ERR(omap->hsic480m_clk[i])) { 742 + ret = PTR_ERR(omap->hsic480m_clk[i]); 743 + dev_err(dev, "Failed to get clock : %s : %d\n", 744 + clkname, ret); 745 + goto err_mem; 746 + } 764 747 765 748 snprintf(clkname, sizeof(clkname), 766 749 "usb_host_hs_hsic60m_p%d_clk", i + 1); 767 - omap->hsic60m_clk[i] = clk_get(dev, clkname); 768 - if (IS_ERR(omap->hsic60m_clk[i])) 769 - dev_dbg(dev, "Failed to get clock : %s : %ld\n", 770 - clkname, PTR_ERR(omap->hsic60m_clk[i])); 750 + omap->hsic60m_clk[i] = devm_clk_get(dev, clkname); 751 + if (IS_ERR(omap->hsic60m_clk[i])) { 752 + ret = PTR_ERR(omap->hsic60m_clk[i]); 753 + dev_err(dev, "Failed to get clock : %s : %d\n", 754 + clkname, ret); 755 + goto err_mem; 756 + } 771 757 } 772 758 773 759 if (is_ehci_phy_mode(pdata->port_mode[0])) { 774 - /* for OMAP3, clk_set_parent fails */ 775 760 ret = clk_set_parent(omap->utmi_p1_gfclk, 776 761 omap->xclk60mhsp1_ck); 777 - if (ret != 0) 778 - dev_dbg(dev, "xclk60mhsp1_ck set parent failed: %d\n", 779 - ret); 762 + if (ret != 0) { 763 + dev_err(dev, "xclk60mhsp1_ck set parent failed: %d\n", 764 + ret); 765 + goto err_mem; 766 + } 780 767 } else if (is_ehci_tll_mode(pdata->port_mode[0])) { 781 768 ret = clk_set_parent(omap->utmi_p1_gfclk, 782 769 omap->init_60m_fclk); 783 - if (ret != 0) 784 - dev_dbg(dev, "P0 init_60m_fclk set parent failed: %d\n", 785 - ret); 770 + if (ret != 0) { 771 + dev_err(dev, "P0 init_60m_fclk set parent failed: %d\n", 772 + ret); 773 + goto err_mem; 774 + } 786 775 } 787 776 788 777 if (is_ehci_phy_mode(pdata->port_mode[1])) { 789 778 ret = clk_set_parent(omap->utmi_p2_gfclk, 790 779 omap->xclk60mhsp2_ck); 791 - if (ret != 0) 792 - dev_dbg(dev, "xclk60mhsp2_ck set parent failed: %d\n", 793 - ret); 780 + if (ret != 0) { 781 + dev_err(dev, "xclk60mhsp2_ck set parent failed: %d\n", 782 + ret); 783 + goto err_mem; 784 + } 794 785 } else if (is_ehci_tll_mode(pdata->port_mode[1])) { 795 786 ret = clk_set_parent(omap->utmi_p2_gfclk, 796 787 omap->init_60m_fclk); 797 - if (ret != 0) 798 - dev_dbg(dev, "P1 init_60m_fclk set parent failed: %d\n", 799 - ret); 788 + if (ret != 0) { 789 + dev_err(dev, "P1 init_60m_fclk set parent failed: %d\n", 790 + ret); 791 + goto err_mem; 792 + } 800 793 } 801 794 795 + initialize: 802 796 omap_usbhs_init(dev); 803 797 804 798 if (dev->of_node) { ··· 824 784 825 785 if (ret) { 826 786 dev_err(dev, "Failed to create DT children: %d\n", ret); 827 - goto err_alloc; 787 + goto err_mem; 828 788 } 829 789 830 790 } else { ··· 832 792 if (ret) { 833 793 dev_err(dev, "omap_usbhs_alloc_children failed: %d\n", 834 794 ret); 835 - goto err_alloc; 795 + goto err_mem; 836 796 } 837 797 } 838 798 839 799 return 0; 840 - 841 - err_alloc: 842 - for (i = 0; i < omap->nports; i++) { 843 - if (!IS_ERR(omap->utmi_clk[i])) 844 - clk_put(omap->utmi_clk[i]); 845 - if (!IS_ERR(omap->hsic60m_clk[i])) 846 - clk_put(omap->hsic60m_clk[i]); 847 - if (!IS_ERR(omap->hsic480m_clk[i])) 848 - clk_put(omap->hsic480m_clk[i]); 849 - } 850 - 851 - clk_put(omap->init_60m_fclk); 852 - 853 - err_init60m: 854 - clk_put(omap->xclk60mhsp2_ck); 855 - 856 - err_xclk60mhsp2: 857 - clk_put(omap->xclk60mhsp1_ck); 858 - 859 - err_xclk60mhsp1: 860 - clk_put(omap->utmi_p2_gfclk); 861 - 862 - err_p2_gfclk: 863 - clk_put(omap->utmi_p1_gfclk); 864 - 865 - err_p1_gfclk: 866 - if (!IS_ERR(omap->ehci_logic_fck)) 867 - clk_put(omap->ehci_logic_fck); 868 800 869 801 err_mem: 870 802 pm_runtime_disable(dev); ··· 859 847 */ 860 848 static int usbhs_omap_remove(struct platform_device *pdev) 861 849 { 862 - struct usbhs_hcd_omap *omap = platform_get_drvdata(pdev); 863 - int i; 864 - 865 - for (i = 0; i < omap->nports; i++) { 866 - if (!IS_ERR(omap->utmi_clk[i])) 867 - clk_put(omap->utmi_clk[i]); 868 - if (!IS_ERR(omap->hsic60m_clk[i])) 869 - clk_put(omap->hsic60m_clk[i]); 870 - if (!IS_ERR(omap->hsic480m_clk[i])) 871 - clk_put(omap->hsic480m_clk[i]); 872 - } 873 - 874 - clk_put(omap->init_60m_fclk); 875 - clk_put(omap->utmi_p1_gfclk); 876 - clk_put(omap->utmi_p2_gfclk); 877 - clk_put(omap->xclk60mhsp2_ck); 878 - clk_put(omap->xclk60mhsp1_ck); 879 - 880 - if (!IS_ERR(omap->ehci_logic_fck)) 881 - clk_put(omap->ehci_logic_fck); 882 - 883 850 pm_runtime_disable(&pdev->dev); 884 851 885 852 /* remove children */
+1 -1
drivers/mfd/omap-usb-tll.c
··· 252 252 break; 253 253 } 254 254 255 - tll->ch_clk = devm_kzalloc(dev, sizeof(struct clk * [tll->nch]), 255 + tll->ch_clk = devm_kzalloc(dev, sizeof(struct clk *) * tll->nch, 256 256 GFP_KERNEL); 257 257 if (!tll->ch_clk) { 258 258 ret = -ENOMEM;