86 lines
2.6 KiB
Diff
86 lines
2.6 KiB
Diff
From 76ca24d389a3f5eaf11d94efab15d5bef11a0a74 Mon Sep 17 00:00:00 2001
|
|
From: Felipe Balbi <felipe.balbi@nokia.com>
|
|
Date: Thu, 17 Dec 2009 13:01:36 +0200
|
|
Subject: [PATCH 10/10] USB: otg: add notifier support
|
|
|
|
Patch-mainline: 2.6.34
|
|
Git-commit: e9a20171dfa0aa134d2211126d1310f2daea52cf
|
|
|
|
The notifier will be used to communicate usb events
|
|
to other drivers like the charger chip.
|
|
|
|
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>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
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 {
|
|
+ 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 */
|
|
+};
|
|
+
|
|
#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;
|
|
+
|
|
/* 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);
|
|
--
|
|
1.6.0.4
|
|
|