.. | .. |
---|
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); |
---|