pfuze.c 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * Copyright 2014 Freescale Semiconductor, Inc.
  3. *
  4. * SPDX-License-Identifier: GPL-2.0+
  5. */
  6. #include <common.h>
  7. #include <errno.h>
  8. #include <power/pmic.h>
  9. #include <power/pfuze100_pmic.h>
  10. #ifndef CONFIG_DM_PMIC_PFUZE100
  11. int pfuze_mode_init(struct pmic *p, u32 mode)
  12. {
  13. unsigned char offset, i, switch_num;
  14. u32 id;
  15. int ret;
  16. pmic_reg_read(p, PFUZE100_DEVICEID, &id);
  17. id = id & 0xf;
  18. if (id == 0) {
  19. switch_num = 6;
  20. offset = PFUZE100_SW1CMODE;
  21. } else if (id == 1) {
  22. switch_num = 4;
  23. offset = PFUZE100_SW2MODE;
  24. } else {
  25. printf("Not supported, id=%d\n", id);
  26. return -EINVAL;
  27. }
  28. ret = pmic_reg_write(p, PFUZE100_SW1ABMODE, mode);
  29. if (ret < 0) {
  30. printf("Set SW1AB mode error!\n");
  31. return ret;
  32. }
  33. for (i = 0; i < switch_num - 1; i++) {
  34. ret = pmic_reg_write(p, offset + i * SWITCH_SIZE, mode);
  35. if (ret < 0) {
  36. printf("Set switch 0x%x mode error!\n",
  37. offset + i * SWITCH_SIZE);
  38. return ret;
  39. }
  40. }
  41. return ret;
  42. }
  43. struct pmic *pfuze_common_init(unsigned char i2cbus)
  44. {
  45. struct pmic *p;
  46. int ret;
  47. unsigned int reg;
  48. ret = power_pfuze100_init(i2cbus);
  49. if (ret)
  50. return NULL;
  51. p = pmic_get("PFUZE100");
  52. ret = pmic_probe(p);
  53. if (ret)
  54. return NULL;
  55. pmic_reg_read(p, PFUZE100_DEVICEID, &reg);
  56. printf("PMIC: PFUZE100 ID=0x%02x\n", reg);
  57. /* Set SW1AB stanby volage to 0.975V */
  58. pmic_reg_read(p, PFUZE100_SW1ABSTBY, &reg);
  59. reg &= ~SW1x_STBY_MASK;
  60. reg |= SW1x_0_975V;
  61. pmic_reg_write(p, PFUZE100_SW1ABSTBY, reg);
  62. /* Set SW1AB/VDDARM step ramp up time from 16us to 4us/25mV */
  63. pmic_reg_read(p, PFUZE100_SW1ABCONF, &reg);
  64. reg &= ~SW1xCONF_DVSSPEED_MASK;
  65. reg |= SW1xCONF_DVSSPEED_4US;
  66. pmic_reg_write(p, PFUZE100_SW1ABCONF, reg);
  67. /* Set SW1C standby voltage to 0.975V */
  68. pmic_reg_read(p, PFUZE100_SW1CSTBY, &reg);
  69. reg &= ~SW1x_STBY_MASK;
  70. reg |= SW1x_0_975V;
  71. pmic_reg_write(p, PFUZE100_SW1CSTBY, reg);
  72. /* Set SW1C/VDDSOC step ramp up time from 16us to 4us/25mV */
  73. pmic_reg_read(p, PFUZE100_SW1CCONF, &reg);
  74. reg &= ~SW1xCONF_DVSSPEED_MASK;
  75. reg |= SW1xCONF_DVSSPEED_4US;
  76. pmic_reg_write(p, PFUZE100_SW1CCONF, reg);
  77. return p;
  78. }
  79. #endif