Hi Chunfeng Yun,

On 2019/2/22 15:32, Chunfeng Yun wrote:
> On Tue, 2019-02-19 at 11:20 +0800, Chen Yu wrote:
>> Hi,
>>
>> On 2019/2/19 10:50, Chunfeng Yun wrote:
>>>> +  if (ret)
>>>> +          hisi_hikey_usb->typec_vbus_enable_val = 1;
>>>> +
>>>> +  hisi_hikey_usb->typec_vbus = devm_gpiod_get(dev, "typec-vbus",
>>>> +                  hisi_hikey_usb->typec_vbus_enable_val ?
>>>> +                  GPIOD_OUT_LOW : GPIOD_OUT_HIGH);
>>>> +  if (!hisi_hikey_usb->typec_vbus)
>>>> +          return -ENOENT;
>>>> +  else if (IS_ERR(hisi_hikey_usb->typec_vbus))
>>>> +          return PTR_ERR(hisi_hikey_usb->typec_vbus);
>>>> +
>>>> +  gpiod_direction_output(hisi_hikey_usb->typec_vbus,
>>>> +                  !hisi_hikey_usb->typec_vbus_enable_val);
>>> maybe a simple way if use fixed regulator?
>>>
>> The hardware of the Hikey960 board has been fixed, and the type-c
>> port can act as UFP. So it is better to close the vbus when Hikey960
>> connect to host(e.g PC).
> I guess you misunderstand what I mean?
> Please refer to bindings/regulator/fixed-regulator.txt
> If you control vbus by gpio, you can use fixed-regulator, it will be
> easy to make compatible with other cases, think about using a LDO to
> control vbus
Sorry for misunderstanding the fixed-regulator and thanks for your advice!
I have read bindings/regulator/fixed-regulator.txt and I think it is enough
to use gpiod API right now.
>>>> +
>>>> +  hisi_hikey_usb->otg_switch = devm_gpiod_get(dev, "otg-switch", 
>>>> GPIOD_IN);
>>>> +  if (!hisi_hikey_usb->otg_switch)
>>>> +          return -ENOENT;
>>>> +  else if (IS_ERR(hisi_hikey_usb->otg_switch))
>>>> +          return PTR_ERR(hisi_hikey_usb->otg_switch);
>>>> +
>>>> +  gpiod_direction_output(hisi_hikey_usb->otg_switch, USB_SWITCH_TO_HUB);
>>>> +
>>>> +  /* hub-vdd33-en is optional */
>>>> +  hisi_hikey_usb->hub_vbus = devm_gpiod_get(dev, "hub-vdd33-en",
>>>> +                  GPIOD_OUT_LOW);
>>>> +  if (IS_ERR(hisi_hikey_usb->hub_vbus))
>>>> +          return PTR_ERR(hisi_hikey_usb->hub_vbus);
>>>> +
>>>> +  gpiod_direction_output(hisi_hikey_usb->hub_vbus, HUB_VBUS_POWER_ON);
>>> ditto
>>>> +
>>>> +  hisi_hikey_usb->role_sw = usb_role_switch_get(dev);
>>>> +  if (!hisi_hikey_usb->role_sw)
>>>> +          return -EPROBE_DEFER;
>>>> +  else if (IS_ERR(hisi_hikey_usb->role_sw))
>>>> +          return PTR_ERR(hisi_hikey_usb->role_sw);
>>>> +
>>
>> Thanks
>> Yu Chen
>>
> 

Thanks
Yu Chen

Reply via email to