Re: [PATCH RFC] usb: dwc3: Set GCTL.PrtCapDir based on selected mode.

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

 



Hi Balbi,


On Mon, Feb 25, 2013 at 1:47 PM, Felipe Balbi <balbi@xxxxxx> wrote:
> Hi,
>
> On Tue, Feb 05, 2013 at 07:15:58PM +0530, Vivek Gautam wrote:
>> Now that machines may select the mode of working of DWC3,
>> we can set the Port capability direction based on selected mode.
>>
>> Signed-off-by: Vivek Gautam <gautam.vivek@xxxxxxxxxxx>
>> ---
>>  drivers/usb/dwc3/core.c |   11 ++++++++---
>>  1 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
>> index 177f4c6..f4c47f7 100644
>> --- a/drivers/usb/dwc3/core.c
>> +++ b/drivers/usb/dwc3/core.c
>> @@ -479,7 +479,6 @@ static int dwc3_probe(struct platform_device *pdev)
>>
>>       switch (mode) {
>>       case DWC3_MODE_DEVICE:
>> -             dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
>>               ret = dwc3_gadget_init(dwc);
>>               if (ret) {
>>                       dev_err(dev, "failed to initialize gadget\n");
>> @@ -487,7 +486,6 @@ static int dwc3_probe(struct platform_device *pdev)
>>               }
>>               break;
>>       case DWC3_MODE_HOST:
>> -             dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
>>               ret = dwc3_host_init(dwc);
>>               if (ret) {
>>                       dev_err(dev, "failed to initialize host\n");
>> @@ -495,7 +493,6 @@ static int dwc3_probe(struct platform_device *pdev)
>>               }
>>               break;
>>       case DWC3_MODE_DRD:
>> -             dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
>>               ret = dwc3_host_init(dwc);
>>               if (ret) {
>>                       dev_err(dev, "failed to initialize host\n");
>> @@ -514,6 +511,14 @@ static int dwc3_probe(struct platform_device *pdev)
>>       }
>>       dwc->mode = mode;
>>
>> +#if IS_ENABLED(CONFIG_USB_DWC3_HOST)
>> +     dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
>> +#elif IS_ENABLED(CONFIG_USB_DWC3_GADGET)
>> +     dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
>> +#else
>> +     dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
>> +#endif
>
> you can actually use:
>
> if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
>         dwc3_set_mode(dwc...
> else if (IS_ENABLED( ...
>         ...
> else
>         ...
>

I am actually hoping to change this to something like below (after
of course changing the preprocessor conditionals) :

commit 9a62ed948dcb6ac5d78aff41f5355c0a5ea86475
Author: Vivek Gautam <gautam.vivek@xxxxxxxxxxx>
Date:   Thu Jan 24 11:58:05 2013 +0530

    usb: dwc3: Set GCTL.PrtCapDir based on selected mode.

    Now that machines may select the mode of working of DWC3,
    we can set the Port capability direction based on selected mode.

    Signed-off-by: Vivek Gautam <gautam.vivek@xxxxxxxxxxx>

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 79f335f..9444fbe 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -478,7 +478,13 @@ static int dwc3_probe(struct platform_device *pdev)
                goto err1;
        }

-       mode = DWC3_MODE(dwc->hwparams.hwparams0);
+#if IS_ENABLED(CONFIG_USB_DWC3_HOST)
+       mode = DWC3_MODE_HOST;
+#elif IS_ENABLED(CONFIG_USB_DWC3_GADGET)
+       mode = DWC3_MODE_DEVICE;
+#else
+       mode = DWC3_MODE_DRD;
+#endif

        switch (mode) {
        case DWC3_MODE_DEVICE:


Since the mode is now software dependent, we can skip
initializing gadget/host in case of Host-only/Gadget-only modes respectively.
Can't guess how much this is valid though :-(

> instead of pre-processor conditionals. In fact, I have recently written
> a patch converting #if IS_ENABLED() to if (IS_ENABLED()) but I haven't
> posted yet:
>

Right, very valid change. Missed this in earlier change :-(

> commit 42dbbbc272bc941ec2b0cac51342609e61e13a01
> Author: Felipe Balbi <balbi@xxxxxx>
> Date:   Fri Feb 22 16:24:49 2013 +0200
>
>     usb: dwc3: debugfs: improve debugfs file creation
>
>     when commit 388e5c5 (usb: dwc3: remove dwc3
>     dependency on host AND gadget.) changed the
>     way debugfs files are created, it failed to
>     note that 'mode' is necessary in Dual Role
>     mode only while 'testmode' and 'link_state'
>     are valid in Dual Role and Peripheral-only
>     builds. Fix this while also converting pre-
>     processor conditional to C conditionals.
>
>     Signed-off-by: Felipe Balbi <balbi@xxxxxx>
>
> diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
> index a1bac9a..8b23d045 100644
> --- a/drivers/usb/dwc3/debugfs.c
> +++ b/drivers/usb/dwc3/debugfs.c
> @@ -667,28 +667,31 @@ int dwc3_debugfs_init(struct dwc3 *dwc)
>                 goto err1;
>         }
>
> -#if IS_ENABLED(CONFIG_USB_DWC3_GADGET)
> -       file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root,
> -                       dwc, &dwc3_mode_fops);
> -       if (!file) {
> -               ret = -ENOMEM;
> -               goto err1;
> +       if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE)) {
> +               file = debugfs_create_file("mode", S_IRUGO | S_IWUSR, root,
> +                               dwc, &dwc3_mode_fops);
> +               if (!file) {
> +                       ret = -ENOMEM;
> +                       goto err1;
> +               }
>         }
>
> -       file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root,
> -                       dwc, &dwc3_testmode_fops);
> -       if (!file) {
> -               ret = -ENOMEM;
> -               goto err1;
> -       }
> -
> -       file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root,
> -                       dwc, &dwc3_link_state_fops);
> -       if (!file) {
> -               ret = -ENOMEM;
> -               goto err1;
> +       if (IS_ENABLED(CONFIG_USB_DWC3_DUAL_ROLE) ||
> +                       IS_ENABLED(CONFIG_USB_DWC3_GADGET)) {
> +               file = debugfs_create_file("testmode", S_IRUGO | S_IWUSR, root,
> +                               dwc, &dwc3_testmode_fops);
> +               if (!file) {
> +                       ret = -ENOMEM;
> +                       goto err1;
> +               }
> +
> +               file = debugfs_create_file("link_state", S_IRUGO | S_IWUSR, root,
> +                               dwc, &dwc3_link_state_fops);
> +               if (!file) {
> +                       ret = -ENOMEM;
> +                       goto err1;
> +               }
>         }
> -#endif
>
>         return 0;
>
>
> --
> balbi



-- 
Thanks & Regards
Vivek
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux