RE: [PATCH v3 2/4] phy: rcar-gen3-usb2: split the two meaning of "has_otg"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Thank you for the comment!
I will submit v4 patch soon. But, I wrote some comments below.

> From: Kishon Vijay Abraham I, Sent: Monday, October 9, 2017 7:07 PM
> 
> Hi,
> 
> On Friday 01 September 2017 08:11 AM, Yoshihiro Shimoda wrote:
> > The has_otg on previous code has the two meaning:
> >  - The channel has dedicated otg pins (ID, VBUS).
> >  - The channel can swap the role via sysfs.
> >
> > However, some SoCs (e.g. R-Car D3) doesn't have such dedicated pins,
> > but the SoCs can swap the role. So, this patch split the two meaning
> > of has_otg as "has dedicated otg pins" and adds a new value
> > "can_role_swap". For now, the behavior is the same as before.
> 
> Might not be directly related to $patch, but in general certain cleanups can be
> done..
> >
> > Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@xxxxxxxxxxx>
> > ---
> >  drivers/phy/renesas/phy-rcar-gen3-usb2.c | 61 ++++++++++++++++++++++----------
> >  1 file changed, 42 insertions(+), 19 deletions(-)
> >
> > diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> > index e00e99a..4ea9902 100644
> > --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> > +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c
> > @@ -87,7 +87,8 @@ struct rcar_gen3_chan {
> >  	struct regulator *vbus;
> >  	struct work_struct work;
> >  	bool extcon_host;
> > -	bool has_otg;
> > +	bool has_otg;	/* has dedicated pins (ID, VBUS) */
> > +	bool can_role_swap;
> >  };
> >
> >  static void rcar_gen3_phy_usb2_work(struct work_struct *work)
> > @@ -219,14 +220,10 @@ static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch)
> >  	return !(readl(ch->base + USB2_COMMCTRL) & USB2_COMMCTRL_OTG_PERI);
> >  }
> >
> > -static ssize_t role_store(struct device *dev, struct device_attribute *attr,
> > -			  const char *buf, size_t count)
> > +static ssize_t rcar_gen3_otg_change_role(struct rcar_gen3_chan *ch,
> > +					 bool new_mode_is_host)
> 
> replace new_mode_is_host with enum mode.

I got it. I will replace it in v4 patch.

> >  {
> > -	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
> > -	bool is_b_device, is_host, new_mode_is_host;
> > -
> > -	if (!ch->has_otg || !ch->phy->init_count)
> > -		return -EIO;
> > +	bool is_b_device, is_host;
> >
> >  	/*
> >  	 * is_b_device: true is B-Device. false is A-Device.
> > @@ -234,12 +231,6 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr,
> >  	 */
> >  	is_b_device = rcar_gen3_check_id(ch);
> >  	is_host = rcar_gen3_is_host(ch);
> > -	if (!strncmp(buf, "host", strlen("host")))
> > -		new_mode_is_host = true;
> > -	else if (!strncmp(buf, "peripheral", strlen("peripheral")))
> > -		new_mode_is_host = false;
> > -	else
> > -		return -EINVAL;
> >
> >  	/* If current and new mode is the same, this returns the error */
> >  	if (is_host == new_mode_is_host)
> > @@ -257,6 +248,32 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr,
> >  			rcar_gen3_init_for_peri(ch);
> >  	}
> >
> > +	return 0;
> > +}
> > +
> > +static ssize_t role_store(struct device *dev, struct device_attribute *attr,
> > +			  const char *buf, size_t count)
> > +{
> > +	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
> > +	bool new_mode_is_host;
> > +	ssize_t ret = -EIO;
> > +
> > +	if (!ch->phy->init_count)
> > +		return -EIO;
> > +
> > +	if (!strncmp(buf, "host", strlen("host")))
> > +		new_mode_is_host = true;
> > +	else if (!strncmp(buf, "peripheral", strlen("peripheral")))
> > +		new_mode_is_host = false;
> 
> set the enum mode here.

I will set it in v4 patch.

> > +	else
> > +		return -EINVAL;
> > +
> > +	if (ch->has_otg)
> > +		ret = rcar_gen3_otg_change_role(ch, new_mode_is_host);
> 
> Aren't you using sysfs to change the role here?

Oops! The patch set doesn't take care about a case of "can_role_swap = true" and "has_otg = false".
So, I will remove the "can_role_swap" parameter in v4 patch.

> > +
> > +	if (ret < 0)
> > +		return ret;
> > +
> >  	return count;
> >  }
> >
> > @@ -264,12 +281,17 @@ static ssize_t role_show(struct device *dev, struct device_attribute *attr,
> >  			 char *buf)
> >  {
> >  	struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
> > +	bool is_host;
> >
> > -	if (!ch->has_otg || !ch->phy->init_count)
> > +	if (!ch->phy->init_count)
> >  		return -EIO;
> >
> > -	return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" :
> > -							    "peripheral");
> > +	if (ch->has_otg)
> > +		is_host = rcar_gen3_is_host(ch);
> > +	else
> > +		return -EIO;
> > +
> > +	return sprintf(buf, "%s\n", is_host ? "host" : "peripheral");
> >  }
> >  static DEVICE_ATTR_RW(role);
> >
> > @@ -427,6 +449,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
> >  		int ret;
> >
> >  		channel->has_otg = true;
> > +		channel->can_role_swap = true;
> 
> Can both has_otg and can_role_swap be true?

Yes. But, in v4 patch will not have the "can_role_swap".

Best regards,
Yoshihiro Shimoda

> Thanks
> Kishon




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux