From 0611e73bce205b0586c6e5fbb01ffafc01174805 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Thu, 15 Jan 2015 18:19:04 +0100 Subject: [PATCH] karo: tx6: Cleanup PMIC code --- board/karo/tx6/ltc3676.c | 57 ++++++++++++++++--------- board/karo/tx6/rn5t567.c | 92 +++++++++++++++------------------------- board/karo/tx6/rn5t618.c | 64 ++++++++++++++-------------- 3 files changed, 105 insertions(+), 108 deletions(-) diff --git a/board/karo/tx6/ltc3676.c b/board/karo/tx6/ltc3676.c index 2a7acdee7b..c659bc8114 100644 --- a/board/karo/tx6/ltc3676.c +++ b/board/karo/tx6/ltc3676.c @@ -56,16 +56,16 @@ #define LTC3676_MSKPG_LDO3 (1 << 6) #define LTC3676_MSKPG_LDO4 (1 << 7) -#define VDD_IO_VAL mV_to_regval(vout_to_vref(3300 * 10, 5)) -#define VDD_IO_VAL_LP mV_to_regval(vout_to_vref(3100 * 10, 5)) -#define VDD_IO_VAL_2 mV_to_regval(vout_to_vref(3300 * 10, 5_2)) -#define VDD_IO_VAL_2_LP mV_to_regval(vout_to_vref(3100 * 10, 5_2)) -#define VDD_SOC_VAL mV_to_regval(vout_to_vref(1425 * 10, 6)) -#define VDD_SOC_VAL_LP mV_to_regval(vout_to_vref(900 * 10, 6)) -#define VDD_DDR_VAL mV_to_regval(vout_to_vref(1500 * 10, 7)) -#define VDD_DDR_VAL_LP mV_to_regval(vout_to_vref(1500 * 10, 7)) -#define VDD_CORE_VAL mV_to_regval(vout_to_vref(1425 * 10, 8)) -#define VDD_CORE_VAL_LP mV_to_regval(vout_to_vref(900 * 10, 8)) +#define VDD_IO_VAL mV_to_regval(vout_to_vref(3300, 5)) +#define VDD_IO_VAL_LP mV_to_regval(vout_to_vref(3100, 5)) +#define VDD_IO_VAL_2 mV_to_regval(vout_to_vref(3300, 5_2)) +#define VDD_IO_VAL_2_LP mV_to_regval(vout_to_vref(3100, 5_2)) +#define VDD_SOC_VAL mV_to_regval(vout_to_vref(1425, 6)) +#define VDD_SOC_VAL_LP mV_to_regval(vout_to_vref(900, 6)) +#define VDD_DDR_VAL mV_to_regval(vout_to_vref(1500, 7)) +#define VDD_DDR_VAL_LP mV_to_regval(vout_to_vref(1500, 7)) +#define VDD_CORE_VAL mV_to_regval(vout_to_vref(1425, 8)) +#define VDD_CORE_VAL_LP mV_to_regval(vout_to_vref(900, 8)) /* LDO1 */ #define R1_1 470 @@ -92,11 +92,14 @@ #define R1(idx) R1_##idx #define R2(idx) R2_##idx +#define v2r(v,n,m) DIV_ROUND(((((v) < (n)) ? (n) : (v)) - (n)), (m)) +#define r2v(r,n,m) (((r) * (m) + (n)) / 10) + #define vout_to_vref(vout, idx) ((vout) * R2(idx) / (R1(idx) + R2(idx))) #define vref_to_vout(vref, idx) DIV_ROUND_UP((vref) * (R1(idx) + R2(idx)), R2(idx)) -#define mV_to_regval(mV) DIV_ROUND(((((mV) < 4125) ? 4125 : (mV)) - 4125), 125) -#define regval_to_mV(v) (((v) * 125 + 4125)) +#define mV_to_regval(mV) v2r((mV) * 10, 4125, 125) +#define regval_to_mV(r) r2v(r, 4125, 125) static struct ltc3676_regs { u8 addr; @@ -185,17 +188,33 @@ int ltc3676_pmic_setup(uchar slave_addr) if (ret) return ret; - printf("VDDCORE set to %umV\n", - DIV_ROUND(vref_to_vout(regval_to_mV(VDD_CORE_VAL), 8), 10)); - printf("VDDSOC set to %umV\n", - DIV_ROUND(vref_to_vout(regval_to_mV(VDD_SOC_VAL), 6), 10)); + ret = i2c_read(slave_addr, LTC3676_DVB4A, 1, &value, 1); + if (ret == 0) { + printf("VDDCORE set to %umV\n", + vref_to_vout(regval_to_mV(value), 8)); + } else { + printf("Failed to read VDDCORE register setting\n"); + } + + ret = i2c_read(slave_addr, LTC3676_DVB2A, 1, &value, 1); + if (ret == 0) { + printf("VDDSOC set to %umV\n", + vref_to_vout(regval_to_mV(value), 6)); + } else { + printf("Failed to read VDDSOC register setting\n"); + } if (tx6_rev_2()) { ret = ltc3676_setup_regs(slave_addr, ltc3676_regs_2, ARRAY_SIZE(ltc3676_regs_2)); - printf("VDDIO set to %umV\n", - DIV_ROUND(vref_to_vout( - regval_to_mV(VDD_IO_VAL_2), 5_2), 10)); + + ret = i2c_read(slave_addr, LTC3676_DVB1A, 1, &value, 1); + if (ret == 0) { + printf("VDDIO set to %umV\n", + vref_to_vout(regval_to_mV(value), 5_2)); + } else { + printf("Failed to read VDDIO register setting\n"); + } } else { ret = ltc3676_setup_regs(slave_addr, ltc3676_regs_1, ARRAY_SIZE(ltc3676_regs_1)); diff --git a/board/karo/tx6/rn5t567.c b/board/karo/tx6/rn5t567.c index bbd61fcdf3..02fa16e8d6 100644 --- a/board/karo/tx6/rn5t567.c +++ b/board/karo/tx6/rn5t567.c @@ -42,32 +42,35 @@ #define NOETIMSET_DIS_OFF_NOE_TIM (1 << 3) -#define VDD_RTC_VAL mV_to_regval_rtc(3000 * 10) -#define VDD_HIGH_VAL mV_to_regval3(3000 * 10) -#define VDD_HIGH_VAL_LP mV_to_regval3(3000 * 10) -#define VDD_CORE_VAL mV_to_regval(1425 * 10) -#define VDD_CORE_VAL_LP mV_to_regval(900 * 10) -#define VDD_SOC_VAL mV_to_regval(1425 * 10) -#define VDD_SOC_VAL_LP mV_to_regval(900 * 10) -#define VDD_DDR_VAL mV_to_regval(1500 * 10) -#define VDD_DDR_VAL_LP mV_to_regval(1500 * 10) +#define VDD_RTC_VAL mV_to_regval_rtc(3000) +#define VDD_HIGH_VAL mV_to_regval3(3000) +#define VDD_HIGH_VAL_LP mV_to_regval3(3000) +#define VDD_CORE_VAL mV_to_regval(1425) /* DCDC1 */ +#define VDD_CORE_VAL_LP mV_to_regval(900) +#define VDD_SOC_VAL mV_to_regval(1425) /* DCDC2 */ +#define VDD_SOC_VAL_LP mV_to_regval(900) +#define VDD_DDR_VAL mV_to_regval(1350) /* DCDC3 */ +#define VDD_DDR_VAL_LP mV_to_regval(1350) /* calculate voltages in 10mV */ +#define v2r(v,n,m) DIV_ROUND(((((v) < (n)) ? (n) : (v)) - (n)), (m)) +#define r2v(r,n,m) (((r) * (m) + (n)) / 10) + /* DCDC1-3 */ -#define mV_to_regval(mV) DIV_ROUND(((((mV) < 6000) ? 6000 : (mV)) - 6000), 125) -#define regval_to_mV(v) (((v) * 125 + 6000)) +#define mV_to_regval(mV) v2r((mV) * 10, 6000, 125) +#define regval_to_mV(r) r2v(r, 6000, 125) /* LDO1-2 */ -#define mV_to_regval2(mV) DIV_ROUND(((((mV) < 9000) ? 9000 : (mV)) - 9000), 250) -#define regval2_to_mV(v) (((v) * 250 + 9000)) +#define mV_to_regval2(mV) v2r((mV) * 10, 9000, 250) +#define regval2_to_mV(r) r2v(r, 9000, 250) /* LDO3 */ -#define mV_to_regval3(mV) DIV_ROUND(((((mV) < 6000) ? 6000 : (mV)) - 6000), 250) -#define regval3_to_mV(v) (((v) * 250 + 6000)) +#define mV_to_regval3(mV) v2r((mV) * 10, 6000, 250) +#define regval3_to_mV(r) r2v(r, 6000, 250) /* LDORTC */ -#define mV_to_regval_rtc(mV) DIV_ROUND(((((mV) < 17000) ? 17000 : (mV)) - 17000), 250) -#define regval_rtc_to_mV(v) (((v) * 250 + 17000)) +#define mV_to_regval_rtc(mV) v2r((mV) * 10, 17000, 250) +#define regval_rtc_to_mV(r) r2v(r, 17000, 250) static struct rn5t567_regs { u8 addr; @@ -75,7 +78,6 @@ static struct rn5t567_regs { u8 mask; } rn5t567_regs[] = { { RN5T567_NOETIMSET, NOETIMSET_DIS_OFF_NOE_TIM | 0x5, }, -#if 0 { RN5T567_DC1DAC, VDD_CORE_VAL, }, { RN5T567_DC2DAC, VDD_SOC_VAL, }, { RN5T567_DC3DAC, VDD_DDR_VAL, }, @@ -86,23 +88,8 @@ static struct rn5t567_regs { { RN5T567_LDOEN2, 0x10, ~0x30, }, { RN5T567_LDODIS, 0x00, }, { RN5T567_LDO3DAC, VDD_HIGH_VAL, }, - { RN5T567_LDORTCDAC, VDD_RTC_VAL, }, + { RN5T567_LDORTC1DAC, VDD_RTC_VAL, }, { RN5T567_LDORTC1_SLOT, 0x0f, ~0x3f, }, -#endif -}; - -static struct rn5t567_regs debug_regs[] __maybe_unused = { - { 0x00, 4, }, - { 0x09, 4, }, - { 0x10, 16, }, - { 0x25, 26, }, - { 0x44, 3, }, - { 0x4c, 5, }, - { 0x56, 1, }, - { 0x58, 5, }, - { 0x97, 2, }, - { 0xb0, 1, }, - { 0xbc, 1, }, }; static int rn5t567_setup_regs(uchar slave_addr, struct rn5t567_regs *r, @@ -126,33 +113,13 @@ static int rn5t567_setup_regs(uchar slave_addr, struct rn5t567_regs *r, return ret; } #endif -// value = (value & ~r->mask) | r->val; ret = i2c_write(slave_addr, r->addr, 1, &r->val, 1); if (ret) { printf("%s: failed to write PMIC register %02x: %d\n", __func__, r->addr, ret); return ret; } -#ifdef DEBUG - ret = i2c_read(slave_addr, r->addr, 1, &value, 1); - printf("PMIC reg %02x is %02x\n", r->addr, value); -#endif } -#if 0 - for (i = 0; i < ARRAY_SIZE(debug_regs); i++) { - int j; - - r = &debug_regs[i]; - for (j = r->addr; j < r->addr + r->val; j++) { - unsigned char value; - - ret = i2c_read(slave_addr, j, 1, &value, 1); - printf("PMIC reg %02x = %02x\n", - j, value); - } - } -#endif - debug("%s() complete\n", __func__); return 0; } @@ -172,10 +139,19 @@ int rn5t567_pmic_setup(uchar slave_addr) if (ret) return ret; - printf("VDDCORE set to %umV\n", - DIV_ROUND(regval_to_mV(VDD_CORE_VAL), 10)); - printf("VDDSOC set to %umV\n", - DIV_ROUND(regval_to_mV(VDD_SOC_VAL), 10)); + ret = i2c_read(slave_addr, RN5T567_DC1DAC, 1, &value, 1); + if (ret == 0) { + printf("VDDCORE set to %umV\n", regval_to_mV(value)); + } else { + printf("Failed to read VDDCORE register setting\n"); + } + + ret = i2c_read(slave_addr, RN5T567_DC2DAC, 1, &value, 1); + if (ret == 0) { + printf("VDDSOC set to %umV\n", regval_to_mV(value)); + } else { + printf("Failed to read VDDSOC register setting\n"); + } return ret; } diff --git a/board/karo/tx6/rn5t618.c b/board/karo/tx6/rn5t618.c index 5ee1fa80fb..19aba871af 100644 --- a/board/karo/tx6/rn5t618.c +++ b/board/karo/tx6/rn5t618.c @@ -40,32 +40,35 @@ #define RN5T618_LDO3DAC 0x4e /* IO */ #define RN5T618_LDORTCDAC 0x56 /* VBACKUP */ -#define VDD_RTC_VAL mV_to_regval_rtc(3000 * 10) -#define VDD_HIGH_VAL mV_to_regval3(3000 * 10) -#define VDD_HIGH_VAL_LP mV_to_regval3(3000 * 10) -#define VDD_CORE_VAL mV_to_regval(1425 * 10) -#define VDD_CORE_VAL_LP mV_to_regval(900 * 10) -#define VDD_SOC_VAL mV_to_regval(1425 * 10) -#define VDD_SOC_VAL_LP mV_to_regval(900 * 10) -#define VDD_DDR_VAL mV_to_regval(1500 * 10) -#define VDD_DDR_VAL_LP mV_to_regval(1500 * 10) +#define VDD_RTC_VAL mV_to_regval_rtc(3000) +#define VDD_HIGH_VAL mV_to_regval3(3000) +#define VDD_HIGH_VAL_LP mV_to_regval3(3000) +#define VDD_CORE_VAL mV_to_regval(1425) /* DCDC1 */ +#define VDD_CORE_VAL_LP mV_to_regval(900) +#define VDD_SOC_VAL mV_to_regval(1425) /* DCDC2 */ +#define VDD_SOC_VAL_LP mV_to_regval(900) +#define VDD_DDR_VAL mV_to_regval(1500) /* DCDC3 */ +#define VDD_DDR_VAL_LP mV_to_regval(1500) /* calculate voltages in 10mV */ +#define v2r(v,n,m) DIV_ROUND(((((v) < (n)) ? (n) : (v)) - (n)), (m)) +#define r2v(r,n,m) (((r) * (m) + (n)) / 10) + /* DCDC1-3 */ -#define mV_to_regval(mV) DIV_ROUND(((((mV) < 6000) ? 6000 : (mV)) - 6000), 125) -#define regval_to_mV(v) (((v) * 125 + 6000)) +#define mV_to_regval(mV) v2r((mV) * 10, 6000, 125) +#define regval_to_mV(r) r2v(r, 6000, 125) /* LDO1-2 */ -#define mV_to_regval2(mV) DIV_ROUND(((((mV) < 9000) ? 9000 : (mV)) - 9000), 250) -#define regval2_to_mV(v) (((v) * 250 + 9000)) +#define mV_to_regval2(mV) v2r((mV) * 10, 9000, 250) +#define regval2_to_mV(r) r2v(r, 9000, 250) /* LDO3 */ -#define mV_to_regval3(mV) DIV_ROUND(((((mV) < 6000) ? 6000 : (mV)) - 6000), 250) -#define regval3_to_mV(v) (((v) * 250 + 6000)) +#define mV_to_regval3(mV) v2r((mV) * 10, 6000, 250) +#define regval3_to_mV(r) r2v(r, 6000, 250) /* LDORTC */ -#define mV_to_regval_rtc(mV) DIV_ROUND(((((mV) < 17000) ? 17000 : (mV)) - 17000), 250) -#define regval_rtc_to_mV(v) (((v) * 250 + 17000)) +#define mV_to_regval_rtc(mV) v2r((mV) * 10, 17000, 250) +#define regval_rtc_to_mV(r) r2v(r, 17000, 250) static struct rn5t618_regs { u8 addr; @@ -93,12 +96,6 @@ static int rn5t618_setup_regs(uchar slave_addr, struct rn5t618_regs *r, int ret; int i; - for (i = 0; i < count; i++, r++) { - unsigned char value; - - ret = i2c_read(slave_addr, r->addr, 1, &value, 1); - debug("PMIC reg %02x = %02x\n", r->addr, value); - } for (i = 0; i < count; i++, r++) { #ifdef DEBUG unsigned char value; @@ -120,10 +117,6 @@ static int rn5t618_setup_regs(uchar slave_addr, struct rn5t618_regs *r, __func__, r->addr, ret); return ret; } -#ifdef DEBUG - ret = i2c_read(slave_addr, r->addr, 1, &value, 1); - printf("PMIC reg %02x is %02x\n", r->addr, value); -#endif } return 0; } @@ -144,10 +137,19 @@ int rn5t618_pmic_setup(uchar slave_addr) if (ret) return ret; - printf("VDDCORE set to %umV\n", - DIV_ROUND(regval_to_mV(VDD_CORE_VAL), 10)); - printf("VDDSOC set to %umV\n", - DIV_ROUND(regval_to_mV(VDD_SOC_VAL), 10)); + ret = i2c_read(slave_addr, RN5T618_DC1DAC, 1, &value, 1); + if (ret == 0) { + printf("VDDCORE set to %umV\n", regval_to_mV(value)); + } else { + printf("Failed to read VDDCORE register setting\n"); + } + + ret = i2c_read(slave_addr, RN5T618_DC2DAC, 1, &value, 1); + if (ret == 0) { + printf("VDDSOC set to %umV\n", regval_to_mV(value)); + } else { + printf("Failed to read VDDSOC register setting\n"); + } return ret; } -- 2.39.2