repeater.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2021-2023, Qualcomm Innovation Center, Inc. All rights reserved.
  4. */
  5. #ifndef __LINUX_USB_REPEATER_H
  6. #define __LINUX_USB_REPEATER_H
  7. #include <linux/errno.h>
  8. #include <linux/device.h>
  9. #include <linux/types.h>
  10. #if IS_ENABLED(CONFIG_I2C_EUSB2_REPEATER)
  11. #define UR_AUTO_RESUME_SUPPORTED BIT(0)
  12. #endif
  13. struct usb_repeater {
  14. struct device *dev;
  15. const char *label;
  16. unsigned int flags;
  17. #if IS_ENABLED(CONFIG_USB_PHY_SETTING_QCOM)
  18. bool is_host;
  19. #endif
  20. struct list_head head;
  21. int (*reset)(struct usb_repeater *x, bool bring_out_of_reset);
  22. int (*init)(struct usb_repeater *x);
  23. int (*suspend)(struct usb_repeater *r, int suspend);
  24. int (*powerup)(struct usb_repeater *r);
  25. int (*powerdown)(struct usb_repeater *r);
  26. int (*get_version)(struct usb_repeater *r);
  27. };
  28. #if IS_ENABLED(CONFIG_USB_REPEATER)
  29. struct usb_repeater *devm_usb_get_repeater_by_phandle(struct device *dev,
  30. const char *phandle, u8 index);
  31. struct usb_repeater *devm_usb_get_repeater_by_node(struct device *dev,
  32. struct device_node *node);
  33. struct usb_repeater *usb_get_repeater_by_phandle(struct device *dev,
  34. const char *phandle, u8 index);
  35. struct usb_repeater *usb_get_repeater_by_node(struct device_node *node);
  36. void usb_put_repeater(struct usb_repeater *r);
  37. int usb_add_repeater_dev(struct usb_repeater *r);
  38. void usb_remove_repeater_dev(struct usb_repeater *r);
  39. #else
  40. static inline struct usb_repeater *devm_usb_get_repeater_by_phandle(
  41. struct device *d, const char *phandle, u8 index)
  42. { return ERR_PTR(-ENXIO); }
  43. static inline struct usb_repeater *devm_usb_get_repeater_by_node(
  44. struct device *dev, struct device_node *node)
  45. { return ERR_PTR(-ENXIO); }
  46. static inline struct usb_repeater *usb_get_repeater_by_phandle(
  47. struct device *d, const char *phandle, u8 index)
  48. { return ERR_PTR(-ENXIO); }
  49. static inline struct usb_repeater *usb_get_repeater_by_node(
  50. struct device_node *node)
  51. { return ERR_PTR(-ENXIO); }
  52. static inline void usb_put_repeater(struct usb_repeater *r)
  53. { }
  54. static inline int usb_add_repeater_dev(struct usb_repeater *r)
  55. { return 0; }
  56. static inline void usb_remove_repeater_dev(struct usb_repeater *r)
  57. { }
  58. #endif
  59. static inline int usb_repeater_reset(struct usb_repeater *r,
  60. bool bring_out_of_reset)
  61. {
  62. if (r && r->reset != NULL)
  63. return r->reset(r, bring_out_of_reset);
  64. else
  65. return 0;
  66. }
  67. static inline int usb_repeater_init(struct usb_repeater *r)
  68. {
  69. if (r && r->init != NULL)
  70. return r->init(r);
  71. else
  72. return 0;
  73. }
  74. static inline int usb_repeater_suspend(struct usb_repeater *r, int suspend)
  75. {
  76. if (r && r->suspend != NULL)
  77. return r->suspend(r, suspend);
  78. else
  79. return 0;
  80. }
  81. static inline int usb_repeater_powerup(struct usb_repeater *r)
  82. {
  83. if (r && r->powerup != NULL)
  84. return r->powerup(r);
  85. else
  86. return 0;
  87. }
  88. static inline int usb_repeater_powerdown(struct usb_repeater *r)
  89. {
  90. if (r && r->powerdown != NULL)
  91. return r->powerdown(r);
  92. else
  93. return 0;
  94. }
  95. static inline int usb_repeater_get_version(struct usb_repeater *r)
  96. {
  97. if (r && r->get_version != NULL)
  98. return r->get_version(r);
  99. else
  100. return -EINVAL;
  101. }
  102. #endif /* __LINUX_USB_REPEATER_H */