phy: rockchip-usb: should be a child device of the GRF

The usb-phy is fully enclosed in the general register files (GRF).
Therefore as seen from the device-tree it shouldn't be a separate
platform-device but instead a sub-device of the GRF - using the
simply-mfd mechanism.

As the usb-phy is part of the kernel for some releases now, we keep
the old (and now deprecated) binding for compatibility purposes.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
Heiko Stuebner 2016-06-29 00:12:58 +02:00 committed by Kishon Vijay Abraham I
parent f2e600411b
commit a0da445aab
2 changed files with 29 additions and 13 deletions

View File

@ -5,11 +5,13 @@ Required properties:
"rockchip,rk3066a-usb-phy" "rockchip,rk3066a-usb-phy"
"rockchip,rk3188-usb-phy" "rockchip,rk3188-usb-phy"
"rockchip,rk3288-usb-phy" "rockchip,rk3288-usb-phy"
- rockchip,grf : phandle to the syscon managing the "general
register files"
- #address-cells: should be 1 - #address-cells: should be 1
- #size-cells: should be 0 - #size-cells: should be 0
Deprecated properties:
- rockchip,grf : phandle to the syscon managing the "general
register files" - phy should be a child of the GRF instead
Sub-nodes: Sub-nodes:
Each PHY should be represented as a sub-node. Each PHY should be represented as a sub-node.
@ -28,14 +30,19 @@ Optional Properties:
Example: Example:
usbphy: phy { grf: syscon@ff770000 {
compatible = "rockchip,rk3288-usb-phy"; compatible = "rockchip,rk3288-grf", "syscon", "simple-mfd";
rockchip,grf = <&grf>;
#address-cells = <1>;
#size-cells = <0>;
usbphy0: usb-phy0 { ...
#phy-cells = <0>;
reg = <0x320>; usbphy: phy {
compatible = "rockchip,rk3288-usb-phy";
#address-cells = <1>;
#size-cells = <0>;
usbphy0: usb-phy0 {
#phy-cells = <0>;
reg = <0x320>;
};
}; };
}; };

View File

@ -397,8 +397,13 @@ static int rockchip_usb_phy_probe(struct platform_device *pdev)
phy_base->pdata = match->data; phy_base->pdata = match->data;
phy_base->dev = dev; phy_base->dev = dev;
phy_base->reg_base = syscon_regmap_lookup_by_phandle(dev->of_node, phy_base->reg_base = ERR_PTR(-ENODEV);
"rockchip,grf"); if (dev->parent && dev->parent->of_node)
phy_base->reg_base = syscon_node_to_regmap(
dev->parent->of_node);
if (IS_ERR(phy_base->reg_base))
phy_base->reg_base = syscon_regmap_lookup_by_phandle(
dev->of_node, "rockchip,grf");
if (IS_ERR(phy_base->reg_base)) { if (IS_ERR(phy_base->reg_base)) {
dev_err(&pdev->dev, "Missing rockchip,grf property\n"); dev_err(&pdev->dev, "Missing rockchip,grf property\n");
return PTR_ERR(phy_base->reg_base); return PTR_ERR(phy_base->reg_base);
@ -463,7 +468,11 @@ static int __init rockchip_init_usb_uart(void)
return -ENOTSUPP; return -ENOTSUPP;
} }
grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf"); grf = ERR_PTR(-ENODEV);
if (np->parent)
grf = syscon_node_to_regmap(np->parent);
if (IS_ERR(grf))
grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
if (IS_ERR(grf)) { if (IS_ERR(grf)) {
pr_err("%s: Missing rockchip,grf property, %lu\n", pr_err("%s: Missing rockchip,grf property, %lu\n",
__func__, PTR_ERR(grf)); __func__, PTR_ERR(grf));