usb: phy: show USB charger type for user
authorPeter Chen <peter.chen@nxp.com>
Thu, 16 Jan 2020 03:28:52 +0000 (11:28 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Jan 2020 08:41:27 +0000 (09:41 +0100)
Current USB charger framework only shows charger state for user, but the
user may also need charger type for further use, add support for it.

Signed-off-by: Peter Chen <peter.chen@nxp.com>
Link: https://lore.kernel.org/r/1579145333-1657-1-git-send-email-peter.chen@nxp.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/phy/phy.c

index 0277f62..ad25546 100644 (file)
@@ -34,6 +34,14 @@ struct phy_devm {
        struct notifier_block *nb;
 };
 
+static const char *const usb_chger_type[] = {
+       [UNKNOWN_TYPE]                  = "USB_CHARGER_UNKNOWN_TYPE",
+       [SDP_TYPE]                      = "USB_CHARGER_SDP_TYPE",
+       [CDP_TYPE]                      = "USB_CHARGER_CDP_TYPE",
+       [DCP_TYPE]                      = "USB_CHARGER_DCP_TYPE",
+       [ACA_TYPE]                      = "USB_CHARGER_ACA_TYPE",
+};
+
 static struct usb_phy *__usb_find_phy(struct list_head *list,
        enum usb_phy_type type)
 {
@@ -98,7 +106,8 @@ static void usb_phy_notify_charger_work(struct work_struct *work)
 {
        struct usb_phy *usb_phy = container_of(work, struct usb_phy, chg_work);
        char uchger_state[50] = { 0 };
-       char *envp[] = { uchger_state, NULL };
+       char uchger_type[50] = { 0 };
+       char *envp[] = { uchger_state, uchger_type, NULL };
        unsigned int min, max;
 
        switch (usb_phy->chg_state) {
@@ -122,6 +131,8 @@ static void usb_phy_notify_charger_work(struct work_struct *work)
                return;
        }
 
+       snprintf(uchger_type, ARRAY_SIZE(uchger_type),
+                "USB_CHARGER_TYPE=%s", usb_chger_type[usb_phy->chg_type]);
        kobject_uevent_env(&usb_phy->dev->kobj, KOBJ_CHANGE, envp);
 }