@@ -2015,15 +2015,17 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
2015
2015
{
2016
2016
struct dwc2_qtd * qtd ;
2017
2017
struct dwc2_host_chan * chan ;
2018
- u32 hcint , hcintmsk ;
2018
+ u32 hcint , hcintraw , hcintmsk ;
2019
2019
2020
2020
chan = hsotg -> hc_ptr_array [chnum ];
2021
2021
2022
- hcint = dwc2_readl (hsotg , HCINT (chnum ));
2022
+ hcintraw = dwc2_readl (hsotg , HCINT (chnum ));
2023
2023
hcintmsk = dwc2_readl (hsotg , HCINTMSK (chnum ));
2024
+ hcint = hcintraw & hcintmsk ;
2025
+ dwc2_writel (hsotg , hcint , HCINT (chnum ));
2026
+
2024
2027
if (!chan ) {
2025
2028
dev_err (hsotg -> dev , "## hc_ptr_array for channel is NULL ##\n" );
2026
- dwc2_writel (hsotg , hcint , HCINT (chnum ));
2027
2029
return ;
2028
2030
}
2029
2031
@@ -2032,11 +2034,9 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
2032
2034
chnum );
2033
2035
dev_vdbg (hsotg -> dev ,
2034
2036
" hcint 0x%08x, hcintmsk 0x%08x, hcint&hcintmsk 0x%08x\n" ,
2035
- hcint , hcintmsk , hcint & hcintmsk );
2037
+ hcintraw , hcintmsk , hcint );
2036
2038
}
2037
2039
2038
- dwc2_writel (hsotg , hcint , HCINT (chnum ));
2039
-
2040
2040
/*
2041
2041
* If we got an interrupt after someone called
2042
2042
* dwc2_hcd_endpoint_disable() we don't want to crash below
@@ -2046,8 +2046,7 @@ static void dwc2_hc_n_intr(struct dwc2_hsotg *hsotg, int chnum)
2046
2046
return ;
2047
2047
}
2048
2048
2049
- chan -> hcint = hcint ;
2050
- hcint &= hcintmsk ;
2049
+ chan -> hcint = hcintraw ;
2051
2050
2052
2051
/*
2053
2052
* If the channel was halted due to a dequeue, the qtd list might
0 commit comments