Skip to content

Commit f6c3b58

Browse files
Weixin Zhourkhuangtao
authored andcommitted
mfd/fusb302: fix request max voltage config
1. VPDO max voltage is bit20~29, VPD0 MIN votage is bit10~19. 2. (CAP_FPDO_VOLTAGE << 10) & 0x3ff == 0, it's wrong. 3. CAP_FPDO_VOLTAGE/CAP_VPDO_VOLTAGE has included (& 0x3ff). Signed-off-by: Weixin Zhou <zwx@rock-chips.com> Change-Id: Ife5e634bcffcc9b6c3d68d6e5f504c06b01cf418
1 parent 79d8dc5 commit f6c3b58

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

drivers/mfd/fusb302.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -188,12 +188,12 @@ static void fusb_set_pos_power(struct fusb30x_chip *chip, int max_vol,
188188
break;
189189
case 1:
190190
/* Battery */
191-
if ((CAP_VPDO_VOLTAGE(chip->rec_load[i]) * 50) <=
191+
if ((CAP_VPDO_MAX_VOLTAGE(chip->rec_load[i]) * 50) <=
192192
max_vol &&
193193
(CAP_VPDO_CURRENT(chip->rec_load[i]) * 10) <=
194194
max_cur) {
195195
chip->pos_power = i + 1;
196-
tmp = CAP_VPDO_VOLTAGE(chip->rec_load[i]);
196+
tmp = CAP_VPDO_MAX_VOLTAGE(chip->rec_load[i]);
197197
chip->pd_output_vol = tmp * 50;
198198
tmp = CAP_VPDO_CURRENT(chip->rec_load[i]);
199199
chip->pd_output_cur = tmp * 10;
@@ -965,13 +965,14 @@ static void set_mesg(struct fusb30x_chip *chip, int cmd, int is_DMT)
965965
switch (CAP_POWER_TYPE(chip->rec_load[chip->pos_power - 1])) {
966966
case 0:
967967
/* Fixed Supply */
968-
chip->send_load[0] |= ((CAP_FPDO_VOLTAGE(chip->rec_load[chip->pos_power - 1]) << 10) & 0x3ff);
969-
chip->send_load[0] |= (CAP_FPDO_CURRENT(chip->rec_load[chip->pos_power - 1]) & 0x3ff);
968+
chip->send_load[0] |= CAP_FPDO_VOLTAGE(chip->rec_load[chip->pos_power - 1]) << 10;
969+
chip->send_load[0] |= CAP_FPDO_CURRENT(chip->rec_load[chip->pos_power - 1]);
970970
break;
971971
case 1:
972972
/* Battery */
973-
chip->send_load[0] |= ((CAP_VPDO_VOLTAGE(chip->rec_load[chip->pos_power - 1]) << 10) & 0x3ff);
974-
chip->send_load[0] |= (CAP_VPDO_CURRENT(chip->rec_load[chip->pos_power - 1]) & 0x3ff);
973+
chip->send_load[0] |= CAP_VPDO_MAX_VOLTAGE(chip->rec_load[chip->pos_power - 1]) << 20;
974+
chip->send_load[0] |= CAP_VPDO_MIN_VOLTAGE(chip->rec_load[chip->pos_power - 1]) << 10;
975+
chip->send_load[0] |= CAP_VPDO_CURRENT(chip->rec_load[chip->pos_power - 1]);
975976
break;
976977
default:
977978
/* not meet battery caps */
@@ -2529,7 +2530,7 @@ static void fusb_state_snk_evaluate_caps(struct fusb30x_chip *chip, u32 evt)
25292530
break;
25302531
case 1:
25312532
/* Battery */
2532-
if (CAP_VPDO_VOLTAGE(chip->rec_load[tmp]) <= 100)
2533+
if (CAP_VPDO_MAX_VOLTAGE(chip->rec_load[tmp]) <= 100)
25332534
chip->pos_power = tmp + 1;
25342535
break;
25352536
default:

drivers/mfd/fusb302.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,8 @@ enum role_mode {
411411

412412
#define CAP_POWER_TYPE(PDO) ((PDO >> 30) & 3)
413413
#define CAP_FPDO_VOLTAGE(PDO) ((PDO >> 10) & 0x3ff)
414-
#define CAP_VPDO_VOLTAGE(PDO) ((PDO >> 20) & 0x3ff)
414+
#define CAP_VPDO_MAX_VOLTAGE(PDO) ((PDO >> 20) & 0x3ff)
415+
#define CAP_VPDO_MIN_VOLTAGE(PDO) ((PDO >> 10) & 0x3ff)
415416
#define CAP_FPDO_CURRENT(PDO) ((PDO >> 0) & 0x3ff)
416417
#define CAP_VPDO_CURRENT(PDO) ((PDO >> 0) & 0x3ff)
417418

0 commit comments

Comments
 (0)