]>
git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/phy/phy-uclass.c
2 * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
3 * Written by Jean-Jacques Hiblot <jjhiblot@ti.com>
5 * SPDX-License-Identifier: GPL-2.0+
10 #include <generic-phy.h>
12 DECLARE_GLOBAL_DATA_PTR
;
14 static inline struct phy_ops
*phy_dev_ops(struct udevice
*dev
)
16 return (struct phy_ops
*)dev
->driver
->ops
;
19 static int generic_phy_xlate_offs_flags(struct phy
*phy
,
20 struct fdtdec_phandle_args
*args
)
22 debug("%s(phy=%p)\n", __func__
, phy
);
24 if (args
->args_count
> 1) {
25 debug("Invaild args_count: %d\n", args
->args_count
);
30 phy
->id
= args
->args
[0];
38 int generic_phy_get_by_index(struct udevice
*dev
, int index
,
41 struct fdtdec_phandle_args args
;
44 struct udevice
*phydev
;
46 debug("%s(dev=%p, index=%d, phy=%p)\n", __func__
, dev
, index
, phy
);
49 ret
= fdtdec_parse_phandle_with_args(gd
->fdt_blob
, dev_of_offset(dev
),
50 "phys", "#phy-cells", 0, index
,
53 debug("%s: fdtdec_parse_phandle_with_args failed: err=%d\n",
58 ret
= uclass_get_device_by_of_offset(UCLASS_PHY
, args
.node
, &phydev
);
60 debug("%s: uclass_get_device_by_of_offset failed: err=%d\n",
67 ops
= phy_dev_ops(phydev
);
70 ret
= ops
->of_xlate(phy
, &args
);
72 ret
= generic_phy_xlate_offs_flags(phy
, &args
);
74 debug("of_xlate() failed: %d\n", ret
);
84 int generic_phy_get_by_name(struct udevice
*dev
, const char *phy_name
,
89 debug("%s(dev=%p, name=%s, phy=%p)\n", __func__
, dev
, phy_name
, phy
);
91 index
= fdt_stringlist_search(gd
->fdt_blob
, dev_of_offset(dev
),
92 "phy-names", phy_name
);
94 debug("fdt_stringlist_search() failed: %d\n", index
);
98 return generic_phy_get_by_index(dev
, index
, phy
);
101 int generic_phy_init(struct phy
*phy
)
103 struct phy_ops
const *ops
= phy_dev_ops(phy
->dev
);
105 return ops
->init
? ops
->init(phy
) : 0;
108 int generic_phy_reset(struct phy
*phy
)
110 struct phy_ops
const *ops
= phy_dev_ops(phy
->dev
);
112 return ops
->reset
? ops
->reset(phy
) : 0;
115 int generic_phy_exit(struct phy
*phy
)
117 struct phy_ops
const *ops
= phy_dev_ops(phy
->dev
);
119 return ops
->exit
? ops
->exit(phy
) : 0;
122 int generic_phy_power_on(struct phy
*phy
)
124 struct phy_ops
const *ops
= phy_dev_ops(phy
->dev
);
126 return ops
->power_on
? ops
->power_on(phy
) : 0;
129 int generic_phy_power_off(struct phy
*phy
)
131 struct phy_ops
const *ops
= phy_dev_ops(phy
->dev
);
133 return ops
->power_off
? ops
->power_off(phy
) : 0;
136 UCLASS_DRIVER(phy
) = {