diff options
author | Kim Phillips <kim.phillips@freescale.com> | 2008-01-30 13:46:19 -0500 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2008-02-06 00:19:03 -0500 |
commit | b74a7e50cc87dea1b86d35860ace81412cb49886 (patch) | |
tree | ad2baa9b25faab62c3011a521e662a7e19767e58 /arch/powerpc/platforms/83xx | |
parent | 8353ec7b0d6666c0674ca978379c55234609dae8 (diff) |
[POWERPC] 83xx: configure USB clock for MPC8315E
SCCR USB bits are in a different location on the mpc8315.
Signed-off-by: Jerry Huang <Chang-Ming.Huang@freescale.com>
Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/83xx')
-rw-r--r-- | arch/powerpc/platforms/83xx/mpc83xx.h | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/83xx/usb.c | 17 |
2 files changed, 15 insertions, 4 deletions
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h index 88bb748aff0d..68065e62fc3d 100644 --- a/arch/powerpc/platforms/83xx/mpc83xx.h +++ b/arch/powerpc/platforms/83xx/mpc83xx.h | |||
@@ -14,6 +14,8 @@ | |||
14 | #define MPC83XX_SCCR_USB_DRCM_11 0x00300000 | 14 | #define MPC83XX_SCCR_USB_DRCM_11 0x00300000 |
15 | #define MPC83XX_SCCR_USB_DRCM_01 0x00100000 | 15 | #define MPC83XX_SCCR_USB_DRCM_01 0x00100000 |
16 | #define MPC83XX_SCCR_USB_DRCM_10 0x00200000 | 16 | #define MPC83XX_SCCR_USB_DRCM_10 0x00200000 |
17 | #define MPC8315_SCCR_USB_MASK 0x00c00000 | ||
18 | #define MPC8315_SCCR_USB_DRCM_11 0x00c00000 | ||
17 | #define MPC837X_SCCR_USB_DRCM_11 0x00c00000 | 19 | #define MPC837X_SCCR_USB_DRCM_11 0x00c00000 |
18 | 20 | ||
19 | /* system i/o configuration register low */ | 21 | /* system i/o configuration register low */ |
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c index 681230a30acd..471fdd8f4108 100644 --- a/arch/powerpc/platforms/83xx/usb.c +++ b/arch/powerpc/platforms/83xx/usb.c | |||
@@ -104,6 +104,7 @@ int mpc831x_usb_cfg(void) | |||
104 | u32 temp; | 104 | u32 temp; |
105 | void __iomem *immap, *usb_regs; | 105 | void __iomem *immap, *usb_regs; |
106 | struct device_node *np = NULL; | 106 | struct device_node *np = NULL; |
107 | struct device_node *immr_node = NULL; | ||
107 | const void *prop; | 108 | const void *prop; |
108 | struct resource res; | 109 | struct resource res; |
109 | int ret = 0; | 110 | int ret = 0; |
@@ -124,10 +125,15 @@ int mpc831x_usb_cfg(void) | |||
124 | } | 125 | } |
125 | 126 | ||
126 | /* Configure clock */ | 127 | /* Configure clock */ |
127 | temp = in_be32(immap + MPC83XX_SCCR_OFFS); | 128 | immr_node = of_get_parent(np); |
128 | temp &= ~MPC83XX_SCCR_USB_MASK; | 129 | if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315-immr")) |
129 | temp |= MPC83XX_SCCR_USB_DRCM_11; /* 1:3 */ | 130 | clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, |
130 | out_be32(immap + MPC83XX_SCCR_OFFS, temp); | 131 | MPC8315_SCCR_USB_MASK, |
132 | MPC8315_SCCR_USB_DRCM_11); | ||
133 | else | ||
134 | clrsetbits_be32(immap + MPC83XX_SCCR_OFFS, | ||
135 | MPC83XX_SCCR_USB_MASK, | ||
136 | MPC83XX_SCCR_USB_DRCM_11); | ||
131 | 137 | ||
132 | /* Configure pin mux for ULPI. There is no pin mux for UTMI */ | 138 | /* Configure pin mux for ULPI. There is no pin mux for UTMI */ |
133 | if (prop && !strcmp(prop, "ulpi")) { | 139 | if (prop && !strcmp(prop, "ulpi")) { |
@@ -144,6 +150,9 @@ int mpc831x_usb_cfg(void) | |||
144 | 150 | ||
145 | iounmap(immap); | 151 | iounmap(immap); |
146 | 152 | ||
153 | if (immr_node) | ||
154 | of_node_put(immr_node); | ||
155 | |||
147 | /* Map USB SOC space */ | 156 | /* Map USB SOC space */ |
148 | ret = of_address_to_resource(np, 0, &res); | 157 | ret = of_address_to_resource(np, 0, &res); |
149 | if (ret) { | 158 | if (ret) { |