Commit 707d80f0 authored by Jules Maselbas's avatar Jules Maselbas Committed by Felipe Balbi

usb: dwc2: gadget: Replace phyif with phy_utmi_width

The phy utmi width information is already set in hsotg params,
phyif is only used in few places and I don't see any reason to
not use hsotg's params.

Moreover the utmi width was being forced to 16 bits by platform
initialization which doesn't take in account HW configuration.
Acked-by: default avatarMinas Harutyunyan <hminas@synopsys.com>
Signed-off-by: default avatarJules Maselbas <jmaselbas@kalray.eu>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent fb26b553
...@@ -871,7 +871,6 @@ struct dwc2_hregs_backup { ...@@ -871,7 +871,6 @@ struct dwc2_hregs_backup {
* removed once all SoCs support usb transceiver. * removed once all SoCs support usb transceiver.
* @supplies: Definition of USB power supplies * @supplies: Definition of USB power supplies
* @vbus_supply: Regulator supplying vbus. * @vbus_supply: Regulator supplying vbus.
* @phyif: PHY interface width
* @lock: Spinlock that protects all the driver data structures * @lock: Spinlock that protects all the driver data structures
* @priv: Stores a pointer to the struct usb_hcd * @priv: Stores a pointer to the struct usb_hcd
* @queuing_high_bandwidth: True if multiple packets of a high-bandwidth * @queuing_high_bandwidth: True if multiple packets of a high-bandwidth
...@@ -1056,7 +1055,6 @@ struct dwc2_hsotg { ...@@ -1056,7 +1055,6 @@ struct dwc2_hsotg {
struct dwc2_hsotg_plat *plat; struct dwc2_hsotg_plat *plat;
struct regulator_bulk_data supplies[DWC2_NUM_SUPPLIES]; struct regulator_bulk_data supplies[DWC2_NUM_SUPPLIES];
struct regulator *vbus_supply; struct regulator *vbus_supply;
u32 phyif;
spinlock_t lock; spinlock_t lock;
void *priv; void *priv;
......
...@@ -3314,20 +3314,28 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, ...@@ -3314,20 +3314,28 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
/* keep other bits untouched (so e.g. forced modes are not lost) */ /* keep other bits untouched (so e.g. forced modes are not lost) */
usbcfg = dwc2_readl(hsotg, GUSBCFG); usbcfg = dwc2_readl(hsotg, GUSBCFG);
/* remove the HNP/SRP */
usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP | usbcfg &= ~(GUSBCFG_TOUTCAL_MASK | GUSBCFG_PHYIF16 | GUSBCFG_SRPCAP |
GUSBCFG_HNPCAP | GUSBCFG_USBTRDTIM_MASK); GUSBCFG_HNPCAP);
usbcfg |= GUSBCFG_TOUTCAL(7);
if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS && if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_FS &&
(hsotg->params.speed == DWC2_SPEED_PARAM_FULL || (hsotg->params.speed == DWC2_SPEED_PARAM_FULL ||
hsotg->params.speed == DWC2_SPEED_PARAM_LOW)) { hsotg->params.speed == DWC2_SPEED_PARAM_LOW)) {
/* FS/LS Dedicated Transceiver Interface */ /* FS/LS Dedicated Transceiver Interface */
usbcfg |= GUSBCFG_PHYSEL; usbcfg |= GUSBCFG_PHYSEL;
} else { } else if (hsotg->params.phy_type == DWC2_PHY_TYPE_PARAM_UTMI) {
/* set the PLL on, remove the HNP/SRP and set the PHY */ if (hsotg->params.phy_utmi_width == 16)
val = (hsotg->phyif == GUSBCFG_PHYIF8) ? 9 : 5; usbcfg |= GUSBCFG_PHYIF16;
usbcfg |= hsotg->phyif | GUSBCFG_TOUTCAL(7) |
(val << GUSBCFG_USBTRDTIM_SHIFT); /* Set turnaround time */
usbcfg &= ~GUSBCFG_USBTRDTIM_MASK;
if (hsotg->params.phy_utmi_width == 16)
usbcfg |= 5 << GUSBCFG_USBTRDTIM_SHIFT;
else
usbcfg |= 9 << GUSBCFG_USBTRDTIM_SHIFT;
} }
dwc2_writel(hsotg, usbcfg, GUSBCFG); dwc2_writel(hsotg, usbcfg, GUSBCFG);
dwc2_hsotg_init_fifo(hsotg); dwc2_hsotg_init_fifo(hsotg);
......
...@@ -230,9 +230,6 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) ...@@ -230,9 +230,6 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
reset_control_deassert(hsotg->reset_ecc); reset_control_deassert(hsotg->reset_ecc);
/* Set default UTMI width */
hsotg->phyif = GUSBCFG_PHYIF16;
/* /*
* Attempt to find a generic PHY, then look for an old style * Attempt to find a generic PHY, then look for an old style
* USB PHY and then fall back to pdata * USB PHY and then fall back to pdata
...@@ -280,7 +277,7 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg) ...@@ -280,7 +277,7 @@ static int dwc2_lowlevel_hw_init(struct dwc2_hsotg *hsotg)
* width is 8-bit and set the phyif appropriately. * width is 8-bit and set the phyif appropriately.
*/ */
if (phy_get_bus_width(hsotg->phy) == 8) if (phy_get_bus_width(hsotg->phy) == 8)
hsotg->phyif = GUSBCFG_PHYIF8; hsotg->params.phy_utmi_width = 8;
} }
/* Clock */ /* Clock */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment