2 * Intel Langwell USB OTG transceiver driver
3 * Copyright (C) 2008 - 2010, Intel Corporation.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
9 * This program is distributed in the hope it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
20 #ifndef __LANGWELL_OTG_H
21 #define __LANGWELL_OTG_H
23 #include <linux/usb/intel_mid_otg.h>
25 #define CI_USBCMD 0x30
26 # define USBCMD_RST BIT(1)
27 # define USBCMD_RS BIT(0)
28 #define CI_USBSTS 0x34
29 # define USBSTS_SLI BIT(8)
30 # define USBSTS_URI BIT(6)
31 # define USBSTS_PCI BIT(2)
32 #define CI_PORTSC1 0x74
33 # define PORTSC_PP BIT(12)
34 # define PORTSC_LS (BIT(11) | BIT(10))
35 # define PORTSC_SUSP BIT(7)
36 # define PORTSC_CCS BIT(0)
37 #define CI_HOSTPC1 0xb4
38 # define HOSTPC1_PHCD BIT(22)
40 # define OTGSC_DPIE BIT(30)
41 # define OTGSC_1MSE BIT(29)
42 # define OTGSC_BSEIE BIT(28)
43 # define OTGSC_BSVIE BIT(27)
44 # define OTGSC_ASVIE BIT(26)
45 # define OTGSC_AVVIE BIT(25)
46 # define OTGSC_IDIE BIT(24)
47 # define OTGSC_DPIS BIT(22)
48 # define OTGSC_1MSS BIT(21)
49 # define OTGSC_BSEIS BIT(20)
50 # define OTGSC_BSVIS BIT(19)
51 # define OTGSC_ASVIS BIT(18)
52 # define OTGSC_AVVIS BIT(17)
53 # define OTGSC_IDIS BIT(16)
54 # define OTGSC_DPS BIT(14)
55 # define OTGSC_1MST BIT(13)
56 # define OTGSC_BSE BIT(12)
57 # define OTGSC_BSV BIT(11)
58 # define OTGSC_ASV BIT(10)
59 # define OTGSC_AVV BIT(9)
60 # define OTGSC_ID BIT(8)
61 # define OTGSC_HABA BIT(7)
62 # define OTGSC_HADP BIT(6)
63 # define OTGSC_IDPU BIT(5)
64 # define OTGSC_DP BIT(4)
65 # define OTGSC_OT BIT(3)
66 # define OTGSC_HAAR BIT(2)
67 # define OTGSC_VC BIT(1)
68 # define OTGSC_VD BIT(0)
69 # define OTGSC_INTEN_MASK (0x7f << 24)
70 # define OTGSC_INT_MASK (0x5f << 24)
71 # define OTGSC_INTSTS_MASK (0x7f << 16)
72 #define CI_USBMODE 0xf8
73 # define USBMODE_CM (BIT(1) | BIT(0))
74 # define USBMODE_IDLE 0
75 # define USBMODE_DEVICE 0x2
76 # define USBMODE_HOST 0x3
77 #define USBCFG_ADDR 0xff10801c
79 # define USBCFG_VBUSVAL BIT(14)
80 # define USBCFG_AVALID BIT(13)
81 # define USBCFG_BVALID BIT(12)
82 # define USBCFG_SESEND BIT(11)
84 #define INTR_DUMMY_MASK (USBSTS_SLI | USBSTS_URI | USBSTS_PCI)
86 enum langwell_otg_timer_type
{
97 #define TA_WAIT_VRISE 100
98 #define TA_WAIT_BCON 30000
99 #define TA_AIDL_BDIS 15000
100 #define TB_ASE0_BRST 5000
102 #define TB_SRP_INIT 100
103 #define TB_SRP_FAIL 5500
104 #define TB_BUS_SUSPEND 500
106 struct langwell_otg_timer
{
107 unsigned long expires
; /* Number of count increase to timeout */
108 unsigned long count
; /* Tick counter */
109 void (*function
)(unsigned long); /* Timeout function */
110 unsigned long data
; /* Data passed to function */
111 struct list_head list
;
114 struct langwell_otg
{
115 struct intel_mid_otg_xceiv iotg
;
118 void __iomem
*usbcfg
; /* SCCBUSB config Reg */
123 struct work_struct work
;
124 struct workqueue_struct
*qwork
;
125 struct timer_list hsm_timer
;
130 struct notifier_block iotg_notifier
;
134 struct langwell_otg
*mid_xceiv_to_lnw(struct intel_mid_otg_xceiv
*iotg
)
136 return container_of(iotg
, struct langwell_otg
, iotg
);
139 #endif /* __LANGWELL_OTG_H__ */