linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/2] usb: phy: show USB charger type for user
@ 2020-01-16  3:28 Peter Chen
  2020-01-16  3:28 ` [PATCH v4 2/2] Doc: ABI: add usb charger uevent Peter Chen
  2020-01-24  8:40 ` [PATCH v4 1/2] usb: phy: show USB charger type for user Greg KH
  0 siblings, 2 replies; 5+ messages in thread
From: Peter Chen @ 2020-01-16  3:28 UTC (permalink / raw)
  To: balbi, gregkh; +Cc: linux-usb, linux-imx, jun.li, Peter Chen

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",
+};
+
 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);
 }
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH v4 2/2] Doc: ABI: add usb charger uevent
  2020-01-16  3:28 [PATCH v4 1/2] usb: phy: show USB charger type for user Peter Chen
@ 2020-01-16  3:28 ` Peter Chen
  2020-01-24  8:40 ` [PATCH v4 1/2] usb: phy: show USB charger type for user Greg KH
  1 sibling, 0 replies; 5+ messages in thread
From: Peter Chen @ 2020-01-16  3:28 UTC (permalink / raw)
  To: balbi, gregkh; +Cc: linux-usb, linux-imx, jun.li, Peter Chen

When the USB charger is inserted or removed, the users could get
USB charger state and type through the uevent.

Signed-off-by: Peter Chen <peter.chen@nxp.com>
---
Changes for v4
- Add explanation for charger type and related doc at usb.org

Changes for v3:
- Change kernel version for 5.6, and delete the kernel printk time

 Documentation/ABI/testing/usb-charger-uevent | 46 ++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 Documentation/ABI/testing/usb-charger-uevent

diff --git a/Documentation/ABI/testing/usb-charger-uevent b/Documentation/ABI/testing/usb-charger-uevent
new file mode 100644
index 000000000000..419a92dd0d86
--- /dev/null
+++ b/Documentation/ABI/testing/usb-charger-uevent
@@ -0,0 +1,46 @@
+What:		Raise a uevent when a USB charger is inserted or removed
+Date:		2020-01-14
+KernelVersion:	5.6
+Contact:	linux-usb@vger.kernel.org
+Description:	There are two USB charger states:
+		USB_CHARGER_ABSENT
+		USB_CHARGER_PRESENT
+		There are five USB charger types:
+		USB_CHARGER_UNKNOWN_TYPE: Charger type is unknown
+		USB_CHARGER_SDP_TYPE: Standard Downstream Port
+		USB_CHARGER_CDP_TYPE: Charging Downstream Port
+		USB_CHARGER_DCP_TYPE: Dedicated Charging Port
+		USB_CHARGER_ACA_TYPE: Accessory Charging Adapter
+		https://www.usb.org/document-library/battery-charging-v12-spec-and-adopters-agreement
+
+		Here are two examples taken using udevadm monitor -p when
+		USB charger is online:
+		UDEV  change   /devices/soc0/usbphynop1 (platform)
+		ACTION=change
+		DEVPATH=/devices/soc0/usbphynop1
+		DRIVER=usb_phy_generic
+		MODALIAS=of:Nusbphynop1T(null)Cusb-nop-xceiv
+		OF_COMPATIBLE_0=usb-nop-xceiv
+		OF_COMPATIBLE_N=1
+		OF_FULLNAME=/usbphynop1
+		OF_NAME=usbphynop1
+		SEQNUM=2493
+		SUBSYSTEM=platform
+		USB_CHARGER_STATE=USB_CHARGER_PRESENT
+		USB_CHARGER_TYPE=USB_CHARGER_SDP_TYPE
+		USEC_INITIALIZED=227422826
+
+		USB charger is offline:
+		KERNEL change   /devices/soc0/usbphynop1 (platform)
+		ACTION=change
+		DEVPATH=/devices/soc0/usbphynop1
+		DRIVER=usb_phy_generic
+		MODALIAS=of:Nusbphynop1T(null)Cusb-nop-xceiv
+		OF_COMPATIBLE_0=usb-nop-xceiv
+		OF_COMPATIBLE_N=1
+		OF_FULLNAME=/usbphynop1
+		OF_NAME=usbphynop1
+		SEQNUM=2494
+		SUBSYSTEM=platform
+		USB_CHARGER_STATE=USB_CHARGER_ABSENT
+		USB_CHARGER_TYPE=USB_CHARGER_UNKNOWN_TYPE
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] usb: phy: show USB charger type for user
  2020-01-16  3:28 [PATCH v4 1/2] usb: phy: show USB charger type for user Peter Chen
  2020-01-16  3:28 ` [PATCH v4 2/2] Doc: ABI: add usb charger uevent Peter Chen
@ 2020-01-24  8:40 ` Greg KH
  2020-01-30 14:05   ` Peter Chen
  1 sibling, 1 reply; 5+ messages in thread
From: Greg KH @ 2020-01-24  8:40 UTC (permalink / raw)
  To: Peter Chen; +Cc: balbi, linux-usb, linux-imx, jun.li

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH v4 1/2] usb: phy: show USB charger type for user
  2020-01-24  8:40 ` [PATCH v4 1/2] usb: phy: show USB charger type for user Greg KH
@ 2020-01-30 14:05   ` Peter Chen
  2020-01-30 14:22     ` Greg KH
  0 siblings, 1 reply; 5+ messages in thread
From: Peter Chen @ 2020-01-30 14:05 UTC (permalink / raw)
  To: Greg KH; +Cc: balbi, linux-usb, dl-linux-imx, Jun Li

 
> > 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v4 1/2] usb: phy: show USB charger type for user
  2020-01-30 14:05   ` Peter Chen
@ 2020-01-30 14:22     ` Greg KH
  0 siblings, 0 replies; 5+ messages in thread
From: Greg KH @ 2020-01-30 14:22 UTC (permalink / raw)
  To: Peter Chen; +Cc: balbi, linux-usb, dl-linux-imx, Jun Li

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2020-01-30 14:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-16  3:28 [PATCH v4 1/2] usb: phy: show USB charger type for user Peter Chen
2020-01-16  3:28 ` [PATCH v4 2/2] Doc: ABI: add usb charger uevent Peter Chen
2020-01-24  8:40 ` [PATCH v4 1/2] usb: phy: show USB charger type for user Greg KH
2020-01-30 14:05   ` Peter Chen
2020-01-30 14:22     ` Greg KH

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).