Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-12 Thread Tony Lindgren
* Roger Quadros  [130312 04:47]:
> Hi Tony,
> 
> These patches provide the SoC side code required to support
> the changes in the OMAP USB Host drivers done in [1], [2] & [3].
... 

>  arch/arm/mach-omap2/board-3430sdp.c|   97 +++-
>  arch/arm/mach-omap2/board-3630sdp.c|  100 +++-
>  arch/arm/mach-omap2/board-am3517crane.c|   95 +--
>  arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
>  arch/arm/mach-omap2/board-cm-t35.c |   95 ++-
>  arch/arm/mach-omap2/board-cm-t3517.c   |   97 +++-
>  arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
>  arch/arm/mach-omap2/board-generic.c|   67 +++
>  arch/arm/mach-omap2/board-igep0020.c   |  112 ---
>  arch/arm/mach-omap2/board-omap3beagle.c|   93 +--
>  arch/arm/mach-omap2/board-omap3evm.c   |   62 --
>  arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
>  arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
>  arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
>  arch/arm/mach-omap2/board-omap4panda.c |  122 
> ++--
>  arch/arm/mach-omap2/board-overo.c  |   54 -
>  arch/arm/mach-omap2/board-zoom.c   |   56 -

Can't you have some mach-omap2/ehci-common.c that takes care
of the initializiation to avoid this much addition to the
board-*.c files? You may be able to have just a common function
to do it and pass few parameters?

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-13 Thread Roger Quadros
On 03/12/2013 06:40 PM, Tony Lindgren wrote:
> * Roger Quadros  [130312 04:47]:
>> Hi Tony,
>>
>> These patches provide the SoC side code required to support
>> the changes in the OMAP USB Host drivers done in [1], [2] & [3].
> ... 
> 
>>  arch/arm/mach-omap2/board-3430sdp.c|   97 +++-
>>  arch/arm/mach-omap2/board-3630sdp.c|  100 +++-
>>  arch/arm/mach-omap2/board-am3517crane.c|   95 +--
>>  arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
>>  arch/arm/mach-omap2/board-cm-t35.c |   95 ++-
>>  arch/arm/mach-omap2/board-cm-t3517.c   |   97 +++-
>>  arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
>>  arch/arm/mach-omap2/board-generic.c|   67 +++
>>  arch/arm/mach-omap2/board-igep0020.c   |  112 
>> ---
>>  arch/arm/mach-omap2/board-omap3beagle.c|   93 +--
>>  arch/arm/mach-omap2/board-omap3evm.c   |   62 --
>>  arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
>>  arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
>>  arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
>>  arch/arm/mach-omap2/board-omap4panda.c |  122 
>> ++--
>>  arch/arm/mach-omap2/board-overo.c  |   54 -
>>  arch/arm/mach-omap2/board-zoom.c   |   56 -
> 
> Can't you have some mach-omap2/ehci-common.c that takes care
> of the initializiation to avoid this much addition to the
> board-*.c files? You may be able to have just a common function
> to do it and pass few parameters?

Since we moved reset and power handling for the USB PHYs from omap-echi
driver into the USB PHY driver we need to define the regulator data
for RESET and Power line of each PHY. So most of the code added is just
regulator data for the PHY rather than omap-ehci.

Instead of a common function, I can implement some macros that make it
easier to define the regulators for the PHY in the board files.
Does this sound OK?

Personally I don't like such macros because it hides the implementation
and is difficult to read/debug.

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-13 Thread Tony Lindgren
* Roger Quadros  [130313 06:46]:
> On 03/12/2013 06:40 PM, Tony Lindgren wrote:
> > * Roger Quadros  [130312 04:47]:
> >> Hi Tony,
> >>
> >> These patches provide the SoC side code required to support
> >> the changes in the OMAP USB Host drivers done in [1], [2] & [3].
> > ... 
> > 
> >>  arch/arm/mach-omap2/board-3430sdp.c|   97 +++-
> >>  arch/arm/mach-omap2/board-3630sdp.c|  100 +++-
> >>  arch/arm/mach-omap2/board-am3517crane.c|   95 +--
> >>  arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
> >>  arch/arm/mach-omap2/board-cm-t35.c |   95 ++-
> >>  arch/arm/mach-omap2/board-cm-t3517.c   |   97 +++-
> >>  arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
> >>  arch/arm/mach-omap2/board-generic.c|   67 +++
> >>  arch/arm/mach-omap2/board-igep0020.c   |  112 
> >> ---
> >>  arch/arm/mach-omap2/board-omap3beagle.c|   93 +--
> >>  arch/arm/mach-omap2/board-omap3evm.c   |   62 --
> >>  arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
> >>  arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
> >>  arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
> >>  arch/arm/mach-omap2/board-omap4panda.c |  122 
> >> ++--
> >>  arch/arm/mach-omap2/board-overo.c  |   54 -
> >>  arch/arm/mach-omap2/board-zoom.c   |   56 -
> > 
> > Can't you have some mach-omap2/ehci-common.c that takes care
> > of the initializiation to avoid this much addition to the
> > board-*.c files? You may be able to have just a common function
> > to do it and pass few parameters?
> 
> Since we moved reset and power handling for the USB PHYs from omap-echi
> driver into the USB PHY driver we need to define the regulator data
> for RESET and Power line of each PHY. So most of the code added is just
> regulator data for the PHY rather than omap-ehci.

It seems that you're now repeating minor variations of the same PHY
over and over again though.
 
> Instead of a common function, I can implement some macros that make it
> easier to define the regulators for the PHY in the board files.
> Does this sound OK?
> 
> Personally I don't like such macros because it hides the implementation
> and is difficult to read/debug.

I'd prefer a common function to initialize the PHY though as it sounds
like using macros would just allocate similar PHY many times which seems
unnecessary.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-13 Thread Roger Quadros
On 03/13/2013 06:24 PM, Tony Lindgren wrote:
> * Roger Quadros  [130313 06:46]:
>> On 03/12/2013 06:40 PM, Tony Lindgren wrote:
>>> * Roger Quadros  [130312 04:47]:
 Hi Tony,

 These patches provide the SoC side code required to support
 the changes in the OMAP USB Host drivers done in [1], [2] & [3].
>>> ... 
>>>
  arch/arm/mach-omap2/board-3430sdp.c|   97 +++-
  arch/arm/mach-omap2/board-3630sdp.c|  100 +++-
  arch/arm/mach-omap2/board-am3517crane.c|   95 +--
  arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
  arch/arm/mach-omap2/board-cm-t35.c |   95 ++-
  arch/arm/mach-omap2/board-cm-t3517.c   |   97 +++-
  arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
  arch/arm/mach-omap2/board-generic.c|   67 +++
  arch/arm/mach-omap2/board-igep0020.c   |  112 
 ---
  arch/arm/mach-omap2/board-omap3beagle.c|   93 +--
  arch/arm/mach-omap2/board-omap3evm.c   |   62 --
  arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
  arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
  arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
  arch/arm/mach-omap2/board-omap4panda.c |  122 
 ++--
  arch/arm/mach-omap2/board-overo.c  |   54 -
  arch/arm/mach-omap2/board-zoom.c   |   56 -
>>>
>>> Can't you have some mach-omap2/ehci-common.c that takes care
>>> of the initializiation to avoid this much addition to the
>>> board-*.c files? You may be able to have just a common function
>>> to do it and pass few parameters?
>>
>> Since we moved reset and power handling for the USB PHYs from omap-echi
>> driver into the USB PHY driver we need to define the regulator data
>> for RESET and Power line of each PHY. So most of the code added is just
>> regulator data for the PHY rather than omap-ehci.
> 
> It seems that you're now repeating minor variations of the same PHY
> over and over again though.

Yes it is the vcc and reset regulator data for the PHY that
is getting repeated with variations in the GPIO number.

>  
>> Instead of a common function, I can implement some macros that make it
>> easier to define the regulators for the PHY in the board files.
>> Does this sound OK?
>>
>> Personally I don't like such macros because it hides the implementation
>> and is difficult to read/debug.
> 
> I'd prefer a common function to initialize the PHY though as it sounds
> like using macros would just allocate similar PHY many times which seems
> unnecessary.
> 
OK, so we want to create the regulator data at runtime to save some memory?
I'll come up with something.

cheers,
-roger
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-13 Thread Tony Lindgren
* Roger Quadros  [130313 09:40]:
> On 03/13/2013 06:24 PM, Tony Lindgren wrote:
> > * Roger Quadros  [130313 06:46]:
> >> On 03/12/2013 06:40 PM, Tony Lindgren wrote:
> >>> * Roger Quadros  [130312 04:47]:
>  Hi Tony,
> 
>  These patches provide the SoC side code required to support
>  the changes in the OMAP USB Host drivers done in [1], [2] & [3].
> >>> ... 
> >>>
>   arch/arm/mach-omap2/board-3430sdp.c|   97 
>  +++-
>   arch/arm/mach-omap2/board-3630sdp.c|  100 
>  +++-
>   arch/arm/mach-omap2/board-am3517crane.c|   95 
>  +--
>   arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
>   arch/arm/mach-omap2/board-cm-t35.c |   95 
>  ++-
>   arch/arm/mach-omap2/board-cm-t3517.c   |   97 
>  +++-
>   arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
>   arch/arm/mach-omap2/board-generic.c|   67 +++
>   arch/arm/mach-omap2/board-igep0020.c   |  112 
>  ---
>   arch/arm/mach-omap2/board-omap3beagle.c|   93 
>  +--
>   arch/arm/mach-omap2/board-omap3evm.c   |   62 --
>   arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
>   arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
>   arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
>   arch/arm/mach-omap2/board-omap4panda.c |  122 
>  ++--
>   arch/arm/mach-omap2/board-overo.c  |   54 -
>   arch/arm/mach-omap2/board-zoom.c   |   56 -
> >>>
> >>> Can't you have some mach-omap2/ehci-common.c that takes care
> >>> of the initializiation to avoid this much addition to the
> >>> board-*.c files? You may be able to have just a common function
> >>> to do it and pass few parameters?
> >>
> >> Since we moved reset and power handling for the USB PHYs from omap-echi
> >> driver into the USB PHY driver we need to define the regulator data
> >> for RESET and Power line of each PHY. So most of the code added is just
> >> regulator data for the PHY rather than omap-ehci.
> > 
> > It seems that you're now repeating minor variations of the same PHY
> > over and over again though.
> 
> Yes it is the vcc and reset regulator data for the PHY that
> is getting repeated with variations in the GPIO number.
> 
> >  
> >> Instead of a common function, I can implement some macros that make it
> >> easier to define the regulators for the PHY in the board files.
> >> Does this sound OK?
> >>
> >> Personally I don't like such macros because it hides the implementation
> >> and is difficult to read/debug.
> > 
> > I'd prefer a common function to initialize the PHY though as it sounds
> > like using macros would just allocate similar PHY many times which seems
> > unnecessary.
> > 
> OK, so we want to create the regulator data at runtime to save some memory?
> I'll come up with something.

Or I guess you can have just one instance that gets filled in by some PHY
platform init function.

Regards,

Tony
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-14 Thread Roger Quadros
On 03/13/2013 06:57 PM, Tony Lindgren wrote:
> * Roger Quadros  [130313 09:40]:
>> On 03/13/2013 06:24 PM, Tony Lindgren wrote:
>>> * Roger Quadros  [130313 06:46]:
 On 03/12/2013 06:40 PM, Tony Lindgren wrote:
> * Roger Quadros  [130312 04:47]:
>> Hi Tony,
>>
>> These patches provide the SoC side code required to support
>> the changes in the OMAP USB Host drivers done in [1], [2] & [3].
> ... 
>
>>  arch/arm/mach-omap2/board-3430sdp.c|   97 
>> +++-
>>  arch/arm/mach-omap2/board-3630sdp.c|  100 
>> +++-
>>  arch/arm/mach-omap2/board-am3517crane.c|   95 
>> +--
>>  arch/arm/mach-omap2/board-am3517evm.c  |   66 ++-
>>  arch/arm/mach-omap2/board-cm-t35.c |   95 
>> ++-
>>  arch/arm/mach-omap2/board-cm-t3517.c   |   97 
>> +++-
>>  arch/arm/mach-omap2/board-devkit8000.c |   20 ++--
>>  arch/arm/mach-omap2/board-generic.c|   67 +++
>>  arch/arm/mach-omap2/board-igep0020.c   |  112 
>> ---
>>  arch/arm/mach-omap2/board-omap3beagle.c|   93 
>> +--
>>  arch/arm/mach-omap2/board-omap3evm.c   |   62 --
>>  arch/arm/mach-omap2/board-omap3pandora.c   |   52 +++--
>>  arch/arm/mach-omap2/board-omap3stalker.c   |   52 +++-
>>  arch/arm/mach-omap2/board-omap3touchbook.c |   62 +-
>>  arch/arm/mach-omap2/board-omap4panda.c |  122 
>> ++--
>>  arch/arm/mach-omap2/board-overo.c  |   54 -
>>  arch/arm/mach-omap2/board-zoom.c   |   56 -
>
> Can't you have some mach-omap2/ehci-common.c that takes care
> of the initializiation to avoid this much addition to the
> board-*.c files? You may be able to have just a common function
> to do it and pass few parameters?

 Since we moved reset and power handling for the USB PHYs from omap-echi
 driver into the USB PHY driver we need to define the regulator data
 for RESET and Power line of each PHY. So most of the code added is just
 regulator data for the PHY rather than omap-ehci.
>>>
>>> It seems that you're now repeating minor variations of the same PHY
>>> over and over again though.
>>
>> Yes it is the vcc and reset regulator data for the PHY that
>> is getting repeated with variations in the GPIO number.
>>
>>>  
 Instead of a common function, I can implement some macros that make it
 easier to define the regulators for the PHY in the board files.
 Does this sound OK?

 Personally I don't like such macros because it hides the implementation
 and is difficult to read/debug.
>>>
>>> I'd prefer a common function to initialize the PHY though as it sounds
>>> like using macros would just allocate similar PHY many times which seems
>>> unnecessary.
>>>
>> OK, so we want to create the regulator data at runtime to save some memory?
>> I'll come up with something.
> 
> Or I guess you can have just one instance that gets filled in by some PHY
> platform init function.
> 

OK. Let me know how the below patch looks. After that, the board code
will look like.

static struct usbhs_phy_data phy_data[] = {
{
.reset_gpio = 147,
.vcc_gpio = 148
.vcc_polarity = 1,
.phy_id = "nop_usb_xceiv.2",
},
{}, /* Terminator */
};

usbhs_init_phys(phy_data);

Patch to implement usbhs_init_phys();

diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
index 5706bdc..b9d6bff 100644
--- a/arch/arm/mach-omap2/usb-host.c
+++ b/arch/arm/mach-omap2/usb-host.c
@@ -22,8 +22,12 @@
 #include 
 #include 
 #include 
+#include 
+#include 
+#include 
 
 #include 
+#include 
 
 #include "soc.h"
 #include "omap_device.h"
@@ -472,6 +476,141 @@ void __init setup_4430ohci_io_mux(const enum 
usbhs_omap_port_mode *port_mode)
}
 }
 
+static const char *reset_supply = "reset";
+static const char *vcc_supply = "vcc";
+
+/* Template for PHY regulators */
+static struct regulator_consumer_supply hsusb_reg_supplies[] = {
+   { /* .supply & .dev_name filled later */ },
+};
+
+static struct regulator_init_data hsusb_reg_data = {
+   .constraints = {
+   .valid_ops_mask = REGULATOR_CHANGE_STATUS,
+   },
+   .consumer_supplies  = hsusb_reg_supplies,
+   .num_consumer_supplies  = ARRAY_SIZE(hsusb_reg_supplies),
+};
+
+static struct fixed_voltage_config hsusb_reg_config = {
+   /* .supply_name filled later */
+   .microvolts = 330,
+   .gpio = -1, /* updated later */
+   .startup_delay = 7, /* 70msec */
+   .enable_high = 1,   /* updated later */
+   .enabled_at_boot = 0,   /* keep 

Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-14 Thread Tony Lindgren
* Roger Quadros  [130314 08:45]:
> 
> OK. Let me know how the below patch looks. After that, the board code
> will look like.
> 
> static struct usbhs_phy_data phy_data[] = {
>   {
>   .reset_gpio = 147,
>   .vcc_gpio = 148
>   .vcc_polarity = 1,
>   .phy_id = "nop_usb_xceiv.2",
>   },
>   {}, /* Terminator */
> };
> 
> usbhs_init_phys(phy_data);

Great, looks good to me.
 
> Patch to implement usbhs_init_phys();
> 
> diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
> index 5706bdc..b9d6bff 100644
> --- a/arch/arm/mach-omap2/usb-host.c
> +++ b/arch/arm/mach-omap2/usb-host.c
> @@ -22,8 +22,12 @@
>  #include 
>  #include 
>  #include 
> +#include 
> +#include 
> +#include 
>  
>  #include 
> +#include 

Please change these both to linux/io.h and linux/gpio.h.
  
>  #include "soc.h"
>  #include "omap_device.h"
> @@ -472,6 +476,141 @@ void __init setup_4430ohci_io_mux(const enum 
> usbhs_omap_port_mode *port_mode)
>   }
>  }
>  
> +static const char *reset_supply = "reset";
> +static const char *vcc_supply = "vcc";
> +
> +/* Template for PHY regulators */
> +static struct regulator_consumer_supply hsusb_reg_supplies[] = {
> + { /* .supply & .dev_name filled later */ },
> +};
> +
> +static struct regulator_init_data hsusb_reg_data = {
> + .constraints = {
> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + },
> + .consumer_supplies  = hsusb_reg_supplies,
> + .num_consumer_supplies  = ARRAY_SIZE(hsusb_reg_supplies),
> +};
> +
> +static struct fixed_voltage_config hsusb_reg_config = {
> + /* .supply_name filled later */
> + .microvolts = 330,
> + .gpio = -1, /* updated later */
> + .startup_delay = 7, /* 70msec */
> + .enable_high = 1,   /* updated later */
> + .enabled_at_boot = 0,   /* keep in RESET */
> + /* .init_data filled later */
> +};
> +
> +static struct platform_device_info hsusb_reg_pdev_info = {
> + .name   = "reg-fixed-voltage",
> + .id = PLATFORM_DEVID_AUTO,
> +};
> +
> +int __init usbhs_init_phys(struct usbhs_phy_data *phy)
> +{
> + struct regulator_consumer_supply *supplies;
> + struct regulator_init_data *reg_data;
> + struct fixed_voltage_config *config;
> + char *supply_name;
> + int i;
> +
> +
> + for (i = 1; i <= OMAP3_HS_USB_PORTS; i++) {

Maybe pass the number of ports to initialize too to the
function? Might be more future proof, although it will only
be needed until we have converted to DT.

> +
> + if (!phy->phy_id)   /* Terminator ? */
> + break;
> +
> + if (!gpio_is_valid(phy->reset_gpio))
> + goto check_vcc;
> +
> + supplies = kmemdup(hsusb_reg_supplies,
> + ARRAY_SIZE(hsusb_reg_supplies) *
> + sizeof(struct regulator_consumer_supply),
> + GFP_KERNEL);
> + if (!supplies)
> + return -ENOMEM;
> +
> + supplies->supply = reset_supply;
> + supplies->dev_name = phy->phy_id;
> +
> + reg_data = kmemdup(&hsusb_reg_data, sizeof(hsusb_reg_data),
> + GFP_KERNEL);
> + if (!reg_data)
> + return -ENOMEM;
> +
> + reg_data->consumer_supplies = supplies;
> +
> + config = kmemdup(&hsusb_reg_config, sizeof(hsusb_reg_config),
> + GFP_KERNEL);
> + if (!config)
> + return -ENOMEM;
> +
> + supply_name = kmalloc(14, GFP_KERNEL);
> + if (!supply_name)
> + return -ENOMEM;
> +
> + scnprintf(supply_name, 13, "hsusb%d_reset", i);
> + config->supply_name = supply_name;
> + config->gpio = phy->reset_gpio;
> + config->init_data = reg_data;
> +
> + hsusb_reg_pdev_info.data = config;
> + hsusb_reg_pdev_info.size_data = sizeof(hsusb_reg_config);
> + platform_device_register_full(&hsusb_reg_pdev_info);
> +
> +check_vcc:
> + if (!gpio_is_valid(phy->vcc_gpio))
> + goto next;
> +
> + supplies = kmemdup(hsusb_reg_supplies,
> + ARRAY_SIZE(hsusb_reg_supplies) *
> + sizeof(struct regulator_consumer_supply),
> + GFP_KERNEL);
> + if (!supplies)
> + return -ENOMEM;
> +
> + supplies->supply = vcc_supply;
> + supplies->dev_name = phy->phy_id;
> +
> + reg_data = kmemdup(&hsusb_reg_data, sizeof(hsusb_reg_data),
> + GFP_KERNEL);
> + if (!reg_data)
> + return -ENOMEM;
> +
> + reg_data->consumer_supplies = supplies;
> +
>

Re: [PATCH 00/24] ARM: OMAP2+: Adapt to ehci-omap changes for 3.10

2013-03-15 Thread Roger Quadros
On 03/14/2013 06:54 PM, Tony Lindgren wrote:
> * Roger Quadros  [130314 08:45]:
>>
>> OK. Let me know how the below patch looks. After that, the board code
>> will look like.
>>
>> static struct usbhs_phy_data phy_data[] = {
>>  {
>>  .reset_gpio = 147,
>>  .vcc_gpio = 148
>>  .vcc_polarity = 1,
>>  .phy_id = "nop_usb_xceiv.2",
>>  },
>>  {}, /* Terminator */
>> };
>>
>> usbhs_init_phys(phy_data);
> 
> Great, looks good to me.
>  
>> Patch to implement usbhs_init_phys();
>>
>> diff --git a/arch/arm/mach-omap2/usb-host.c b/arch/arm/mach-omap2/usb-host.c
>> index 5706bdc..b9d6bff 100644
>> --- a/arch/arm/mach-omap2/usb-host.c
>> +++ b/arch/arm/mach-omap2/usb-host.c
>> @@ -22,8 +22,12 @@
>>  #include 
>>  #include 
>>  #include 
>> +#include 
>> +#include 
>> +#include 
>>  
>>  #include 
>> +#include 
> 
> Please change these both to linux/io.h and linux/gpio.h.

OK.

>   
>>  #include "soc.h"
>>  #include "omap_device.h"
>> @@ -472,6 +476,141 @@ void __init setup_4430ohci_io_mux(const enum 
>> usbhs_omap_port_mode *port_mode)
>>  }
>>  }
>>  
>> +static const char *reset_supply = "reset";
>> +static const char *vcc_supply = "vcc";
>> +
>> +/* Template for PHY regulators */
>> +static struct regulator_consumer_supply hsusb_reg_supplies[] = {
>> +{ /* .supply & .dev_name filled later */ },
>> +};
>> +
>> +static struct regulator_init_data hsusb_reg_data = {
>> +.constraints = {
>> +.valid_ops_mask = REGULATOR_CHANGE_STATUS,
>> +},
>> +.consumer_supplies  = hsusb_reg_supplies,
>> +.num_consumer_supplies  = ARRAY_SIZE(hsusb_reg_supplies),
>> +};
>> +
>> +static struct fixed_voltage_config hsusb_reg_config = {
>> +/* .supply_name filled later */
>> +.microvolts = 330,
>> +.gpio = -1, /* updated later */
>> +.startup_delay = 7, /* 70msec */
>> +.enable_high = 1,   /* updated later */
>> +.enabled_at_boot = 0,   /* keep in RESET */
>> +/* .init_data filled later */
>> +};
>> +
>> +static struct platform_device_info hsusb_reg_pdev_info = {
>> +.name   = "reg-fixed-voltage",
>> +.id = PLATFORM_DEVID_AUTO,
>> +};
>> +
>> +int __init usbhs_init_phys(struct usbhs_phy_data *phy)
>> +{
>> +struct regulator_consumer_supply *supplies;
>> +struct regulator_init_data *reg_data;
>> +struct fixed_voltage_config *config;
>> +char *supply_name;
>> +int i;
>> +
>> +
>> +for (i = 1; i <= OMAP3_HS_USB_PORTS; i++) {
> 
> Maybe pass the number of ports to initialize too to the
> function? Might be more future proof, although it will only
> be needed until we have converted to DT.
> 

OK. I'll add a port index parameter to the usbhs_phy_data structure
to indicate which port the data belongs to and a number of ports
to usbhs_init_phys()

board code can then do

static struct usbhs_phy_data phy_data[] = {
{
.port = 1,  /* First USB port */
.reset_gpio = 147,
.vcc_gpio = 148
.vcc_polarity = 1,
.phy_id = "nop_usb_xceiv.2",
},
};

usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data));

>> +
>> +if (!phy->phy_id)   /* Terminator ? */
>> +break;
>> +
>> +if (!gpio_is_valid(phy->reset_gpio))
>> +goto check_vcc;
>> +
>> +supplies = kmemdup(hsusb_reg_supplies,
>> +ARRAY_SIZE(hsusb_reg_supplies) *
>> +sizeof(struct regulator_consumer_supply),
>> +GFP_KERNEL);
>> +if (!supplies)
>> +return -ENOMEM;
>> +
>> +supplies->supply = reset_supply;
>> +supplies->dev_name = phy->phy_id;
>> +
>> +reg_data = kmemdup(&hsusb_reg_data, sizeof(hsusb_reg_data),
>> +GFP_KERNEL);
>> +if (!reg_data)
>> +return -ENOMEM;
>> +
>> +reg_data->consumer_supplies = supplies;
>> +
>> +config = kmemdup(&hsusb_reg_config, sizeof(hsusb_reg_config),
>> +GFP_KERNEL);
>> +if (!config)
>> +return -ENOMEM;
>> +
>> +supply_name = kmalloc(14, GFP_KERNEL);
>> +if (!supply_name)
>> +return -ENOMEM;
>> +
>> +scnprintf(supply_name, 13, "hsusb%d_reset", i);
>> +config->supply_name = supply_name;
>> +config->gpio = phy->reset_gpio;
>> +config->init_data = reg_data;
>> +
>> +hsusb_reg_pdev_info.data = config;
>> +hsusb_reg_pdev_info.size_data = sizeof(hsusb_reg_config);
>> +platform_device_register_full(&hsusb_reg_pdev_info);
>> +
>> +check_vcc:
>> +if (!gpio_is_valid(phy->vcc_gpio))
>> +goto next;
>> +
>> +supplies = kmemdup(hsusb_reg_suppli