diff options
Diffstat (limited to 'drivers/usb/mtu3/mtu3_host.c')
| -rw-r--r-- | drivers/usb/mtu3/mtu3_host.c | 30 | 
1 files changed, 26 insertions, 4 deletions
| diff --git a/drivers/usb/mtu3/mtu3_host.c b/drivers/usb/mtu3/mtu3_host.c index c871b94f3e6f..0a8cd446cf1b 100644 --- a/drivers/usb/mtu3/mtu3_host.c +++ b/drivers/usb/mtu3/mtu3_host.c @@ -24,6 +24,16 @@  #define WC1_IS_EN	BIT(25)  #define WC1_IS_P	BIT(6)  /* polarity for ip sleep */ +/* mt8183 */ +#define PERI_WK_CTRL0	0x0 +#define WC0_IS_C(x)	((u32)(((x) & 0xf) << 28))  /* cycle debounce */ +#define WC0_IS_P	BIT(12)	/* polarity */ +#define WC0_IS_EN	BIT(6) + +/* mt8192 */ +#define WC0_SSUSB0_CDEN		BIT(6) +#define WC0_IS_SPM_EN		BIT(1) +  /* mt2712 etc */  #define PERI_SSUSB_SPM_CTRL	0x0  #define SSC_IP_SLEEP_EN	BIT(4) @@ -32,6 +42,8 @@  enum ssusb_uwk_vers {  	SSUSB_UWK_V1 = 1,  	SSUSB_UWK_V2, +	SSUSB_UWK_V1_1 = 101,	/* specific revision 1.01 */ +	SSUSB_UWK_V1_2,		/* specific revision 1.02 */  };  /* @@ -48,6 +60,16 @@ static void ssusb_wakeup_ip_sleep_set(struct ssusb_mtk *ssusb, bool enable)  		msk = WC1_IS_EN | WC1_IS_C(0xf) | WC1_IS_P;  		val = enable ? (WC1_IS_EN | WC1_IS_C(0x8)) : 0;  		break; +	case SSUSB_UWK_V1_1: +		reg = ssusb->uwk_reg_base + PERI_WK_CTRL0; +		msk = WC0_IS_EN | WC0_IS_C(0xf) | WC0_IS_P; +		val = enable ? (WC0_IS_EN | WC0_IS_C(0x8)) : 0; +		break; +	case SSUSB_UWK_V1_2: +		reg = ssusb->uwk_reg_base + PERI_WK_CTRL0; +		msk = WC0_SSUSB0_CDEN | WC0_IS_SPM_EN; +		val = enable ? msk : 0; +		break;  	case SSUSB_UWK_V2:  		reg = ssusb->uwk_reg_base + PERI_SSUSB_SPM_CTRL;  		msk = SSC_IP_SLEEP_EN | SSC_SPM_INT_EN; @@ -109,7 +131,7 @@ int ssusb_host_enable(struct ssusb_mtk *ssusb)  	void __iomem *ibase = ssusb->ippc_base;  	int num_u3p = ssusb->u3_ports;  	int num_u2p = ssusb->u2_ports; -	int u3_ports_disabed; +	int u3_ports_disabled;  	u32 check_clk;  	u32 value;  	int i; @@ -118,10 +140,10 @@ int ssusb_host_enable(struct ssusb_mtk *ssusb)  	mtu3_clrbits(ibase, U3D_SSUSB_IP_PW_CTRL1, SSUSB_IP_HOST_PDN);  	/* power on and enable u3 ports except skipped ones */ -	u3_ports_disabed = 0; +	u3_ports_disabled = 0;  	for (i = 0; i < num_u3p; i++) {  		if ((0x1 << i) & ssusb->u3p_dis_msk) { -			u3_ports_disabed++; +			u3_ports_disabled++;  			continue;  		} @@ -140,7 +162,7 @@ int ssusb_host_enable(struct ssusb_mtk *ssusb)  	}  	check_clk = SSUSB_XHCI_RST_B_STS; -	if (num_u3p > u3_ports_disabed) +	if (num_u3p > u3_ports_disabled)  		check_clk = SSUSB_U3_MAC_RST_B_STS;  	return ssusb_check_clocks(ssusb, check_clk); | 
