summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2012-01-28 00:43:04 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2012-02-01 15:02:22 +0100
commit289440605aeda05b0722c64f8798906dcd0af41a (patch)
tree39cb9c309c1134e7c10114b5effdd2a1de22b4e6 /firmware/target
parentc18a4e631690250024031be1b306e9003b2300ad (diff)
downloadrockbox-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')
-rw-r--r--firmware/target/arm/imx233/power-imx233.c5
-rw-r--r--firmware/target/arm/imx233/power-imx233.h34
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/audio-fuzeplus.c20
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c1
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/power-fuzeplus.c2
-rw-r--r--firmware/target/arm/imx233/system-target.h4
-rw-r--r--firmware/target/arm/imx233/usb-imx233.c2
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
29struct current_step_bit_t 30struct 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
104void power_off(void) 109void 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 */
148void imx233_power_set_stop_current(unsigned current); /* in mA */ 171void imx233_power_set_stop_current(unsigned current); /* in mA */
149void imx233_power_enable_batadj(bool enable); 172void imx233_power_enable_batadj(bool enable);
150 173
174static 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
151struct imx233_power_info_t 185struct 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
28static int input_source = AUDIO_SRC_PLAYBACK;
29static unsigned input_flags = 0;
30static int output_source = AUDIO_SRC_PLAYBACK;
31
32static 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
28void audio_input_mux(int source, unsigned flags) 40void 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
34void audio_set_output_source(int source) 49void 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
28static bool tuner_enable = false; 29static 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
33void usb_insert_int(void) 33void usb_insert_int(void)
34{ 34{