diff mbox

[v3,2/2] usb: renesas_usbhs: Add device tree support for R-Car H2 and M2

Message ID 5406A664.2050501@renesas.com (mailing list archive)
State Awaiting Upstream
Headers show

Commit Message

Yoshihiro Shimoda Sept. 3, 2014, 5:25 a.m. UTC
This driver supports other SoCs, but they need boards/Soc depend code.
So, this patch adds device tree support for R-Car H2 and M2 initially.

Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
 drivers/usb/renesas_usbhs/common.c |   44 ++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

Comments

Sergei Shtylyov Sept. 29, 2014, 4:35 p.m. UTC | #1
Hello.

On 09/03/2014 09:25 AM, Yoshihiro Shimoda wrote:

> This driver supports other SoCs, but they need boards/Soc depend code.
> So, this patch adds device tree support for R-Car H2 and M2 initially.

> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
>   drivers/usb/renesas_usbhs/common.c |   44 ++++++++++++++++++++++++++++++++++++
>   1 file changed, 44 insertions(+)

> diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
> index 1b9bf8d..b3b6813 100644
> --- a/drivers/usb/renesas_usbhs/common.c
> +++ b/drivers/usb/renesas_usbhs/common.c
> @@ -18,6 +18,8 @@
>   #include <linux/gpio.h>
>   #include <linux/io.h>
>   #include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/of_gpio.h>
>   #include <linux/pm_runtime.h>
>   #include <linux/slab.h>
>   #include <linux/sysfs.h>
> @@ -438,6 +440,43 @@ static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
[...]
> +static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
> +{
> +	struct renesas_usbhs_platform_info *info;
> +	struct renesas_usbhs_driver_param *dparam;
> +	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
> +	u32 tmp;
> +	int gpio;
> +
> +	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
> +	if (!info)
> +		return NULL;
> +
> +	dparam = &info->driver_param;
> +	dparam->type = of_id ? (u32)of_id->data : 0;
> +	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
> +		dparam->buswait_bwait = tmp;
> +	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
> +				       NULL);
> +	if (gpio > 0)
> +		dparam->enable_gpio = gpio;
> +
> +	return info;

    I don't see where you parse the optional "phy" property. It should exist 
for the Lager and Koelsch boards you target.

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Yoshihiro Shimoda Sept. 30, 2014, 9:51 a.m. UTC | #2
Hello.

(2014/09/30 1:35), Sergei Shtylyov wrote:
> Hello.
> 
> On 09/03/2014 09:25 AM, Yoshihiro Shimoda wrote:
> 
>> This driver supports other SoCs, but they need boards/Soc depend code.
>> So, this patch adds device tree support for R-Car H2 and M2 initially.
> 
>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
>> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>> ---
>>   drivers/usb/renesas_usbhs/common.c |   44 ++++++++++++++++++++++++++++++++++++
>>   1 file changed, 44 insertions(+)
> 
>> diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
>> index 1b9bf8d..b3b6813 100644
>> --- a/drivers/usb/renesas_usbhs/common.c
>> +++ b/drivers/usb/renesas_usbhs/common.c
>> @@ -18,6 +18,8 @@
>>   #include <linux/gpio.h>
>>   #include <linux/io.h>
>>   #include <linux/module.h>
>> +#include <linux/of_device.h>
>> +#include <linux/of_gpio.h>
>>   #include <linux/pm_runtime.h>
>>   #include <linux/slab.h>
>>   #include <linux/sysfs.h>
>> @@ -438,6 +440,43 @@ static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
> [...]
>> +static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
>> +{
>> +	struct renesas_usbhs_platform_info *info;
>> +	struct renesas_usbhs_driver_param *dparam;
>> +	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
>> +	u32 tmp;
>> +	int gpio;
>> +
>> +	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
>> +	if (!info)
>> +		return NULL;
>> +
>> +	dparam = &info->driver_param;
>> +	dparam->type = of_id ? (u32)of_id->data : 0;
>> +	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
>> +		dparam->buswait_bwait = tmp;
>> +	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
>> +				       NULL);
>> +	if (gpio > 0)
>> +		dparam->enable_gpio = gpio;
>> +
>> +	return info;
> 
>     I don't see where you parse the optional "phy" property. It should exist 
> for the Lager and Koelsch boards you target.

Since I wrote 'phy-names: must be "usb"' in the document,
I intend to use a fixed property for "phy" driver like the following:

	phy = phy_get(&pdev->dev, "usb");

Is this a bad code?

About using the phy driver in renesas_usbhs driver, I intend to modify
the drivers/usb/renesas_usbhs/rcar.c.

Best regards,
Yoshihiro Shimoda

> WBR, Sergei
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov Sept. 30, 2014, 9:34 p.m. UTC | #3
Hello.

On 09/30/2014 01:51 PM, Yoshihiro Shimoda wrote:

>>> This driver supports other SoCs, but they need boards/Soc depend code.
>>> So, this patch adds device tree support for R-Car H2 and M2 initially.

>>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
>>> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>>> ---
>>>    drivers/usb/renesas_usbhs/common.c |   44 ++++++++++++++++++++++++++++++++++++
>>>    1 file changed, 44 insertions(+)

>>> diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
>>> index 1b9bf8d..b3b6813 100644
>>> --- a/drivers/usb/renesas_usbhs/common.c
>>> +++ b/drivers/usb/renesas_usbhs/common.c
[...]
>>> @@ -438,6 +440,43 @@ static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
>> [...]
>>> +static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
>>> +{
>>> +	struct renesas_usbhs_platform_info *info;
>>> +	struct renesas_usbhs_driver_param *dparam;
>>> +	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
>>> +	u32 tmp;
>>> +	int gpio;
>>> +
>>> +	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
>>> +	if (!info)
>>> +		return NULL;
>>> +
>>> +	dparam = &info->driver_param;
>>> +	dparam->type = of_id ? (u32)of_id->data : 0;
>>> +	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
>>> +		dparam->buswait_bwait = tmp;
>>> +	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
>>> +				       NULL);
>>> +	if (gpio > 0)
>>> +		dparam->enable_gpio = gpio;
>>> +
>>> +	return info;

>>      I don't see where you parse the optional "phy" property. It should exist
>> for the Lager and Koelsch boards you target.

> Since I wrote 'phy-names: must be "usb"' in the document,
> I intend to use a fixed property for "phy" driver like the following:

> 	phy = phy_get(&pdev->dev, "usb");

> Is this a bad code?

    Seems OK.

> About using the phy driver in renesas_usbhs driver, I intend to modify
> the drivers/usb/renesas_usbhs/rcar.c.

    Hm, it slready supports 'struct usb_phy'. Also PHYs are not limited to 
R-Car Gen2 SoCs...

> Best regards,
> Yoshihiro Shimoda

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sergei Shtylyov Oct. 1, 2014, 7:22 p.m. UTC | #4
On 10/01/2014 01:34 AM, Sergei Shtylyov wrote:

>>>> This driver supports other SoCs, but they need boards/Soc depend code.
>>>> So, this patch adds device tree support for R-Car H2 and M2 initially.

>>>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
>>>> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>>>> ---
>>>>    drivers/usb/renesas_usbhs/common.c |   44
>>>> ++++++++++++++++++++++++++++++++++++
>>>>    1 file changed, 44 insertions(+)

>>>> diff --git a/drivers/usb/renesas_usbhs/common.c
>>>> b/drivers/usb/renesas_usbhs/common.c
>>>> index 1b9bf8d..b3b6813 100644
>>>> --- a/drivers/usb/renesas_usbhs/common.c
>>>> +++ b/drivers/usb/renesas_usbhs/common.c
> [...]
>>>> @@ -438,6 +440,43 @@ static int usbhsc_drvcllbck_notify_hotplug(struct
>>>> platform_device *pdev)
>>> [...]
>>>> +static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device
>>>> *dev)
>>>> +{
>>>> +    struct renesas_usbhs_platform_info *info;
>>>> +    struct renesas_usbhs_driver_param *dparam;
>>>> +    const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
>>>> +    u32 tmp;
>>>> +    int gpio;
>>>> +
>>>> +    info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
>>>> +    if (!info)
>>>> +        return NULL;
>>>> +
>>>> +    dparam = &info->driver_param;
>>>> +    dparam->type = of_id ? (u32)of_id->data : 0;
>>>> +    if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
>>>> +        dparam->buswait_bwait = tmp;
>>>> +    gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
>>>> +                       NULL);
>>>> +    if (gpio > 0)
>>>> +        dparam->enable_gpio = gpio;
>>>> +
>>>> +    return info;

>>>      I don't see where you parse the optional "phy" property. It should exist
>>> for the Lager and Koelsch boards you target.

[...]

>> About using the phy driver in renesas_usbhs driver, I intend to modify
>> the drivers/usb/renesas_usbhs/rcar.c.

>     Hm, it slready supports 'struct usb_phy'. Also PHYs are not limited to
> R-Car Gen2 SoCs...

    OK, let's do this locally to rcar2.c for now. But since you still haven't 
provided the patches and I'm tasked with the USBHS support, I have to take the 
further development in my hands.

>> Best regards,
>> Yoshihiro Shimoda

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Yoshihiro Shimoda Oct. 2, 2014, 12:05 a.m. UTC | #5
Hello.

(2014/10/02 4:22), Sergei Shtylyov wrote:
> On 10/01/2014 01:34 AM, Sergei Shtylyov wrote:
> 
>>>>> This driver supports other SoCs, but they need boards/Soc depend code.
>>>>> So, this patch adds device tree support for R-Car H2 and M2 initially.
> 
>>>>> Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
>>>>> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
>>>>> ---
>>>>>    drivers/usb/renesas_usbhs/common.c |   44
>>>>> ++++++++++++++++++++++++++++++++++++
>>>>>    1 file changed, 44 insertions(+)
> 
>>>>> diff --git a/drivers/usb/renesas_usbhs/common.c
>>>>> b/drivers/usb/renesas_usbhs/common.c
>>>>> index 1b9bf8d..b3b6813 100644
>>>>> --- a/drivers/usb/renesas_usbhs/common.c
>>>>> +++ b/drivers/usb/renesas_usbhs/common.c
>> [...]
>>>>> @@ -438,6 +440,43 @@ static int usbhsc_drvcllbck_notify_hotplug(struct
>>>>> platform_device *pdev)
>>>> [...]
>>>>> +static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device
>>>>> *dev)
>>>>> +{
>>>>> +    struct renesas_usbhs_platform_info *info;
>>>>> +    struct renesas_usbhs_driver_param *dparam;
>>>>> +    const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
>>>>> +    u32 tmp;
>>>>> +    int gpio;
>>>>> +
>>>>> +    info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
>>>>> +    if (!info)
>>>>> +        return NULL;
>>>>> +
>>>>> +    dparam = &info->driver_param;
>>>>> +    dparam->type = of_id ? (u32)of_id->data : 0;
>>>>> +    if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
>>>>> +        dparam->buswait_bwait = tmp;
>>>>> +    gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
>>>>> +                       NULL);
>>>>> +    if (gpio > 0)
>>>>> +        dparam->enable_gpio = gpio;
>>>>> +
>>>>> +    return info;
> 
>>>>      I don't see where you parse the optional "phy" property. It should exist
>>>> for the Lager and Koelsch boards you target.
> 
> [...]
> 
>>> About using the phy driver in renesas_usbhs driver, I intend to modify
>>> the drivers/usb/renesas_usbhs/rcar.c.
> 
>>     Hm, it slready supports 'struct usb_phy'. Also PHYs are not limited to
>> R-Car Gen2 SoCs...
> 
>     OK, let's do this locally to rcar2.c for now. But since you still haven't 
> provided the patches and I'm tasked with the USBHS support, I have to take the 
> further development in my hands.

Thank you for the reply. And, I'm sorry for the deleyed response.
I will submit the patches (add support generic phy in rcar.c and device node
for some SoCs) today.

Best regards,
Yoshihiro Shimoda

>>> Best regards,
>>> Yoshihiro Shimoda
> 
> WBR, Sergei
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-sh" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/usb/renesas_usbhs/common.c b/drivers/usb/renesas_usbhs/common.c
index 1b9bf8d..b3b6813 100644
--- a/drivers/usb/renesas_usbhs/common.c
+++ b/drivers/usb/renesas_usbhs/common.c
@@ -18,6 +18,8 @@ 
 #include <linux/gpio.h>
 #include <linux/io.h>
 #include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of_gpio.h>
 #include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/sysfs.h>
@@ -438,6 +440,43 @@  static int usbhsc_drvcllbck_notify_hotplug(struct platform_device *pdev)
 /*
  *		platform functions
  */
+static const struct of_device_id usbhs_of_match[] = {
+	{
+		.compatible = "renesas,usbhs-r8a7790",
+		.data = (void *)USBHS_TYPE_R8A7790,
+	},
+	{
+		.compatible = "renesas,usbhs-r8a7791",
+		.data = (void *)USBHS_TYPE_R8A7791,
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(of, usbhs_of_match);
+
+static struct renesas_usbhs_platform_info *usbhs_parse_dt(struct device *dev)
+{
+	struct renesas_usbhs_platform_info *info;
+	struct renesas_usbhs_driver_param *dparam;
+	const struct of_device_id *of_id = of_match_device(usbhs_of_match, dev);
+	u32 tmp;
+	int gpio;
+
+	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
+	if (!info)
+		return NULL;
+
+	dparam = &info->driver_param;
+	dparam->type = of_id ? (u32)of_id->data : 0;
+	if (!of_property_read_u32(dev->of_node, "renesas,buswait", &tmp))
+		dparam->buswait_bwait = tmp;
+	gpio = of_get_named_gpio_flags(dev->of_node, "renesas,enable-gpio", 0,
+				       NULL);
+	if (gpio > 0)
+		dparam->enable_gpio = gpio;
+
+	return info;
+}
+
 static int usbhs_probe(struct platform_device *pdev)
 {
 	struct renesas_usbhs_platform_info *info = dev_get_platdata(&pdev->dev);
@@ -446,6 +485,10 @@  static int usbhs_probe(struct platform_device *pdev)
 	struct resource *res, *irq_res;
 	int ret;

+	/* check device node */
+	if (pdev->dev.of_node)
+		info = pdev->dev.platform_data = usbhs_parse_dt(&pdev->dev);
+
 	/* check platform information */
 	if (!info) {
 		dev_err(&pdev->dev, "no platform information\n");
@@ -689,6 +732,7 @@  static struct platform_driver renesas_usbhs_driver = {
 	.driver		= {
 		.name	= "renesas_usbhs",
 		.pm	= &usbhsc_pm_ops,
+		.of_match_table = of_match_ptr(usbhs_of_match),
 	},
 	.probe		= usbhs_probe,
 	.remove		= usbhs_remove,