diff options
| author | Tom Rini <trini@konsulko.com> | 2024-07-01 08:44:28 -0600 | 
|---|---|---|
| committer | Tom Rini <trini@konsulko.com> | 2024-07-01 08:44:28 -0600 | 
| commit | b4cbd1a257d4027038b4f997d73bdb0a066db045 (patch) | |
| tree | e00bd93270e70fcbe672cb1803cce1d20efcfc3d /drivers | |
| parent | 2f9603392355e21c379b4adddea7c6b35cf09b9b (diff) | |
| parent | 96e1a156e90a0674b21c56e7121b17a9211176ec (diff) | |
Merge tag 'u-boot-amlogic-20240701' of https://source.denx.de/u-boot/custodians/u-boot-amlogic into next
- Switch meson dwc3/usb PHY to set_mode callback for switching USB mode
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/phy/meson-gxl-usb2.c | 30 | ||||
| -rw-r--r-- | drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c | 2 | ||||
| -rw-r--r-- | drivers/pinctrl/meson/pinctrl-meson-axg.c | 4 | ||||
| -rw-r--r-- | drivers/pinctrl/meson/pinctrl-meson-axg.h | 2 | ||||
| -rw-r--r-- | drivers/pinctrl/meson/pinctrl-meson-g12a.c | 4 | ||||
| -rw-r--r-- | drivers/usb/dwc3/dwc3-meson-g12a.c | 2 | ||||
| -rw-r--r-- | drivers/usb/dwc3/dwc3-meson-gxl.c | 18 | 
7 files changed, 35 insertions, 27 deletions
| diff --git a/drivers/phy/meson-gxl-usb2.c b/drivers/phy/meson-gxl-usb2.c index 92c285103c4..140e936b47a 100644 --- a/drivers/phy/meson-gxl-usb2.c +++ b/drivers/phy/meson-gxl-usb2.c @@ -19,8 +19,6 @@  #include <linux/printk.h>  #include <linux/usb/otg.h> -#include <asm/arch/usb-gx.h> -  #include <linux/bitops.h>  #include <linux/compat.h> @@ -121,33 +119,40 @@ static void phy_meson_gxl_usb2_reset(struct phy_meson_gxl_usb2_priv *priv)  	udelay(RESET_COMPLETE_TIME);  } -void phy_meson_gxl_usb2_set_mode(struct phy *phy, enum usb_dr_mode mode) +static int phy_meson_gxl_usb2_set_mode(struct phy *phy, enum phy_mode mode, int submode)  {  	struct udevice *dev = phy->dev;  	struct phy_meson_gxl_usb2_priv *priv = dev_get_priv(dev);  	uint val; +	if (submode) +		return -EOPNOTSUPP; +  	regmap_read(priv->regmap, U2P_R0, &val);  	switch (mode) { -	case USB_DR_MODE_UNKNOWN: -	case USB_DR_MODE_HOST: -	case USB_DR_MODE_OTG: +	case PHY_MODE_USB_DEVICE: +		val &= ~U2P_R0_DM_PULLDOWN; +		val &= ~U2P_R0_DP_PULLDOWN; +		val |= U2P_R0_ID_PULLUP; +		break; + +	case PHY_MODE_USB_HOST: +	case PHY_MODE_USB_OTG:  		val |= U2P_R0_DM_PULLDOWN;  		val |= U2P_R0_DP_PULLDOWN;  		val &= ~U2P_R0_ID_PULLUP;  		break; -	case USB_DR_MODE_PERIPHERAL: -		val &= ~U2P_R0_DM_PULLDOWN; -		val &= ~U2P_R0_DP_PULLDOWN; -		val |= U2P_R0_ID_PULLUP; -		break; +	default: +		return -EINVAL;  	}  	regmap_write(priv->regmap, U2P_R0, val);  	phy_meson_gxl_usb2_reset(priv); + +	return 0;  }  static int phy_meson_gxl_usb2_power_on(struct phy *phy) @@ -161,7 +166,7 @@ static int phy_meson_gxl_usb2_power_on(struct phy *phy)  	val &= ~U2P_R0_POWER_ON_RESET;  	regmap_write(priv->regmap, U2P_R0, val); -	phy_meson_gxl_usb2_set_mode(phy, USB_DR_MODE_HOST); +	phy_meson_gxl_usb2_set_mode(phy, PHY_MODE_USB_HOST, 0);  	return 0;  } @@ -183,6 +188,7 @@ static int phy_meson_gxl_usb2_power_off(struct phy *phy)  struct phy_ops meson_gxl_usb2_phy_ops = {  	.power_on = phy_meson_gxl_usb2_power_on,  	.power_off = phy_meson_gxl_usb2_power_off, +	.set_mode = phy_meson_gxl_usb2_set_mode,  };  int meson_gxl_usb2_phy_probe(struct udevice *dev) diff --git a/drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c b/drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c index 52c726cf038..15ebd574ef1 100644 --- a/drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c +++ b/drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c @@ -179,7 +179,7 @@ static const struct dm_gpio_ops meson_axg_gpio_ops = {  	.direction_output = meson_gpio_direction_output,  }; -const struct driver meson_axg_gpio_driver = { +U_BOOT_DRIVER(meson_axg_gpio) = {  	.name	= "meson-axg-gpio",  	.id	= UCLASS_GPIO,  	.probe	= meson_gpio_probe, diff --git a/drivers/pinctrl/meson/pinctrl-meson-axg.c b/drivers/pinctrl/meson/pinctrl-meson-axg.c index 94e09cd3f8a..ed3f92b2d75 100644 --- a/drivers/pinctrl/meson/pinctrl-meson-axg.c +++ b/drivers/pinctrl/meson/pinctrl-meson-axg.c @@ -939,7 +939,7 @@ struct meson_pinctrl_data meson_axg_periphs_pinctrl_data = {  	.num_groups	= ARRAY_SIZE(meson_axg_periphs_groups),  	.num_funcs	= ARRAY_SIZE(meson_axg_periphs_functions),  	.num_banks	= ARRAY_SIZE(meson_axg_periphs_banks), -	.gpio_driver	= &meson_axg_gpio_driver, +	.gpio_driver	= DM_DRIVER_REF(meson_axg_gpio),  	.pmx_data	= &meson_axg_periphs_pmx_banks_data,  }; @@ -953,7 +953,7 @@ struct meson_pinctrl_data meson_axg_aobus_pinctrl_data = {  	.num_groups	= ARRAY_SIZE(meson_axg_aobus_groups),  	.num_funcs	= ARRAY_SIZE(meson_axg_aobus_functions),  	.num_banks	= ARRAY_SIZE(meson_axg_aobus_banks), -	.gpio_driver	= &meson_axg_gpio_driver, +	.gpio_driver	= DM_DRIVER_REF(meson_axg_gpio),  	.pmx_data	= &meson_axg_aobus_pmx_banks_data,  }; diff --git a/drivers/pinctrl/meson/pinctrl-meson-axg.h b/drivers/pinctrl/meson/pinctrl-meson-axg.h index c8d2b3af036..a6581bab500 100644 --- a/drivers/pinctrl/meson/pinctrl-meson-axg.h +++ b/drivers/pinctrl/meson/pinctrl-meson-axg.h @@ -61,6 +61,6 @@ struct meson_pmx_axg_data {  	}  extern const struct pinctrl_ops meson_axg_pinctrl_ops; -extern const struct driver meson_axg_gpio_driver; +extern U_BOOT_DRIVER(meson_axg_gpio);  #endif /* __PINCTRL_MESON_AXG_H__ */ diff --git a/drivers/pinctrl/meson/pinctrl-meson-g12a.c b/drivers/pinctrl/meson/pinctrl-meson-g12a.c index 24f47f82558..67114df6824 100644 --- a/drivers/pinctrl/meson/pinctrl-meson-g12a.c +++ b/drivers/pinctrl/meson/pinctrl-meson-g12a.c @@ -1253,7 +1253,7 @@ static struct meson_pinctrl_data meson_g12a_periphs_pinctrl_data = {  	.num_groups	= ARRAY_SIZE(meson_g12a_periphs_groups),  	.num_funcs	= ARRAY_SIZE(meson_g12a_periphs_functions),  	.num_banks	= ARRAY_SIZE(meson_g12a_periphs_banks), -	.gpio_driver	= &meson_axg_gpio_driver, +	.gpio_driver	= DM_DRIVER_REF(meson_axg_gpio),  	.pmx_data	= &meson_g12a_periphs_pmx_banks_data,  }; @@ -1267,7 +1267,7 @@ static struct meson_pinctrl_data meson_g12a_aobus_pinctrl_data = {  	.num_groups	= ARRAY_SIZE(meson_g12a_aobus_groups),  	.num_funcs	= ARRAY_SIZE(meson_g12a_aobus_functions),  	.num_banks	= ARRAY_SIZE(meson_g12a_aobus_banks), -	.gpio_driver	= &meson_axg_gpio_driver, +	.gpio_driver	= DM_DRIVER_REF(meson_axg_gpio),  	.pmx_data	= &meson_g12a_aobus_pmx_banks_data,  }; diff --git a/drivers/usb/dwc3/dwc3-meson-g12a.c b/drivers/usb/dwc3/dwc3-meson-g12a.c index 21e4f637bb1..41d15996e5b 100644 --- a/drivers/usb/dwc3/dwc3-meson-g12a.c +++ b/drivers/usb/dwc3/dwc3-meson-g12a.c @@ -270,7 +270,7 @@ static int dwc3_meson_g12a_usb_init(struct dwc3_meson_g12a *priv)  	return 0;  } -int dwc3_meson_g12a_force_mode(struct udevice *dev, enum usb_dr_mode mode) +static int dwc3_meson_g12a_force_mode(struct udevice *dev, enum usb_dr_mode mode)  {  	struct dwc3_meson_g12a *priv = dev_get_plat(dev); diff --git a/drivers/usb/dwc3/dwc3-meson-gxl.c b/drivers/usb/dwc3/dwc3-meson-gxl.c index 3e693c5ff31..5fb9b477ada 100644 --- a/drivers/usb/dwc3/dwc3-meson-gxl.c +++ b/drivers/usb/dwc3/dwc3-meson-gxl.c @@ -26,7 +26,6 @@  #include <linux/bitfield.h>  #include <linux/bitops.h>  #include <linux/compat.h> -#include <asm/arch/usb-gx.h>  /* USB Glue Control Registers */ @@ -158,9 +157,9 @@ static int dwc3_meson_gxl_usb2_init(struct dwc3_meson_gxl *priv)  		if (!priv->phys[i].dev)  			continue; -		phy_meson_gxl_usb2_set_mode(&priv->phys[i], -				(i == USB2_OTG_PHY) ? USB_DR_MODE_PERIPHERAL -						    : USB_DR_MODE_HOST); +		generic_phy_set_mode(&priv->phys[i], +				(i == USB2_OTG_PHY) ? PHY_MODE_USB_DEVICE +						    : PHY_MODE_USB_HOST, 0);  	}  	return 0; @@ -193,7 +192,7 @@ static int dwc3_meson_gxl_usb_init(struct dwc3_meson_gxl *priv)  	return 0;  } -int dwc3_meson_gxl_force_mode(struct udevice *dev, enum usb_dr_mode mode) +static int dwc3_meson_gxl_force_mode(struct udevice *dev, enum usb_dr_mode mode)  {  	struct dwc3_meson_gxl *priv = dev_get_plat(dev); @@ -224,7 +223,9 @@ int dwc3_meson_gxl_force_mode(struct udevice *dev, enum usb_dr_mode mode)  #endif  	priv->otg_phy_mode = mode; -	phy_meson_gxl_usb2_set_mode(&priv->phys[USB2_OTG_PHY], mode); +	generic_phy_set_mode(&priv->phys[USB2_OTG_PHY], +			     mode == USB_DR_MODE_PERIPHERAL ? PHY_MODE_USB_DEVICE +							    : PHY_MODE_USB_HOST, 0);  	dwc3_meson_gxl_usb2_set_mode(priv, mode); @@ -361,8 +362,9 @@ static int dwc3_meson_gxl_probe(struct udevice *dev)  	}  	if (priv->phys[USB2_OTG_PHY].dev) -		phy_meson_gxl_usb2_set_mode(&priv->phys[USB2_OTG_PHY], -					    priv->otg_phy_mode); +		generic_phy_set_mode(&priv->phys[USB2_OTG_PHY], +			priv->otg_phy_mode == USB_DR_MODE_PERIPHERAL ? PHY_MODE_USB_DEVICE +								     : PHY_MODE_USB_HOST, 0);  	dwc3_meson_gxl_usb2_set_mode(priv, priv->otg_phy_mode); | 
