diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2012-01-28 00:43:04 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2012-02-01 15:02:22 +0100 |
commit | 289440605aeda05b0722c64f8798906dcd0af41a (patch) | |
tree | 39cb9c309c1134e7c10114b5effdd2a1de22b4e6 /firmware/target/arm | |
parent | c18a4e631690250024031be1b306e9003b2300ad (diff) | |
download | rockbox-289440605aeda05b0722c64f8798906dcd0af41a.tar.gz rockbox-289440605aeda05b0722c64f8798906dcd0af41a.zip |
imx233/fuze+: set a few recommended power bits by Freescale, remove some uneeded headers, implement audio path selection for playback and radio
Change-Id: If926ead9b776504a58eb102fcc0e9acadf4f7379
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/imx233/power-imx233.c | 5 | ||||
-rw-r--r-- | firmware/target/arm/imx233/power-imx233.h | 34 | ||||
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c | 20 | ||||
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c | 1 | ||||
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c | 2 | ||||
-rw-r--r-- | firmware/target/arm/imx233/system-target.h | 4 | ||||
-rw-r--r-- | firmware/target/arm/imx233/usb-imx233.c | 2 |
7 files changed, 63 insertions, 5 deletions
diff --git a/firmware/target/arm/imx233/power-imx233.c b/firmware/target/arm/imx233/power-imx233.c index 1d025675c7..479cba4430 100644 --- a/firmware/target/arm/imx233/power-imx233.c +++ b/firmware/target/arm/imx233/power-imx233.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include "string.h" | 25 | #include "string.h" |
26 | #include "usb.h" | 26 | #include "usb.h" |
27 | #include "system-target.h" | 27 | #include "system-target.h" |
28 | #include "power-imx233.h" | ||
28 | 29 | ||
29 | struct current_step_bit_t | 30 | struct current_step_bit_t |
30 | { | 31 | { |
@@ -99,6 +100,10 @@ void power_init(void) | |||
99 | __FIELD_SET(HW_POWER_VDDDCTRL, LINREG_OFFSET, 2); | 100 | __FIELD_SET(HW_POWER_VDDDCTRL, LINREG_OFFSET, 2); |
100 | __FIELD_SET(HW_POWER_VDDACTRL, LINREG_OFFSET, 2); | 101 | __FIELD_SET(HW_POWER_VDDACTRL, LINREG_OFFSET, 2); |
101 | __FIELD_SET(HW_POWER_VDDIOCTRL, LINREG_OFFSET, 2); | 102 | __FIELD_SET(HW_POWER_VDDIOCTRL, LINREG_OFFSET, 2); |
103 | /* enable a few bits controlling the DC-DC as recommended by Freescale */ | ||
104 | __REG_SET(HW_POWER_LOOPCTRL) = HW_POWER_LOOPCTRL__TOGGLE_DIF | | ||
105 | HW_POWER_LOOPCTRL__EN_CM_HYST; | ||
106 | __FIELD_SET(HW_POWER_LOOPCTRL, EN_RCSCALE, HW_POWER_LOOPCTRL__EN_RCSCALE__2X); | ||
102 | } | 107 | } |
103 | 108 | ||
104 | void power_off(void) | 109 | void power_off(void) |
diff --git a/firmware/target/arm/imx233/power-imx233.h b/firmware/target/arm/imx233/power-imx233.h index 368ca719da..3a2452ce19 100644 --- a/firmware/target/arm/imx233/power-imx233.h +++ b/firmware/target/arm/imx233/power-imx233.h | |||
@@ -52,6 +52,8 @@ | |||
52 | #define HW_POWER_5VCTRL__PWD_CHARGE_4P2 (1 << 20) | 52 | #define HW_POWER_5VCTRL__PWD_CHARGE_4P2 (1 << 20) |
53 | 53 | ||
54 | #define HW_POWER_MINPWR (*(volatile uint32_t *)(HW_POWER_BASE + 0x20)) | 54 | #define HW_POWER_MINPWR (*(volatile uint32_t *)(HW_POWER_BASE + 0x20)) |
55 | #define HW_POWER_MINPWR__HALF_FETS (1 << 5) | ||
56 | #define HW_POWER_MINPWR__DOUBLE_FETS (1 << 6) | ||
55 | 57 | ||
56 | #define HW_POWER_CHARGE (*(volatile uint32_t *)(HW_POWER_BASE + 0x30)) | 58 | #define HW_POWER_CHARGE (*(volatile uint32_t *)(HW_POWER_BASE + 0x30)) |
57 | #define HW_POWER_CHARGE__BATTCHRG_I_BP 0 | 59 | #define HW_POWER_CHARGE__BATTCHRG_I_BP 0 |
@@ -129,6 +131,27 @@ | |||
129 | #define HW_POWER_MISC__FREQSEL__21p6MHz 6 | 131 | #define HW_POWER_MISC__FREQSEL__21p6MHz 6 |
130 | #define HW_POWER_MISC__FREQSEL__17p28MHz 7 | 132 | #define HW_POWER_MISC__FREQSEL__17p28MHz 7 |
131 | 133 | ||
134 | #define HW_POWER_LOOPCTRL (*(volatile uint32_t *)(HW_POWER_BASE + 0xb0)) | ||
135 | #define HW_POWER_LOOPCTRL__DC_C_BP 0 | ||
136 | #define HW_POWER_LOOPCTRL__DC_C_BM 0x3 | ||
137 | #define HW_POWER_LOOPCTRL__DC_R_BP 4 | ||
138 | #define HW_POWER_LOOPCTRL__DC_R_BM 0xf0 | ||
139 | #define HW_POWER_LOOPCTRL__DC_FF_BP 8 | ||
140 | #define HW_POWER_LOOPCTRL__DC_FF_BM (0x7 << 8) | ||
141 | #define HW_POWER_LOOPCTRL__EN_RCSCALE_BP 12 | ||
142 | #define HW_POWER_LOOPCTRL__EN_RCSCALE_BM (0x3 << 12) | ||
143 | #define HW_POWER_LOOPCTRL__EN_RCSCALE__DISABLED 0 | ||
144 | #define HW_POWER_LOOPCTRL__EN_RCSCALE__2X 1 | ||
145 | #define HW_POWER_LOOPCTRL__EN_RCSCALE__4X 2 | ||
146 | #define HW_POWER_LOOPCTRL__EN_RCSCALE__8X 3 | ||
147 | #define HW_POWER_LOOPCTRL__RCSCALE_THRESH (1 << 14) | ||
148 | #define HW_POWER_LOOPCTRL__DF_HYST_THRESH (1 << 15) | ||
149 | #define HW_POWER_LOOPCTRL__CM_HYST_THRESH (1 << 16) | ||
150 | #define HW_POWER_LOOPCTRL__EN_DF_HYST (1 << 17) | ||
151 | #define HW_POWER_LOOPCTRL__EN_CM_HYST (1 << 18) | ||
152 | #define HW_POWER_LOOPCTRL__HYST_SIGN (1 << 19) | ||
153 | #define HW_POWER_LOOPCTRL__TOGGLE_DIF (1 << 20) | ||
154 | |||
132 | #define HW_POWER_STS (*(volatile uint32_t *)(HW_POWER_BASE + 0xc0)) | 155 | #define HW_POWER_STS (*(volatile uint32_t *)(HW_POWER_BASE + 0xc0)) |
133 | #define HW_POWER_STS__VBUSVALID (1 << 1) | 156 | #define HW_POWER_STS__VBUSVALID (1 << 1) |
134 | #define HW_POWER_STS__CHRGSTS (1 << 11) | 157 | #define HW_POWER_STS__CHRGSTS (1 << 11) |
@@ -148,6 +171,17 @@ void imx233_power_set_charge_current(unsigned current); /* in mA */ | |||
148 | void imx233_power_set_stop_current(unsigned current); /* in mA */ | 171 | void imx233_power_set_stop_current(unsigned current); /* in mA */ |
149 | void imx233_power_enable_batadj(bool enable); | 172 | void imx233_power_enable_batadj(bool enable); |
150 | 173 | ||
174 | static inline void imx233_power_set_dcdc_freq(bool pll, unsigned freq) | ||
175 | { | ||
176 | HW_POWER_MISC &= ~(HW_POWER_MISC__SEL_PLLCLK | HW_POWER_MISC__FREQSEL_BM); | ||
177 | /* WARNING: HW_POWER_MISC does have a SET/CLR variant ! */ | ||
178 | if(pll) | ||
179 | { | ||
180 | HW_POWER_MISC |= freq << HW_POWER_MISC__FREQSEL_BP; | ||
181 | HW_POWER_MISC |= HW_POWER_MISC__SEL_PLLCLK; | ||
182 | } | ||
183 | } | ||
184 | |||
151 | struct imx233_power_info_t | 185 | struct imx233_power_info_t |
152 | { | 186 | { |
153 | int vddd; /* in mV */ | 187 | int vddd; /* in mV */ |
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c index 1aac9e43e0..abdcda90cb 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c | |||
@@ -25,13 +25,31 @@ | |||
25 | #include "audioout-imx233.h" | 25 | #include "audioout-imx233.h" |
26 | #include "audioin-imx233.h" | 26 | #include "audioin-imx233.h" |
27 | 27 | ||
28 | static int input_source = AUDIO_SRC_PLAYBACK; | ||
29 | static unsigned input_flags = 0; | ||
30 | static int output_source = AUDIO_SRC_PLAYBACK; | ||
31 | |||
32 | static void select_audio_path(void) | ||
33 | { | ||
34 | if(input_source == AUDIO_SRC_PLAYBACK) | ||
35 | imx233_audiout_select_hp_input(false); | ||
36 | else | ||
37 | imx233_audiout_select_hp_input(true); | ||
38 | } | ||
39 | |||
28 | void audio_input_mux(int source, unsigned flags) | 40 | void audio_input_mux(int source, unsigned flags) |
29 | { | 41 | { |
30 | (void) source; | 42 | (void) source; |
31 | (void) flags; | 43 | (void) flags; |
44 | input_source = source; | ||
45 | input_flags = flags; | ||
46 | select_audio_path(); | ||
32 | } | 47 | } |
33 | 48 | ||
34 | void audio_set_output_source(int source) | 49 | void audio_set_output_source(int source) |
35 | { | 50 | { |
36 | (void) source; | 51 | (void) source; |
52 | output_source = source; | ||
53 | select_audio_path(); | ||
37 | } | 54 | } |
55 | |||
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c index e349459d6e..b61ce68df0 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include "lcd.h" | 27 | #include "lcd.h" |
28 | #include "string.h" | 28 | #include "string.h" |
29 | #include "usb.h" | 29 | #include "usb.h" |
30 | #include "power-imx233.h" | ||
30 | 31 | ||
31 | #ifndef BOOTLOADER | 32 | #ifndef BOOTLOADER |
32 | 33 | ||
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c index bf06abe311..1b72a4b73c 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include "tuner.h" | 24 | #include "tuner.h" |
25 | #include "fmradio_i2c.h" | 25 | #include "fmradio_i2c.h" |
26 | #include "pinctrl-imx233.h" | 26 | #include "pinctrl-imx233.h" |
27 | #include "power-imx233.h" | ||
27 | 28 | ||
28 | static bool tuner_enable = false; | 29 | static bool tuner_enable = false; |
29 | 30 | ||
@@ -37,6 +38,7 @@ bool tuner_power(bool enable) | |||
37 | imx233_enable_gpio_output(0, 29, enable); | 38 | imx233_enable_gpio_output(0, 29, enable); |
38 | imx233_set_gpio_output(0, 29, enable); | 39 | imx233_set_gpio_output(0, 29, enable); |
39 | tuner_enable = enable; | 40 | tuner_enable = enable; |
41 | //imx233_power_set_dcdc_freq(enable, HW_POWER_MISC__FREQSEL__24MHz); | ||
40 | } | 42 | } |
41 | return tuner_enable; | 43 | return tuner_enable; |
42 | } | 44 | } |
diff --git a/firmware/target/arm/imx233/system-target.h b/firmware/target/arm/imx233/system-target.h index 6a5cecaf87..a4ab64e562 100644 --- a/firmware/target/arm/imx233/system-target.h +++ b/firmware/target/arm/imx233/system-target.h | |||
@@ -24,10 +24,8 @@ | |||
24 | #include "system-arm.h" | 24 | #include "system-arm.h" |
25 | #include "mmu-arm.h" | 25 | #include "mmu-arm.h" |
26 | #include "panic.h" | 26 | #include "panic.h" |
27 | |||
28 | #include "clock-target.h" /* CPUFREQ_* are defined here */ | ||
29 | #include "clkctrl-imx233.h" | 27 | #include "clkctrl-imx233.h" |
30 | #include "power-imx233.h" | 28 | #include "clock-target.h" /* CPUFREQ_* are defined here */ |
31 | 29 | ||
32 | /* Digital control */ | 30 | /* Digital control */ |
33 | #define HW_DIGCTL_BASE 0x8001C000 | 31 | #define HW_DIGCTL_BASE 0x8001C000 |
diff --git a/firmware/target/arm/imx233/usb-imx233.c b/firmware/target/arm/imx233/usb-imx233.c index a89a2611ba..904f84b948 100644 --- a/firmware/target/arm/imx233/usb-imx233.c +++ b/firmware/target/arm/imx233/usb-imx233.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include "system.h" | 28 | #include "system.h" |
29 | #include "system-target.h" | 29 | #include "system-target.h" |
30 | #include "clkctrl-imx233.h" | 30 | #include "clkctrl-imx233.h" |
31 | 31 | #include "power-imx233.h" | |
32 | 32 | ||
33 | void usb_insert_int(void) | 33 | void usb_insert_int(void) |
34 | { | 34 | { |