当前位置:   article > 正文

usb phy_usb转phy驱动

usb转phy驱动
  1. usb的phy 分为内置phy和外置phy,其中内置phy在控制器里面,内置phy 不需要驱动
  2. 而外置phy 需要驱动,phy的目录在driver/phy 这个命令下。我们看看phy的主要功能
  3. 我们以drivers/phy/marvell/phy-pxa-usb.c中的描述的phy为例
  4. usb是通过phy_ops 来控制phy的
  5. struct phy_ops {
  6. int (*init)(struct phy *phy);
  7. int (*exit)(struct phy *phy);
  8. int (*power_on)(struct phy *phy);
  9. int (*power_off)(struct phy *phy);
  10. int (*set_mode)(struct phy *phy, enum phy_mode mode, int submode);
  11. int (*configure)(struct phy *phy, union phy_configure_opts *opts);
  12. int (*validate)(struct phy *phy, enum phy_mode mode, int submode,
  13. union phy_configure_opts *opts);
  14. int (*reset)(struct phy *phy);
  15. int (*calibrate)(struct phy *phy);
  16. void (*release)(struct phy *phy);
  17. struct module *owner;
  18. };
  19. 可以看到phy 主要是和电源管理相关的,实际上本来中的仅仅实现了init和exit两个接口
  20. static const struct phy_ops pxa_usb_phy_ops = {
  21. .init = pxa_usb_phy_init,
  22. .exit = pxa_usb_phy_exit,
  23. .owner = THIS_MODULE,
  24. };
  25. 这个可以猜测到相对于外置phy 需要phy_ops来控制phy,内置phy 直接就控制phy了。
  26. 举例如下:
  27. drivers/usb/usb3/dwc3-pci.c
  28. static int dwc3_pci_quirks(struct dwc3_pci *dwc)
  29. {
  30. struct pci_dev *pdev = dwc->pci;
  31. #控制器中直接控制phy
  32. /*
  33. * These GPIOs will turn on the USB2 PHY. Note that we have to
  34. * put the gpio descriptors again here because the phy driver
  35. * might want to grab them, too.
  36. */
  37. gpio = gpiod_get_optional(&pdev->dev, "cs", GPIOD_OUT_LOW);
  38. if (IS_ERR(gpio))
  39. return PTR_ERR(gpio);
  40. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/613997
推荐阅读
相关标签
  

闽ICP备14008679号