Chinesische Quelle V1.0.0; Kernelbereich 4.4 / 4.19. Der technische Vorwortumfang umfasst Modulkonzepte, Funktionen, Konfiguration und Fehlersuche. Kein englisches PDF liegt vor: Alle vier Sprachen basieren vollständig auf der chinesischen Quelle und nutzen vorhandene technische Originalbilder daraus. Nur ArmSoM-Plattformreferenz: PMIC, SoC, SDK/BSP, Kernel, Versorgungsbaum und Akkuspezifikation der konkreten Platine prüfen. Keine Hardwaretests oder pauschale Platinenunterstützung.
Code, Parameter und Logs sind Herstellerbeispiele, keine ArmSoM-Messungen. Änderungen an Versorgung, Ladestrom, Spannung oder Temperaturregelung können Abschaltung, Schäden oder Akkurisiken verursachen. Beispiele nicht ungeprüft übernehmen; thermischen Schutz im Normalbetrieb niemals deaktivieren. Quellenwidersprüche bleiben ohne erratene Konstanten erhalten; siehe Prüfnotizen. Quellenpfade rl817, Verzeichnis rockchi, Spannungsstufe 0.737.5, Funktionsanzahl und ramp-delay prüfen; keine spekulativen Korrekturen.
1. Grundlagen
1.1 Übersicht
RK817 ist ein leistungsfähiger PMIC mit 4 Hochstrom-DCDCs, 9 LDOs, 1 BOOST, 1 SWITCH, 1 RTC, 1 leistungsfähigem CODEC, einstellbarer Einschaltsequenz, Schaltladung, intelligenter Versorgungspfadverwaltung und Coulomb-Zähler. Systemversorgungen sind meist DCDC oder LDO; ihre allgemeinen Eigenschaften folgen (Details in weiterer Literatur).
-
DCDC: hoher Wirkungsgrad bei großer Ein-/Ausgangsspannungsdifferenz, jedoch relativ hohe Welligkeit und Kosten; daher für große Spannungsabfälle und hohe Lastströme. Übliche Modi sind PWM mit gutem Welligkeits-/Transientenverhalten, aber geringerem Wirkungsgrad, und PFM mit höherem Wirkungsgrad, jedoch geringerer Belastbarkeit.
-
LDO: geringer Wirkungsgrad bei großer Spannungsdifferenz, aber niedrige Kosten. Zur Verbesserung des Wirkungsgrads wird das System optimiert: Ein LDO mit 1.1V Ausgang kann beispielsweise vom DCDC VCCIO_3.3V gespeist werden. Soweit die Schaltung dies erlaubt, den LDO an einen DCDC-Ausgang anschließen und die Einschaltreihenfolge beachten.
1.2 Funktionen
Aus Anwendersicht werden die RK817-Funktionen als vier Bereiche beschrieben:
-
regulator: steuert den Zustand der einzelnen DCDC- und LDO-Versorgungen.
-
rtc: Zeitführung, Zeitsteuerung und verwandte Funktionen.
-
gpio: allgemeine GPIO-Funktion mit pinctrl-Unterstützung.
-
pwrkey: erkennt Drücken/Loslassen der Einschalttaste und spart einen AP-GPIO.
-
clk: zwei 32.768KHZ-Taktausgänge; einer ist ständig aktiv und nicht steuerbar, der andere wird per Software gesteuert.
-
codec: Abtastrate bis 192KHZ, 16bit/32bit, DAC und ADC PDM. Hier nicht behandelt; die Quelle kündigt ein separates Dokument an.
-
Lade- und Ladezustandsfunktionen werden hier nicht behandelt; die Quelle kündigt ein separates Dokument an.
1.3 Pinfunktionen

Original des chinesischen PDFs · p6
Besonders auf SLEEP und INT achten; der sleep-Pin bietet zusätzlich erweiterte GPIO-Funktionalität.

Original des chinesischen PDFs · p7

Original des chinesischen PDFs · p7

Original des chinesischen PDFs · p8

Original des chinesischen PDFs · p8
Bearbeitbare Abschrift der Originaltabellen oben.
| Pinnummer | Name | Beschreibung |
|---|---|---|
| 1 | SCL | I2C-Takteingang |
| 2 | SDA | I2C-Datenein-/ausgang (Open-Drain-Ausgang) |
| 3 | LDO7 | LDO7-Ausgang |
| 4 | VCC7 | Versorgung für LDO7/8/9 |
| 5 | LDO8 | LDO8-Ausgang |
| 6 | LDO9 | LDO9-Ausgang |
| 7 | INT | Interruptanforderung, Open Drain |
| 8 | FB2 | Ausgangsspannungsrückführung von BUCK2 |
| 9 | SW2 | Schaltknoten von BUCK2 |
| 10 | VCC2 | Versorgung für BUCK2 |
| 11 | VCC1 | Versorgung für BUCK1 |
| 12 | SW1 | Schaltknoten von BUCK1 |
| 13 | FB1 | Ausgangsspannungsrückführung von BUCK1 |
| 14 | LRCLK | I2S-Rahmentakt |
| 15 | BCLK | I2S-Bittakt |
| 16 | MCLK | I2S-Haupttakteingang |
| 17 | SDI | I2S-DAC-Eingangsdaten |
| 18 | SDO/PDMDATA | I2S-ADC-Ausgangsdaten/PDM-Daten für DSADC |
| 19 | PDMCLK | PDM CLK für DSADC-Ausgang |
| 20 | LDO3 | LDO3-Ausgang |
| 21 | LDO2 | LDO2-Ausgang |
| 22 | VCC5 | Versorgung für LDO1/2/3 |
| 23 | LDO1 | LDO1-Ausgang |
| 24 | VCC3 | Versorgung für BUCK3 |
| 25 | SW3 | Schaltknoten von BUCK3 |
| 26 | VBUCK3 | BUCK3-Ausgang |
| 27 | FB3 | Ausgangsspannungsrückführung von BUCK3 |
| 28 | LDO4 | LDO4-Ausgang; interne Versorgung für I2S Pin14–Pin19 |
| 29 | LDO5 | LDO5-Ausgang |
| 30 | VCC6 | Versorgung für LDO4/5/6 |
| 31 | LDO6 | LDO6-Ausgang |
| 32 | SPKP_OUT | Positiver Lautsprechertreiberausgang |
| 33 | VCC_SPK_HP | Versorgung für Lautsprecher und Kopfhörer |
| 34 | SPKN_OUT | Negativer Lautsprechertreiberausgang |
| 35 | VCC_CPVSS | Negative Kopfhörerversorgung |
| 36 | CPN | Negativer Schaltknoten der Ladungspumpe |
| 37 | CPP | Positiver Schaltknoten der Ladungspumpe |
| 38 | VCC_CPVDD | Positive Kopfhörerversorgung |
| 39 | HPL_OUT | Linker Kopfhörerkanalausgang |
| 40 | HP_SNS | Kopfhörer-Referenzmasse |
| 41 | HPR_OUT | Rechter Kopfhörerkanalausgang |
| 42 | MICIN | Negativer Mikrofoneingang |
| 43 | MICIP | Positiver Mikrofoneingang |
| 44 | VCC_1P8A | Versorgung der internen 1.8V-Analogschaltung |
| 45 | VCC_RTC | Versorgungsfilter |
| 46 | VREF | Interne Referenzspannung |
| 47 | GNDREF | Referenzmasse |
| 48 | VCC_1P8D | Versorgung der internen 1.8V-Digitalschaltung |
| 49 | SLEEP | Steuereingang für Schlafmodus |
| 50 | XIN | Eingang des 32.768KHz-Quarzoszillators |
| 51 | XOUT | Ausgang des 32.768KHz-Quarzoszillators |
| 52 | PWRON | Einschalttasteneingang, aktiv Low; interner 17k-Pull-up nach VCC_RTC |
| 53 | SW5 | Schaltknoten von Ladegerät/Boost-Wandler |
| 54 | MIDU/BOOST | USB-Versorgungsmittelpunkt/Boost-Ausgang |
| 55 | USB/OTG | USB-Versorgung/OTG-Ausgang |
| 56 | BAT | Batteriepluspol |
| 57 | BAT | Batteriepluspol |
| 58 | SYS | DC-DC-Reglerausgang für Systemlast und Akkuladung |
| 59 | SYS | DC-DC-Reglerausgang für Systemlast und Akkuladung |
| 60 | GATE/GPIO | Externen PMOS zur Widerstandsreduzierung steuern oder GPIO per Register |
| 61 | TS/GPIO | Thermistor nach Masse; bei ADC-Auswahl analoger Eingang des internen ADC, alternativ GPIO per Register |
| 62 | SNSP | Positiver Messanschluss für Batterielade-/entladestrom |
| 63 | SNSN | Negativer Messanschluss für Batterielade-/entladestrom |
| 64 | FB4 | Ausgangsspannungsrückführung von BUCK4 |
| 65 | SW4 | Schaltknoten von BUCK4 |
| 66 | VCC4 | Versorgung für BUCK4 |
| 67 | RESETB | Reset nach Einschalten, aktiv Low |
| 68 | CLK32K | 32.768KHz-Taktausgang, Open Drain |
| Exposed pad | Exposed ground | Masse |
1.4 Wichtige Konzepte
I2C-Adresse: 7-Bit-Slaveadresse 0x20. Der PMIC besitzt drei Betriebsarten.
-
PMIC normal: Im normalen Systembetrieb befindet sich der PMIC im normal-Modus; pmic_sleep ist Low.
-
PMIC sleep reduziert den Eigenverbrauch beim System-Suspend. Produktspezifisch werden einzelne Spannungen gesenkt oder Ausgänge abgeschaltet. Im Standby konfiguriert der AP pmic_sleep über I2C für sleep und setzt ihn auf High. Beim SoC-Aufwachen wird der Pin wieder Low und der PMIC verlässt sleep.
-
PMIC shutdown: Der PMIC schaltet das ganze System ab. Der AP konfiguriert pmic_sleep über I2C für shutdown und setzt den Pin auf High. Normalerweise ist pmic_sleep für normal Low; High schaltet auf sleep oder shutdown. Bei RK817 ist der Pin gemultiplext; die Funktion wird über pinctrl gewählt:
-
SLEEP: SLEEP-Modus umschalten.
-
Abschalten: POWER DOWN.
-
Zurücksetzen: RESET.
-
Leerlauf: ohne Wirkung.
pmic_int: normalerweise High, beim Interrupt bis zur Bearbeitung Low.
pmic_pwron: Hardware-Einschalttaste hier anschließen; der Treiber erkennt Drücken/Loslassen.
DCDC-Modi: PWM (force PWM) und PFM; AUTO schaltet dynamisch. Unterstützt werden PWM und AUTO PWM/PFM. AUTO ist effizienter, hat aber schlechteres Ripple-/Transientenverhalten. Für Stabilität im Betrieb PWM, im Suspend AUTO PWM/PFM.
DCDC3-Spannung: nicht per Register veränderbar; externe Teilerwiderstände bestimmen sie. Für andere Spannung die Hardware ändern. Rockchip nutzt meist VCC_DDR.
DCDC-/LDO-Betriebsspannungsbereiche:
- Nicht kontinuierliche DCDC-Spannungsbereiche:
| Spannungsbereich (V) | Schritt (mV) | Spannungsstufen (V) |
|---|---|---|
| 0.7125 ~ 1.5 | 12.5 | 0.7125、0.725、0.737.5、 ……、1.5 |
| 1.6 ~ 2.4 | 100 | 1.6、1.7、1.8、1.9、……、2.4 |
- Kontinuierliche LDO-Spannungen:
| Spannungsbereich (V) | Schritt (mV) | Spannungsstufen (V) |
|---|---|---|
| 0.6 ~ 3.4 | 25 | 0.6、0.625、0.65、0.675、…… 、3.4 |
1.5 Einschaltbedingungen und -sequenz
- Einschaltbedingungen: Eine der folgenden Bedingungen reicht aus:
- EN wechselt von Low auf High.
- EN bleibt High und ein RTC-Alarminterrupt tritt auf.
- EN bleibt High und die PWRON-Taste wird gedrückt.
- EN bleibt High und ein Ladegerät wird eingesteckt.
- Einschaltsequenz: SoC-Plattformen können unterschiedliche Reihenfolgen der Versorgungsschienen verlangen. Die Sequenzen sind unten dargestellt; Einzelheiten dem aktuellen passenden Datenblatt entnehmen.

Original des chinesischen PDFs · p10
| Ausgang | Bereich | Max. Strom | RK817-1 Standardspannung | RK817-1 Sequenz |
|---|---|---|---|---|
| BUCK1 | 0.5V–2.4V | 2.5A | 1.1V | 1 |
| BUCK2 | 0.5V–2.4V | 2.5A | 1.1V | 1 |
| BUCK3 | X (externer Teiler) / 0.5V–2.4V (interner Teiler) | 1.5A | x | 3 |
| BUCK4 | 0.5V–3.4V | 1.5A | 3.0V | 4 |
| BOOST | 4.7V–5.4V | 1.5A | 5.0V | OFF |
| LDO1 | 0.6V–3.4V | 400mA | 1.0V | 1 |
| LDO2 | 0.6V–3.4V | 400mA | 1.8V | 2 |
| LDO3 | 0.6V–3.4V | 100mA | 1.0V | 1 |
| LDO4 | 0.6V–3.4V | 400mA | 3.0V | 4 |
| LDO5 | 0.6V–3.4V | 400mA | 3.0V | 4 |
| LDO6 | 0.6V–3.4V | 400mA | 3.0V | 4 |
| LDO7 | 0.6V–3.4V | 400mA | 2.8V | OFF |
| LDO8 | 0.6V–3.4V | 400mA | 1.8V | OFF |
| LDO9 | 0.6V–3.4V | 400mA | 1.5V | OFF |
| OTG | = BOOST | 1.5A | 5.0V | OFF |
2. Konfiguration
2.1 Treiber und menuconfig
Kernel-4.4-Konfiguration. RK817-Treiberdateien:
drivers/mfd/rk808.c
drivers/input/misc/rk8xx-pwrkey.c
drivers/rtc/rtc-rk808.c
drivers/gpio/gpio-rk8xx.c
drivers/regulator/rk808-regulator.c
drivers/clk/clk-rk808.c
drivers/power/rl817_battery.c
drivers/power/rl817_charger.c
sound/soc/codecs/rl817_codec.c
RK817-DTS-Referenzdatei:
arch/arm64/boot/dts/rockchi/rk3326-evb-lp3-v10.dtsi
Zugehörige menuconfig-Symbole:
CONFIG_MFD_RK808
CONFIG_RTC_RK808
CONFIG_GPIO_RK8XX
CONFIG_REGULATOR_RK818
CONFIG_INPUT_RK8XX_PWRKEY
CONFIG_COMMON_CLK_RK808
CONFIG_BATTERY_RK817
CONFIG_CHARGER_RK817
SND_SOC_RK817
Kernel-4.19-Konfiguration. RK817-Treiberdateien:
drivers/mfd/rk808.c
drivers/input/misc/rk805-pwrkey.c // 跟4.4内核不同
drivers/rtc/rtc-rk808.c
drivers/pinctrl/pinctrl-rk805.c // 跟4.4内核不同
drivers/regulator/rk808-regulator.c // 跟4.4内核不同
drivers/clk/clk-rk808.c
drivers/power/rl817_battery.c
drivers/power/rl817_charger.c
sound/soc/codecs/rl817_codec.c
RK817-DTS-Referenzdatei:
arch/arm64/boot/dts/rockchi/rk3326-evb-lp3-v10.dtsi
Zugehörige menuconfig-Symbole:
CONFIG_MFD_RK808
CONFIG_RTC_RK808
CONFIG_PINCTRL_RK805
CONFIG_REGULATOR_RK808
CONFIG_INPUT_RK805_PWRKEY
CONFIG_COMMON_CLK_RK808
CONFIG_BATTERY_RK817
CONFIG_CHARGER_RK817
SND_SOC_RK817
2.2 DTS-Konfiguration
Kernel-4.4-DTS: i2c-Anbindung, Haupteigenschaften, rtc, pwrkey, gpio und regulator.
&pinctrl {
pmic {
pmic_int: pmic_int {
rockchip,pins =
<0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>;
};
soc_slppin_gpio: soc_slppin_gpio {
rockchip,pins =
<0 RK_PA4 RK_FUNC_GPIO &pcfg_output_low>;
};
soc_slppin_slp: soc_slppin_slp {
rockchip,pins =
<0 RK_PA4 RK_FUNC_1 &pcfg_pull_none>;
};
soc_slppin_rst: soc_slppin_rst {
rockchip,pins =
<0 RK_PA4 RK_FUNC_2 &pcfg_pull_none>;
};
};
};
&i2c1 {
status = "okay";
rk817: pmic@20 {
compatible = "rockchip,rk817";
reg = <0x20>;
interrupt-parent = <&gpio0>;
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default", "pmic-sleep",
"pmic-power-off", "pmic-reset";
pinctrl-0 = <&pmic_int>;
pinctrl-1 = <&soc_slppin_slp>, <&rk817_slppin_slp>;
pinctrl-2 = <&soc_slppin_gpio>, <&rk817_slppin_pwrdn>;
pinctrl-3 = <&soc_slppin_rst>, <&rk817_slppin_rst>;
rockchip,system-power-controller;
wakeup-source;
#clock-cells = <1>;
clock-output-names = "rk808-clkout1", "rk808-clkout2";
//fb-inner-reg-idxs = <2>;
/* 1: rst regs (default in codes), 0: rst the pmic */
pmic-reset-func = <1>;
vcc1-supply = <&vccsys>;
vcc2-supply = <&vccsys>;
vcc3-supply = <&vccsys>;
vcc4-supply = <&vccsys>;
vcc5-supply = <&vccsys>;
vcc6-supply = <&vccsys>;
vcc7-supply = <&vcc_3v0>;
vcc8-supply = <&vccsys>;
vcc9-supply = <&dcdc_boost>;
pwrkey {
status = "okay";
};
pinctrl_rk8xx: pinctrl_rk8xx {
gpio-controller;
#gpio-cells = <2>;
rk817_ts_gpio1: rk817_ts_gpio1 {
pins = "gpio_ts";
function = "pin_fun1";
/* output-low; */
/* input-enable; */
};
rk817_gt_gpio2: rk817_gt_gpio2 {
pins = "gpio_gt";
function = "pin_fun1";
};
rk817_pin_ts: rk817_pin_ts {
pins = "gpio_ts";
function = "pin_fun0";
};
rk817_pin_gt: rk817_pin_gt {
pins = "gpio_gt";
function = "pin_fun0";
};
rk817_slppin_null: rk817_slppin_null {
pins = "gpio_slp";
function = "pin_fun0";
};
rk817_slppin_slp: rk817_slppin_slp {
pins = "gpio_slp";
function = "pin_fun1";
};
rk817_slppin_pwrdn: rk817_slppin_pwrdn {
pins = "gpio_slp";
function = "pin_fun2";
};
rk817_slppin_rst: rk817_slppin_rst {
pins = "gpio_slp";
function = "pin_fun3";
};
};
regulators {
vdd_logic: DCDC_REG1 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
regulator-initial-mode = <0x2>;
regulator-name = "vdd_logic";
regulator-state-mem {
regulator-on-in-suspend;
regulator-suspend-microvolt = <950000>;
};
};
vdd_arm: DCDC_REG2 {
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <6001>;
regulator-initial-mode = <0x2>;
regulator-name = "vdd_arm";
regulator-state-mem {
regulator-off-in-suspend;
regulator-suspend-microvolt = <950000>;
};
};
vcc_ddr: RK817_DCDC3@2 {
.................
};
.............................
};
battery {
compatible = "rk817,battery";
ocv_table = <3500 3625 3685 3697 3718 3735 3748
3760 3774 3788 3802 3816 3834 3853
3877 3908 3946 3975 4018 4071 4106>;
design_capacity = <2500>;
design_qmax = <2750>;
bat_res = <100>;
sleep_enter_current = <300>;
sleep_exit_current = <300>;
sleep_filter_current = <100>;
power_off_thresd = <3500>;
zero_algorithm_vol = <3850>;
max_soc_offset = <60>;
monitor_sec = <5>;
sample_res = <10>;
virtual_power = <1>;
};
charger {
compatible = "rk817,charger";
min_input_voltage = <4500>;
max_input_current = <1500>;
max_chrg_current = <2000>;
max_chrg_voltage = <4200>;
chrg_term_mode = <0>;
chrg_finish_cur = <300>;
virtual_power = <0>;
dc_det_adc = <0>;
extcon = <&u2phy>;
};
rk817_codec: codec {
#sound-dai-cells = <0>;
compatible = "rockchip,rk817-codec";
clocks = <&cru SCLK_I2S1_OUT>;
clock-names = "mclk";
pinctrl-names = "default";
pinctrl-0 = <&i2s1_2ch_mclk>;
hp-volume = <20>;
spk-volume = <3>;
status = "okay";
};
};
};
-
i2c-Anbindung: Den vollständigen RK817-Knoten unter dem zugehörigen i2c-Knoten platzieren und
status = "okay";setzen. -
Haupteigenschaften — Folgendes nicht ändern:
compatible = "rockchip,rk817";
reg = <0x20>;
rockchip,system-power-controller;
wakeup-source;
gpio-controller;
#gpio-cells = <2>;
Konfigurierbar nach pinctrl-Regeln:
- interrupt-parent: GPIO-Controller von pmic_int.
- interrupts: Pinindex und Polarität von pmic_int auf diesem Controller.
- pinctrl-names: nicht ändern, fest “default”.
- pinctrl-0: Verweis auf den in pinctrl definierten pmic_int-Pin.
-
rtc, pwrkey und gpio: Sind sie in menuconfig gewählt, werden aber nicht benötigt, die entsprechenden DTS-Knoten mit
status = "disabled"hinzufügen. Die Treiber werden nicht geladen; dadurch entstehende Bootfehler können hier ignoriert werden. Zum Aktivieren die Knoten entfernen oderstatus = "okay"setzen. -
regulator
-
regulator-compatible: Für die Treiberzuordnung erforderlicher Name; Änderungen verhindern das Laden. -
regulator-name: Versorgungsname; möglichst wie im Schaltplan. regulator_get verwendet diesen Namen. -
regulator-init-microvolt: Initialspannung in U-Boot; im Kernel unwirksam. -
regulator-min-microvolt: Kleinste einstellbare Betriebsspannung. -
regulator-max-microvolt: Größte einstellbare Betriebsspannung. -
regulator-initial-mode: DCDC-Betriebsmodus, normalerweise 1: 1 = force PWM; 2 = auto PWM/PFM. -
regulator-mode: DCDC-Suspend-Modus, normalerweise 2: 1 = force PWM; 2 = auto PWM/PFM. -
regulator-initial-state: Suspend-Zustand; muss 3 sein. -
regulator-boot-on: Aktiviert die Schiene bei der Regulator-Registrierung. -
regulator-always-on: Verbietet Abschalten im Betrieb und aktiviert die Schiene bei der Registrierung. -
regulator-ramp-delay: DCDC-Spannungsanstiegszeit; fester Quellenwert 12500. -
regulator-on-in-suspend: Im Suspend eingeschaltet lassen; zum Abschalten durch regulator-off-in-suspend ersetzen. -
regulator-suspend-microvolt: Standby-Spannung bei weiterhin eingeschalteter Schiene.
- power off: RK817 lässt sich direkt über ein I/O-Signal ausschalten. Der Kernel registriert pm_shutdown_prepare_fn zur Vorbereitung, insbesondere RTC-Interrupts deaktivieren und IOMUX spezieller Pins konfigurieren. Laut Quelle erfolgt das eigentliche Abschalten „in PCIE“, indem pm_power_off direkt das I/O ansteuert.
static int rk817_shutdown_prepare(struct rk808 *rk808)
{
int ret;
/* close rtc int when power off */
regmap_update_bits(rk808->regmap,
RK817_INT_STS_MSK_REG1,
(0x3 << 5), (0x3 << 5));
regmap_update_bits(rk808->regmap,
RK817_RTC_INT_REG,
(0x3 << 2), (0x0 << 2));
if (rk808->pins && rk808->pins->p && rk808->pins->power_off) {
ret = regmap_update_bits(rk808->regmap,
RK817_SYS_CFG(3),
RK817_SLPPIN_FUNC_MSK,
SLPPIN_NULL_FUN);
if (ret) {
pr_err("shutdown: config SLPPIN_NULL_FUN error!\n");
return 0;
}
ret = regmap_update_bits(rk808->regmap,
RK817_SYS_CFG(3),
RK817_SLPPOL_MSK,
RK817_SLPPOL_H);
if (ret) {
pr_err("shutdown: config RK817_SLPPOL_H error!\n");
return 0;
}
ret = pinctrl_select_state(rk808->pins->p,
rk808->pins->power_off);
if (ret)
pr_info("%s:failed to activate pwroff state\n",
__func__);
else
return ret;
}
/* pmic sleep shutdown function */
ret = regmap_update_bits(rk808->regmap,
RK817_SYS_CFG(3),
RK817_SLPPIN_FUNC_MSK, SLPPIN_DN_FUN);
return ret;
}
- clk: Ein Knoten verwendet einen RK817-Takt über folgenden Verweis:
clocks = <&rk817 1>;
Erstes Argument: &rk817, fest. Zweites: Taktindex, nur 0 oder 1; 0 = rk817-clkout1, 1 = rk817-clkout2.
Kernel-4.19-DTS-Konfiguration
Siehe Kernel-4.4-DTS. Unterschied: Kernel 4.19 benötigt keinen gpio-Unterknoten mehr; andere Module referenzieren RK817-Pins weiterhin mit gpios = <&rk817 0 GPIO_ACTIVE_LOW>;.
2.3 Funktionsschnittstellen
Die folgenden Schnittstellen decken übliche Regulator-Funktionen ab: Ein-/Ausschalten sowie Spannung setzen und lesen.
- Regulator anfordern:
struct regulator *regulator_get(struct device *dev, const char *id)
Für dev standardmäßig NULL verwenden; id entspricht regulator-name in DTS.
- Freigeben regulator:
void regulator_put(struct regulator *regulator)
- Einschalten regulator:
int regulator_enable(struct regulator *regulator)
- Ausschalten regulator:
int regulator_disable(struct regulator *regulator)
- Spannung lesen regulator:
int regulator_get_voltage(struct regulator *regulator)
- Regulator-Spannung setzen:
int regulator_set_voltage(struct regulator *regulator, int min_uV, int max_uV)
Der Aufrufer muss min_uV = max_uV sicherstellen.
- Beispiel
struct regulator *rdev_logic;
rdev_logic = regulator_get(NULL, "vdd_logic"); // 获取vdd_logic
regulator_enable(rdev_logic); // 使能vdd_logic
regulator_set_voltage(rdev_logic, 1100000, 1100000); // 设置电压1.1v
regulator_disable(rdev_logic); // 关闭vdd_logic
regulator_put(rdev_logic); // 释放vdd_logic
Kernel 4.4 und 4.19 stellen außerdem Regulator-Schnittstellen mit devm_-Präfix zur Verwaltung angeforderter Ressourcen bereit.
3. Debug
3.1 Kernel
Das Befehlsformat entspricht Kernel 3.10; nur der Pfad unterscheidet sich. Kernel 4.4 verwendet /sys/rk8xx/rk8xx_dbg.
3.2 Kernel
Siehe die Befehle für Kernel 4.4.
