public inbox for linux-omap@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: Felipe Balbi <felipe.balbi@nokia.com>
Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	Anton Vorontsov <avorontsov@ru.mvista.com>,
	Grazvydas Ignotas <notasas@gmail.com>,
	Madhusudhan Chikkature <madhu.cr@ti.com>,
	linux-omap@vger.kernel.org, Greg Kroah-Hartman <gregkh@suse.de>
Subject: Re: [RFC/PATCH 1/5] usb: otg: add notifier support
Date: Tue, 26 Jan 2010 03:16:20 -0800	[thread overview]
Message-ID: <201001260316.20529.david-b@pacbell.net> (raw)
In-Reply-To: <1260531086-23857-2-git-send-email-felipe.balbi@nokia.com>

On Friday 11 December 2009, Felipe Balbi wrote:
> The notifier will be used to communicate usb events
> to other drivers like the charger chip.

Good idea ... but not OTG-specific.  It doesn't seem to me
that charging hookups belong in that header at all.

In fact, usb_gadget_vbus_draw() might better be implemented
as such a notifier call, removing that configuration mess
from the usb gadget drivers ("how can I know what charger
to use??").  That would be the most common situation:  a
peripheral-only device.

And in fact, OTG can be treated as a trivial superset of
peripheral-only USB.  (In terms of charger support, only!!)

I'd vote to convert all the USB-to-charger interfaces so
they use notifiers.  After fixing the events ... see
comments below.  :)


> This can be used as source of information to kick
> usb charger detection as described by the USB
> Battery Charging Specification 1.1 and/or to
> pass bMaxPower field of selected usb_configuration
> to charger chip in order to use that information
> as input current on the charging profile
> setup.
> 
> Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
> ---
>  include/linux/usb/otg.h |   25 +++++++++++++++++++++++++
>  1 files changed, 25 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
> index 52bb917..6c0b676 100644
> --- a/include/linux/usb/otg.h
> +++ b/include/linux/usb/otg.h
> @@ -9,6 +9,8 @@
>  #ifndef __LINUX_USB_OTG_H
>  #define __LINUX_USB_OTG_H
>  
> +#include <linux/notifier.h>
> +
>  /* OTG defines lots of enumeration states before device reset */
>  enum usb_otg_state {
>  	OTG_STATE_UNDEFINED = 0,
> @@ -33,6 +35,14 @@ enum usb_otg_state {
>  	OTG_STATE_A_VBUS_ERR,
>  };
>  
> +enum usb_xceiv_events {

Let's keep charger events separate from anything else,
like "enter host mode" or "enter peripheral mode" (or
even "disconnect").  The audiences for any other types
of event would be entirely different.

Right now there's a mess in terms of charger hookup,
so getting that straight is IMO a priority over any
other type of event.  Using events will decouple a
bunch of drivers, and simplify driver configuration.


> +	USB_EVENT_NONE,         /* no events or cable disconnected */
> +	USB_EVENT_VBUS,         /* vbus valid event */
> +	USB_EVENT_ID,           /* id was grounded */
> +	USB_EVENT_CHARGER,      /* usb dedicated charger */
> +	USB_EVENT_ENUMERATED,   /* gadget driver enumerated */

Those seem like the wrong events.  The right events for a charger
would be more along the lines of:

 - For peripheral:  "you may use N milliAmperes now".
 - General:  "Don't Charge" (a.k.a. "use 0 mA").

I don't see how "N" would be passed with those events ...

Haven't looked at the details of the charger spec, but
those two events are the *basics* from the USB 2.0 spec,
so "official" charger hardware wouldn't be less capable.

Thing like different levels of VBUS validity, ID grounding,
and so forth ... wouldn't be very relevant.  An OTG driver
will do various things, internally, when ID grounds; but
anything else is a function of what role eventually gets
negotiated.  And for the charger, they all add up to "Don't
Charge" (since ID grounded means A-role, sourcing power).

A host *might* want to be able to say things like "supply
up to N milliAmperes now", e.g. to let a regulator choose
the most efficient mode.


> +};
> +
>  #define USB_OTG_PULLUP_ID		(1 << 0)
>  #define USB_OTG_PULLDOWN_DP		(1 << 1)
>  #define USB_OTG_PULLDOWN_DM		(1 << 2)
> @@ -70,6 +80,9 @@ struct otg_transceiver {
>  	struct otg_io_access_ops	*io_ops;
>  	void __iomem			*io_priv;
>  
> +	/* for notification of usb_xceiv_events */
> +	struct blocking_notifier_head	notifier;

Why "blocking"?  That seems kind of unnatural; for example,
the main users -- like usb_gadget_vbus_draw() -- would be
called in IRQ context (blocking not allowed).

> +
>  	/* to pass extra port status to the root hub */
>  	u16			port_status;
>  	u16			port_change;
> @@ -203,6 +216,18 @@ otg_start_srp(struct otg_transceiver *otg)
>  	return otg->start_srp(otg);
>  }
>  
> +/* notifiers */
> +static inline int
> +otg_register_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
> +{
> +	return blocking_notifier_chain_register(&otg->notifier, nb);
> +}
> +
> +static inline void
> +otg_unregister_notifier(struct otg_transceiver *otg, struct notifier_block *nb)
> +{
> +	blocking_notifier_chain_unregister(&otg->notifier, nb);
> +}
>  
>  /* for OTG controller drivers (and maybe other stuff) */
>  extern int usb_bus_start_enum(struct usb_bus *bus, unsigned port_num);
> 

  parent reply	other threads:[~2010-01-26 11:16 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-11-27 14:44 [PATCH] power_supply: Add driver for TWL4030/TPS65950 BCI charger Grazvydas Ignotas
2009-11-27 14:54 ` Anton Vorontsov
2009-11-27 15:47   ` Grazvydas Ignotas
2009-11-27 16:23     ` Mark Brown
2009-11-30 18:45 ` Madhusudhan
2009-11-30 18:58   ` Anton Vorontsov
2009-12-02 20:38     ` Grazvydas Ignotas
2009-12-02 21:27       ` Anton Vorontsov
2009-12-02 21:32         ` Grazvydas Ignotas
2009-11-30 21:33   ` Grazvydas Ignotas
2009-12-02 16:59     ` Madhusudhan
2009-12-02 17:33 ` Felipe Balbi
2009-12-02 20:34   ` Grazvydas Ignotas
2009-12-02 20:49     ` Felipe Balbi
2009-12-02 21:29       ` Grazvydas Ignotas
2009-12-02 21:54         ` Anton Vorontsov
2009-12-02 22:31           ` Felipe Balbi
2009-12-02 22:59             ` Anton Vorontsov
2009-12-03  8:39               ` Felipe Balbi
2009-12-03 10:55                 ` Grazvydas Ignotas
2009-12-03 11:03                   ` Felipe Balbi
2009-12-10 14:09                     ` Grazvydas Ignotas
2009-12-10 14:18                       ` Anton Vorontsov
2009-12-10 14:21                         ` Felipe Balbi
2009-12-10 14:44                           ` Anton Vorontsov
2009-12-10 16:51                             ` Felipe Balbi
2009-12-10 20:51                               ` Grazvydas Ignotas
2009-12-11 11:31                                 ` [RFC/PATCH 1/5] usb: otg: add notifier support Felipe Balbi
     [not found]                                   ` <1260531086-23857-2-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2009-12-11 11:55                                     ` Mark Brown
2009-12-11 11:58                                       ` Felipe Balbi
2010-01-26 11:16                                   ` David Brownell [this message]
2010-01-26 13:11                                     ` Mark Brown
2010-01-26 13:35                                       ` David Brownell
2010-01-26 14:14                                         ` Felipe Balbi
2010-01-26 14:24                                           ` Oliver Neukum
     [not found]                                             ` <201001261524.49661.oliver-GvhC2dPhHPQdnm+yROfE0A@public.gmane.org>
2010-01-26 14:30                                               ` Felipe Balbi
2010-01-26 15:16                                                 ` David Brownell
2010-01-26 15:21                                           ` David Brownell
2010-01-26 18:50                                             ` Felipe Balbi
     [not found]                                         ` <201001260535.21689.david-b-yBeKhBN/0LDR7s880joybQ@public.gmane.org>
2010-01-26 14:21                                           ` Mark Brown
2010-01-26 15:44                                             ` David Brownell
2010-01-26 16:13                                               ` Mark Brown
2010-01-26 14:10                                     ` Felipe Balbi
2010-01-26 14:19                                       ` Felipe Balbi
     [not found]                                         ` <20100126141935.GG10690-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-01-26 15:33                                           ` David Brownell
2010-01-26 15:07                                       ` David Brownell
2010-01-26 19:09                                         ` Felipe Balbi
     [not found]                                           ` <20100126190934.GC20049-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-01-26 19:15                                             ` Felipe Balbi
2009-12-11 11:31                                 ` [RFC/PATCH 2/5] usb: otg: twl4030: add support for notifier Felipe Balbi
     [not found]                                   ` <1260531086-23857-3-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2009-12-11 17:22                                     ` sai pavan
     [not found]                                       ` <c60a9cb0912110922g10fd0cc7m3b3430731db5ed81-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-12-11 20:40                                         ` Felipe Balbi
2009-12-12 18:34                                           ` Mark Brown
2009-12-14 10:30                                             ` [RFC/PATCH 0/4] twl4030 threaded_irq support Felipe Balbi
     [not found]                                               ` <1260786654-13294-1-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2010-01-26  7:06                                                 ` David Brownell
2010-01-26  7:36                                                   ` David Brownell
2010-01-26 10:07                                                   ` Mark Brown
2010-01-26 11:02                                                   ` Felipe Balbi
2010-01-26 12:18                                                     ` David Brownell
     [not found]                                             ` <20091212183410.GF3092-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2009-12-14 10:30                                               ` [RFC/PATCH 1/4] input: keyboard: twl4030: move to request_threaded_irq Felipe Balbi
2009-12-14 10:30                                               ` [RFC/PATCH 2/4] input: misc: " Felipe Balbi
2009-12-14 11:31                                                 ` Shilimkar, Santosh
2009-12-14 11:40                                                   ` Felipe Balbi
2009-12-14 13:16                                                     ` Shilimkar, Santosh
2009-12-14 10:30                                               ` [RFC/PATCH 4/4] usb: otg: " Felipe Balbi
2009-12-14 10:30                                             ` [RFC/PATCH 3/4] rtc: " Felipe Balbi
     [not found]                                 ` <6ed0b2680912101251jeec28e6i216dfc51caab13aa-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2009-12-11 11:31                                   ` [RFC/PATCH 0/5] usb transceiver notifier Felipe Balbi
2009-12-11 11:31                                   ` [RFC/PATCH 3/5] usb: musb: add support for ulpi block Felipe Balbi
2009-12-11 11:31                                   ` [RFC/PATCH 4/5] usb: musb: isp1704: add registers from isp1704 Felipe Balbi
     [not found]                                     ` <1260531086-23857-5-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2009-12-11 12:35                                       ` Krogerus Heikki (EXT-Teleca/Helsinki)
2009-12-11 12:57                                         ` Felipe Balbi
2009-12-11 11:31                                 ` [RFC/PATCH 5/5] usb: musb: musb supports otg notifier Felipe Balbi
     [not found]                                   ` <1260531086-23857-6-git-send-email-felipe.balbi-xNZwKgViW5gAvxtiuMwx3w@public.gmane.org>
2009-12-11 11:40                                     ` Felipe Balbi
2009-12-30 19:07                             ` [PATCH] power_supply: Add driver for TWL4030/TPS65950 BCI charger Madhusudhan
2009-12-10 14:19                       ` Felipe Balbi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201001260316.20529.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=avorontsov@ru.mvista.com \
    --cc=felipe.balbi@nokia.com \
    --cc=gregkh@suse.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=madhu.cr@ti.com \
    --cc=notasas@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox