Hi Kishon, Would you review this patch? Best regards, Yoshihiro Shimoda > -----Original Message----- > From: Yoshihiro Shimoda > Sent: Tuesday, May 31, 2016 9:47 PM > To: kishon@xxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx; linux-renesas-soc@xxxxxxxxxxxxxxx; stable@xxxxxxxxxxxxxxx; Yoshihiro Shimoda > <yoshihiro.shimoda.uh@xxxxxxxxxxx> > Subject: [PATCH] phy: rcar-gen3-usb2: fix unexpected repeat interrupts of VBUS change > > This patch fixes an issue that the driver is possible to cause > unexpected repeat interrupts if a board condition is wrong > (e.g. even if the ID pin is as function, a board supplies the VBUS.) > > The reason why unexpected repeat interrupts happen is: > 1) The driver changed the mode to function if it detected the ID pin > is high and the VBUS is high. > 2) After the driver changed function mode, it disabled the "VBUS control" > feature. Then, the VBUS signal will be low. > 3) Since the VBUS change interruption happened, the driver checked > the ID pin and VBUS. > 4) Since VBUS was low, the driver changed the mode to host and enabled > the "VBUS control" feature. Then the VBUS signal will be high. > 5) Since the VBUS change interruption happened, the driver did 1) above. > > So, this patch modified the condition in rcar_gen3_device_recognition() > to check the ID pin only. > > Fixes: 1114e2d (phy: rcar-gen3-usb2: change the mode to OTG on the combined channel) > Cc: <stable@xxxxxxxxxxxxxxx> # v4.5+ > Reported-by: Simon Horman <horms@xxxxxxxxxxxx> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx> > --- > drivers/phy/phy-rcar-gen3-usb2.c | 14 +------------- > 1 file changed, 1 insertion(+), 13 deletions(-) > > diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c > index 76bb88f..4be3f5d 100644 > --- a/drivers/phy/phy-rcar-gen3-usb2.c > +++ b/drivers/phy/phy-rcar-gen3-usb2.c > @@ -144,12 +144,6 @@ static void rcar_gen3_init_for_peri(struct rcar_gen3_chan *ch) > extcon_set_cable_state_(ch->extcon, EXTCON_USB, true); > } > > -static bool rcar_gen3_check_vbus(struct rcar_gen3_chan *ch) > -{ > - return !!(readl(ch->base + USB2_ADPCTRL) & > - USB2_ADPCTRL_OTGSESSVLD); > -} > - > static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) > { > return !!(readl(ch->base + USB2_ADPCTRL) & USB2_ADPCTRL_IDDIG); > @@ -157,13 +151,7 @@ static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) > > static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) > { > - bool is_host = true; > - > - /* B-device? */ > - if (rcar_gen3_check_id(ch) && rcar_gen3_check_vbus(ch)) > - is_host = false; > - > - if (is_host) > + if (!rcar_gen3_check_id(ch)) > rcar_gen3_init_for_host(ch); > else > rcar_gen3_init_for_peri(ch); > -- > 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html