summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2012-04-13 10:46:52 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-04-13 10:46:52 +0200
commited921b0401ba85bdbd37a72b76bdeccb52d872de (patch)
tree4d3c9d13a5ed51cf31a1c71ce3cd0fb8c89609b0 /arch
parentcaeed1efa7e0586144c3bf517488f80bd5ba1f4a (diff)
parente2936393fd0d5e06cf9cd2ed318f0b4037ca9de0 (diff)
downloadbarebox-ed921b0401ba85bdbd37a72b76bdeccb52d872de.tar.gz
barebox-ed921b0401ba85bdbd37a72b76bdeccb52d872de.tar.xz
Merge branch 'work/usb' into next
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boards/freescale-mx53-loco/board.c17
-rw-r--r--arch/arm/mach-imx/imx53.c17
2 files changed, 31 insertions, 3 deletions
diff --git a/arch/arm/boards/freescale-mx53-loco/board.c b/arch/arm/boards/freescale-mx53-loco/board.c
index 6ae597adad..78e8f9ad4c 100644
--- a/arch/arm/boards/freescale-mx53-loco/board.c
+++ b/arch/arm/boards/freescale-mx53-loco/board.c
@@ -95,6 +95,8 @@ static struct pad_desc loco_pads[] = {
/* I2C0 */
MX53_PAD_CSI0_DAT8__I2C1_SDA,
MX53_PAD_CSI0_DAT9__I2C1_SCL,
+
+ MX53_PAD_PATA_DA_2__GPIO7_8,
};
static struct i2c_board_info i2c_devices[] = {
@@ -149,6 +151,7 @@ static void loco_fec_reset(void)
#define LOCO_SD3_CD IMX_GPIO_NR(3, 11)
#define LOCO_SD3_WP IMX_GPIO_NR(3, 12)
#define LOCO_SD1_CD IMX_GPIO_NR(3, 13)
+#define MX53_LOCO_USB_PWREN IMX_GPIO_NR(7, 8)
static struct esdhc_platform_data loco_sd1_data = {
.cd_gpio = LOCO_SD1_CD,
@@ -163,8 +166,19 @@ static struct esdhc_platform_data loco_sd3_data = {
.wp_type = ESDHC_WP_GPIO,
};
+static void loco_ehci_init(void)
+{
+ /* USB PWR enable */
+ gpio_direction_output(MX53_LOCO_USB_PWREN, 0);
+ gpio_set_value(MX53_LOCO_USB_PWREN, 1);
+
+ writel(0, MX53_OTG_BASE_ADDR + 0x384); /* setup portsc */
+ add_generic_usb_ehci_device(1, MX53_OTG_BASE_ADDR + 0x200, NULL);
+}
+
static int loco_devices_init(void)
{
+
imx53_iim_register_fec_ethaddr();
imx53_add_fec(&fec_info);
imx53_add_mmc0(&loco_sd1_data);
@@ -172,6 +186,9 @@ static int loco_devices_init(void)
i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
imx53_add_i2c0(NULL);
+ if (IS_ENABLED(CONFIG_USB_EHCI))
+ loco_ehci_init();
+
loco_fec_reset();
set_silicon_rev(imx_silicon_revision());
diff --git a/arch/arm/mach-imx/imx53.c b/arch/arm/mach-imx/imx53.c
index 8742c46d0b..b5dbc39dad 100644
--- a/arch/arm/mach-imx/imx53.c
+++ b/arch/arm/mach-imx/imx53.c
@@ -154,10 +154,15 @@ void imx53_init_lowlevel(unsigned int cpufreq_mhz)
writel(0x00016154, ccm + MX5_CCM_CBCMR);
- /* change uart clk parent to pll2 */
r = readl(ccm + MX5_CCM_CSCMR1);
- r &= ~(3 << 24);
- r |= (1 << 24);
+
+ /* change uart clk parent to pll2 */
+ r &= ~MX5_CCM_CSCMR1_UART_CLK_SEL_MASK;
+ r |= 1 << MX5_CCM_CSCMR1_UART_CLK_SEL_OFFSET;
+
+ /* USB phy clock from osc */
+ r &= ~(1 << MX5_CCM_CSCMR1_USB_PHY_CLK_SEL_OFFSET);
+
writel(r, ccm + MX5_CCM_CSCMR1);
/* make sure change is effective */
@@ -187,6 +192,12 @@ void imx53_init_lowlevel(unsigned int cpufreq_mhz)
r &= ~MX5_CCM_CSCDR1_ESDHC3_MX53_CLK_PODF_MASK;
r |= 1 << MX5_CCM_CSCDR1_ESDHC3_MX53_CLK_PODF_OFFSET;
+ r &= ~MX5_CCM_CSCDR1_USBOH3_CLK_PRED_MASK;
+ r &= ~MX5_CCM_CSCDR1_USBOH3_CLK_PODF_MASK;
+
+ r |= 3 << MX5_CCM_CSCDR1_USBOH3_CLK_PRED_OFFSET;
+ r |= 1 << MX5_CCM_CSCDR1_USBOH3_CLK_PODF_OFFSET;
+
writel(r, ccm + MX5_CCM_CSCDR1);
/* Restore the default values in the Gate registers */