1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * (C) Copyright 2008-2017 Fuzhou Rockchip Electronics Co., Ltd
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+
5*4882a593Smuzhiyun */
6*4882a593Smuzhiyun
7*4882a593Smuzhiyun #include <common.h>
8*4882a593Smuzhiyun #include "rockchip_phy.h"
9*4882a593Smuzhiyun
rockchip_phy_init(struct rockchip_phy * phy)10*4882a593Smuzhiyun int rockchip_phy_init(struct rockchip_phy *phy)
11*4882a593Smuzhiyun {
12*4882a593Smuzhiyun if (!phy)
13*4882a593Smuzhiyun return -ENODEV;
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun if (phy->funcs && phy->funcs->init)
16*4882a593Smuzhiyun return phy->funcs->init(phy);
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun return 0;
19*4882a593Smuzhiyun }
20*4882a593Smuzhiyun
rockchip_phy_power_on(struct rockchip_phy * phy)21*4882a593Smuzhiyun int rockchip_phy_power_on(struct rockchip_phy *phy)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun if (!phy)
24*4882a593Smuzhiyun return -ENODEV;
25*4882a593Smuzhiyun
26*4882a593Smuzhiyun if (phy->funcs && phy->funcs->power_on)
27*4882a593Smuzhiyun return phy->funcs->power_on(phy);
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun return 0;
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun
rockchip_phy_power_off(struct rockchip_phy * phy)32*4882a593Smuzhiyun int rockchip_phy_power_off(struct rockchip_phy *phy)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun if (!phy)
35*4882a593Smuzhiyun return -ENODEV;
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun if (phy->funcs && phy->funcs->power_off)
38*4882a593Smuzhiyun return phy->funcs->power_off(phy);
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun return 0;
41*4882a593Smuzhiyun }
42*4882a593Smuzhiyun
rockchip_phy_set_pll(struct rockchip_phy * phy,unsigned long rate)43*4882a593Smuzhiyun unsigned long rockchip_phy_set_pll(struct rockchip_phy *phy,
44*4882a593Smuzhiyun unsigned long rate)
45*4882a593Smuzhiyun {
46*4882a593Smuzhiyun if (!phy)
47*4882a593Smuzhiyun return -ENODEV;
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun if (phy->funcs && phy->funcs->set_pll)
50*4882a593Smuzhiyun return phy->funcs->set_pll(phy, rate);
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun return 0;
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun
rockchip_phy_set_bus_width(struct rockchip_phy * phy,u32 bus_width)55*4882a593Smuzhiyun int rockchip_phy_set_bus_width(struct rockchip_phy *phy, u32 bus_width)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun if (!phy)
58*4882a593Smuzhiyun return -ENODEV;
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun if (phy->funcs && phy->funcs->set_bus_width)
61*4882a593Smuzhiyun return phy->funcs->set_bus_width(phy, bus_width);
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun return 0;
64*4882a593Smuzhiyun }
65*4882a593Smuzhiyun
rockchip_phy_round_rate(struct rockchip_phy * phy,unsigned long rate)66*4882a593Smuzhiyun long rockchip_phy_round_rate(struct rockchip_phy *phy, unsigned long rate)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun if (!phy)
69*4882a593Smuzhiyun return -ENODEV;
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun if (phy->funcs && phy->funcs->round_rate)
72*4882a593Smuzhiyun return phy->funcs->round_rate(phy, rate);
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun return 0;
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun
rockchip_phy_set_mode(struct rockchip_phy * phy,enum phy_mode mode)77*4882a593Smuzhiyun int rockchip_phy_set_mode(struct rockchip_phy *phy, enum phy_mode mode)
78*4882a593Smuzhiyun {
79*4882a593Smuzhiyun if (!phy)
80*4882a593Smuzhiyun return -ENODEV;
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun if (phy->funcs && phy->funcs->set_mode)
83*4882a593Smuzhiyun return phy->funcs->set_mode(phy, mode);
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun return 0;
86*4882a593Smuzhiyun }
87