|
@@ -11,6 +11,29 @@
|
|
|
|
|
|
struct ofnode_phandle_args;
|
|
|
|
|
|
+enum phy_mode {
|
|
|
+ PHY_MODE_INVALID,
|
|
|
+ PHY_MODE_USB_HOST,
|
|
|
+ PHY_MODE_USB_HOST_LS,
|
|
|
+ PHY_MODE_USB_HOST_FS,
|
|
|
+ PHY_MODE_USB_HOST_HS,
|
|
|
+ PHY_MODE_USB_HOST_SS,
|
|
|
+ PHY_MODE_USB_DEVICE,
|
|
|
+ PHY_MODE_USB_DEVICE_LS,
|
|
|
+ PHY_MODE_USB_DEVICE_FS,
|
|
|
+ PHY_MODE_USB_DEVICE_HS,
|
|
|
+ PHY_MODE_USB_DEVICE_SS,
|
|
|
+ PHY_MODE_USB_OTG,
|
|
|
+ PHY_MODE_UFS_HS_A,
|
|
|
+ PHY_MODE_UFS_HS_B,
|
|
|
+ PHY_MODE_PCIE,
|
|
|
+ PHY_MODE_ETHERNET,
|
|
|
+ PHY_MODE_MIPI_DPHY,
|
|
|
+ PHY_MODE_SATA,
|
|
|
+ PHY_MODE_LVDS,
|
|
|
+ PHY_MODE_DP
|
|
|
+};
|
|
|
+
|
|
|
/**
|
|
|
* struct phy - A handle to (allowing control of) a single phy port.
|
|
|
*
|
|
@@ -136,6 +159,32 @@ struct phy_ops {
|
|
|
* Return: 0 if OK, or a negative error code
|
|
|
*/
|
|
|
int (*configure)(struct phy *phy, void *params);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * set_mode - set PHY device mode
|
|
|
+ *
|
|
|
+ * @phy: PHY port to be configured
|
|
|
+ * @mode: PHY mode
|
|
|
+ * @submode: PHY submode
|
|
|
+ *
|
|
|
+ * Configure PHY mode (e.g. USB, Ethernet, ...) and submode
|
|
|
+ * (e.g. for Ethernet this can be RGMII).
|
|
|
+ *
|
|
|
+ * Return: 0 if OK, or a negative error code
|
|
|
+ */
|
|
|
+ int (*set_mode)(struct phy *phy, enum phy_mode mode, int submode);
|
|
|
+
|
|
|
+ /**
|
|
|
+ * set_speed - set PHY device speed
|
|
|
+ *
|
|
|
+ * @phy: PHY port to be configured
|
|
|
+ * @speed: PHY speed
|
|
|
+ *
|
|
|
+ * Configure PHY speed (e.g. for Ethernet, this could be 10 or 100 ...).
|
|
|
+ *
|
|
|
+ * Return: 0 if OK, or a negative error code
|
|
|
+ */
|
|
|
+ int (*set_speed)(struct phy *phy, int speed);
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -206,6 +255,24 @@ int generic_phy_power_off(struct phy *phy);
|
|
|
*/
|
|
|
int generic_phy_configure(struct phy *phy, void *params);
|
|
|
|
|
|
+/**
|
|
|
+ * generic_phy_set_mode() - set PHY device mode
|
|
|
+ *
|
|
|
+ * @phy: PHY port to be configured
|
|
|
+ * @mode: PHY mode
|
|
|
+ * @submode: PHY submode
|
|
|
+ * Return: 0 if OK, or a negative error code
|
|
|
+ */
|
|
|
+int generic_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode);
|
|
|
+
|
|
|
+/**
|
|
|
+ * generic_phy_set_speed() - set PHY device speed
|
|
|
+ *
|
|
|
+ * @phy: PHY port to be configured
|
|
|
+ * @speed: PHY speed
|
|
|
+ * Return: 0 if OK, or a negative error code
|
|
|
+ */
|
|
|
+int generic_phy_set_speed(struct phy *phy, int speed);
|
|
|
|
|
|
/**
|
|
|
* generic_phy_get_by_index() - Get a PHY device by integer index.
|
|
@@ -394,6 +461,16 @@ static inline int generic_phy_configure(struct phy *phy, void *params)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static inline int generic_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int generic_phy_set_speed(struct phy *phy, int speed)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static inline int generic_phy_get_by_index(struct udevice *user, int index,
|
|
|
struct phy *phy)
|
|
|
{
|