~ubuntu-branches/ubuntu/vivid/linux-fsl-imx51/vivid

« back to all changes in this revision

Viewing changes to arch/arm/mach-mx51/usb_h1.c

  • Committer: Bazaar Package Importer
  • Author(s): Andy Whitcroft, Amit Kucheria, Andy Whitcroft, Bryan Wu, Upstream Kernel Changes
  • Date: 2010-01-11 16:26:27 UTC
  • Revision ID: james.westby@ubuntu.com-20100111162627-1q2fl9tcuwcywt1e
Tags: 2.6.31-602.4
[ Amit Kucheria ]

* Update to official 2.6.31 BSP release from Freescale

[ Andy Whitcroft ]

* drop a number of modules no longer built

[ Bryan Wu ]

* [Config] Update configs after applying .31 patchset from Freescale
* [Config] Sync with imx51_defconfig from Freescale BSP

[ Upstream Kernel Changes ]

* Update to official 2.6.31 BSP release from Freescale.

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#include <linux/kernel.h>
15
15
#include <linux/types.h>
16
16
#include <linux/delay.h>
 
17
#include <linux/clk.h>
17
18
#include <linux/platform_device.h>
18
19
#include <linux/fsl_devices.h>
19
20
#include <mach/arc_otg.h>
31
32
        /* Set USBH1_STP to GPIO and toggle it */
32
33
        mxc_request_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO |
33
34
                          IOMUX_CONFIG_SION);
34
 
        mxc_set_gpio_direction(MX51_PIN_USBH1_STP, 0);
35
 
        mxc_set_gpio_dataout(MX51_PIN_USBH1_STP, 1);
 
35
        gpio_request(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), "usbh1_stp");
 
36
        gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 0);
 
37
        gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP), 1);
36
38
 
37
39
        /* Signal only used on MX51-3DS for reset to PHY.*/
38
40
        if (machine_is_mx51_3ds()) {
41
43
                          PAD_CTL_HYS_NONE | PAD_CTL_PUE_KEEPER |
42
44
                          PAD_CTL_100K_PU | PAD_CTL_ODE_OPENDRAIN_NONE |
43
45
                          PAD_CTL_PKE_ENABLE | PAD_CTL_SRE_FAST);
44
 
                mxc_set_gpio_direction(MX51_PIN_EIM_D17, 0);
45
 
                mxc_set_gpio_dataout(MX51_PIN_EIM_D17, 1);
 
46
                gpio_request(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), "eim_d17");
 
47
                gpio_direction_output(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), 0);
 
48
                gpio_set_value(IOMUX_TO_GPIO(MX51_PIN_EIM_D17), 1);
46
49
        }
47
50
 
48
51
        msleep(100);
59
62
                          PAD_CTL_PUE_KEEPER | PAD_CTL_PKE_ENABLE |
60
63
                          PAD_CTL_HYS_ENABLE | PAD_CTL_DDR_INPUT_CMOS |
61
64
                          PAD_CTL_DRV_VOT_LOW);
 
65
        gpio_free(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP));
62
66
}
63
67
EXPORT_SYMBOL(gpio_usbh1_setback_stp);
64
68
 
65
69
static void gpio_usbh1_inactive(void)
66
70
{
67
 
        mxc_request_gpio(MX51_PIN_USBH1_STP);
 
71
        /* Signal only used on MX51-3DS for reset to PHY.*/
 
72
        if (machine_is_mx51_3ds()) {
 
73
                gpio_free(IOMUX_TO_GPIO(MX51_PIN_EIM_D17));
 
74
                mxc_free_iomux(MX51_PIN_EIM_D17, IOMUX_CONFIG_GPIO);
 
75
        }
 
76
 
68
77
        mxc_free_iomux(MX51_PIN_USBH1_STP, IOMUX_CONFIG_GPIO);
 
78
        gpio_free(IOMUX_TO_GPIO(MX51_PIN_USBH1_STP));
 
79
}
 
80
 
 
81
static void _wake_up_enable(struct fsl_usb2_platform_data *pdata, bool enable)
 
82
{
 
83
        if (enable)
 
84
                USBCTRL |= UCTRL_H1WIE;
 
85
        else
 
86
                USBCTRL &= ~UCTRL_H1WIE;
 
87
}
 
88
 
 
89
static void usbotg_clock_gate(bool on)
 
90
{
 
91
        struct clk *usboh3_clk = clk_get(NULL, "usboh3_clk");
 
92
        struct clk *usb_ahb_clk = clk_get(NULL, "usb_ahb_clk");
 
93
 
 
94
        if (on) {
 
95
                clk_enable(usb_ahb_clk);
 
96
                clk_enable(usboh3_clk);
 
97
        } else {
 
98
                clk_disable(usboh3_clk);
 
99
                clk_disable(usb_ahb_clk);
 
100
        }
 
101
 
 
102
        clk_put(usboh3_clk);
 
103
        clk_put(usb_ahb_clk);
69
104
}
70
105
 
71
106
static struct fsl_usb2_platform_data usbh1_config = {
77
112
        .power_budget = 500,    /* 500 mA max power */
78
113
        .gpio_usb_active = gpio_usbh1_active,
79
114
        .gpio_usb_inactive = gpio_usbh1_inactive,
 
115
        .wake_up_enable = _wake_up_enable,
 
116
        .usb_clock_for_pm  = usbotg_clock_gate,
80
117
        .transceiver = "isp1504",
81
118
};
82
119
 
96
133
{
97
134
        pr_debug("%s: \n", __func__);
98
135
 
99
 
        host_pdev_register(usbh1_resources, ARRAY_SIZE(usbh1_resources),
100
 
                           &usbh1_config);
 
136
        host_pdev_register(usbh1_resources,
 
137
                        ARRAY_SIZE(usbh1_resources), &usbh1_config);
 
138
 
101
139
        return 0;
102
140
}
103
141