mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
power: supply: qti_battery_charger: update USB power supply type runtime
Currently, USB power supply type is set to POWER_SUPPLY_TYPE_USB in power supply descriptor. power_supply_show_property() would show POWER_SUPPLY_PROP_TYPE based on psy->desc->type. Userspace process like healthd would read POWER_SUPPLY_PROP_TYPE to print the adapter type in logs (e.g. "chg=u" for SDP, "chg=a" for DCP). Hence update usb_psy_desc type runtime to show the USB power supply type accordingly. This is useful for testing. Change-Id: Icd88098f97beba053105d826614b4182f3716144 Signed-off-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
This commit is contained in:
parent
70dba80995
commit
ec2657eb96
|
|
@ -224,6 +224,7 @@ struct battery_chg_dev {
|
|||
int num_thermal_levels;
|
||||
atomic_t state;
|
||||
struct work_struct subsys_up_work;
|
||||
struct work_struct usb_type_work;
|
||||
int fake_soc;
|
||||
bool block_tx;
|
||||
bool ship_mode_en;
|
||||
|
|
@ -620,6 +621,54 @@ static void handle_message(struct battery_chg_dev *bcdev, void *data,
|
|||
complete(&bcdev->ack);
|
||||
}
|
||||
|
||||
static struct power_supply_desc usb_psy_desc;
|
||||
|
||||
static void battery_chg_update_usb_type_work(struct work_struct *work)
|
||||
{
|
||||
struct battery_chg_dev *bcdev = container_of(work,
|
||||
struct battery_chg_dev, usb_type_work);
|
||||
struct psy_state *pst = &bcdev->psy_list[PSY_TYPE_USB];
|
||||
int rc;
|
||||
|
||||
rc = read_property_id(bcdev, pst, USB_ADAP_TYPE);
|
||||
if (rc < 0) {
|
||||
pr_err("Failed to read USB_ADAP_TYPE rc=%d\n", rc);
|
||||
return;
|
||||
}
|
||||
|
||||
pr_debug("usb_adap_type: %u\n", pst->prop[USB_ADAP_TYPE]);
|
||||
|
||||
switch (pst->prop[USB_ADAP_TYPE]) {
|
||||
case POWER_SUPPLY_USB_TYPE_SDP:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB;
|
||||
break;
|
||||
case POWER_SUPPLY_USB_TYPE_DCP:
|
||||
case POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID:
|
||||
case QTI_POWER_SUPPLY_USB_TYPE_HVDCP:
|
||||
case QTI_POWER_SUPPLY_USB_TYPE_HVDCP_3:
|
||||
case QTI_POWER_SUPPLY_USB_TYPE_HVDCP_3P5:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_DCP;
|
||||
break;
|
||||
case POWER_SUPPLY_USB_TYPE_CDP:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_CDP;
|
||||
break;
|
||||
case POWER_SUPPLY_USB_TYPE_ACA:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_ACA;
|
||||
break;
|
||||
case POWER_SUPPLY_USB_TYPE_C:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_TYPE_C;
|
||||
break;
|
||||
case POWER_SUPPLY_USB_TYPE_PD:
|
||||
case POWER_SUPPLY_USB_TYPE_PD_DRP:
|
||||
case POWER_SUPPLY_USB_TYPE_PD_PPS:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB_PD;
|
||||
break;
|
||||
default:
|
||||
usb_psy_desc.type = POWER_SUPPLY_TYPE_USB;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_notification(struct battery_chg_dev *bcdev, void *data,
|
||||
size_t len)
|
||||
{
|
||||
|
|
@ -640,6 +689,7 @@ static void handle_notification(struct battery_chg_dev *bcdev, void *data,
|
|||
break;
|
||||
case BC_USB_STATUS_GET:
|
||||
pst = &bcdev->psy_list[PSY_TYPE_USB];
|
||||
schedule_work(&bcdev->usb_type_work);
|
||||
break;
|
||||
case BC_WLS_STATUS_GET:
|
||||
pst = &bcdev->psy_list[PSY_TYPE_WLS];
|
||||
|
|
@ -871,7 +921,7 @@ static enum power_supply_usb_type usb_psy_supported_types[] = {
|
|||
POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID,
|
||||
};
|
||||
|
||||
static const struct power_supply_desc usb_psy_desc = {
|
||||
static struct power_supply_desc usb_psy_desc = {
|
||||
.name = "usb",
|
||||
.type = POWER_SUPPLY_TYPE_USB,
|
||||
.properties = usb_props,
|
||||
|
|
@ -1753,6 +1803,7 @@ static int battery_chg_probe(struct platform_device *pdev)
|
|||
init_completion(&bcdev->fw_buf_ack);
|
||||
init_completion(&bcdev->fw_update_ack);
|
||||
INIT_WORK(&bcdev->subsys_up_work, battery_chg_subsys_up_work);
|
||||
INIT_WORK(&bcdev->usb_type_work, battery_chg_update_usb_type_work);
|
||||
atomic_set(&bcdev->state, PMIC_GLINK_STATE_UP);
|
||||
bcdev->dev = dev;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user