blob: 0d8b61be18cc819b78c03dd800a5f8d04791c454 [file] [log] [blame]
Ido Shayevitzcdeef4c2012-05-29 13:17:41 +02001/**
2 * dwc3_otg.h - DesignWare USB3 DRD Controller OTG
3 *
4 * Copyright (c) 2012, Code Aurora Forum. All rights reserved.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 and
8 * only version 2 as published by the Free Software Foundation.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 */
15
16#ifndef __LINUX_USB_DWC3_OTG_H
17#define __LINUX_USB_DWC3_OTG_H
18
19#include <linux/workqueue.h>
20
21#include <linux/usb/otg.h>
22
Manu Gautam8c642812012-06-07 10:35:10 +053023struct dwc3_charger;
24
Ido Shayevitzcdeef4c2012-05-29 13:17:41 +020025/**
26 * struct dwc3_otg: OTG driver data. Shared by HCD and DCD.
27 * @otg: USB OTG Transceiver structure.
28 * @irq: IRQ number assigned for HSUSB controller.
29 * @regs: ioremapped register base address.
30 * @sm_work: OTG state machine work.
Manu Gautam8c642812012-06-07 10:35:10 +053031 * @charger: DWC3 external charger detector
32 * @inputs: OTG state machine inputs
Ido Shayevitzcdeef4c2012-05-29 13:17:41 +020033 */
34struct dwc3_otg {
35 struct usb_otg otg;
36 int irq;
37 void __iomem *regs;
38 struct work_struct sm_work;
Manu Gautam8c642812012-06-07 10:35:10 +053039 struct dwc3_charger *charger;
40#define ID 0
41#define B_SESS_VLD 1
42 unsigned long inputs;
Ido Shayevitzcdeef4c2012-05-29 13:17:41 +020043};
Manu Gautam8c642812012-06-07 10:35:10 +053044
45/**
46 * USB charger types
47 *
48 * DWC3_INVALID_CHARGER Invalid USB charger.
49 * DWC3_SDP_CHARGER Standard downstream port. Refers to a downstream port
50 * on USB compliant host/hub.
51 * DWC3_DCP_CHARGER Dedicated charger port (AC charger/ Wall charger).
52 * DWC3_CDP_CHARGER Charging downstream port. Enumeration can happen and
53 * IDEV_CHG_MAX can be drawn irrespective of USB state.
54 */
55enum dwc3_chg_type {
56 DWC3_INVALID_CHARGER = 0,
57 DWC3_SDP_CHARGER,
58 DWC3_DCP_CHARGER,
59 DWC3_CDP_CHARGER,
60};
61
62struct dwc3_charger {
63 enum dwc3_chg_type chg_type;
64
65 /* start/stop charger detection, provided by external charger module */
66 void (*start_detection)(struct dwc3_charger *charger, bool start);
67
68 /* to notify OTG about charger detection completion, provided by OTG */
69 void (*notify_detection_complete)(struct usb_otg *otg,
70 struct dwc3_charger *charger);
71};
72
73/* for external charger driver */
74extern int dwc3_set_charger(struct usb_otg *otg, struct dwc3_charger *charger);
75
Ido Shayevitzcdeef4c2012-05-29 13:17:41 +020076#endif /* __LINUX_USB_DWC3_OTG_H */