diff mbox series

[v4,1/2] usb: phy: show USB charger type for user

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

Commit Message

Peter Chen Jan. 16, 2020, 3:28 a.m. UTC
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(-)

Comments

Greg KH Jan. 24, 2020, 8:40 a.m. UTC | #1
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
Peter Chen Jan. 30, 2020, 2:05 p.m. UTC | #2
> > 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
Greg KH Jan. 30, 2020, 2:22 p.m. UTC | #3
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 mbox series

Patch

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);
 }