diff options
author | Amaury Pouly <pamaury@rockbox.org> | 2011-09-14 11:50:06 +0000 |
---|---|---|
committer | Amaury Pouly <pamaury@rockbox.org> | 2011-09-14 11:50:06 +0000 |
commit | b25d6e0c964f80dc85434aced42b6fd39c974cf5 (patch) | |
tree | 64667274d02b338e1410bb1828e9fdd091ede55c /firmware/target | |
parent | 4f27931a583fc4b01054fc143e5a88064f9d6847 (diff) | |
download | rockbox-b25d6e0c964f80dc85434aced42b6fd39c974cf5.tar.gz rockbox-b25d6e0c964f80dc85434aced42b6fd39c974cf5.zip |
imx233/fuze+: implement usb enable
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30542 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/imx233/clkctrl-imx233.c | 8 | ||||
-rw-r--r-- | firmware/target/arm/imx233/clkctrl-imx233.h | 6 | ||||
-rw-r--r-- | firmware/target/arm/imx233/system-imx233.c | 22 | ||||
-rw-r--r-- | firmware/target/arm/imx233/system-target.h | 14 | ||||
-rw-r--r-- | firmware/target/arm/imx233/usb-imx233.c | 12 |
5 files changed, 59 insertions, 3 deletions
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.c b/firmware/target/arm/imx233/clkctrl-imx233.c index ee77a77493..976a9f9d3b 100644 --- a/firmware/target/arm/imx233/clkctrl-imx233.c +++ b/firmware/target/arm/imx233/clkctrl-imx233.c | |||
@@ -118,3 +118,11 @@ void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass) | |||
118 | __REG_CLR(HW_CLKCTRL_CLKSEQ) = msk; | 118 | __REG_CLR(HW_CLKCTRL_CLKSEQ) = msk; |
119 | } | 119 | } |
120 | 120 | ||
121 | void imx233_enable_usb_pll(bool enable) | ||
122 | { | ||
123 | if(enable) | ||
124 | __REG_SET(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS; | ||
125 | else | ||
126 | __REG_CLR(HW_CLKCTRL_PLLCTRL0) = HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS; | ||
127 | } | ||
128 | |||
diff --git a/firmware/target/arm/imx233/clkctrl-imx233.h b/firmware/target/arm/imx233/clkctrl-imx233.h index f1a51e25b2..7aa4f716e8 100644 --- a/firmware/target/arm/imx233/clkctrl-imx233.h +++ b/firmware/target/arm/imx233/clkctrl-imx233.h | |||
@@ -28,8 +28,9 @@ | |||
28 | #define HW_CLKCTRL_BASE 0x80040000 | 28 | #define HW_CLKCTRL_BASE 0x80040000 |
29 | 29 | ||
30 | #define HW_CLKCTRL_PLLCTRL0 (*(volatile uint32_t *)(HW_CLKCTRL_BASE + 0x0)) | 30 | #define HW_CLKCTRL_PLLCTRL0 (*(volatile uint32_t *)(HW_CLKCTRL_BASE + 0x0)) |
31 | #define HW_CLKCTRL_PLLCTRL0__DIV_SEL_BP 20 | 31 | #define HW_CLKCTRL_PLLCTRL0__EN_USB_CLKS (1 << 18) |
32 | #define HW_CLKCTRL_PLLCTRL0__DIV_SEL_BM (3 << 20) | 32 | #define HW_CLKCTRL_PLLCTRL0__DIV_SEL_BP 20 |
33 | #define HW_CLKCTRL_PLLCTRL0__DIV_SEL_BM (3 << 20) | ||
33 | 34 | ||
34 | #define HW_CLKCTRL_PLLCTRL1 (*(volatile uint32_t *)(HW_CLKCTRL_BASE + 0x10)) | 35 | #define HW_CLKCTRL_PLLCTRL1 (*(volatile uint32_t *)(HW_CLKCTRL_BASE + 0x10)) |
35 | 36 | ||
@@ -90,5 +91,6 @@ void imx233_set_clock_divisor(enum imx233_clock_t clk, int div); | |||
90 | /* call with fracdiv=0 to disable it */ | 91 | /* call with fracdiv=0 to disable it */ |
91 | void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv); | 92 | void imx233_set_fractional_divisor(enum imx233_clock_t clk, int fracdiv); |
92 | void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass); | 93 | void imx233_set_bypass_pll(enum imx233_clock_t clk, bool bypass); |
94 | void imx233_enable_usb_pll(bool enable); | ||
93 | 95 | ||
94 | #endif /* CLKCTRL_IMX233_H */ | 96 | #endif /* CLKCTRL_IMX233_H */ |
diff --git a/firmware/target/arm/imx233/system-imx233.c b/firmware/target/arm/imx233/system-imx233.c index d27bb1b7d2..7b8e0c858e 100644 --- a/firmware/target/arm/imx233/system-imx233.c +++ b/firmware/target/arm/imx233/system-imx233.c | |||
@@ -253,3 +253,25 @@ void set_cpu_frequency(long frequency) | |||
253 | } | 253 | } |
254 | } | 254 | } |
255 | #endif | 255 | #endif |
256 | |||
257 | void imx233_enable_usb_controller(bool enable) | ||
258 | { | ||
259 | if(enable) | ||
260 | __REG_CLR(HW_DIGCTL_CTRL) = HW_DIGCTL_CTRL__USB_CLKGATE; | ||
261 | else | ||
262 | __REG_SET(HW_DIGCTL_CTRL) = HW_DIGCTL_CTRL__USB_CLKGATE; | ||
263 | } | ||
264 | |||
265 | void imx233_enable_usb_phy(bool enable) | ||
266 | { | ||
267 | if(enable) | ||
268 | { | ||
269 | __REG_CLR(HW_USBPHY_CTRL) = __BLOCK_CLKGATE | __BLOCK_SFTRST; | ||
270 | __REG_CLR(HW_USBPHY_PWD) = HW_USBPHY_PWD__ALL; | ||
271 | } | ||
272 | else | ||
273 | { | ||
274 | __REG_SET(HW_USBPHY_PWD) = HW_USBPHY_PWD__ALL; | ||
275 | __REG_SET(HW_USBPHY_CTRL) = __BLOCK_CLKGATE | __BLOCK_SFTRST; | ||
276 | } | ||
277 | } | ||
diff --git a/firmware/target/arm/imx233/system-target.h b/firmware/target/arm/imx233/system-target.h index fd817a9950..29c175175b 100644 --- a/firmware/target/arm/imx233/system-target.h +++ b/firmware/target/arm/imx233/system-target.h | |||
@@ -28,9 +28,21 @@ | |||
28 | #include "clock-target.h" /* CPUFREQ_* are defined here */ | 28 | #include "clock-target.h" /* CPUFREQ_* are defined here */ |
29 | #include "power-imx233.h" | 29 | #include "power-imx233.h" |
30 | 30 | ||
31 | /* Digital control */ | ||
31 | #define HW_DIGCTL_BASE 0x8001C000 | 32 | #define HW_DIGCTL_BASE 0x8001C000 |
33 | #define HW_DIGCTL_CTRL (*(volatile uint32_t *)(HW_DIGCTL_BASE + 0)) | ||
34 | #define HW_DIGCTL_CTRL__USB_CLKGATE (1 << 2) | ||
35 | |||
32 | #define HW_DIGCTL_MICROSECONDS (*(volatile uint32_t *)(HW_DIGCTL_BASE + 0xC0)) | 36 | #define HW_DIGCTL_MICROSECONDS (*(volatile uint32_t *)(HW_DIGCTL_BASE + 0xC0)) |
33 | 37 | ||
38 | /* USB Phy */ | ||
39 | #define HW_USBPHY_BASE 0x8007C000 | ||
40 | #define HW_USBPHY_PWD (*(volatile uint32_t *)(HW_USBPHY_BASE + 0)) | ||
41 | #define HW_USBPHY_PWD__ALL (7 << 10 | 0xf << 17) | ||
42 | |||
43 | #define HW_USBPHY_CTRL (*(volatile uint32_t *)(HW_USBPHY_BASE + 0x30)) | ||
44 | |||
45 | /* Interrupt collector */ | ||
34 | #define HW_ICOLL_BASE 0x80000000 | 46 | #define HW_ICOLL_BASE 0x80000000 |
35 | 47 | ||
36 | #define HW_ICOLL_VECTOR (*(volatile uint32_t *)(HW_ICOLL_BASE + 0x0)) | 48 | #define HW_ICOLL_VECTOR (*(volatile uint32_t *)(HW_ICOLL_BASE + 0x0)) |
@@ -89,6 +101,8 @@ void udelay(unsigned us); | |||
89 | bool imx233_us_elapsed(uint32_t ref, unsigned us_delay); | 101 | bool imx233_us_elapsed(uint32_t ref, unsigned us_delay); |
90 | void imx233_reset_block(volatile uint32_t *block_reg); | 102 | void imx233_reset_block(volatile uint32_t *block_reg); |
91 | void power_off(void); | 103 | void power_off(void); |
104 | void imx233_enable_usb_controller(bool enable); | ||
105 | void imx233_enable_usb_phy(bool enable); | ||
92 | 106 | ||
93 | void udelay(unsigned usecs); | 107 | void udelay(unsigned usecs); |
94 | 108 | ||
diff --git a/firmware/target/arm/imx233/usb-imx233.c b/firmware/target/arm/imx233/usb-imx233.c index c2d355ad88..c275f76916 100644 --- a/firmware/target/arm/imx233/usb-imx233.c +++ b/firmware/target/arm/imx233/usb-imx233.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include "usb-target.h" | 28 | #include "usb-target.h" |
29 | #include "system.h" | 29 | #include "system.h" |
30 | #include "system-target.h" | 30 | #include "system-target.h" |
31 | #include "clkctrl-imx233.h" | ||
31 | 32 | ||
32 | 33 | ||
33 | void usb_insert_int(void) | 34 | void usb_insert_int(void) |
@@ -77,9 +78,18 @@ bool usb_plugged(void) | |||
77 | 78 | ||
78 | void usb_enable(bool on) | 79 | void usb_enable(bool on) |
79 | { | 80 | { |
80 | /* FIXME: power up/down usb phy and pll usb */ | ||
81 | if(on) | 81 | if(on) |
82 | { | ||
83 | imx233_enable_usb_pll(true); | ||
84 | imx233_enable_usb_phy(true); | ||
85 | imx233_enable_usb_controller(true); | ||
82 | usb_core_init(); | 86 | usb_core_init(); |
87 | } | ||
83 | else | 88 | else |
89 | { | ||
84 | usb_core_exit(); | 90 | usb_core_exit(); |
91 | imx233_enable_usb_controller(false); | ||
92 | imx233_enable_usb_phy(false); | ||
93 | imx233_enable_usb_pll(false); | ||
94 | } | ||
85 | } | 95 | } |