| .. | .. |
|---|
| 152 | 152 | { RK817_PMIC_SYS_CFG1, 0x20, 0x70}, |
|---|
| 153 | 153 | /* Set pmic_sleep as none function */ |
|---|
| 154 | 154 | { RK817_PMIC_SYS_CFG3, 0x00, 0x18 }, |
|---|
| 155 | | - |
|---|
| 155 | + /* GATE pin function: gate function */ |
|---|
| 156 | + { RK817_GPIO_INT_CFG, 0x00, 0x20 }, |
|---|
| 156 | 157 | #ifdef CONFIG_DM_CHARGE_DISPLAY |
|---|
| 157 | 158 | /* Set pmic_int active low */ |
|---|
| 158 | 159 | { RK817_GPIO_INT_CFG, 0x00, 0x02 }, |
|---|
| .. | .. |
|---|
| 408 | 409 | val = dev_read_u32_default(dev, "not-save-power-en", 0); |
|---|
| 409 | 410 | rk8xx->not_save_power_en = val; |
|---|
| 410 | 411 | |
|---|
| 412 | + val = dev_read_bool(dev, "vsys-off-shutdown"); |
|---|
| 413 | + rk8xx->sys_can_sd = val; |
|---|
| 414 | + |
|---|
| 411 | 415 | return 0; |
|---|
| 412 | 416 | } |
|---|
| 413 | 417 | |
|---|
| .. | .. |
|---|
| 534 | 538 | break; |
|---|
| 535 | 539 | case RK809_ID: |
|---|
| 536 | 540 | case RK817_ID: |
|---|
| 541 | + if (device_is_compatible(dev, "rockchip,rk809") && (priv->variant != RK809_ID)) { |
|---|
| 542 | + dev_err(dev, "the dts is RK809, the hardware is RK817\n"); |
|---|
| 543 | + run_command("download", 0); |
|---|
| 544 | + } |
|---|
| 545 | + |
|---|
| 546 | + if (device_is_compatible(dev, "rockchip,rk817") && (priv->variant != RK817_ID)) { |
|---|
| 547 | + dev_err(dev, "the dts is RK817, the hardware is RK809\n"); |
|---|
| 548 | + run_command("download", 0); |
|---|
| 549 | + } |
|---|
| 550 | + |
|---|
| 537 | 551 | on_source = RK817_ON_SOURCE; |
|---|
| 538 | 552 | off_source = RK817_OFF_SOURCE; |
|---|
| 539 | 553 | pwron_key = RK817_PWRON_KEY; |
|---|
| .. | .. |
|---|
| 541 | 555 | lp_act_msk = RK8XX_LP_ACTION_MSK; |
|---|
| 542 | 556 | init_data = rk817_init_reg; |
|---|
| 543 | 557 | init_data_num = ARRAY_SIZE(rk817_init_reg); |
|---|
| 558 | + |
|---|
| 559 | + /* whether the system voltage can be shutdown in PWR_off mode */ |
|---|
| 560 | + if (priv->sys_can_sd) { |
|---|
| 561 | + ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1); |
|---|
| 562 | + if (ret) |
|---|
| 563 | + return ret; |
|---|
| 564 | + value |= 0x80; |
|---|
| 565 | + ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1); |
|---|
| 566 | + if (ret) |
|---|
| 567 | + return ret; |
|---|
| 568 | + } else { |
|---|
| 569 | + ret = rk8xx_read(dev, RK817_PMIC_CHRG_TERM, &value, 1); |
|---|
| 570 | + if (ret) |
|---|
| 571 | + return ret; |
|---|
| 572 | + value &= 0x7f; |
|---|
| 573 | + ret = rk8xx_write(dev, RK817_PMIC_CHRG_TERM, &value, 1); |
|---|
| 574 | + if (ret) |
|---|
| 575 | + return ret; |
|---|
| 576 | + } |
|---|
| 577 | + |
|---|
| 544 | 578 | /* judge whether save the PMIC_POWER_EN register */ |
|---|
| 545 | | - if (priv->not_save_power_en) |
|---|
| 546 | | - break; |
|---|
| 579 | + if (!priv->not_save_power_en) { |
|---|
| 580 | + ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1); |
|---|
| 581 | + if (ret) |
|---|
| 582 | + return ret; |
|---|
| 583 | + ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1); |
|---|
| 584 | + if (ret) |
|---|
| 585 | + return ret; |
|---|
| 586 | + ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1); |
|---|
| 587 | + if (ret) |
|---|
| 588 | + return ret; |
|---|
| 589 | + ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1); |
|---|
| 590 | + if (ret) |
|---|
| 591 | + return ret; |
|---|
| 547 | 592 | |
|---|
| 548 | | - ret = rk8xx_read(dev, RK817_POWER_EN0, &power_en0, 1); |
|---|
| 549 | | - if (ret) |
|---|
| 550 | | - return ret; |
|---|
| 551 | | - ret = rk8xx_read(dev, RK817_POWER_EN1, &power_en1, 1); |
|---|
| 552 | | - if (ret) |
|---|
| 553 | | - return ret; |
|---|
| 554 | | - ret = rk8xx_read(dev, RK817_POWER_EN2, &power_en2, 1); |
|---|
| 555 | | - if (ret) |
|---|
| 556 | | - return ret; |
|---|
| 557 | | - ret = rk8xx_read(dev, RK817_POWER_EN3, &power_en3, 1); |
|---|
| 558 | | - if (ret) |
|---|
| 559 | | - return ret; |
|---|
| 560 | | - |
|---|
| 561 | | - value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4); |
|---|
| 562 | | - rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1); |
|---|
| 563 | | - value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4); |
|---|
| 564 | | - rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1); |
|---|
| 593 | + value = (power_en0 & 0x0f) | ((power_en1 & 0x0f) << 4); |
|---|
| 594 | + rk8xx_write(dev, RK817_POWER_EN_SAVE0, &value, 1); |
|---|
| 595 | + value = (power_en2 & 0x0f) | ((power_en3 & 0x0f) << 4); |
|---|
| 596 | + rk8xx_write(dev, RK817_POWER_EN_SAVE1, &value, 1); |
|---|
| 597 | + } |
|---|
| 565 | 598 | break; |
|---|
| 566 | 599 | default: |
|---|
| 567 | 600 | printf("Unknown PMIC: RK%x!!\n", priv->variant); |
|---|