Commit 979b519c authored by Yoshihiro Shimoda's avatar Yoshihiro Shimoda Committed by Kishon Vijay Abraham I

phy: renesas: rcar-gen3-usb2: add is_otg_channel to use "role" sysfs

Even if a board doesn't have otg pins connection, this hardware can
change the role by a register setting. So, this patch adds
"is_otg_channel" for it.
Signed-off-by: default avatarYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Reviewed-by: default avatarSimon Horman <horms+renesas@verge.net.au>
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
parent a602152c
...@@ -86,9 +86,21 @@ struct rcar_gen3_chan { ...@@ -86,9 +86,21 @@ struct rcar_gen3_chan {
struct work_struct work; struct work_struct work;
enum usb_dr_mode dr_mode; enum usb_dr_mode dr_mode;
bool extcon_host; bool extcon_host;
bool is_otg_channel;
bool uses_otg_pins; bool uses_otg_pins;
}; };
/*
* Combination about is_otg_channel and uses_otg_pins:
*
* Parameters || Behaviors
* is_otg_channel | uses_otg_pins || irqs | role sysfs
* ---------------------+---------------++--------------+------------
* true | true || enabled | enabled
* true | false || disabled | enabled
* false | any || disabled | disabled
*/
static void rcar_gen3_phy_usb2_work(struct work_struct *work) static void rcar_gen3_phy_usb2_work(struct work_struct *work)
{ {
struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan, struct rcar_gen3_chan *ch = container_of(work, struct rcar_gen3_chan,
...@@ -244,7 +256,7 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr, ...@@ -244,7 +256,7 @@ static ssize_t role_store(struct device *dev, struct device_attribute *attr,
bool is_b_device; bool is_b_device;
enum phy_mode cur_mode, new_mode; enum phy_mode cur_mode, new_mode;
if (!ch->uses_otg_pins || !ch->phy->init_count) if (!ch->is_otg_channel || !ch->phy->init_count)
return -EIO; return -EIO;
if (!strncmp(buf, "host", strlen("host"))) if (!strncmp(buf, "host", strlen("host")))
...@@ -282,7 +294,7 @@ static ssize_t role_show(struct device *dev, struct device_attribute *attr, ...@@ -282,7 +294,7 @@ static ssize_t role_show(struct device *dev, struct device_attribute *attr,
{ {
struct rcar_gen3_chan *ch = dev_get_drvdata(dev); struct rcar_gen3_chan *ch = dev_get_drvdata(dev);
if (!ch->uses_otg_pins || !ch->phy->init_count) if (!ch->is_otg_channel || !ch->phy->init_count)
return -EIO; return -EIO;
return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" : return sprintf(buf, "%s\n", rcar_gen3_is_host(ch) ? "host" :
...@@ -320,7 +332,7 @@ static int rcar_gen3_phy_usb2_init(struct phy *p) ...@@ -320,7 +332,7 @@ static int rcar_gen3_phy_usb2_init(struct phy *p)
writel(USB2_OC_TIMSET_INIT, usb2_base + USB2_OC_TIMSET); writel(USB2_OC_TIMSET_INIT, usb2_base + USB2_OC_TIMSET);
/* Initialize otg part */ /* Initialize otg part */
if (channel->uses_otg_pins) if (channel->is_otg_channel)
rcar_gen3_init_otg(channel); rcar_gen3_init_otg(channel);
return 0; return 0;
...@@ -444,6 +456,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) ...@@ -444,6 +456,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
if (channel->dr_mode != USB_DR_MODE_UNKNOWN) { if (channel->dr_mode != USB_DR_MODE_UNKNOWN) {
int ret; int ret;
channel->is_otg_channel = true;
channel->uses_otg_pins = !of_property_read_bool(dev->of_node, channel->uses_otg_pins = !of_property_read_bool(dev->of_node,
"renesas,no-otg-pins"); "renesas,no-otg-pins");
channel->extcon = devm_extcon_dev_allocate(dev, channel->extcon = devm_extcon_dev_allocate(dev,
...@@ -487,7 +500,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) ...@@ -487,7 +500,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)
dev_err(dev, "Failed to register PHY provider\n"); dev_err(dev, "Failed to register PHY provider\n");
ret = PTR_ERR(provider); ret = PTR_ERR(provider);
goto error; goto error;
} else if (channel->uses_otg_pins) { } else if (channel->is_otg_channel) {
int ret; int ret;
ret = device_create_file(dev, &dev_attr_role); ret = device_create_file(dev, &dev_attr_role);
...@@ -507,7 +520,7 @@ static int rcar_gen3_phy_usb2_remove(struct platform_device *pdev) ...@@ -507,7 +520,7 @@ static int rcar_gen3_phy_usb2_remove(struct platform_device *pdev)
{ {
struct rcar_gen3_chan *channel = platform_get_drvdata(pdev); struct rcar_gen3_chan *channel = platform_get_drvdata(pdev);
if (channel->uses_otg_pins) if (channel->is_otg_channel)
device_remove_file(&pdev->dev, &dev_attr_role); device_remove_file(&pdev->dev, &dev_attr_role);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
......
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