static int sec_bat_get_cable_from_extended_cable_type( int input_extended_cable_type) { int cable_main, cable_sub, cable_power; int cable_type; cable_main = GET_MAIN_CABLE_TYPE(input_extended_cable_type); if (cable_main != POWER_SUPPLY_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_MAIN_MASK) | (cable_main << ONLINE_TYPE_MAIN_SHIFT); cable_sub = GET_SUB_CABLE_TYPE(input_extended_cable_type); if (cable_sub != ONLINE_SUB_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_SUB_MASK) | (cable_sub << ONLINE_TYPE_SUB_SHIFT); cable_power = GET_POWER_CABLE_TYPE(input_extended_cable_type); if (cable_power != ONLINE_POWER_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_PWR_MASK) | (cable_power << ONLINE_TYPE_PWR_SHIFT); switch (cable_main) { case POWER_SUPPLY_TYPE_CARDOCK: switch (cable_power) { case ONLINE_POWER_TYPE_BATTERY: cable_type = POWER_SUPPLY_TYPE_BATTERY; break; case ONLINE_POWER_TYPE_TA: switch (cable_sub) { case ONLINE_SUB_TYPE_MHL: cable_type = POWER_SUPPLY_TYPE_USB; break; case ONLINE_SUB_TYPE_AUDIO: case ONLINE_SUB_TYPE_DESK: case ONLINE_SUB_TYPE_SMART_NOTG: case ONLINE_SUB_TYPE_KBD: cable_type = POWER_SUPPLY_TYPE_MAINS; break; case ONLINE_SUB_TYPE_SMART_OTG: cable_type = POWER_SUPPLY_TYPE_CARDOCK; break; } break; case ONLINE_POWER_TYPE_USB: cable_type = POWER_SUPPLY_TYPE_USB; break; default: cable_type = current_cable_type; break; } break; default: cable_type = cable_main; break; } return cable_type; }
static int sec_bat_get_cable_from_extended_cable_type( int input_extended_cable_type) { int cable_main, cable_sub, cable_power; int cable_type = POWER_SUPPLY_TYPE_UNKNOWN; union power_supply_propval value; int charge_current_max = 0, charge_current = 0; cable_main = GET_MAIN_CABLE_TYPE(input_extended_cable_type); if (cable_main != POWER_SUPPLY_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_MAIN_MASK) | (cable_main << ONLINE_TYPE_MAIN_SHIFT); cable_sub = GET_SUB_CABLE_TYPE(input_extended_cable_type); if (cable_sub != ONLINE_SUB_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_SUB_MASK) | (cable_sub << ONLINE_TYPE_SUB_SHIFT); cable_power = GET_POWER_CABLE_TYPE(input_extended_cable_type); if (cable_power != ONLINE_POWER_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_PWR_MASK) | (cable_power << ONLINE_TYPE_PWR_SHIFT); switch (cable_main) { case POWER_SUPPLY_TYPE_CARDOCK: switch (cable_power) { case ONLINE_POWER_TYPE_BATTERY: cable_type = POWER_SUPPLY_TYPE_BATTERY; break; case ONLINE_POWER_TYPE_TA: switch (cable_sub) { case ONLINE_SUB_TYPE_MHL: cable_type = POWER_SUPPLY_TYPE_USB; break; case ONLINE_SUB_TYPE_AUDIO: case ONLINE_SUB_TYPE_DESK: case ONLINE_SUB_TYPE_SMART_NOTG: case ONLINE_SUB_TYPE_KBD: cable_type = POWER_SUPPLY_TYPE_MAINS; break; case ONLINE_SUB_TYPE_SMART_OTG: cable_type = POWER_SUPPLY_TYPE_CARDOCK; break; } break; case ONLINE_POWER_TYPE_USB: cable_type = POWER_SUPPLY_TYPE_USB; break; default: cable_type = current_cable_type; break; } break; case POWER_SUPPLY_TYPE_MISC: switch (cable_sub) { case ONLINE_SUB_TYPE_MHL: switch (cable_power) { case ONLINE_POWER_TYPE_BATTERY: cable_type = POWER_SUPPLY_TYPE_BATTERY; break; case ONLINE_POWER_TYPE_TA: cable_type = POWER_SUPPLY_TYPE_MISC; charge_current_max = 700; charge_current = 700; break; case ONLINE_POWER_TYPE_USB: cable_type = POWER_SUPPLY_TYPE_USB; charge_current_max = 300; charge_current = 300; break; default: cable_type = cable_main; } break; default: cable_type = cable_main; break; } break; default: cable_type = cable_main; break; } if (charge_current_max == 0) { charge_current_max = charging_current_table[cable_type].input_current_limit; charge_current = charging_current_table[cable_type]. fast_charging_current; } value.intval = charge_current_max; psy_do_property(sec_battery_pdata.charger_name, set, POWER_SUPPLY_PROP_CURRENT_MAX, value); value.intval = charge_current; psy_do_property(sec_battery_pdata.charger_name, set, POWER_SUPPLY_PROP_CURRENT_AVG, value); return cable_type; }
static int sec_bat_get_cable_from_extended_cable_type( int input_extended_cable_type) { int cable_main, cable_sub, cable_power; int cable_type = POWER_SUPPLY_TYPE_UNKNOWN; union power_supply_propval value; int charge_current_max = 0, charge_current = 0; cable_main = GET_MAIN_CABLE_TYPE(input_extended_cable_type); if (cable_main != POWER_SUPPLY_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_MAIN_MASK) | (cable_main << ONLINE_TYPE_MAIN_SHIFT); cable_sub = GET_SUB_CABLE_TYPE(input_extended_cable_type); if (cable_sub != ONLINE_SUB_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_SUB_MASK) | (cable_sub << ONLINE_TYPE_SUB_SHIFT); cable_power = GET_POWER_CABLE_TYPE(input_extended_cable_type); if (cable_power != ONLINE_POWER_TYPE_UNKNOWN) extended_cable_type = (extended_cable_type & ~(int)ONLINE_TYPE_PWR_MASK) | (cable_power << ONLINE_TYPE_PWR_SHIFT); switch (cable_main) { case POWER_SUPPLY_TYPE_CARDOCK: switch (cable_power) { case ONLINE_POWER_TYPE_BATTERY: cable_type = POWER_SUPPLY_TYPE_BATTERY; break; case ONLINE_POWER_TYPE_TA: switch (cable_sub) { case ONLINE_SUB_TYPE_MHL: cable_type = POWER_SUPPLY_TYPE_USB; break; case ONLINE_SUB_TYPE_AUDIO: case ONLINE_SUB_TYPE_DESK: case ONLINE_SUB_TYPE_SMART_NOTG: case ONLINE_SUB_TYPE_KBD: cable_type = POWER_SUPPLY_TYPE_MAINS; break; case ONLINE_SUB_TYPE_SMART_OTG: cable_type = POWER_SUPPLY_TYPE_CARDOCK; break; } break; case ONLINE_POWER_TYPE_USB: cable_type = POWER_SUPPLY_TYPE_USB; break; default: cable_type = current_cable_type; break; } break; case POWER_SUPPLY_TYPE_MISC: switch (cable_sub) { case ONLINE_SUB_TYPE_MHL: switch (cable_power) { case ONLINE_POWER_TYPE_BATTERY: cable_type = POWER_SUPPLY_TYPE_BATTERY; break; case ONLINE_POWER_TYPE_MHL_500: cable_type = POWER_SUPPLY_TYPE_MISC; charge_current_max = 400; charge_current = 400; break; case ONLINE_POWER_TYPE_MHL_900: cable_type = POWER_SUPPLY_TYPE_MISC; charge_current_max = 700; charge_current = 700; break; case ONLINE_POWER_TYPE_MHL_1500: cable_type = POWER_SUPPLY_TYPE_MISC; charge_current_max = 1300; charge_current = 1300; break; case ONLINE_POWER_TYPE_USB: cable_type = POWER_SUPPLY_TYPE_USB; charge_current_max = 300; charge_current = 300; break; default: cable_type = cable_main; break; } break; case ONLINE_SUB_TYPE_SMART_OTG: cable_type = POWER_SUPPLY_TYPE_USB; charge_current_max = 1000; charge_current = 1000; break; case ONLINE_SUB_TYPE_SMART_NOTG: cable_type = POWER_SUPPLY_TYPE_MAINS; break; default: cable_type = cable_main; charge_current_max = 0; break; } break; case POWER_SUPPLY_TYPE_OTG: cable_type = current_cable_type; break; default: cable_type = cable_main; break; } #ifdef CONFIG_FORCE_FAST_CHARGE if (force_fast_charge == FAST_CHARGE_FORCE_AC) { /* We are in basic Fast Charge mode, so we substitute AC to USB levels */ switch(cable_type) { case POWER_SUPPLY_TYPE_USB: /* These are low current USB connections, apply normal 1A/h AC levels to USB */ case POWER_SUPPLY_TYPE_USB_ACA: case POWER_SUPPLY_TYPE_CARDOCK: case POWER_SUPPLY_TYPE_OTG: charge_current_max = USB_CHARGE_1000; charge_current = USB_CHARGE_1000; break; } } else if (force_fast_charge == FAST_CHARGE_FORCE_CUSTOM_MA) { /* We are in advanced Fast Charge mode, so we apply custom charging levels for both AC and USB */ switch(cable_type) { case POWER_SUPPLY_TYPE_USB: /* These are USB connections, apply custom USB current for all of them */ case POWER_SUPPLY_TYPE_USB_DCP: case POWER_SUPPLY_TYPE_USB_CDP: case POWER_SUPPLY_TYPE_USB_ACA: case POWER_SUPPLY_TYPE_CARDOCK: case POWER_SUPPLY_TYPE_OTG: charge_current_max = usb_charge_level; charge_current = usb_charge_level; break; case POWER_SUPPLY_TYPE_MAINS: /* These are AC connections, apply custom AC current for all of them */ charge_current_max = ac_charge_level; charge_current = min(ac_charge_level+300, MAX_CHARGE_LEVEL); /* Keep the 300mA/h delta, but never go above 2.1A/h */ break; default: /* Don't do anything for any other kind of connections and don't touch when type is unknown */ break; } } #endif if (charge_current_max == 0) { charge_current_max = charging_current_table[cable_type].input_current_limit; charge_current = charging_current_table[cable_type]. fast_charging_current; } value.intval = charge_current_max; psy_do_property(sec_battery_pdata.charger_name, set, POWER_SUPPLY_PROP_CURRENT_MAX, value); value.intval = charge_current; psy_do_property(sec_battery_pdata.charger_name, set, POWER_SUPPLY_PROP_CURRENT_AVG, value); return cable_type; }