diff options
3 files changed, 63 insertions, 5 deletions
diff --git a/firmware/target/mips/ingenic_x1000/erosqnative/power-erosqnative.c b/firmware/target/mips/ingenic_x1000/erosqnative/power-erosqnative.c index 17cdb4d645..7ad9479a96 100644 --- a/firmware/target/mips/ingenic_x1000/erosqnative/power-erosqnative.c +++ b/firmware/target/mips/ingenic_x1000/erosqnative/power-erosqnative.c | |||
@@ -62,7 +62,8 @@ void power_init(void) | |||
62 | /* FIXME: Copy paste from M3K. Probably not necessary */ | 62 | /* FIXME: Copy paste from M3K. Probably not necessary */ |
63 | axp_modify(AXP_REG_DCDCMODE, 0, 0xc0); | 63 | axp_modify(AXP_REG_DCDCMODE, 0, 0xc0); |
64 | 64 | ||
65 | /* Power on required supplies */ | 65 | /* Power on required supplies |
66 | * TODO: This should be checked, though likely all but EXTEN are needed */ | ||
66 | axp_set_enabled_supplies( | 67 | axp_set_enabled_supplies( |
67 | (1 << AXP_SUPPLY_EXTEN) | | 68 | (1 << AXP_SUPPLY_EXTEN) | |
68 | (1 << AXP_SUPPLY_DCDC1) | | 69 | (1 << AXP_SUPPLY_DCDC1) | |
@@ -81,6 +82,10 @@ void power_init(void) | |||
81 | (1 << AXP_ADC_INTERNAL_TEMP) | | 82 | (1 << AXP_ADC_INTERNAL_TEMP) | |
82 | (1 << AXP_ADC_APS_VOLTAGE)); | 83 | (1 << AXP_ADC_APS_VOLTAGE)); |
83 | 84 | ||
85 | /* Configure USB charging */ | ||
86 | axp_set_vhold_level(4400); | ||
87 | usb_charging_maxcurrent_change(100); | ||
88 | |||
84 | /* Delay to give power outputs time to stabilize. | 89 | /* Delay to give power outputs time to stabilize. |
85 | * With the power thread delay, this can apparently go as low as 50, | 90 | * With the power thread delay, this can apparently go as low as 50, |
86 | * Keeping a higher value here just to ensure the bootloader works | 91 | * Keeping a higher value here just to ensure the bootloader works |
@@ -91,7 +96,22 @@ void power_init(void) | |||
91 | #ifdef HAVE_USB_CHARGING_ENABLE | 96 | #ifdef HAVE_USB_CHARGING_ENABLE |
92 | void usb_charging_maxcurrent_change(int maxcurrent) | 97 | void usb_charging_maxcurrent_change(int maxcurrent) |
93 | { | 98 | { |
94 | axp_set_charge_current(maxcurrent); | 99 | int vbus_limit; |
100 | int charge_current; | ||
101 | |||
102 | /* Note that the charge current setting is a maximum: it will be | ||
103 | * reduced dynamically by the AXP192 so the combined load is less | ||
104 | * than the set VBUS current limit. */ | ||
105 | if(maxcurrent <= 100) { | ||
106 | vbus_limit = AXP_VBUS_LIMIT_100mA; | ||
107 | charge_current = 550; | ||
108 | } else { | ||
109 | vbus_limit = AXP_VBUS_LIMIT_500mA; | ||
110 | charge_current = 550; | ||
111 | } | ||
112 | |||
113 | axp_set_vbus_limit(vbus_limit); | ||
114 | axp_set_charge_current(charge_current); | ||
95 | } | 115 | } |
96 | #endif | 116 | #endif |
97 | 117 | ||
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/power-fiiom3k.c b/firmware/target/mips/ingenic_x1000/fiiom3k/power-fiiom3k.c index 53451ffa6c..c8498c4dbc 100644 --- a/firmware/target/mips/ingenic_x1000/fiiom3k/power-fiiom3k.c +++ b/firmware/target/mips/ingenic_x1000/fiiom3k/power-fiiom3k.c | |||
@@ -78,6 +78,10 @@ void power_init(void) | |||
78 | (1 << AXP_ADC_INTERNAL_TEMP) | | 78 | (1 << AXP_ADC_INTERNAL_TEMP) | |
79 | (1 << AXP_ADC_APS_VOLTAGE)); | 79 | (1 << AXP_ADC_APS_VOLTAGE)); |
80 | 80 | ||
81 | /* Configure USB charging */ | ||
82 | axp_set_vhold_level(4400); | ||
83 | usb_charging_maxcurrent_change(100); | ||
84 | |||
81 | /* Short delay to give power outputs time to stabilize */ | 85 | /* Short delay to give power outputs time to stabilize */ |
82 | mdelay(200); | 86 | mdelay(200); |
83 | } | 87 | } |
@@ -85,7 +89,22 @@ void power_init(void) | |||
85 | #ifdef HAVE_USB_CHARGING_ENABLE | 89 | #ifdef HAVE_USB_CHARGING_ENABLE |
86 | void usb_charging_maxcurrent_change(int maxcurrent) | 90 | void usb_charging_maxcurrent_change(int maxcurrent) |
87 | { | 91 | { |
88 | axp_set_charge_current(maxcurrent); | 92 | int vbus_limit; |
93 | int charge_current; | ||
94 | |||
95 | /* Note that the charge current setting is a maximum: it will be | ||
96 | * reduced dynamically by the AXP192 so the combined load is less | ||
97 | * than the set VBUS current limit. */ | ||
98 | if(maxcurrent <= 100) { | ||
99 | vbus_limit = AXP_VBUS_LIMIT_100mA; | ||
100 | charge_current = 550; | ||
101 | } else { | ||
102 | vbus_limit = AXP_VBUS_LIMIT_500mA; | ||
103 | charge_current = 550; | ||
104 | } | ||
105 | |||
106 | axp_set_vbus_limit(vbus_limit); | ||
107 | axp_set_charge_current(charge_current); | ||
89 | } | 108 | } |
90 | #endif | 109 | #endif |
91 | 110 | ||
diff --git a/firmware/target/mips/ingenic_x1000/shanlingq1/power-shanlingq1.c b/firmware/target/mips/ingenic_x1000/shanlingq1/power-shanlingq1.c index 65d1bc163f..9637ceef2f 100644 --- a/firmware/target/mips/ingenic_x1000/shanlingq1/power-shanlingq1.c +++ b/firmware/target/mips/ingenic_x1000/shanlingq1/power-shanlingq1.c | |||
@@ -86,7 +86,7 @@ void power_init(void) | |||
86 | (1 << AXP_SUPPLY_DCDC2) | /* LCD (1.2 V) */ | 86 | (1 << AXP_SUPPLY_DCDC2) | /* LCD (1.2 V) */ |
87 | (1 << AXP_SUPPLY_DCDC3) | /* CPU (1.8 V) */ | 87 | (1 << AXP_SUPPLY_DCDC3) | /* CPU (1.8 V) */ |
88 | (1 << AXP_SUPPLY_LDO2) | /* Touchscreen (3.3 V) */ | 88 | (1 << AXP_SUPPLY_LDO2) | /* Touchscreen (3.3 V) */ |
89 | (1 << AXP_SUPPLY_LDO3)); /* not sure (2.5 V) */ | 89 | (1 << AXP_SUPPLY_LDO3)); /* USB analog (2.5 V) */ |
90 | 90 | ||
91 | /* Enable required ADCs */ | 91 | /* Enable required ADCs */ |
92 | axp_set_enabled_adcs( | 92 | axp_set_enabled_adcs( |
@@ -98,6 +98,10 @@ void power_init(void) | |||
98 | (1 << AXP_ADC_INTERNAL_TEMP) | | 98 | (1 << AXP_ADC_INTERNAL_TEMP) | |
99 | (1 << AXP_ADC_APS_VOLTAGE)); | 99 | (1 << AXP_ADC_APS_VOLTAGE)); |
100 | 100 | ||
101 | /* Configure USB charging */ | ||
102 | axp_set_vhold_level(4400); | ||
103 | usb_charging_maxcurrent_change(100); | ||
104 | |||
101 | /* Delay to give power output time to stabilize */ | 105 | /* Delay to give power output time to stabilize */ |
102 | mdelay(20); | 106 | mdelay(20); |
103 | } | 107 | } |
@@ -105,7 +109,22 @@ void power_init(void) | |||
105 | #ifdef HAVE_USB_CHARGING_ENABLE | 109 | #ifdef HAVE_USB_CHARGING_ENABLE |
106 | void usb_charging_maxcurrent_change(int maxcurrent) | 110 | void usb_charging_maxcurrent_change(int maxcurrent) |
107 | { | 111 | { |
108 | axp_set_charge_current(maxcurrent); | 112 | int vbus_limit; |
113 | int charge_current; | ||
114 | |||
115 | /* Note that the charge current setting is a maximum: it will be | ||
116 | * reduced dynamically by the AXP192 so the combined load is less | ||
117 | * than the set VBUS current limit. */ | ||
118 | if(maxcurrent <= 100) { | ||
119 | vbus_limit = AXP_VBUS_LIMIT_100mA; | ||
120 | charge_current = 550; | ||
121 | } else { | ||
122 | vbus_limit = AXP_VBUS_LIMIT_500mA; | ||
123 | charge_current = 550; | ||
124 | } | ||
125 | |||
126 | axp_set_vbus_limit(vbus_limit); | ||
127 | axp_set_charge_current(charge_current); | ||
109 | } | 128 | } |
110 | #endif | 129 | #endif |
111 | 130 | ||