diff options
-rw-r--r-- | driver/pi3usb9281.h | 3 | ||||
-rw-r--r-- | driver/usb_switch_pi3usb9281.c | 22 |
2 files changed, 25 insertions, 0 deletions
diff --git a/driver/pi3usb9281.h b/driver/pi3usb9281.h index ebcd333d80..d26295b846 100644 --- a/driver/pi3usb9281.h +++ b/driver/pi3usb9281.h @@ -74,6 +74,9 @@ int pi3usb9281_get_device_type(uint8_t chip_idx); /* Get attached charger status. */ int pi3usb9281_get_charger_status(uint8_t chip_idx); +/* Get charger current limit based on device type and charger status. */ +int pi3usb9281_get_ilim(int device_type, int charger_status); + /* Set switch configuration to manual. */ int pi3usb9281_set_switch_manual(uint8_t chip_idx, int val); diff --git a/driver/usb_switch_pi3usb9281.c b/driver/usb_switch_pi3usb9281.c index b7a82a2e09..78580fc7a8 100644 --- a/driver/usb_switch_pi3usb9281.c +++ b/driver/usb_switch_pi3usb9281.c @@ -119,6 +119,28 @@ int pi3usb9281_get_charger_status(uint8_t chip_idx) return pi3usb9281_read(chip_idx, PI3USB9281_REG_CHG_STATUS) & 0x1f; } +int pi3usb9281_get_ilim(int device_type, int charger_status) +{ + /* Limit USB port current. 500mA for not listed types. */ + int current_limit_ma = 500; + + if (charger_status & PI3USB9281_CHG_CAR_TYPE1 || + charger_status & PI3USB9281_CHG_CAR_TYPE2) + current_limit_ma = 3000; + else if (charger_status & PI3USB9281_CHG_APPLE_1A) + current_limit_ma = 1000; + else if (charger_status & PI3USB9281_CHG_APPLE_2A) + current_limit_ma = 2000; + else if (charger_status & PI3USB9281_CHG_APPLE_2_4A) + current_limit_ma = 2400; + else if (device_type & PI3USB9281_TYPE_CDP) + current_limit_ma = 1500; + else if (device_type & PI3USB9281_TYPE_DCP) + current_limit_ma = 1500; + + return current_limit_ma; +} + int pi3usb9281_get_vbus(uint8_t chip_idx) { int vbus = pi3usb9281_read(chip_idx, PI3USB9281_REG_VBUS); |