Message ID | 1579145333-1657-1-git-send-email-peter.chen@nxp.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 3bdcfe6c1d90b343c3de5fffdc83d988e76f8679 |
Headers | show |
Series | [v4,1/2] usb: phy: show USB charger type for user | expand |
On Thu, Jan 16, 2020 at 11:28:52AM +0800, Peter Chen wrote: > 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> > --- > Changes for v4: > - No changes. > > drivers/usb/phy/phy.c | 13 ++++++++++++- > 1 file changed, 12 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c > index 0277f62739a2..ad2554630889 100644 > --- a/drivers/usb/phy/phy.c > +++ b/drivers/usb/phy/phy.c > @@ -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", > +}; As these are exported values (CDP_TYPE and friends), they really need to have explicit values on the .h file, otherwise it might not work properly on all systems. But that's kind of independant of this series, sorry, I just noticed it. greg k-h
> > Signed-off-by: Peter Chen <peter.chen@nxp.com> > > --- > > Changes for v4: > > - No changes. > > > > drivers/usb/phy/phy.c | 13 ++++++++++++- > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c index > > 0277f62739a2..ad2554630889 100644 > > --- a/drivers/usb/phy/phy.c > > +++ b/drivers/usb/phy/phy.c > > @@ -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", > > +}; > > As these are exported values (CDP_TYPE and friends), they really need to have > explicit values on the .h file, otherwise it might not work properly on all systems. > Sorry, what do you mean? These values are defined at include/uapi/linux/usb/charger.h Peter
On Thu, Jan 30, 2020 at 02:05:17PM +0000, Peter Chen wrote: > > > > Signed-off-by: Peter Chen <peter.chen@nxp.com> > > > --- > > > Changes for v4: > > > - No changes. > > > > > > drivers/usb/phy/phy.c | 13 ++++++++++++- > > > 1 file changed, 12 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c index > > > 0277f62739a2..ad2554630889 100644 > > > --- a/drivers/usb/phy/phy.c > > > +++ b/drivers/usb/phy/phy.c > > > @@ -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", > > > +}; > > > > As these are exported values (CDP_TYPE and friends), they really need to have > > explicit values on the .h file, otherwise it might not work properly on all systems. > > > > Sorry, what do you mean? These values are defined at include/uapi/linux/usb/charger.h Yes, but they are not set to a specific value, so they can really be "anything". That .h file needs to have specific numbers set to the enum values in order for this to work properly on all arches/compilers. thanks, greg k-h
diff --git a/drivers/usb/phy/phy.c b/drivers/usb/phy/phy.c index 0277f62739a2..ad2554630889 100644 --- a/drivers/usb/phy/phy.c +++ b/drivers/usb/phy/phy.c @@ -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); }
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> --- Changes for v4: - No changes. drivers/usb/phy/phy.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)