[U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
Patrice CHOTARD
patrice.chotard at st.com
Fri May 19 12:05:46 UTC 2017
Hi Marek
On 05/19/2017 12:07 PM, Marek Vasut wrote:
> On 05/19/2017 09:15 AM, patrice.chotard at st.com wrote:
>> From: Patrice Chotard <patrice.chotard at st.com>
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
>> ---
>> drivers/usb/host/xhci-dwc3.c | 29 +++++++++++++++++++++++++++++
>> 1 file changed, 29 insertions(+)
>>
>> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
>> index ea85834..70d3946 100644
>> --- a/drivers/usb/host/xhci-dwc3.c
>> +++ b/drivers/usb/host/xhci-dwc3.c
>> @@ -10,6 +10,8 @@
>>
>> #include <common.h>
>> #include <dm.h>
>> +#include <fdtdec.h>
>> +#include <generic-phy.h>
>> #include <usb.h>
>>
>> #include "xhci.h"
>> @@ -20,6 +22,7 @@
>> DECLARE_GLOBAL_DATA_PTR;
>>
>> struct xhci_dwc3_platdata {
>> + struct phy usb_phy;
>> phys_addr_t dwc3_regs;
>> };
>>
>> @@ -136,11 +139,26 @@ static int xhci_dwc3_probe(struct udevice *dev)
>> struct xhci_hccr *hccr;
>> struct dwc3 *dwc3_reg;
>> enum usb_dr_mode dr_mode;
>> + int ret;
>>
>> hccr = (struct xhci_hccr *)plat->dwc3_regs;
>> hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
>> HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
>>
>> + ret = generic_phy_get_by_index(dev, 0, &plat->usb_phy);
>> + if (ret) {
>> + if (ret != -ENOENT) {
>> + error("Failed to get USB PHY for %s\n", dev->name);
>> + return ret;
>> + }
>> + } else {
>
> You can drop the else and indent here by reordering the condition.
I can't drop the "else", otherwise, in case there is no "phys" property
in DT (by example for arch/arm/dts/zynqmp.dtsi),
generic_phy_get_by_index() returns -ENOENT, we must continue without
calling generic_phy_init().
Patrice
>
> Otherwise OK.
>
>> + ret = generic_phy_init(&plat->usb_phy);
>> + if (ret) {
>> + error("Can't init USB PHY for %s\n", dev->name);
>> + return ret;
>> + }
>> + }
>> +
>> dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
>>
>> dwc3_core_init(dwc3_reg);
>> @@ -157,6 +175,17 @@ static int xhci_dwc3_probe(struct udevice *dev)
>>
>> static int xhci_dwc3_remove(struct udevice *dev)
>> {
>> + struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
>> + int ret;
>> +
>> + if (plat->usb_phy.dev) {
>> + ret = generic_phy_exit(&plat->usb_phy);
>> + if (ret) {
>> + error("Can't deinit USB PHY for %s\n", dev->name);
>> + return ret;
>> + }
>> + }
>> +
>> return xhci_deregister(dev);
>> }
>>
>>
>
>
More information about the U-Boot
mailing list