summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/power-imx233.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/power-imx233.h')
-rw-r--r--firmware/target/arm/imx233/power-imx233.h21
1 files changed, 20 insertions, 1 deletions
diff --git a/firmware/target/arm/imx233/power-imx233.h b/firmware/target/arm/imx233/power-imx233.h
index e6bd02525b..d33ca20333 100644
--- a/firmware/target/arm/imx233/power-imx233.h
+++ b/firmware/target/arm/imx233/power-imx233.h
@@ -34,6 +34,7 @@
34#define BV_POWER_5VCTRL_CHARGE_4P2_ILIMIT__200mA (1 << 4) 34#define BV_POWER_5VCTRL_CHARGE_4P2_ILIMIT__200mA (1 << 4)
35#define BV_POWER_5VCTRL_CHARGE_4P2_ILIMIT__400mA (1 << 5) 35#define BV_POWER_5VCTRL_CHARGE_4P2_ILIMIT__400mA (1 << 5)
36 36
37
37#define BV_POWER_CHARGE_BATTCHRG_I__10mA (1 << 0) 38#define BV_POWER_CHARGE_BATTCHRG_I__10mA (1 << 0)
38#define BV_POWER_CHARGE_BATTCHRG_I__20mA (1 << 1) 39#define BV_POWER_CHARGE_BATTCHRG_I__20mA (1 << 1)
39#define BV_POWER_CHARGE_BATTCHRG_I__50mA (1 << 2) 40#define BV_POWER_CHARGE_BATTCHRG_I__50mA (1 << 2)
@@ -46,6 +47,7 @@
46#define BV_POWER_CHARGE_STOP_ILIMIT__50mA (1 << 2) 47#define BV_POWER_CHARGE_STOP_ILIMIT__50mA (1 << 2)
47#define BV_POWER_CHARGE_STOP_ILIMIT__100mA (1 << 3) 48#define BV_POWER_CHARGE_STOP_ILIMIT__100mA (1 << 3)
48 49
50#if IMX233_SUBTARGET >= 3700
49#define HW_POWER_VDDDCTRL__TRG_STEP 25 /* mV */ 51#define HW_POWER_VDDDCTRL__TRG_STEP 25 /* mV */
50#define HW_POWER_VDDDCTRL__TRG_MIN 800 /* mV */ 52#define HW_POWER_VDDDCTRL__TRG_MIN 800 /* mV */
51 53
@@ -57,6 +59,13 @@
57 59
58#define HW_POWER_VDDMEMCTRL__TRG_STEP 50 /* mV */ 60#define HW_POWER_VDDMEMCTRL__TRG_STEP 50 /* mV */
59#define HW_POWER_VDDMEMCTRL__TRG_MIN 1700 /* mV */ 61#define HW_POWER_VDDMEMCTRL__TRG_MIN 1700 /* mV */
62#else
63/* don't use the full available range because of the weird encodings for
64 * extreme values which are useless anyway */
65#define HW_POWER_VDDDCTRL__TRG_STEP 32 /* mV */
66#define HW_POWER_VDDDCTRL__TRG_MIN 1280 /* mV */
67#define HW_POWER_VDDDCTRL__TRG_OFF 8 /* below 8, the register value doesn't encode linearly */
68#endif
60 69
61#define BV_POWER_MISC_FREQSEL__RES 0 70#define BV_POWER_MISC_FREQSEL__RES 0
62#define BV_POWER_MISC_FREQSEL__20MHz 1 71#define BV_POWER_MISC_FREQSEL__20MHz 1
@@ -67,6 +76,7 @@
67#define BV_POWER_MISC_FREQSEL__21p6MHz 6 76#define BV_POWER_MISC_FREQSEL__21p6MHz 6
68#define BV_POWER_MISC_FREQSEL__17p28MHz 7 77#define BV_POWER_MISC_FREQSEL__17p28MHz 7
69 78
79
70void imx233_power_init(void); 80void imx233_power_init(void);
71 81
72void imx233_power_set_charge_current(unsigned current); /* in mA */ 82void imx233_power_set_charge_current(unsigned current); /* in mA */
@@ -75,10 +85,12 @@ void imx233_power_enable_batadj(bool enable);
75 85
76enum imx233_regulator_t 86enum imx233_regulator_t
77{ 87{
78 REGULATOR_VDDD, /* target, brownout, linreg, linreg offset */ 88 REGULATOR_VDDD, /* target, brownout, linreg[3700+], linreg offset[3700+] */
89#if IMX233_SUBTARGET >= 3700
79 REGULATOR_VDDA, /* target, brownout, linreg, linreg offset */ 90 REGULATOR_VDDA, /* target, brownout, linreg, linreg offset */
80 REGULATOR_VDDIO, /* target, brownout, linreg offset */ 91 REGULATOR_VDDIO, /* target, brownout, linreg offset */
81 REGULATOR_VDDMEM, /* target, linreg */ 92 REGULATOR_VDDMEM, /* target, linreg */
93#endif
82 REGULATOR_COUNT, 94 REGULATOR_COUNT,
83}; 95};
84 96
@@ -97,12 +109,19 @@ void imx233_power_get_regulator_linreg(enum imx233_regulator_t reg,
97void imx233_power_set_regulator_linreg(enum imx233_regulator_t reg, 109void imx233_power_set_regulator_linreg(enum imx233_regulator_t reg,
98 bool enabled, int linreg_offset); 110 bool enabled, int linreg_offset);
99 111
112#if IMX233_SUBTARGET >= 3700
100static inline void imx233_power_set_dcdc_freq(bool pll, unsigned freq) 113static inline void imx233_power_set_dcdc_freq(bool pll, unsigned freq)
101{ 114{
102 if(pll) 115 if(pll)
103 BF_WR(POWER_MISC, FREQSEL, freq); 116 BF_WR(POWER_MISC, FREQSEL, freq);
104 BF_WR(POWER_MISC, SEL_PLLCLK, pll); 117 BF_WR(POWER_MISC, SEL_PLLCLK, pll);
105} 118}
119#endif
120
121#if IMX233_SUBTARGET < 3700
122/* return -1 on error */
123int imx233_power_sense_die_temperature(int *min, int *max);
124#endif
106 125
107struct imx233_power_info_t 126struct imx233_power_info_t
108{ 127{