[at91] prepare TQ-Components TQMa9263 kernel support
[openwrt.git] / target / linux / at91 / patches / 600-usb_vbus_active_high.patch
1 --- a/arch/arm/mach-at91/at91cap9_devices.c
2 +++ b/arch/arm/mach-at91/at91cap9_devices.c
3 @@ -77,7 +77,7 @@
4         /* Enable VBus control for UHP ports */
5         for (i = 0; i < data->ports; i++) {
6                 if (data->vbus_pin[i])
7 -                       at91_set_gpio_output(data->vbus_pin[i], 0);
8 +                       at91_set_gpio_output(data->vbus_pin[i], data->vbus_active_high);
9         }
10  
11         usbh_data = *data;
12 --- a/arch/arm/mach-at91/at91sam9263_devices.c
13 +++ b/arch/arm/mach-at91/at91sam9263_devices.c
14 @@ -71,7 +71,7 @@
15         /* Enable VBus control for UHP ports */
16         for (i = 0; i < data->ports; i++) {
17                 if (data->vbus_pin[i])
18 -                       at91_set_gpio_output(data->vbus_pin[i], 0);
19 +                       at91_set_gpio_output(data->vbus_pin[i], data->vbus_active_high);
20         }
21  
22         usbh_data = *data;
23 --- a/arch/arm/mach-at91/at91sam9g45_devices.c
24 +++ b/arch/arm/mach-at91/at91sam9g45_devices.c
25 @@ -119,7 +119,7 @@
26         /* Enable VBus control for UHP ports */
27         for (i = 0; i < data->ports; i++) {
28                 if (data->vbus_pin[i])
29 -                       at91_set_gpio_output(data->vbus_pin[i], 0);
30 +                       at91_set_gpio_output(data->vbus_pin[i], data->vbus_active_high);
31         }
32  
33         usbh_ohci_data = *data;
34 @@ -174,7 +174,7 @@
35         /* Enable VBus control for UHP ports */
36         for (i = 0; i < data->ports; i++) {
37                 if (data->vbus_pin[i])
38 -                       at91_set_gpio_output(data->vbus_pin[i], 0);
39 +                       at91_set_gpio_output(data->vbus_pin[i], data->vbus_active_high);
40         }
41  
42         usbh_ehci_data = *data;
43 --- a/arch/arm/mach-at91/include/mach/board.h
44 +++ b/arch/arm/mach-at91/include/mach/board.h
45 @@ -93,8 +93,9 @@
46  
47   /* USB Host */
48  struct at91_usbh_data {
49 -       u8              ports;          /* number of ports on root hub */
50 -       u8              vbus_pin[2];    /* port power-control pin */
51 +       u8              ports;                  /* number of ports on root hub */
52 +       u8              vbus_pin[2];            /* port power-control pin */
53 +       u8              vbus_active_high;       /* true == vbus_pins are active high */
54  };
55  extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
56  extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
57 --- a/drivers/usb/host/ohci-at91.c
58 +++ b/drivers/usb/host/ohci-at91.c
59 @@ -277,14 +277,13 @@
60         if (pdata) {
61                 /* REVISIT make the driver support per-port power switching,
62                  * and also overcurrent detection.  Here we assume the ports
63 -                * are always powered while this driver is active, and use
64 -                * active-low power switches.
65 +                * are always powered while this driver is active.
66                  */
67                 for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
68                         if (pdata->vbus_pin[i] <= 0)
69                                 continue;
70                         gpio_request(pdata->vbus_pin[i], "ohci_vbus");
71 -                       gpio_direction_output(pdata->vbus_pin[i], 0);
72 +                       gpio_direction_output(pdata->vbus_pin[i], pdata->vbus_active_high);
73                 }
74         }
75  
76 @@ -301,7 +300,7 @@
77                 for (i = 0; i < ARRAY_SIZE(pdata->vbus_pin); i++) {
78                         if (pdata->vbus_pin[i] <= 0)
79                                 continue;
80 -                       gpio_direction_output(pdata->vbus_pin[i], 1);
81 +                       gpio_direction_output(pdata->vbus_pin[i], !pdata->vbus_active_high);
82                         gpio_free(pdata->vbus_pin[i]);
83                 }
84         }