Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
d59abb93
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d59abb93
编写于
12月 16, 2013
作者:
G
Greg Kroah-Hartman
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 3.13-rc4 into usb-next
上级
319e2e3f
3d724fa5
变更
121
展开全部
隐藏空白更改
内联
并排
Showing
121 changed file
with
6998 addition
and
5242 deletion
+6998
-5242
drivers/staging/dwc2/hcd.c
drivers/staging/dwc2/hcd.c
+2
-0
drivers/staging/octeon-usb/octeon-hcd.c
drivers/staging/octeon-usb/octeon-hcd.c
+1
-0
drivers/staging/ozwpan/ozhcd.c
drivers/staging/ozwpan/ozhcd.c
+2
-0
drivers/usb/atm/usbatm.c
drivers/usb/atm/usbatm.c
+4
-4
drivers/usb/c67x00/c67x00-hcd.c
drivers/usb/c67x00/c67x00-hcd.c
+2
-0
drivers/usb/chipidea/Makefile
drivers/usb/chipidea/Makefile
+1
-1
drivers/usb/chipidea/ci_hdrc_pci.c
drivers/usb/chipidea/ci_hdrc_pci.c
+1
-1
drivers/usb/chipidea/core.c
drivers/usb/chipidea/core.c
+2
-1
drivers/usb/chipidea/host.c
drivers/usb/chipidea/host.c
+2
-1
drivers/usb/chipidea/usbmisc_imx.c
drivers/usb/chipidea/usbmisc_imx.c
+46
-0
drivers/usb/class/cdc-acm.c
drivers/usb/class/cdc-acm.c
+104
-12
drivers/usb/class/cdc-acm.h
drivers/usb/class/cdc-acm.h
+3
-0
drivers/usb/core/config.c
drivers/usb/core/config.c
+0
-7
drivers/usb/core/driver.c
drivers/usb/core/driver.c
+2
-2
drivers/usb/core/hcd-pci.c
drivers/usb/core/hcd-pci.c
+1
-0
drivers/usb/core/hcd.c
drivers/usb/core/hcd.c
+31
-7
drivers/usb/core/hub.c
drivers/usb/core/hub.c
+50
-35
drivers/usb/core/quirks.c
drivers/usb/core/quirks.c
+0
-3
drivers/usb/core/urb.c
drivers/usb/core/urb.c
+2
-2
drivers/usb/dwc3/dwc3-pci.c
drivers/usb/dwc3/dwc3-pci.c
+1
-1
drivers/usb/gadget/amd5536udc.c
drivers/usb/gadget/amd5536udc.c
+1
-1
drivers/usb/gadget/fsl_qe_udc.c
drivers/usb/gadget/fsl_qe_udc.c
+1
-1
drivers/usb/gadget/fsl_udc_core.c
drivers/usb/gadget/fsl_udc_core.c
+1
-1
drivers/usb/gadget/pch_udc.c
drivers/usb/gadget/pch_udc.c
+1
-1
drivers/usb/host/Makefile
drivers/usb/host/Makefile
+0
-2
drivers/usb/host/ehci-atmel.c
drivers/usb/host/ehci-atmel.c
+1
-0
drivers/usb/host/ehci-dbg.c
drivers/usb/host/ehci-dbg.c
+5
-5
drivers/usb/host/ehci-exynos.c
drivers/usb/host/ehci-exynos.c
+1
-0
drivers/usb/host/ehci-fsl.c
drivers/usb/host/ehci-fsl.c
+2
-1
drivers/usb/host/ehci-grlib.c
drivers/usb/host/ehci-grlib.c
+1
-0
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-hcd.c
+3
-11
drivers/usb/host/ehci-hub.c
drivers/usb/host/ehci-hub.c
+2
-4
drivers/usb/host/ehci-mv.c
drivers/usb/host/ehci-mv.c
+2
-1
drivers/usb/host/ehci-mxc.c
drivers/usb/host/ehci-mxc.c
+1
-0
drivers/usb/host/ehci-octeon.c
drivers/usb/host/ehci-octeon.c
+1
-0
drivers/usb/host/ehci-omap.c
drivers/usb/host/ehci-omap.c
+1
-0
drivers/usb/host/ehci-orion.c
drivers/usb/host/ehci-orion.c
+1
-0
drivers/usb/host/ehci-platform.c
drivers/usb/host/ehci-platform.c
+1
-0
drivers/usb/host/ehci-pmcmsp.c
drivers/usb/host/ehci-pmcmsp.c
+3
-1
drivers/usb/host/ehci-ppc-of.c
drivers/usb/host/ehci-ppc-of.c
+1
-0
drivers/usb/host/ehci-ps3.c
drivers/usb/host/ehci-ps3.c
+1
-0
drivers/usb/host/ehci-q.c
drivers/usb/host/ehci-q.c
+2
-2
drivers/usb/host/ehci-sead3.c
drivers/usb/host/ehci-sead3.c
+1
-0
drivers/usb/host/ehci-sh.c
drivers/usb/host/ehci-sh.c
+1
-0
drivers/usb/host/ehci-spear.c
drivers/usb/host/ehci-spear.c
+1
-0
drivers/usb/host/ehci-tegra.c
drivers/usb/host/ehci-tegra.c
+1
-0
drivers/usb/host/ehci-tilegx.c
drivers/usb/host/ehci-tilegx.c
+1
-0
drivers/usb/host/ehci-w90x900.c
drivers/usb/host/ehci-w90x900.c
+1
-0
drivers/usb/host/ehci-xilinx-of.c
drivers/usb/host/ehci-xilinx-of.c
+3
-1
drivers/usb/host/ehci.h
drivers/usb/host/ehci.h
+4
-4
drivers/usb/host/fhci-hcd.c
drivers/usb/host/fhci-hcd.c
+2
-0
drivers/usb/host/fotg210-hcd.c
drivers/usb/host/fotg210-hcd.c
+14
-82
drivers/usb/host/fotg210.h
drivers/usb/host/fotg210.h
+0
-8
drivers/usb/host/fusbh200-hcd.c
drivers/usb/host/fusbh200-hcd.c
+10
-88
drivers/usb/host/fusbh200.h
drivers/usb/host/fusbh200.h
+0
-12
drivers/usb/host/hwa-hc.c
drivers/usb/host/hwa-hc.c
+12
-11
drivers/usb/host/imx21-dbg.c
drivers/usb/host/imx21-dbg.c
+4
-0
drivers/usb/host/imx21-hcd.c
drivers/usb/host/imx21-hcd.c
+6
-1
drivers/usb/host/imx21-hcd.h
drivers/usb/host/imx21-hcd.h
+4
-0
drivers/usb/host/isp116x-hcd.c
drivers/usb/host/isp116x-hcd.c
+3
-1
drivers/usb/host/isp1362-hcd.c
drivers/usb/host/isp1362-hcd.c
+3
-1
drivers/usb/host/isp1760-hcd.c
drivers/usb/host/isp1760-hcd.c
+1
-0
drivers/usb/host/ohci-at91.c
drivers/usb/host/ohci-at91.c
+12
-3
drivers/usb/host/ohci-da8xx.c
drivers/usb/host/ohci-da8xx.c
+14
-4
drivers/usb/host/ohci-dbg.c
drivers/usb/host/ohci-dbg.c
+0
-69
drivers/usb/host/ohci-exynos.c
drivers/usb/host/ohci-exynos.c
+7
-16
drivers/usb/host/ohci-hcd.c
drivers/usb/host/ohci-hcd.c
+10
-19
drivers/usb/host/ohci-hub.c
drivers/usb/host/ohci-hub.c
+2
-4
drivers/usb/host/ohci-jz4740.c
drivers/usb/host/ohci-jz4740.c
+1
-0
drivers/usb/host/ohci-nxp.c
drivers/usb/host/ohci-nxp.c
+3
-1
drivers/usb/host/ohci-octeon.c
drivers/usb/host/ohci-octeon.c
+2
-0
drivers/usb/host/ohci-omap.c
drivers/usb/host/ohci-omap.c
+1
-0
drivers/usb/host/ohci-omap3.c
drivers/usb/host/ohci-omap3.c
+1
-0
drivers/usb/host/ohci-platform.c
drivers/usb/host/ohci-platform.c
+2
-0
drivers/usb/host/ohci-ppc-of.c
drivers/usb/host/ohci-ppc-of.c
+3
-1
drivers/usb/host/ohci-ps3.c
drivers/usb/host/ohci-ps3.c
+1
-0
drivers/usb/host/ohci-pxa27x.c
drivers/usb/host/ohci-pxa27x.c
+3
-1
drivers/usb/host/ohci-q.c
drivers/usb/host/ohci-q.c
+4
-8
drivers/usb/host/ohci-s3c2410.c
drivers/usb/host/ohci-s3c2410.c
+5
-17
drivers/usb/host/ohci-sa1111.c
drivers/usb/host/ohci-sa1111.c
+3
-1
drivers/usb/host/ohci-sm501.c
drivers/usb/host/ohci-sm501.c
+1
-0
drivers/usb/host/ohci-spear.c
drivers/usb/host/ohci-spear.c
+12
-4
drivers/usb/host/ohci-tilegx.c
drivers/usb/host/ohci-tilegx.c
+1
-0
drivers/usb/host/ohci-tmio.c
drivers/usb/host/ohci-tmio.c
+1
-0
drivers/usb/host/ohci.h
drivers/usb/host/ohci.h
+1
-12
drivers/usb/host/oxu210hp-hcd.c
drivers/usb/host/oxu210hp-hcd.c
+5
-0
drivers/usb/host/r8a66597-hcd.c
drivers/usb/host/r8a66597-hcd.c
+2
-1
drivers/usb/host/sl811-hcd.c
drivers/usb/host/sl811-hcd.c
+2
-0
drivers/usb/host/u132-hcd.c
drivers/usb/host/u132-hcd.c
+2
-1
drivers/usb/host/uhci-debug.c
drivers/usb/host/uhci-debug.c
+2
-2
drivers/usb/host/uhci-grlib.c
drivers/usb/host/uhci-grlib.c
+1
-0
drivers/usb/host/uhci-hcd.c
drivers/usb/host/uhci-hcd.c
+25
-19
drivers/usb/host/uhci-pci.c
drivers/usb/host/uhci-pci.c
+1
-1
drivers/usb/host/uhci-platform.c
drivers/usb/host/uhci-platform.c
+1
-0
drivers/usb/host/whci/hcd.c
drivers/usb/host/whci/hcd.c
+1
-0
drivers/usb/host/xhci-dbg.c
drivers/usb/host/xhci-dbg.c
+21
-21
drivers/usb/host/xhci-hub.c
drivers/usb/host/xhci-hub.c
+51
-55
drivers/usb/host/xhci-mem.c
drivers/usb/host/xhci-mem.c
+34
-34
drivers/usb/host/xhci-pci.c
drivers/usb/host/xhci-pci.c
+1
-0
drivers/usb/host/xhci-plat.c
drivers/usb/host/xhci-plat.c
+2
-0
drivers/usb/host/xhci-ring.c
drivers/usb/host/xhci-ring.c
+20
-22
drivers/usb/host/xhci-trace.h
drivers/usb/host/xhci-trace.h
+3
-3
drivers/usb/host/xhci.c
drivers/usb/host/xhci.c
+112
-102
drivers/usb/host/xhci.h
drivers/usb/host/xhci.h
+22
-43
drivers/usb/misc/usbtest.c
drivers/usb/misc/usbtest.c
+13
-4
drivers/usb/musb/musb_host.c
drivers/usb/musb/musb_host.c
+1
-0
drivers/usb/phy/phy-msm-usb.c
drivers/usb/phy/phy-msm-usb.c
+1
-0
drivers/usb/phy/phy-mv-usb.c
drivers/usb/phy/phy-mv-usb.c
+4
-2
drivers/usb/renesas_usbhs/mod_host.c
drivers/usb/renesas_usbhs/mod_host.c
+1
-0
drivers/usb/storage/protocol.c
drivers/usb/storage/protocol.c
+27
-54
drivers/usb/wusbcore/cbaf.c
drivers/usb/wusbcore/cbaf.c
+4
-4
drivers/usb/wusbcore/security.c
drivers/usb/wusbcore/security.c
+12
-10
drivers/usb/wusbcore/wa-hc.h
drivers/usb/wusbcore/wa-hc.h
+3
-4
drivers/usb/wusbcore/wa-rpipe.c
drivers/usb/wusbcore/wa-rpipe.c
+5
-5
drivers/usb/wusbcore/wa-xfer.c
drivers/usb/wusbcore/wa-xfer.c
+129
-80
drivers/uwb/umc-bus.c
drivers/uwb/umc-bus.c
+1
-1
firmware/emi62/bitstream.HEX
firmware/emi62/bitstream.HEX
+6030
-4295
include/linux/scatterlist.h
include/linux/scatterlist.h
+1
-0
include/linux/usb/hcd.h
include/linux/usb/hcd.h
+3
-0
include/linux/uwb/umc.h
include/linux/uwb/umc.h
+1
-1
lib/scatterlist.c
lib/scatterlist.c
+2
-1
未找到文件。
drivers/staging/dwc2/hcd.c
浏览文件 @
d59abb93
...
@@ -2921,6 +2921,8 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
...
@@ -2921,6 +2921,8 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
if
(
retval
<
0
)
if
(
retval
<
0
)
goto
error3
;
goto
error3
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
dwc2_hcd_dump_state
(
hsotg
);
dwc2_hcd_dump_state
(
hsotg
);
dwc2_enable_global_interrupts
(
hsotg
);
dwc2_enable_global_interrupts
(
hsotg
);
...
...
drivers/staging/octeon-usb/octeon-hcd.c
浏览文件 @
d59abb93
...
@@ -3498,6 +3498,7 @@ static int octeon_usb_driver_probe(struct device *dev)
...
@@ -3498,6 +3498,7 @@ static int octeon_usb_driver_probe(struct device *dev)
kfree
(
hcd
);
kfree
(
hcd
);
return
-
1
;
return
-
1
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
dev_dbg
(
dev
,
"Registered HCD for port %d on irq %d
\n
"
,
usb_num
,
irq
);
dev_dbg
(
dev
,
"Registered HCD for port %d on irq %d
\n
"
,
usb_num
,
irq
);
...
...
drivers/staging/ozwpan/ozhcd.c
浏览文件 @
d59abb93
...
@@ -2270,6 +2270,8 @@ static int oz_plat_probe(struct platform_device *dev)
...
@@ -2270,6 +2270,8 @@ static int oz_plat_probe(struct platform_device *dev)
usb_put_hcd
(
hcd
);
usb_put_hcd
(
hcd
);
return
-
1
;
return
-
1
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
spin_lock_bh
(
&
g_hcdlock
);
spin_lock_bh
(
&
g_hcdlock
);
g_ozhcd
=
ozhcd
;
g_ozhcd
=
ozhcd
;
spin_unlock_bh
(
&
g_hcdlock
);
spin_unlock_bh
(
&
g_hcdlock
);
...
...
drivers/usb/atm/usbatm.c
浏览文件 @
d59abb93
...
@@ -170,9 +170,9 @@ struct usbatm_control {
...
@@ -170,9 +170,9 @@ struct usbatm_control {
static
void
usbatm_atm_dev_close
(
struct
atm_dev
*
atm_dev
);
static
void
usbatm_atm_dev_close
(
struct
atm_dev
*
atm_dev
);
static
int
usbatm_atm_open
(
struct
atm_vcc
*
vcc
);
static
int
usbatm_atm_open
(
struct
atm_vcc
*
vcc
);
static
void
usbatm_atm_close
(
struct
atm_vcc
*
vcc
);
static
void
usbatm_atm_close
(
struct
atm_vcc
*
vcc
);
static
int
usbatm_atm_ioctl
(
struct
atm_dev
*
atm_dev
,
unsigned
int
cmd
,
void
__user
*
arg
);
static
int
usbatm_atm_ioctl
(
struct
atm_dev
*
atm_dev
,
unsigned
int
cmd
,
void
__user
*
arg
);
static
int
usbatm_atm_send
(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
static
int
usbatm_atm_send
(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
);
static
int
usbatm_atm_proc_read
(
struct
atm_dev
*
atm_dev
,
loff_t
*
pos
,
char
*
page
);
static
int
usbatm_atm_proc_read
(
struct
atm_dev
*
atm_dev
,
loff_t
*
pos
,
char
*
page
);
static
struct
atmdev_ops
usbatm_atm_devops
=
{
static
struct
atmdev_ops
usbatm_atm_devops
=
{
.
dev_close
=
usbatm_atm_dev_close
,
.
dev_close
=
usbatm_atm_dev_close
,
...
@@ -739,7 +739,7 @@ static void usbatm_atm_dev_close(struct atm_dev *atm_dev)
...
@@ -739,7 +739,7 @@ static void usbatm_atm_dev_close(struct atm_dev *atm_dev)
usbatm_put_instance
(
instance
);
/* taken in usbatm_atm_init */
usbatm_put_instance
(
instance
);
/* taken in usbatm_atm_init */
}
}
static
int
usbatm_atm_proc_read
(
struct
atm_dev
*
atm_dev
,
loff_t
*
pos
,
char
*
page
)
static
int
usbatm_atm_proc_read
(
struct
atm_dev
*
atm_dev
,
loff_t
*
pos
,
char
*
page
)
{
{
struct
usbatm_data
*
instance
=
atm_dev
->
dev_data
;
struct
usbatm_data
*
instance
=
atm_dev
->
dev_data
;
int
left
=
*
pos
;
int
left
=
*
pos
;
...
@@ -895,7 +895,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc)
...
@@ -895,7 +895,7 @@ static void usbatm_atm_close(struct atm_vcc *vcc)
}
}
static
int
usbatm_atm_ioctl
(
struct
atm_dev
*
atm_dev
,
unsigned
int
cmd
,
static
int
usbatm_atm_ioctl
(
struct
atm_dev
*
atm_dev
,
unsigned
int
cmd
,
void
__user
*
arg
)
void
__user
*
arg
)
{
{
struct
usbatm_data
*
instance
=
atm_dev
->
dev_data
;
struct
usbatm_data
*
instance
=
atm_dev
->
dev_data
;
...
...
drivers/usb/c67x00/c67x00-hcd.c
浏览文件 @
d59abb93
...
@@ -384,6 +384,8 @@ int c67x00_hcd_probe(struct c67x00_sie *sie)
...
@@ -384,6 +384,8 @@ int c67x00_hcd_probe(struct c67x00_sie *sie)
goto
err2
;
goto
err2
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
spin_lock_irqsave
(
&
sie
->
lock
,
flags
);
spin_lock_irqsave
(
&
sie
->
lock
,
flags
);
sie
->
private_data
=
c67x00
;
sie
->
private_data
=
c67x00
;
sie
->
irq
=
c67x00_hcd_irq
;
sie
->
irq
=
c67x00_hcd_irq
;
...
...
drivers/usb/chipidea/Makefile
浏览文件 @
d59abb93
...
@@ -17,5 +17,5 @@ ifneq ($(CONFIG_PCI),)
...
@@ -17,5 +17,5 @@ ifneq ($(CONFIG_PCI),)
endif
endif
ifneq
($(CONFIG_OF),)
ifneq
($(CONFIG_OF),)
obj-$(CONFIG_USB_CHIPIDEA)
+=
ci_hdrc_imx.o usbmis
c_imx.o
obj-$(CONFIG_USB_CHIPIDEA)
+=
usbmisc_imx.o ci_hdr
c_imx.o
endif
endif
drivers/usb/chipidea/ci_hdrc_pci.c
浏览文件 @
d59abb93
...
@@ -112,7 +112,7 @@ static void ci_hdrc_pci_remove(struct pci_dev *pdev)
...
@@ -112,7 +112,7 @@ static void ci_hdrc_pci_remove(struct pci_dev *pdev)
*
*
* Check "pci.h" for details
* Check "pci.h" for details
*/
*/
static
DEFINE_PCI_DEVICE_TABLE
(
ci_hdrc_pci_id_table
)
=
{
static
const
struct
pci_device_id
ci_hdrc_pci_id_table
[]
=
{
{
{
PCI_DEVICE
(
0x153F
,
0x1004
),
PCI_DEVICE
(
0x153F
,
0x1004
),
.
driver_data
=
(
kernel_ulong_t
)
&
pci_platdata
,
.
driver_data
=
(
kernel_ulong_t
)
&
pci_platdata
,
...
...
drivers/usb/chipidea/core.c
浏览文件 @
d59abb93
...
@@ -208,7 +208,8 @@ static int hw_device_init(struct ci_hdrc *ci, void __iomem *base)
...
@@ -208,7 +208,8 @@ static int hw_device_init(struct ci_hdrc *ci, void __iomem *base)
reg
=
hw_read
(
ci
,
CAP_HCCPARAMS
,
HCCPARAMS_LEN
)
>>
reg
=
hw_read
(
ci
,
CAP_HCCPARAMS
,
HCCPARAMS_LEN
)
>>
__ffs
(
HCCPARAMS_LEN
);
__ffs
(
HCCPARAMS_LEN
);
ci
->
hw_bank
.
lpm
=
reg
;
ci
->
hw_bank
.
lpm
=
reg
;
hw_alloc_regmap
(
ci
,
!!
reg
);
if
(
reg
)
hw_alloc_regmap
(
ci
,
!!
reg
);
ci
->
hw_bank
.
size
=
ci
->
hw_bank
.
op
-
ci
->
hw_bank
.
abs
;
ci
->
hw_bank
.
size
=
ci
->
hw_bank
.
op
-
ci
->
hw_bank
.
abs
;
ci
->
hw_bank
.
size
+=
OP_LAST
;
ci
->
hw_bank
.
size
+=
OP_LAST
;
ci
->
hw_bank
.
size
/=
sizeof
(
u32
);
ci
->
hw_bank
.
size
/=
sizeof
(
u32
);
...
...
drivers/usb/chipidea/host.c
浏览文件 @
d59abb93
...
@@ -88,7 +88,8 @@ static int host_start(struct ci_hdrc *ci)
...
@@ -88,7 +88,8 @@ static int host_start(struct ci_hdrc *ci)
return
ret
;
return
ret
;
disable_reg:
disable_reg:
regulator_disable
(
ci
->
platdata
->
reg_vbus
);
if
(
ci
->
platdata
->
reg_vbus
)
regulator_disable
(
ci
->
platdata
->
reg_vbus
);
put_hcd:
put_hcd:
usb_put_hcd
(
hcd
);
usb_put_hcd
(
hcd
);
...
...
drivers/usb/chipidea/usbmisc_imx.c
浏览文件 @
d59abb93
...
@@ -21,6 +21,10 @@
...
@@ -21,6 +21,10 @@
#define MX25_USB_PHY_CTRL_OFFSET 0x08
#define MX25_USB_PHY_CTRL_OFFSET 0x08
#define MX25_BM_EXTERNAL_VBUS_DIVIDER BIT(23)
#define MX25_BM_EXTERNAL_VBUS_DIVIDER BIT(23)
#define MX27_H1_PM_BIT BIT(8)
#define MX27_H2_PM_BIT BIT(16)
#define MX27_OTG_PM_BIT BIT(24)
#define MX53_USB_OTG_PHY_CTRL_0_OFFSET 0x08
#define MX53_USB_OTG_PHY_CTRL_0_OFFSET 0x08
#define MX53_USB_UH2_CTRL_OFFSET 0x14
#define MX53_USB_UH2_CTRL_OFFSET 0x14
#define MX53_USB_UH3_CTRL_OFFSET 0x18
#define MX53_USB_UH3_CTRL_OFFSET 0x18
...
@@ -68,6 +72,36 @@ static int usbmisc_imx25_post(struct imx_usbmisc_data *data)
...
@@ -68,6 +72,36 @@ static int usbmisc_imx25_post(struct imx_usbmisc_data *data)
return
0
;
return
0
;
}
}
static
int
usbmisc_imx27_init
(
struct
imx_usbmisc_data
*
data
)
{
unsigned
long
flags
;
u32
val
;
switch
(
data
->
index
)
{
case
0
:
val
=
MX27_OTG_PM_BIT
;
break
;
case
1
:
val
=
MX27_H1_PM_BIT
;
break
;
case
2
:
val
=
MX27_H2_PM_BIT
;
break
;
default:
return
-
EINVAL
;
};
spin_lock_irqsave
(
&
usbmisc
->
lock
,
flags
);
if
(
data
->
disable_oc
)
val
=
readl
(
usbmisc
->
base
)
|
val
;
else
val
=
readl
(
usbmisc
->
base
)
&
~
val
;
writel
(
val
,
usbmisc
->
base
);
spin_unlock_irqrestore
(
&
usbmisc
->
lock
,
flags
);
return
0
;
}
static
int
usbmisc_imx53_init
(
struct
imx_usbmisc_data
*
data
)
static
int
usbmisc_imx53_init
(
struct
imx_usbmisc_data
*
data
)
{
{
void
__iomem
*
reg
=
NULL
;
void
__iomem
*
reg
=
NULL
;
...
@@ -128,6 +162,10 @@ static const struct usbmisc_ops imx25_usbmisc_ops = {
...
@@ -128,6 +162,10 @@ static const struct usbmisc_ops imx25_usbmisc_ops = {
.
post
=
usbmisc_imx25_post
,
.
post
=
usbmisc_imx25_post
,
};
};
static
const
struct
usbmisc_ops
imx27_usbmisc_ops
=
{
.
init
=
usbmisc_imx27_init
,
};
static
const
struct
usbmisc_ops
imx53_usbmisc_ops
=
{
static
const
struct
usbmisc_ops
imx53_usbmisc_ops
=
{
.
init
=
usbmisc_imx53_init
,
.
init
=
usbmisc_imx53_init
,
};
};
...
@@ -161,6 +199,14 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
...
@@ -161,6 +199,14 @@ static const struct of_device_id usbmisc_imx_dt_ids[] = {
.
compatible
=
"fsl,imx25-usbmisc"
,
.
compatible
=
"fsl,imx25-usbmisc"
,
.
data
=
&
imx25_usbmisc_ops
,
.
data
=
&
imx25_usbmisc_ops
,
},
},
{
.
compatible
=
"fsl,imx27-usbmisc"
,
.
data
=
&
imx27_usbmisc_ops
,
},
{
.
compatible
=
"fsl,imx51-usbmisc"
,
.
data
=
&
imx53_usbmisc_ops
,
},
{
{
.
compatible
=
"fsl,imx53-usbmisc"
,
.
compatible
=
"fsl,imx53-usbmisc"
,
.
data
=
&
imx53_usbmisc_ops
,
.
data
=
&
imx53_usbmisc_ops
,
...
...
drivers/usb/class/cdc-acm.c
浏览文件 @
d59abb93
...
@@ -262,6 +262,7 @@ static void acm_ctrl_irq(struct urb *urb)
...
@@ -262,6 +262,7 @@ static void acm_ctrl_irq(struct urb *urb)
struct
usb_cdc_notification
*
dr
=
urb
->
transfer_buffer
;
struct
usb_cdc_notification
*
dr
=
urb
->
transfer_buffer
;
unsigned
char
*
data
;
unsigned
char
*
data
;
int
newctrl
;
int
newctrl
;
int
difference
;
int
retval
;
int
retval
;
int
status
=
urb
->
status
;
int
status
=
urb
->
status
;
...
@@ -302,20 +303,31 @@ static void acm_ctrl_irq(struct urb *urb)
...
@@ -302,20 +303,31 @@ static void acm_ctrl_irq(struct urb *urb)
tty_port_tty_hangup
(
&
acm
->
port
,
false
);
tty_port_tty_hangup
(
&
acm
->
port
,
false
);
}
}
difference
=
acm
->
ctrlin
^
newctrl
;
spin_lock
(
&
acm
->
read_lock
);
acm
->
ctrlin
=
newctrl
;
acm
->
ctrlin
=
newctrl
;
acm
->
oldcount
=
acm
->
iocount
;
if
(
difference
&
ACM_CTRL_DSR
)
acm
->
iocount
.
dsr
++
;
if
(
difference
&
ACM_CTRL_BRK
)
acm
->
iocount
.
brk
++
;
if
(
difference
&
ACM_CTRL_RI
)
acm
->
iocount
.
rng
++
;
if
(
difference
&
ACM_CTRL_DCD
)
acm
->
iocount
.
dcd
++
;
if
(
difference
&
ACM_CTRL_FRAMING
)
acm
->
iocount
.
frame
++
;
if
(
difference
&
ACM_CTRL_PARITY
)
acm
->
iocount
.
parity
++
;
if
(
difference
&
ACM_CTRL_OVERRUN
)
acm
->
iocount
.
overrun
++
;
spin_unlock
(
&
acm
->
read_lock
);
if
(
difference
)
wake_up_all
(
&
acm
->
wioctl
);
dev_dbg
(
&
acm
->
control
->
dev
,
break
;
"%s - input control lines: dcd%c dsr%c break%c "
"ring%c framing%c parity%c overrun%c
\n
"
,
__func__
,
acm
->
ctrlin
&
ACM_CTRL_DCD
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_DSR
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_BRK
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_RI
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_FRAMING
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_PARITY
?
'+'
:
'-'
,
acm
->
ctrlin
&
ACM_CTRL_OVERRUN
?
'+'
:
'-'
);
break
;
default:
default:
dev_dbg
(
&
acm
->
control
->
dev
,
dev_dbg
(
&
acm
->
control
->
dev
,
...
@@ -796,6 +808,72 @@ static int set_serial_info(struct acm *acm,
...
@@ -796,6 +808,72 @@ static int set_serial_info(struct acm *acm,
return
retval
;
return
retval
;
}
}
static
int
wait_serial_change
(
struct
acm
*
acm
,
unsigned
long
arg
)
{
int
rv
=
0
;
DECLARE_WAITQUEUE
(
wait
,
current
);
struct
async_icount
old
,
new
;
if
(
arg
&
(
TIOCM_DSR
|
TIOCM_RI
|
TIOCM_CD
))
return
-
EINVAL
;
do
{
spin_lock_irq
(
&
acm
->
read_lock
);
old
=
acm
->
oldcount
;
new
=
acm
->
iocount
;
acm
->
oldcount
=
new
;
spin_unlock_irq
(
&
acm
->
read_lock
);
if
((
arg
&
TIOCM_DSR
)
&&
old
.
dsr
!=
new
.
dsr
)
break
;
if
((
arg
&
TIOCM_CD
)
&&
old
.
dcd
!=
new
.
dcd
)
break
;
if
((
arg
&
TIOCM_RI
)
&&
old
.
rng
!=
new
.
rng
)
break
;
add_wait_queue
(
&
acm
->
wioctl
,
&
wait
);
set_current_state
(
TASK_INTERRUPTIBLE
);
schedule
();
remove_wait_queue
(
&
acm
->
wioctl
,
&
wait
);
if
(
acm
->
disconnected
)
{
if
(
arg
&
TIOCM_CD
)
break
;
else
rv
=
-
ENODEV
;
}
else
{
if
(
signal_pending
(
current
))
rv
=
-
ERESTARTSYS
;
}
}
while
(
!
rv
);
return
rv
;
}
static
int
get_serial_usage
(
struct
acm
*
acm
,
struct
serial_icounter_struct
__user
*
count
)
{
struct
serial_icounter_struct
icount
;
int
rv
=
0
;
memset
(
&
icount
,
0
,
sizeof
(
icount
));
icount
.
dsr
=
acm
->
iocount
.
dsr
;
icount
.
rng
=
acm
->
iocount
.
rng
;
icount
.
dcd
=
acm
->
iocount
.
dcd
;
icount
.
frame
=
acm
->
iocount
.
frame
;
icount
.
overrun
=
acm
->
iocount
.
overrun
;
icount
.
parity
=
acm
->
iocount
.
parity
;
icount
.
brk
=
acm
->
iocount
.
brk
;
if
(
copy_to_user
(
count
,
&
icount
,
sizeof
(
icount
))
>
0
)
rv
=
-
EFAULT
;
return
rv
;
}
static
int
acm_tty_ioctl
(
struct
tty_struct
*
tty
,
static
int
acm_tty_ioctl
(
struct
tty_struct
*
tty
,
unsigned
int
cmd
,
unsigned
long
arg
)
unsigned
int
cmd
,
unsigned
long
arg
)
{
{
...
@@ -809,6 +887,18 @@ static int acm_tty_ioctl(struct tty_struct *tty,
...
@@ -809,6 +887,18 @@ static int acm_tty_ioctl(struct tty_struct *tty,
case
TIOCSSERIAL
:
case
TIOCSSERIAL
:
rv
=
set_serial_info
(
acm
,
(
struct
serial_struct
__user
*
)
arg
);
rv
=
set_serial_info
(
acm
,
(
struct
serial_struct
__user
*
)
arg
);
break
;
break
;
case
TIOCMIWAIT
:
rv
=
usb_autopm_get_interface
(
acm
->
control
);
if
(
rv
<
0
)
{
rv
=
-
EIO
;
break
;
}
rv
=
wait_serial_change
(
acm
,
arg
);
usb_autopm_put_interface
(
acm
->
control
);
break
;
case
TIOCGICOUNT
:
rv
=
get_serial_usage
(
acm
,
(
struct
serial_icounter_struct
__user
*
)
arg
);
break
;
}
}
return
rv
;
return
rv
;
...
@@ -1167,6 +1257,7 @@ static int acm_probe(struct usb_interface *intf,
...
@@ -1167,6 +1257,7 @@ static int acm_probe(struct usb_interface *intf,
acm
->
readsize
=
readsize
;
acm
->
readsize
=
readsize
;
acm
->
rx_buflimit
=
num_rx_buf
;
acm
->
rx_buflimit
=
num_rx_buf
;
INIT_WORK
(
&
acm
->
work
,
acm_softint
);
INIT_WORK
(
&
acm
->
work
,
acm_softint
);
init_waitqueue_head
(
&
acm
->
wioctl
);
spin_lock_init
(
&
acm
->
write_lock
);
spin_lock_init
(
&
acm
->
write_lock
);
spin_lock_init
(
&
acm
->
read_lock
);
spin_lock_init
(
&
acm
->
read_lock
);
mutex_init
(
&
acm
->
mutex
);
mutex_init
(
&
acm
->
mutex
);
...
@@ -1383,6 +1474,7 @@ static void acm_disconnect(struct usb_interface *intf)
...
@@ -1383,6 +1474,7 @@ static void acm_disconnect(struct usb_interface *intf)
device_remove_file
(
&
acm
->
control
->
dev
,
device_remove_file
(
&
acm
->
control
->
dev
,
&
dev_attr_iCountryCodeRelDate
);
&
dev_attr_iCountryCodeRelDate
);
}
}
wake_up_all
(
&
acm
->
wioctl
);
device_remove_file
(
&
acm
->
control
->
dev
,
&
dev_attr_bmCapabilities
);
device_remove_file
(
&
acm
->
control
->
dev
,
&
dev_attr_bmCapabilities
);
usb_set_intfdata
(
acm
->
control
,
NULL
);
usb_set_intfdata
(
acm
->
control
,
NULL
);
usb_set_intfdata
(
acm
->
data
,
NULL
);
usb_set_intfdata
(
acm
->
data
,
NULL
);
...
...
drivers/usb/class/cdc-acm.h
浏览文件 @
d59abb93
...
@@ -106,6 +106,9 @@ struct acm {
...
@@ -106,6 +106,9 @@ struct acm {
struct
work_struct
work
;
/* work queue entry for line discipline waking up */
struct
work_struct
work
;
/* work queue entry for line discipline waking up */
unsigned
int
ctrlin
;
/* input control lines (DCD, DSR, RI, break, overruns) */
unsigned
int
ctrlin
;
/* input control lines (DCD, DSR, RI, break, overruns) */
unsigned
int
ctrlout
;
/* output control lines (DTR, RTS) */
unsigned
int
ctrlout
;
/* output control lines (DTR, RTS) */
struct
async_icount
iocount
;
/* counters for control line changes */
struct
async_icount
oldcount
;
/* for comparison of counter */
wait_queue_head_t
wioctl
;
/* for ioctl */
unsigned
int
writesize
;
/* max packet size for the output bulk endpoint */
unsigned
int
writesize
;
/* max packet size for the output bulk endpoint */
unsigned
int
readsize
,
ctrlsize
;
/* buffer sizes for freeing */
unsigned
int
readsize
,
ctrlsize
;
/* buffer sizes for freeing */
unsigned
int
minor
;
/* acm minor number */
unsigned
int
minor
;
/* acm minor number */
...
...
drivers/usb/core/config.c
浏览文件 @
d59abb93
...
@@ -651,10 +651,6 @@ void usb_destroy_configuration(struct usb_device *dev)
...
@@ -651,10 +651,6 @@ void usb_destroy_configuration(struct usb_device *dev)
*
*
* hub-only!! ... and only in reset path, or usb_new_device()
* hub-only!! ... and only in reset path, or usb_new_device()
* (used by real hubs and virtual root hubs)
* (used by real hubs and virtual root hubs)
*
* NOTE: if this is a WUSB device and is not authorized, we skip the
* whole thing. A non-authorized USB device has no
* configurations.
*/
*/
int
usb_get_configuration
(
struct
usb_device
*
dev
)
int
usb_get_configuration
(
struct
usb_device
*
dev
)
{
{
...
@@ -666,8 +662,6 @@ int usb_get_configuration(struct usb_device *dev)
...
@@ -666,8 +662,6 @@ int usb_get_configuration(struct usb_device *dev)
struct
usb_config_descriptor
*
desc
;
struct
usb_config_descriptor
*
desc
;
cfgno
=
0
;
cfgno
=
0
;
if
(
dev
->
authorized
==
0
)
/* Not really an error */
goto
out_not_authorized
;
result
=
-
ENOMEM
;
result
=
-
ENOMEM
;
if
(
ncfg
>
USB_MAXCONFIG
)
{
if
(
ncfg
>
USB_MAXCONFIG
)
{
dev_warn
(
ddev
,
"too many configurations: %d, "
dev_warn
(
ddev
,
"too many configurations: %d, "
...
@@ -751,7 +745,6 @@ int usb_get_configuration(struct usb_device *dev)
...
@@ -751,7 +745,6 @@ int usb_get_configuration(struct usb_device *dev)
err:
err:
kfree
(
desc
);
kfree
(
desc
);
out_not_authorized:
dev
->
descriptor
.
bNumConfigurations
=
cfgno
;
dev
->
descriptor
.
bNumConfigurations
=
cfgno
;
err2:
err2:
if
(
result
==
-
ENOMEM
)
if
(
result
==
-
ENOMEM
)
...
...
drivers/usb/core/driver.c
浏览文件 @
d59abb93
...
@@ -839,7 +839,7 @@ int usb_register_device_driver(struct usb_device_driver *new_udriver,
...
@@ -839,7 +839,7 @@ int usb_register_device_driver(struct usb_device_driver *new_udriver,
return
-
ENODEV
;
return
-
ENODEV
;
new_udriver
->
drvwrap
.
for_devices
=
1
;
new_udriver
->
drvwrap
.
for_devices
=
1
;
new_udriver
->
drvwrap
.
driver
.
name
=
(
char
*
)
new_udriver
->
name
;
new_udriver
->
drvwrap
.
driver
.
name
=
new_udriver
->
name
;
new_udriver
->
drvwrap
.
driver
.
bus
=
&
usb_bus_type
;
new_udriver
->
drvwrap
.
driver
.
bus
=
&
usb_bus_type
;
new_udriver
->
drvwrap
.
driver
.
probe
=
usb_probe_device
;
new_udriver
->
drvwrap
.
driver
.
probe
=
usb_probe_device
;
new_udriver
->
drvwrap
.
driver
.
remove
=
usb_unbind_device
;
new_udriver
->
drvwrap
.
driver
.
remove
=
usb_unbind_device
;
...
@@ -900,7 +900,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
...
@@ -900,7 +900,7 @@ int usb_register_driver(struct usb_driver *new_driver, struct module *owner,
return
-
ENODEV
;
return
-
ENODEV
;
new_driver
->
drvwrap
.
for_devices
=
0
;
new_driver
->
drvwrap
.
for_devices
=
0
;
new_driver
->
drvwrap
.
driver
.
name
=
(
char
*
)
new_driver
->
name
;
new_driver
->
drvwrap
.
driver
.
name
=
new_driver
->
name
;
new_driver
->
drvwrap
.
driver
.
bus
=
&
usb_bus_type
;
new_driver
->
drvwrap
.
driver
.
bus
=
&
usb_bus_type
;
new_driver
->
drvwrap
.
driver
.
probe
=
usb_probe_interface
;
new_driver
->
drvwrap
.
driver
.
probe
=
usb_probe_interface
;
new_driver
->
drvwrap
.
driver
.
remove
=
usb_unbind_interface
;
new_driver
->
drvwrap
.
driver
.
remove
=
usb_unbind_interface
;
...
...
drivers/usb/core/hcd-pci.c
浏览文件 @
d59abb93
...
@@ -282,6 +282,7 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
...
@@ -282,6 +282,7 @@ int usb_hcd_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
unmap_registers
;
goto
unmap_registers
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
if
(
pci_dev_run_wake
(
dev
))
if
(
pci_dev_run_wake
(
dev
))
pm_runtime_put_noidle
(
&
dev
->
dev
);
pm_runtime_put_noidle
(
&
dev
->
dev
);
...
...
drivers/usb/core/hcd.c
浏览文件 @
d59abb93
...
@@ -44,6 +44,7 @@
...
@@ -44,6 +44,7 @@
#include <linux/usb.h>
#include <linux/usb.h>
#include <linux/usb/hcd.h>
#include <linux/usb/hcd.h>
#include <linux/usb/phy.h>
#include "usb.h"
#include "usb.h"
...
@@ -2588,6 +2589,24 @@ int usb_add_hcd(struct usb_hcd *hcd,
...
@@ -2588,6 +2589,24 @@ int usb_add_hcd(struct usb_hcd *hcd,
int
retval
;
int
retval
;
struct
usb_device
*
rhdev
;
struct
usb_device
*
rhdev
;
if
(
IS_ENABLED
(
CONFIG_USB_PHY
)
&&
!
hcd
->
phy
)
{
struct
usb_phy
*
phy
=
usb_get_phy_dev
(
hcd
->
self
.
controller
,
0
);
if
(
IS_ERR
(
phy
))
{
retval
=
PTR_ERR
(
phy
);
if
(
retval
==
-
EPROBE_DEFER
)
return
retval
;
}
else
{
retval
=
usb_phy_init
(
phy
);
if
(
retval
)
{
usb_put_phy
(
phy
);
return
retval
;
}
hcd
->
phy
=
phy
;
hcd
->
remove_phy
=
1
;
}
}
dev_info
(
hcd
->
self
.
controller
,
"%s
\n
"
,
hcd
->
product_desc
);
dev_info
(
hcd
->
self
.
controller
,
"%s
\n
"
,
hcd
->
product_desc
);
/* Keep old behaviour if authorized_default is not in [0, 1]. */
/* Keep old behaviour if authorized_default is not in [0, 1]. */
...
@@ -2603,7 +2622,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
...
@@ -2603,7 +2622,7 @@ int usb_add_hcd(struct usb_hcd *hcd,
*/
*/
if
((
retval
=
hcd_buffer_create
(
hcd
))
!=
0
)
{
if
((
retval
=
hcd_buffer_create
(
hcd
))
!=
0
)
{
dev_dbg
(
hcd
->
self
.
controller
,
"pool alloc failed
\n
"
);
dev_dbg
(
hcd
->
self
.
controller
,
"pool alloc failed
\n
"
);
return
retval
;
goto
err_remove_phy
;
}
}
if
((
retval
=
usb_register_bus
(
&
hcd
->
self
))
<
0
)
if
((
retval
=
usb_register_bus
(
&
hcd
->
self
))
<
0
)
...
@@ -2693,12 +2712,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
...
@@ -2693,12 +2712,6 @@ int usb_add_hcd(struct usb_hcd *hcd,
if
(
hcd
->
uses_new_polling
&&
HCD_POLL_RH
(
hcd
))
if
(
hcd
->
uses_new_polling
&&
HCD_POLL_RH
(
hcd
))
usb_hcd_poll_rh_status
(
hcd
);
usb_hcd_poll_rh_status
(
hcd
);
/*
* Host controllers don't generate their own wakeup requests;
* they only forward requests from the root hub. Therefore
* controllers should always be enabled for remote wakeup.
*/
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
error_create_attr_group:
error_create_attr_group:
...
@@ -2734,6 +2747,12 @@ int usb_add_hcd(struct usb_hcd *hcd,
...
@@ -2734,6 +2747,12 @@ int usb_add_hcd(struct usb_hcd *hcd,
usb_deregister_bus
(
&
hcd
->
self
);
usb_deregister_bus
(
&
hcd
->
self
);
err_register_bus:
err_register_bus:
hcd_buffer_destroy
(
hcd
);
hcd_buffer_destroy
(
hcd
);
err_remove_phy:
if
(
hcd
->
remove_phy
&&
hcd
->
phy
)
{
usb_phy_shutdown
(
hcd
->
phy
);
usb_put_phy
(
hcd
->
phy
);
hcd
->
phy
=
NULL
;
}
return
retval
;
return
retval
;
}
}
EXPORT_SYMBOL_GPL
(
usb_add_hcd
);
EXPORT_SYMBOL_GPL
(
usb_add_hcd
);
...
@@ -2806,6 +2825,11 @@ void usb_remove_hcd(struct usb_hcd *hcd)
...
@@ -2806,6 +2825,11 @@ void usb_remove_hcd(struct usb_hcd *hcd)
usb_put_dev
(
hcd
->
self
.
root_hub
);
usb_put_dev
(
hcd
->
self
.
root_hub
);
usb_deregister_bus
(
&
hcd
->
self
);
usb_deregister_bus
(
&
hcd
->
self
);
hcd_buffer_destroy
(
hcd
);
hcd_buffer_destroy
(
hcd
);
if
(
hcd
->
remove_phy
&&
hcd
->
phy
)
{
usb_phy_shutdown
(
hcd
->
phy
);
usb_put_phy
(
hcd
->
phy
);
hcd
->
phy
=
NULL
;
}
}
}
EXPORT_SYMBOL_GPL
(
usb_remove_hcd
);
EXPORT_SYMBOL_GPL
(
usb_remove_hcd
);
...
...
drivers/usb/core/hub.c
浏览文件 @
d59abb93
...
@@ -2235,17 +2235,13 @@ static int usb_enumerate_device(struct usb_device *udev)
...
@@ -2235,17 +2235,13 @@ static int usb_enumerate_device(struct usb_device *udev)
return
err
;
return
err
;
}
}
}
}
if
(
udev
->
wusb
==
1
&&
udev
->
authorized
==
0
)
{
udev
->
product
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
/* read the standard strings and cache them if present */
udev
->
manufacturer
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
udev
->
product
=
usb_cache_string
(
udev
,
udev
->
descriptor
.
iProduct
);
udev
->
serial
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
udev
->
manufacturer
=
usb_cache_string
(
udev
,
}
else
{
udev
->
descriptor
.
iManufacturer
);
/* read the standard strings and cache them if present */
udev
->
serial
=
usb_cache_string
(
udev
,
udev
->
descriptor
.
iSerialNumber
);
udev
->
product
=
usb_cache_string
(
udev
,
udev
->
descriptor
.
iProduct
);
udev
->
manufacturer
=
usb_cache_string
(
udev
,
udev
->
descriptor
.
iManufacturer
);
udev
->
serial
=
usb_cache_string
(
udev
,
udev
->
descriptor
.
iSerialNumber
);
}
err
=
usb_enumerate_device_otg
(
udev
);
err
=
usb_enumerate_device_otg
(
udev
);
if
(
err
<
0
)
if
(
err
<
0
)
return
err
;
return
err
;
...
@@ -2427,16 +2423,6 @@ int usb_deauthorize_device(struct usb_device *usb_dev)
...
@@ -2427,16 +2423,6 @@ int usb_deauthorize_device(struct usb_device *usb_dev)
usb_dev
->
authorized
=
0
;
usb_dev
->
authorized
=
0
;
usb_set_configuration
(
usb_dev
,
-
1
);
usb_set_configuration
(
usb_dev
,
-
1
);
kfree
(
usb_dev
->
product
);
usb_dev
->
product
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
kfree
(
usb_dev
->
manufacturer
);
usb_dev
->
manufacturer
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
kfree
(
usb_dev
->
serial
);
usb_dev
->
serial
=
kstrdup
(
"n/a (unauthorized)"
,
GFP_KERNEL
);
usb_destroy_configuration
(
usb_dev
);
usb_dev
->
descriptor
.
bNumConfigurations
=
0
;
out_unauthorized:
out_unauthorized:
usb_unlock_device
(
usb_dev
);
usb_unlock_device
(
usb_dev
);
return
0
;
return
0
;
...
@@ -2464,17 +2450,7 @@ int usb_authorize_device(struct usb_device *usb_dev)
...
@@ -2464,17 +2450,7 @@ int usb_authorize_device(struct usb_device *usb_dev)
goto
error_device_descriptor
;
goto
error_device_descriptor
;
}
}
kfree
(
usb_dev
->
product
);
usb_dev
->
product
=
NULL
;
kfree
(
usb_dev
->
manufacturer
);
usb_dev
->
manufacturer
=
NULL
;
kfree
(
usb_dev
->
serial
);
usb_dev
->
serial
=
NULL
;
usb_dev
->
authorized
=
1
;
usb_dev
->
authorized
=
1
;
result
=
usb_enumerate_device
(
usb_dev
);
if
(
result
<
0
)
goto
error_enumerate
;
/* Choose and set the configuration. This registers the interfaces
/* Choose and set the configuration. This registers the interfaces
* with the driver core and lets interface drivers bind to them.
* with the driver core and lets interface drivers bind to them.
*/
*/
...
@@ -2490,7 +2466,6 @@ int usb_authorize_device(struct usb_device *usb_dev)
...
@@ -2490,7 +2466,6 @@ int usb_authorize_device(struct usb_device *usb_dev)
}
}
dev_info
(
&
usb_dev
->
dev
,
"authorized to connect
\n
"
);
dev_info
(
&
usb_dev
->
dev
,
"authorized to connect
\n
"
);
error_enumerate:
error_device_descriptor:
error_device_descriptor:
usb_autosuspend_device
(
usb_dev
);
usb_autosuspend_device
(
usb_dev
);
error_autoresume:
error_autoresume:
...
@@ -2523,6 +2498,21 @@ static unsigned hub_is_wusb(struct usb_hub *hub)
...
@@ -2523,6 +2498,21 @@ static unsigned hub_is_wusb(struct usb_hub *hub)
#define HUB_LONG_RESET_TIME 200
#define HUB_LONG_RESET_TIME 200
#define HUB_RESET_TIMEOUT 800
#define HUB_RESET_TIMEOUT 800
/*
* "New scheme" enumeration causes an extra state transition to be
* exposed to an xhci host and causes USB3 devices to receive control
* commands in the default state. This has been seen to cause
* enumeration failures, so disable this enumeration scheme for USB3
* devices.
*/
static
bool
use_new_scheme
(
struct
usb_device
*
udev
,
int
retry
)
{
if
(
udev
->
speed
==
USB_SPEED_SUPER
)
return
false
;
return
USE_NEW_SCHEME
(
retry
);
}
static
int
hub_port_reset
(
struct
usb_hub
*
hub
,
int
port1
,
static
int
hub_port_reset
(
struct
usb_hub
*
hub
,
int
port1
,
struct
usb_device
*
udev
,
unsigned
int
delay
,
bool
warm
);
struct
usb_device
*
udev
,
unsigned
int
delay
,
bool
warm
);
...
@@ -3981,6 +3971,20 @@ static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
...
@@ -3981,6 +3971,20 @@ static void hub_set_initial_usb2_lpm_policy(struct usb_device *udev)
}
}
}
}
static
int
hub_enable_device
(
struct
usb_device
*
udev
)
{
struct
usb_hcd
*
hcd
=
bus_to_hcd
(
udev
->
bus
);
if
(
!
hcd
->
driver
->
enable_device
)
return
0
;
if
(
udev
->
state
==
USB_STATE_ADDRESS
)
return
0
;
if
(
udev
->
state
!=
USB_STATE_DEFAULT
)
return
-
EINVAL
;
return
hcd
->
driver
->
enable_device
(
hcd
,
udev
);
}
/* Reset device, (re)assign address, get device descriptor.
/* Reset device, (re)assign address, get device descriptor.
* Device connection must be stable, no more debouncing needed.
* Device connection must be stable, no more debouncing needed.
* Returns device in USB_STATE_ADDRESS, except on error.
* Returns device in USB_STATE_ADDRESS, except on error.
...
@@ -4093,7 +4097,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
...
@@ -4093,7 +4097,7 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
* this area, and this is how Linux has done it for ages.
* this area, and this is how Linux has done it for ages.
* Change it cautiously.
* Change it cautiously.
*
*
* NOTE: If
USE_NEW_SCHEME
() is true we will start by issuing
* NOTE: If
use_new_scheme
() is true we will start by issuing
* a 64-byte GET_DESCRIPTOR request. This is what Windows does,
* a 64-byte GET_DESCRIPTOR request. This is what Windows does,
* so it may help with some non-standards-compliant devices.
* so it may help with some non-standards-compliant devices.
* Otherwise we start with SET_ADDRESS and then try to read the
* Otherwise we start with SET_ADDRESS and then try to read the
...
@@ -4101,10 +4105,17 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
...
@@ -4101,10 +4105,17 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
* value.
* value.
*/
*/
for
(
i
=
0
;
i
<
GET_DESCRIPTOR_TRIES
;
(
++
i
,
msleep
(
100
)))
{
for
(
i
=
0
;
i
<
GET_DESCRIPTOR_TRIES
;
(
++
i
,
msleep
(
100
)))
{
if
(
USE_NEW_SCHEME
(
retry_counter
)
&&
!
(
hcd
->
driver
->
flags
&
HCD_USB3
))
{
bool
did_new_scheme
=
false
;
if
(
use_new_scheme
(
udev
,
retry_counter
))
{
struct
usb_device_descriptor
*
buf
;
struct
usb_device_descriptor
*
buf
;
int
r
=
0
;
int
r
=
0
;
did_new_scheme
=
true
;
retval
=
hub_enable_device
(
udev
);
if
(
retval
<
0
)
goto
fail
;
#define GET_DESCRIPTOR_BUFSIZE 64
#define GET_DESCRIPTOR_BUFSIZE 64
buf
=
kmalloc
(
GET_DESCRIPTOR_BUFSIZE
,
GFP_NOIO
);
buf
=
kmalloc
(
GET_DESCRIPTOR_BUFSIZE
,
GFP_NOIO
);
if
(
!
buf
)
{
if
(
!
buf
)
{
...
@@ -4193,7 +4204,11 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
...
@@ -4193,7 +4204,11 @@ hub_port_init (struct usb_hub *hub, struct usb_device *udev, int port1,
* - read ep0 maxpacket even for high and low speed,
* - read ep0 maxpacket even for high and low speed,
*/
*/
msleep
(
10
);
msleep
(
10
);
if
(
USE_NEW_SCHEME
(
retry_counter
)
&&
!
(
hcd
->
driver
->
flags
&
HCD_USB3
))
/* use_new_scheme() checks the speed which may have
* changed since the initial look so we cache the result
* in did_new_scheme
*/
if
(
did_new_scheme
)
break
;
break
;
}
}
...
...
drivers/usb/core/quirks.c
浏览文件 @
d59abb93
...
@@ -98,9 +98,6 @@ static const struct usb_device_id usb_quirk_list[] = {
...
@@ -98,9 +98,6 @@ static const struct usb_device_id usb_quirk_list[] = {
/* Alcor Micro Corp. Hub */
/* Alcor Micro Corp. Hub */
{
USB_DEVICE
(
0x058f
,
0x9254
),
.
driver_info
=
USB_QUIRK_RESET_RESUME
},
{
USB_DEVICE
(
0x058f
,
0x9254
),
.
driver_info
=
USB_QUIRK_RESET_RESUME
},
/* MicroTouch Systems touchscreen */
{
USB_DEVICE
(
0x0596
,
0x051e
),
.
driver_info
=
USB_QUIRK_RESET_RESUME
},
/* appletouch */
/* appletouch */
{
USB_DEVICE
(
0x05ac
,
0x021a
),
.
driver_info
=
USB_QUIRK_RESET_RESUME
},
{
USB_DEVICE
(
0x05ac
,
0x021a
),
.
driver_info
=
USB_QUIRK_RESET_RESUME
},
...
...
drivers/usb/core/urb.c
浏览文件 @
d59abb93
...
@@ -492,9 +492,9 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
...
@@ -492,9 +492,9 @@ int usb_submit_urb(struct urb *urb, gfp_t mem_flags)
/* too small? */
/* too small? */
switch
(
dev
->
speed
)
{
switch
(
dev
->
speed
)
{
case
USB_SPEED_WIRELESS
:
case
USB_SPEED_WIRELESS
:
if
(
urb
->
interval
<
6
)
if
((
urb
->
interval
<
6
)
&&
(
xfertype
==
USB_ENDPOINT_XFER_INT
))
return
-
EINVAL
;
return
-
EINVAL
;
break
;
default:
default:
if
(
urb
->
interval
<=
0
)
if
(
urb
->
interval
<=
0
)
return
-
EINVAL
;
return
-
EINVAL
;
...
...
drivers/usb/dwc3/dwc3-pci.c
浏览文件 @
d59abb93
...
@@ -182,7 +182,7 @@ static void dwc3_pci_remove(struct pci_dev *pci)
...
@@ -182,7 +182,7 @@ static void dwc3_pci_remove(struct pci_dev *pci)
pci_disable_device
(
pci
);
pci_disable_device
(
pci
);
}
}
static
DEFINE_PCI_DEVICE_TABLE
(
dwc3_pci_id_table
)
=
{
static
const
struct
pci_device_id
dwc3_pci_id_table
[]
=
{
{
{
PCI_DEVICE
(
PCI_VENDOR_ID_SYNOPSYS
,
PCI_DEVICE
(
PCI_VENDOR_ID_SYNOPSYS
,
PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3
),
PCI_DEVICE_ID_SYNOPSYS_HAPSUSB3
),
...
...
drivers/usb/gadget/amd5536udc.c
浏览文件 @
d59abb93
...
@@ -3338,7 +3338,7 @@ static int udc_remote_wakeup(struct udc *dev)
...
@@ -3338,7 +3338,7 @@ static int udc_remote_wakeup(struct udc *dev)
}
}
/* PCI device parameters */
/* PCI device parameters */
static
DEFINE_PCI_DEVICE_TABLE
(
pci_id
)
=
{
static
const
struct
pci_device_id
pci_id
[]
=
{
{
{
PCI_DEVICE
(
PCI_VENDOR_ID_AMD
,
0x2096
),
PCI_DEVICE
(
PCI_VENDOR_ID_AMD
,
0x2096
),
.
class
=
(
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
,
.
class
=
(
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
,
...
...
drivers/usb/gadget/fsl_qe_udc.c
浏览文件 @
d59abb93
...
@@ -2717,7 +2717,7 @@ MODULE_DEVICE_TABLE(of, qe_udc_match);
...
@@ -2717,7 +2717,7 @@ MODULE_DEVICE_TABLE(of, qe_udc_match);
static
struct
platform_driver
udc_driver
=
{
static
struct
platform_driver
udc_driver
=
{
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
driver_name
,
.
name
=
driver_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
.
of_match_table
=
qe_udc_match
,
.
of_match_table
=
qe_udc_match
,
},
},
...
...
drivers/usb/gadget/fsl_udc_core.c
浏览文件 @
d59abb93
...
@@ -2666,7 +2666,7 @@ static struct platform_driver udc_driver = {
...
@@ -2666,7 +2666,7 @@ static struct platform_driver udc_driver = {
.
suspend
=
fsl_udc_suspend
,
.
suspend
=
fsl_udc_suspend
,
.
resume
=
fsl_udc_resume
,
.
resume
=
fsl_udc_resume
,
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
driver_name
,
.
name
=
driver_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
/* udc suspend/resume called from OTG driver */
/* udc suspend/resume called from OTG driver */
.
suspend
=
fsl_udc_otg_suspend
,
.
suspend
=
fsl_udc_otg_suspend
,
...
...
drivers/usb/gadget/pch_udc.c
浏览文件 @
d59abb93
...
@@ -3210,7 +3210,7 @@ static int pch_udc_probe(struct pci_dev *pdev,
...
@@ -3210,7 +3210,7 @@ static int pch_udc_probe(struct pci_dev *pdev,
return
retval
;
return
retval
;
}
}
static
DEFINE_PCI_DEVICE_TABLE
(
pch_udc_pcidev_id
)
=
{
static
const
struct
pci_device_id
pch_udc_pcidev_id
[]
=
{
{
{
PCI_DEVICE
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_EG20T_UDC
),
PCI_DEVICE
(
PCI_VENDOR_ID_INTEL
,
PCI_DEVICE_ID_INTEL_EG20T_UDC
),
.
class
=
(
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
,
.
class
=
(
PCI_CLASS_SERIAL_USB
<<
8
)
|
0xfe
,
...
...
drivers/usb/host/Makefile
浏览文件 @
d59abb93
...
@@ -2,8 +2,6 @@
...
@@ -2,8 +2,6 @@
# Makefile for USB Host Controller Drivers
# Makefile for USB Host Controller Drivers
#
#
ccflags-$(CONFIG_USB_DEBUG)
:=
-DDEBUG
# tell define_trace.h where to find the xhci trace header
# tell define_trace.h where to find the xhci trace header
CFLAGS_xhci-trace.o
:=
-I
$(src)
CFLAGS_xhci-trace.o
:=
-I
$(src)
...
...
drivers/usb/host/ehci-atmel.c
浏览文件 @
d59abb93
...
@@ -153,6 +153,7 @@ static int ehci_atmel_drv_probe(struct platform_device *pdev)
...
@@ -153,6 +153,7 @@ static int ehci_atmel_drv_probe(struct platform_device *pdev)
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
if
(
retval
)
if
(
retval
)
goto
fail_add_hcd
;
goto
fail_add_hcd
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
...
...
drivers/usb/host/ehci-dbg.c
浏览文件 @
d59abb93
...
@@ -18,7 +18,7 @@
...
@@ -18,7 +18,7 @@
/* this file is part of ehci-hcd.c */
/* this file is part of ehci-hcd.c */
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
/* check the values in the HCSPARAMS register
/* check the values in the HCSPARAMS register
* (host controller _Structural_ parameters)
* (host controller _Structural_ parameters)
...
@@ -62,7 +62,7 @@ static inline void dbg_hcs_params (struct ehci_hcd *ehci, char *label) {}
...
@@ -62,7 +62,7 @@ static inline void dbg_hcs_params (struct ehci_hcd *ehci, char *label) {}
#endif
#endif
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
/* check the values in the HCCPARAMS register
/* check the values in the HCCPARAMS register
* (host controller _Capability_ parameters)
* (host controller _Capability_ parameters)
...
@@ -101,7 +101,7 @@ static inline void dbg_hcc_params (struct ehci_hcd *ehci, char *label) {}
...
@@ -101,7 +101,7 @@ static inline void dbg_hcc_params (struct ehci_hcd *ehci, char *label) {}
#endif
#endif
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
static
void
__maybe_unused
static
void
__maybe_unused
dbg_qtd
(
const
char
*
label
,
struct
ehci_hcd
*
ehci
,
struct
ehci_qtd
*
qtd
)
dbg_qtd
(
const
char
*
label
,
struct
ehci_hcd
*
ehci
,
struct
ehci_qtd
*
qtd
)
...
@@ -301,7 +301,7 @@ static inline int __maybe_unused
...
@@ -301,7 +301,7 @@ static inline int __maybe_unused
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
{
return
0
;
}
{
return
0
;
}
#endif
/*
DEBUG ||
CONFIG_DYNAMIC_DEBUG */
#endif
/* CONFIG_DYNAMIC_DEBUG */
/* functions have the "wrong" filename when they're output... */
/* functions have the "wrong" filename when they're output... */
#define dbg_status(ehci, label, status) { \
#define dbg_status(ehci, label, status) { \
...
@@ -818,7 +818,7 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
...
@@ -818,7 +818,7 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
#ifdef CONFIG_PCI
#ifdef CONFIG_PCI
/* EHCI 0.96 and later may have "extended capabilities" */
/* EHCI 0.96 and later may have "extended capabilities" */
if
(
hcd
->
self
.
controller
->
bus
==
&
pci_bus_type
)
{
if
(
dev_is_pci
(
hcd
->
self
.
controller
)
)
{
struct
pci_dev
*
pdev
;
struct
pci_dev
*
pdev
;
u32
offset
,
cap
,
cap2
;
u32
offset
,
cap
,
cap2
;
unsigned
count
=
256
/
4
;
unsigned
count
=
256
/
4
;
...
...
drivers/usb/host/ehci-exynos.c
浏览文件 @
d59abb93
...
@@ -166,6 +166,7 @@ static int exynos_ehci_probe(struct platform_device *pdev)
...
@@ -166,6 +166,7 @@ static int exynos_ehci_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
...
...
drivers/usb/host/ehci-fsl.c
浏览文件 @
d59abb93
...
@@ -138,6 +138,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
...
@@ -138,6 +138,7 @@ static int usb_hcd_fsl_probe(const struct hc_driver *driver,
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
err4
;
goto
err4
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
#ifdef CONFIG_USB_OTG
#ifdef CONFIG_USB_OTG
if
(
pdata
->
operating_mode
==
FSL_USB2_DR_OTG
)
{
if
(
pdata
->
operating_mode
==
FSL_USB2_DR_OTG
)
{
...
@@ -413,7 +414,7 @@ static int ehci_fsl_mpc512x_drv_suspend(struct device *dev)
...
@@ -413,7 +414,7 @@ static int ehci_fsl_mpc512x_drv_suspend(struct device *dev)
struct
fsl_usb2_platform_data
*
pdata
=
dev_get_platdata
(
dev
);
struct
fsl_usb2_platform_data
*
pdata
=
dev_get_platdata
(
dev
);
u32
tmp
;
u32
tmp
;
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
u32
mode
=
ehci_readl
(
ehci
,
hcd
->
regs
+
FSL_SOC_USB_USBMODE
);
u32
mode
=
ehci_readl
(
ehci
,
hcd
->
regs
+
FSL_SOC_USB_USBMODE
);
mode
&=
USBMODE_CM_MASK
;
mode
&=
USBMODE_CM_MASK
;
tmp
=
ehci_readl
(
ehci
,
hcd
->
regs
+
0x140
);
/* usbcmd */
tmp
=
ehci_readl
(
ehci
,
hcd
->
regs
+
0x140
);
/* usbcmd */
...
...
drivers/usb/host/ehci-grlib.c
浏览文件 @
d59abb93
...
@@ -140,6 +140,7 @@ static int ehci_hcd_grlib_probe(struct platform_device *op)
...
@@ -140,6 +140,7 @@ static int ehci_hcd_grlib_probe(struct platform_device *op)
if
(
rv
)
if
(
rv
)
goto
err_ioremap
;
goto
err_ioremap
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_ioremap:
err_ioremap:
...
...
drivers/usb/host/ehci-hcd.c
浏览文件 @
d59abb93
...
@@ -71,7 +71,6 @@
...
@@ -71,7 +71,6 @@
static
const
char
hcd_name
[]
=
"ehci_hcd"
;
static
const
char
hcd_name
[]
=
"ehci_hcd"
;
#undef VERBOSE_DEBUG
#undef EHCI_URB_TRACE
#undef EHCI_URB_TRACE
/* magic numbers that can affect system performance */
/* magic numbers that can affect system performance */
...
@@ -714,13 +713,6 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
...
@@ -714,13 +713,6 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
cmd
=
ehci_readl
(
ehci
,
&
ehci
->
regs
->
command
);
cmd
=
ehci_readl
(
ehci
,
&
ehci
->
regs
->
command
);
bh
=
0
;
bh
=
0
;
#ifdef VERBOSE_DEBUG
/* unrequested/ignored: Frame List Rollover */
dbg_status
(
ehci
,
"irq"
,
status
);
#endif
/* INT, ERR, and IAA interrupt rates can be throttled */
/* normal [4.15.1.2] or error [4.15.1.1] completion */
/* normal [4.15.1.2] or error [4.15.1.1] completion */
if
(
likely
((
status
&
(
STS_INT
|
STS_ERR
))
!=
0
))
{
if
(
likely
((
status
&
(
STS_INT
|
STS_ERR
))
!=
0
))
{
if
(
likely
((
status
&
STS_ERR
)
==
0
))
if
(
likely
((
status
&
STS_ERR
)
==
0
))
...
@@ -1320,7 +1312,7 @@ static int __init ehci_hcd_init(void)
...
@@ -1320,7 +1312,7 @@ static int __init ehci_hcd_init(void)
sizeof
(
struct
ehci_qh
),
sizeof
(
struct
ehci_qtd
),
sizeof
(
struct
ehci_qh
),
sizeof
(
struct
ehci_qtd
),
sizeof
(
struct
ehci_itd
),
sizeof
(
struct
ehci_sitd
));
sizeof
(
struct
ehci_itd
),
sizeof
(
struct
ehci_sitd
));
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
ehci_debug_root
=
debugfs_create_dir
(
"ehci"
,
usb_debug_root
);
ehci_debug_root
=
debugfs_create_dir
(
"ehci"
,
usb_debug_root
);
if
(
!
ehci_debug_root
)
{
if
(
!
ehci_debug_root
)
{
retval
=
-
ENOENT
;
retval
=
-
ENOENT
;
...
@@ -1369,7 +1361,7 @@ static int __init ehci_hcd_init(void)
...
@@ -1369,7 +1361,7 @@ static int __init ehci_hcd_init(void)
platform_driver_unregister
(
&
PLATFORM_DRIVER
);
platform_driver_unregister
(
&
PLATFORM_DRIVER
);
clean0:
clean0:
#endif
#endif
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
debugfs_remove
(
ehci_debug_root
);
debugfs_remove
(
ehci_debug_root
);
ehci_debug_root
=
NULL
;
ehci_debug_root
=
NULL
;
err_debug:
err_debug:
...
@@ -1393,7 +1385,7 @@ static void __exit ehci_hcd_cleanup(void)
...
@@ -1393,7 +1385,7 @@ static void __exit ehci_hcd_cleanup(void)
#ifdef PS3_SYSTEM_BUS_DRIVER
#ifdef PS3_SYSTEM_BUS_DRIVER
ps3_ehci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
ps3_ehci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
#endif
#endif
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
debugfs_remove
(
ehci_debug_root
);
debugfs_remove
(
ehci_debug_root
);
#endif
#endif
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
...
...
drivers/usb/host/ehci-hub.c
浏览文件 @
d59abb93
...
@@ -1114,10 +1114,8 @@ static int ehci_hub_control (
...
@@ -1114,10 +1114,8 @@ static int ehci_hub_control (
if
(
test_bit
(
wIndex
,
&
ehci
->
port_c_suspend
))
if
(
test_bit
(
wIndex
,
&
ehci
->
port_c_suspend
))
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
#ifndef VERBOSE_DEBUG
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
dbg_port
(
ehci
,
"GetStatus"
,
wIndex
+
1
,
temp
);
#endif
dbg_port
(
ehci
,
"GetStatus"
,
wIndex
+
1
,
temp
);
put_unaligned_le32
(
status
,
buf
);
put_unaligned_le32
(
status
,
buf
);
break
;
break
;
case
SetHubFeature
:
case
SetHubFeature
:
...
...
drivers/usb/host/ehci-mv.c
浏览文件 @
d59abb93
...
@@ -178,7 +178,7 @@ static int mv_ehci_probe(struct platform_device *pdev)
...
@@ -178,7 +178,7 @@ static int mv_ehci_probe(struct platform_device *pdev)
ehci_mv
->
phy_regs
=
devm_ioremap
(
&
pdev
->
dev
,
r
->
start
,
ehci_mv
->
phy_regs
=
devm_ioremap
(
&
pdev
->
dev
,
r
->
start
,
resource_size
(
r
));
resource_size
(
r
));
if
(
ehci_mv
->
phy_regs
==
0
)
{
if
(
!
ehci_mv
->
phy_regs
)
{
dev_err
(
&
pdev
->
dev
,
"failed to map phy I/O memory
\n
"
);
dev_err
(
&
pdev
->
dev
,
"failed to map phy I/O memory
\n
"
);
retval
=
-
EFAULT
;
retval
=
-
EFAULT
;
goto
err_put_hcd
;
goto
err_put_hcd
;
...
@@ -257,6 +257,7 @@ static int mv_ehci_probe(struct platform_device *pdev)
...
@@ -257,6 +257,7 @@ static int mv_ehci_probe(struct platform_device *pdev)
"failed to add hcd with err %d
\n
"
,
retval
);
"failed to add hcd with err %d
\n
"
,
retval
);
goto
err_set_vbus
;
goto
err_set_vbus
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
}
}
if
(
pdata
->
private_init
)
if
(
pdata
->
private_init
)
...
...
drivers/usb/host/ehci-mxc.c
浏览文件 @
d59abb93
...
@@ -155,6 +155,7 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
...
@@ -155,6 +155,7 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev)
if
(
ret
)
if
(
ret
)
goto
err_add
;
goto
err_add
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_add:
err_add:
...
...
drivers/usb/host/ehci-octeon.c
浏览文件 @
d59abb93
...
@@ -158,6 +158,7 @@ static int ehci_octeon_drv_probe(struct platform_device *pdev)
...
@@ -158,6 +158,7 @@ static int ehci_octeon_drv_probe(struct platform_device *pdev)
dev_dbg
(
&
pdev
->
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
dev_dbg
(
&
pdev
->
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
goto
err3
;
goto
err3
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
...
...
drivers/usb/host/ehci-omap.c
浏览文件 @
d59abb93
...
@@ -215,6 +215,7 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
...
@@ -215,6 +215,7 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev)
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
goto
err_pm_runtime
;
goto
err_pm_runtime
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
/*
/*
* Bring PHYs out of reset for non PHY modes.
* Bring PHYs out of reset for non PHY modes.
...
...
drivers/usb/host/ehci-orion.c
浏览文件 @
d59abb93
...
@@ -252,6 +252,7 @@ static int ehci_orion_drv_probe(struct platform_device *pdev)
...
@@ -252,6 +252,7 @@ static int ehci_orion_drv_probe(struct platform_device *pdev)
if
(
err
)
if
(
err
)
goto
err4
;
goto
err4
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err4:
err4:
...
...
drivers/usb/host/ehci-platform.c
浏览文件 @
d59abb93
...
@@ -132,6 +132,7 @@ static int ehci_platform_probe(struct platform_device *dev)
...
@@ -132,6 +132,7 @@ static int ehci_platform_probe(struct platform_device *dev)
if
(
err
)
if
(
err
)
goto
err_put_hcd
;
goto
err_put_hcd
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
platform_set_drvdata
(
dev
,
hcd
);
platform_set_drvdata
(
dev
,
hcd
);
return
err
;
return
err
;
...
...
drivers/usb/host/ehci-pmcmsp.c
浏览文件 @
d59abb93
...
@@ -210,8 +210,10 @@ int usb_hcd_msp_probe(const struct hc_driver *driver,
...
@@ -210,8 +210,10 @@ int usb_hcd_msp_probe(const struct hc_driver *driver,
retval
=
usb_add_hcd
(
hcd
,
res
->
start
,
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
res
->
start
,
IRQF_SHARED
);
if
(
retval
==
0
)
if
(
retval
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
}
usb_remove_hcd
(
hcd
);
usb_remove_hcd
(
hcd
);
err3:
err3:
...
...
drivers/usb/host/ehci-ppc-of.c
浏览文件 @
d59abb93
...
@@ -169,6 +169,7 @@ static int ehci_hcd_ppc_of_probe(struct platform_device *op)
...
@@ -169,6 +169,7 @@ static int ehci_hcd_ppc_of_probe(struct platform_device *op)
if
(
rv
)
if
(
rv
)
goto
err_ioremap
;
goto
err_ioremap
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_ioremap:
err_ioremap:
...
...
drivers/usb/host/ehci-ps3.c
浏览文件 @
d59abb93
...
@@ -189,6 +189,7 @@ static int ps3_ehci_probe(struct ps3_system_bus_device *dev)
...
@@ -189,6 +189,7 @@ static int ps3_ehci_probe(struct ps3_system_bus_device *dev)
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
result
;
return
result
;
fail_add_hcd:
fail_add_hcd:
...
...
drivers/usb/host/ehci-q.c
浏览文件 @
d59abb93
...
@@ -168,13 +168,13 @@ static void ehci_clear_tt_buffer(struct ehci_hcd *ehci, struct ehci_qh *qh,
...
@@ -168,13 +168,13 @@ static void ehci_clear_tt_buffer(struct ehci_hcd *ehci, struct ehci_qh *qh,
* Note: this routine is never called for Isochronous transfers.
* Note: this routine is never called for Isochronous transfers.
*/
*/
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
dev_dbg
(
&
tt
->
dev
,
dev_dbg
(
&
tt
->
dev
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
usb_pipeendpoint
(
urb
->
pipe
),
token
);
usb_pipeendpoint
(
urb
->
pipe
),
token
);
#endif
/*
DEBUG ||
CONFIG_DYNAMIC_DEBUG */
#endif
/* CONFIG_DYNAMIC_DEBUG */
if
(
!
ehci_is_TDI
(
ehci
)
if
(
!
ehci_is_TDI
(
ehci
)
||
urb
->
dev
->
tt
->
hub
!=
||
urb
->
dev
->
tt
->
hub
!=
ehci_to_hcd
(
ehci
)
->
self
.
root_hub
)
{
ehci_to_hcd
(
ehci
)
->
self
.
root_hub
)
{
...
...
drivers/usb/host/ehci-sead3.c
浏览文件 @
d59abb93
...
@@ -126,6 +126,7 @@ static int ehci_hcd_sead3_drv_probe(struct platform_device *pdev)
...
@@ -126,6 +126,7 @@ static int ehci_hcd_sead3_drv_probe(struct platform_device *pdev)
IRQF_SHARED
);
IRQF_SHARED
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
ret
;
return
ret
;
}
}
...
...
drivers/usb/host/ehci-sh.c
浏览文件 @
d59abb93
...
@@ -151,6 +151,7 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
...
@@ -151,6 +151,7 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd"
);
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd"
);
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
priv
->
hcd
=
hcd
;
priv
->
hcd
=
hcd
;
platform_set_drvdata
(
pdev
,
priv
);
platform_set_drvdata
(
pdev
,
priv
);
...
...
drivers/usb/host/ehci-spear.c
浏览文件 @
d59abb93
...
@@ -130,6 +130,7 @@ static int spear_ehci_hcd_drv_probe(struct platform_device *pdev)
...
@@ -130,6 +130,7 @@ static int spear_ehci_hcd_drv_probe(struct platform_device *pdev)
if
(
retval
)
if
(
retval
)
goto
err_stop_ehci
;
goto
err_stop_ehci
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
err_stop_ehci:
err_stop_ehci:
...
...
drivers/usb/host/ehci-tegra.c
浏览文件 @
d59abb93
...
@@ -455,6 +455,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
...
@@ -455,6 +455,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
goto
cleanup_otg_set_host
;
goto
cleanup_otg_set_host
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
err
;
return
err
;
...
...
drivers/usb/host/ehci-tilegx.c
浏览文件 @
d59abb93
...
@@ -170,6 +170,7 @@ static int ehci_hcd_tilegx_drv_probe(struct platform_device *pdev)
...
@@ -170,6 +170,7 @@ static int ehci_hcd_tilegx_drv_probe(struct platform_device *pdev)
ret
=
usb_add_hcd
(
hcd
,
pdata
->
irq
,
IRQF_SHARED
);
ret
=
usb_add_hcd
(
hcd
,
pdata
->
irq
,
IRQF_SHARED
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
ret
;
return
ret
;
}
}
...
...
drivers/usb/host/ehci-w90x900.c
浏览文件 @
d59abb93
...
@@ -94,6 +94,7 @@ static int usb_w90x900_probe(const struct hc_driver *driver,
...
@@ -94,6 +94,7 @@ static int usb_w90x900_probe(const struct hc_driver *driver,
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
err4
;
goto
err4
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
err4:
err4:
iounmap
(
hcd
->
regs
);
iounmap
(
hcd
->
regs
);
...
...
drivers/usb/host/ehci-xilinx-of.c
浏览文件 @
d59abb93
...
@@ -191,8 +191,10 @@ static int ehci_hcd_xilinx_of_probe(struct platform_device *op)
...
@@ -191,8 +191,10 @@ static int ehci_hcd_xilinx_of_probe(struct platform_device *op)
ehci
->
caps
=
hcd
->
regs
+
0x100
;
ehci
->
caps
=
hcd
->
regs
+
0x100
;
rv
=
usb_add_hcd
(
hcd
,
irq
,
0
);
rv
=
usb_add_hcd
(
hcd
,
irq
,
0
);
if
(
rv
==
0
)
if
(
rv
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
}
err_irq:
err_irq:
usb_put_hcd
(
hcd
);
usb_put_hcd
(
hcd
);
...
...
drivers/usb/host/ehci.h
浏览文件 @
d59abb93
...
@@ -38,7 +38,7 @@ typedef __u16 __bitwise __hc16;
...
@@ -38,7 +38,7 @@ typedef __u16 __bitwise __hc16;
#endif
#endif
/* statistics can be kept for tuning/monitoring */
/* statistics can be kept for tuning/monitoring */
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
#define EHCI_STATS
#define EHCI_STATS
#endif
#endif
...
@@ -248,7 +248,7 @@ struct ehci_hcd { /* one per controller */
...
@@ -248,7 +248,7 @@ struct ehci_hcd { /* one per controller */
#endif
#endif
/* debug files */
/* debug files */
#if
defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
#if
def CONFIG_DYNAMIC_DEBUG
struct
dentry
*
debug_dir
;
struct
dentry
*
debug_dir
;
#endif
#endif
...
@@ -832,9 +832,9 @@ static inline u32 hc32_to_cpup (const struct ehci_hcd *ehci, const __hc32 *x)
...
@@ -832,9 +832,9 @@ static inline u32 hc32_to_cpup (const struct ehci_hcd *ehci, const __hc32 *x)
dev_warn(ehci_to_hcd(ehci)->self.controller , fmt , ## args)
dev_warn(ehci_to_hcd(ehci)->self.controller , fmt , ## args)
#if
!defined(DEBUG) && !defined(CONFIG_DYNAMIC_DEBUG)
#if
ndef CONFIG_DYNAMIC_DEBUG
#define STUB_DEBUG_FILES
#define STUB_DEBUG_FILES
#endif
/* !DEBUG && !CONFIG_DYNAMIC_DEBUG */
#endif
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
...
...
drivers/usb/host/fhci-hcd.c
浏览文件 @
d59abb93
...
@@ -754,6 +754,8 @@ static int of_fhci_probe(struct platform_device *ofdev)
...
@@ -754,6 +754,8 @@ static int of_fhci_probe(struct platform_device *ofdev)
if
(
ret
<
0
)
if
(
ret
<
0
)
goto
err_add_hcd
;
goto
err_add_hcd
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
fhci_dfs_create
(
fhci
);
fhci_dfs_create
(
fhci
);
return
0
;
return
0
;
...
...
drivers/usb/host/fotg210-hcd.c
浏览文件 @
d59abb93
...
@@ -56,12 +56,9 @@
...
@@ -56,12 +56,9 @@
static
const
char
hcd_name
[]
=
"fotg210_hcd"
;
static
const
char
hcd_name
[]
=
"fotg210_hcd"
;
#undef VERBOSE_DEBUG
#undef FOTG210_URB_TRACE
#undef FOTG210_URB_TRACE
#ifdef DEBUG
#define FOTG210_STATS
#define FOTG210_STATS
#endif
/* magic numbers that can affect system performance */
/* magic numbers that can affect system performance */
#define FOTG210_TUNE_CERR 3
/* 0-3 qtd retries; 0 == don't stop */
#define FOTG210_TUNE_CERR 3
/* 0-3 qtd retries; 0 == don't stop */
...
@@ -107,14 +104,6 @@ MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us");
...
@@ -107,14 +104,6 @@ MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us");
#define fotg210_warn(fotg210, fmt, args...) \
#define fotg210_warn(fotg210, fmt, args...) \
dev_warn(fotg210_to_hcd(fotg210)->self.controller , fmt , ## args)
dev_warn(fotg210_to_hcd(fotg210)->self.controller , fmt , ## args)
#ifdef VERBOSE_DEBUG
# define fotg210_vdbg fotg210_dbg
#else
static
inline
void
fotg210_vdbg
(
struct
fotg210_hcd
*
fotg210
,
...)
{}
#endif
#ifdef DEBUG
/* check the values in the HCSPARAMS register
/* check the values in the HCSPARAMS register
* (host controller _Structural_ parameters)
* (host controller _Structural_ parameters)
* see EHCI spec, Table 2-4 for each value
* see EHCI spec, Table 2-4 for each value
...
@@ -129,13 +118,6 @@ static void dbg_hcs_params(struct fotg210_hcd *fotg210, char *label)
...
@@ -129,13 +118,6 @@ static void dbg_hcs_params(struct fotg210_hcd *fotg210, char *label)
HCS_N_PORTS
(
params
)
HCS_N_PORTS
(
params
)
);
);
}
}
#else
static
inline
void
dbg_hcs_params
(
struct
fotg210_hcd
*
fotg210
,
char
*
label
)
{}
#endif
#ifdef DEBUG
/* check the values in the HCCPARAMS register
/* check the values in the HCCPARAMS register
* (host controller _Capability_ parameters)
* (host controller _Capability_ parameters)
...
@@ -152,13 +134,6 @@ static void dbg_hcc_params(struct fotg210_hcd *fotg210, char *label)
...
@@ -152,13 +134,6 @@ static void dbg_hcc_params(struct fotg210_hcd *fotg210, char *label)
HCC_PGM_FRAMELISTLEN
(
params
)
?
"256/512/1024"
:
"1024"
,
HCC_PGM_FRAMELISTLEN
(
params
)
?
"256/512/1024"
:
"1024"
,
HCC_CANPARK
(
params
)
?
" park"
:
""
);
HCC_CANPARK
(
params
)
?
" park"
:
""
);
}
}
#else
static
inline
void
dbg_hcc_params
(
struct
fotg210_hcd
*
fotg210
,
char
*
label
)
{}
#endif
#ifdef DEBUG
static
void
__maybe_unused
static
void
__maybe_unused
dbg_qtd
(
const
char
*
label
,
struct
fotg210_hcd
*
fotg210
,
struct
fotg210_qtd
*
qtd
)
dbg_qtd
(
const
char
*
label
,
struct
fotg210_hcd
*
fotg210
,
struct
fotg210_qtd
*
qtd
)
...
@@ -272,8 +247,8 @@ dbg_command_buf(char *buf, unsigned len, const char *label, u32 command)
...
@@ -272,8 +247,8 @@ dbg_command_buf(char *buf, unsigned len, const char *label, u32 command)
);
);
}
}
static
int
static
char
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
*
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
{
{
char
*
sig
;
char
*
sig
;
...
@@ -293,7 +268,7 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
...
@@ -293,7 +268,7 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
break
;
break
;
}
}
return
scnprintf
(
buf
,
len
,
scnprintf
(
buf
,
len
,
"%s%sport:%d status %06x %d "
"%s%sport:%d status %06x %d "
"sig=%s%s%s%s%s%s%s%s"
,
"sig=%s%s%s%s%s%s%s%s"
,
label
,
label
[
0
]
?
" "
:
""
,
port
,
status
,
label
,
label
[
0
]
?
" "
:
""
,
port
,
status
,
...
@@ -306,31 +281,9 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
...
@@ -306,31 +281,9 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
(
status
&
PORT_PE
)
?
" PE"
:
""
,
(
status
&
PORT_PE
)
?
" PE"
:
""
,
(
status
&
PORT_CSC
)
?
" CSC"
:
""
,
(
status
&
PORT_CSC
)
?
" CSC"
:
""
,
(
status
&
PORT_CONNECT
)
?
" CONNECT"
:
""
);
(
status
&
PORT_CONNECT
)
?
" CONNECT"
:
""
);
return
buf
;
}
}
#else
static
inline
void
__maybe_unused
dbg_qh
(
char
*
label
,
struct
fotg210_hcd
*
fotg210
,
struct
fotg210_qh
*
qh
)
{}
static
inline
int
__maybe_unused
dbg_status_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
status
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_command_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
command
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_intr_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
enable
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
{
return
0
;
}
#endif
/* DEBUG */
/* functions have the "wrong" filename when they're output... */
/* functions have the "wrong" filename when they're output... */
#define dbg_status(fotg210, label, status) { \
#define dbg_status(fotg210, label, status) { \
char _buf[80]; \
char _buf[80]; \
...
@@ -346,19 +299,11 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
...
@@ -346,19 +299,11 @@ dbg_port_buf(char *buf, unsigned len, const char *label, int port, u32 status)
#define dbg_port(fotg210, label, port, status) { \
#define dbg_port(fotg210, label, port, status) { \
char _buf[80]; \
char _buf[80]; \
dbg_port_buf(_buf, sizeof(_buf), label, port, status); \
fotg210_dbg(fotg210, "%s\n", dbg_port_buf(_buf, sizeof(_buf), label, port, status) ); \
fotg210_dbg(fotg210, "%s\n", _buf); \
}
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifdef STUB_DEBUG_FILES
static
inline
void
create_debug_files
(
struct
fotg210_hcd
*
bus
)
{
}
static
inline
void
remove_debug_files
(
struct
fotg210_hcd
*
bus
)
{
}
#else
/* troubleshooting help: expose state in debugfs */
/* troubleshooting help: expose state in debugfs */
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
...
@@ -954,7 +899,6 @@ static inline void remove_debug_files(struct fotg210_hcd *fotg210)
...
@@ -954,7 +899,6 @@ static inline void remove_debug_files(struct fotg210_hcd *fotg210)
debugfs_remove_recursive
(
fotg210
->
debug_dir
);
debugfs_remove_recursive
(
fotg210
->
debug_dir
);
}
}
#endif
/* STUB_DEBUG_FILES */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*
/*
...
@@ -1398,7 +1342,7 @@ static void fotg210_iaa_watchdog(struct fotg210_hcd *fotg210)
...
@@ -1398,7 +1342,7 @@ static void fotg210_iaa_watchdog(struct fotg210_hcd *fotg210)
&
fotg210
->
regs
->
status
);
&
fotg210
->
regs
->
status
);
}
}
fotg210_
v
dbg
(
fotg210
,
"IAA watchdog: status %x cmd %x
\n
"
,
fotg210_dbg
(
fotg210
,
"IAA watchdog: status %x cmd %x
\n
"
,
status
,
cmd
);
status
,
cmd
);
end_unlink_async
(
fotg210
);
end_unlink_async
(
fotg210
);
}
}
...
@@ -1810,10 +1754,8 @@ static int fotg210_hub_control(
...
@@ -1810,10 +1754,8 @@ static int fotg210_hub_control(
if
(
test_bit
(
wIndex
,
&
fotg210
->
port_c_suspend
))
if
(
test_bit
(
wIndex
,
&
fotg210
->
port_c_suspend
))
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
#ifndef VERBOSE_DEBUG
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
dbg_port
(
fotg210
,
"GetStatus"
,
wIndex
+
1
,
temp
);
#endif
dbg_port
(
fotg210
,
"GetStatus"
,
wIndex
+
1
,
temp
);
put_unaligned_le32
(
status
,
buf
);
put_unaligned_le32
(
status
,
buf
);
break
;
break
;
case
SetHubFeature
:
case
SetHubFeature
:
...
@@ -1856,7 +1798,7 @@ static int fotg210_hub_control(
...
@@ -1856,7 +1798,7 @@ static int fotg210_hub_control(
* which can be fine if this root hub has a
* which can be fine if this root hub has a
* transaction translator built in.
* transaction translator built in.
*/
*/
fotg210_
v
dbg
(
fotg210
,
"port %d reset
\n
"
,
wIndex
+
1
);
fotg210_dbg
(
fotg210
,
"port %d reset
\n
"
,
wIndex
+
1
);
temp
|=
PORT_RESET
;
temp
|=
PORT_RESET
;
temp
&=
~
PORT_PE
;
temp
&=
~
PORT_PE
;
...
@@ -2274,13 +2216,12 @@ static void fotg210_clear_tt_buffer(struct fotg210_hcd *fotg210,
...
@@ -2274,13 +2216,12 @@ static void fotg210_clear_tt_buffer(struct fotg210_hcd *fotg210,
* Note: this routine is never called for Isochronous transfers.
* Note: this routine is never called for Isochronous transfers.
*/
*/
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
#ifdef DEBUG
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
dev_dbg
(
&
tt
->
dev
,
dev_dbg
(
&
tt
->
dev
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
usb_pipeendpoint
(
urb
->
pipe
),
token
);
usb_pipeendpoint
(
urb
->
pipe
),
token
);
#endif
/* DEBUG */
if
(
urb
->
dev
->
tt
->
hub
!=
if
(
urb
->
dev
->
tt
->
hub
!=
fotg210_to_hcd
(
fotg210
)
->
self
.
root_hub
)
{
fotg210_to_hcd
(
fotg210
)
->
self
.
root_hub
)
{
if
(
usb_hub_clear_tt_buffer
(
urb
)
==
0
)
if
(
usb_hub_clear_tt_buffer
(
urb
)
==
0
)
...
@@ -2341,7 +2282,7 @@ static int qtd_copy_status(
...
@@ -2341,7 +2282,7 @@ static int qtd_copy_status(
status
=
-
EPROTO
;
status
=
-
EPROTO
;
}
}
fotg210_
v
dbg
(
fotg210
,
fotg210_dbg
(
fotg210
,
"dev%d ep%d%s qtd token %08x --> status %d
\n
"
,
"dev%d ep%d%s qtd token %08x --> status %d
\n
"
,
usb_pipedevice
(
urb
->
pipe
),
usb_pipedevice
(
urb
->
pipe
),
usb_pipeendpoint
(
urb
->
pipe
),
usb_pipeendpoint
(
urb
->
pipe
),
...
@@ -3583,11 +3524,9 @@ periodic_usecs(struct fotg210_hcd *fotg210, unsigned frame, unsigned uframe)
...
@@ -3583,11 +3524,9 @@ periodic_usecs(struct fotg210_hcd *fotg210, unsigned frame, unsigned uframe)
break
;
break
;
}
}
}
}
#ifdef DEBUG
if
(
usecs
>
fotg210
->
uframe_periodic_max
)
if
(
usecs
>
fotg210
->
uframe_periodic_max
)
fotg210_err
(
fotg210
,
"uframe %d sched overrun: %d usecs
\n
"
,
fotg210_err
(
fotg210
,
"uframe %d sched overrun: %d usecs
\n
"
,
frame
*
8
+
uframe
,
usecs
);
frame
*
8
+
uframe
,
usecs
);
#endif
return
usecs
;
return
usecs
;
}
}
...
@@ -4646,7 +4585,7 @@ static void itd_link_urb(
...
@@ -4646,7 +4585,7 @@ static void itd_link_urb(
if
(
unlikely
(
list_empty
(
&
stream
->
td_list
)))
{
if
(
unlikely
(
list_empty
(
&
stream
->
td_list
)))
{
fotg210_to_hcd
(
fotg210
)
->
self
.
bandwidth_allocated
fotg210_to_hcd
(
fotg210
)
->
self
.
bandwidth_allocated
+=
stream
->
bandwidth
;
+=
stream
->
bandwidth
;
fotg210_
v
dbg
(
fotg210
,
fotg210_dbg
(
fotg210
,
"schedule devp %s ep%d%s-iso period %d start %d.%d
\n
"
,
"schedule devp %s ep%d%s-iso period %d start %d.%d
\n
"
,
urb
->
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
urb
->
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
,
...
@@ -4779,7 +4718,7 @@ static bool itd_complete(struct fotg210_hcd *fotg210, struct fotg210_itd *itd)
...
@@ -4779,7 +4718,7 @@ static bool itd_complete(struct fotg210_hcd *fotg210, struct fotg210_itd *itd)
if
(
unlikely
(
list_is_singular
(
&
stream
->
td_list
)))
{
if
(
unlikely
(
list_is_singular
(
&
stream
->
td_list
)))
{
fotg210_to_hcd
(
fotg210
)
->
self
.
bandwidth_allocated
fotg210_to_hcd
(
fotg210
)
->
self
.
bandwidth_allocated
-=
stream
->
bandwidth
;
-=
stream
->
bandwidth
;
fotg210_
v
dbg
(
fotg210
,
fotg210_dbg
(
fotg210
,
"deschedule devp %s ep%d%s-iso
\n
"
,
"deschedule devp %s ep%d%s-iso
\n
"
,
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
);
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
);
...
@@ -5444,10 +5383,8 @@ static irqreturn_t fotg210_irq(struct usb_hcd *hcd)
...
@@ -5444,10 +5383,8 @@ static irqreturn_t fotg210_irq(struct usb_hcd *hcd)
cmd
=
fotg210_readl
(
fotg210
,
&
fotg210
->
regs
->
command
);
cmd
=
fotg210_readl
(
fotg210
,
&
fotg210
->
regs
->
command
);
bh
=
0
;
bh
=
0
;
#ifdef VERBOSE_DEBUG
/* unrequested/ignored: Frame List Rollover */
/* unrequested/ignored: Frame List Rollover */
dbg_status
(
fotg210
,
"irq"
,
status
);
dbg_status
(
fotg210
,
"irq"
,
status
);
#endif
/* INT, ERR, and IAA interrupt rates can be throttled */
/* INT, ERR, and IAA interrupt rates can be throttled */
...
@@ -5952,6 +5889,7 @@ static int fotg210_hcd_probe(struct platform_device *pdev)
...
@@ -5952,6 +5889,7 @@ static int fotg210_hcd_probe(struct platform_device *pdev)
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
retval
);
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
retval
);
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
...
@@ -6013,13 +5951,11 @@ static int __init fotg210_hcd_init(void)
...
@@ -6013,13 +5951,11 @@ static int __init fotg210_hcd_init(void)
sizeof
(
struct
fotg210_qh
),
sizeof
(
struct
fotg210_qtd
),
sizeof
(
struct
fotg210_qh
),
sizeof
(
struct
fotg210_qtd
),
sizeof
(
struct
fotg210_itd
));
sizeof
(
struct
fotg210_itd
));
#ifdef DEBUG
fotg210_debug_root
=
debugfs_create_dir
(
"fotg210"
,
usb_debug_root
);
fotg210_debug_root
=
debugfs_create_dir
(
"fotg210"
,
usb_debug_root
);
if
(
!
fotg210_debug_root
)
{
if
(
!
fotg210_debug_root
)
{
retval
=
-
ENOENT
;
retval
=
-
ENOENT
;
goto
err_debug
;
goto
err_debug
;
}
}
#endif
retval
=
platform_driver_register
(
&
fotg210_hcd_driver
);
retval
=
platform_driver_register
(
&
fotg210_hcd_driver
);
if
(
retval
<
0
)
if
(
retval
<
0
)
...
@@ -6028,11 +5964,9 @@ static int __init fotg210_hcd_init(void)
...
@@ -6028,11 +5964,9 @@ static int __init fotg210_hcd_init(void)
platform_driver_unregister
(
&
fotg210_hcd_driver
);
platform_driver_unregister
(
&
fotg210_hcd_driver
);
clean:
clean:
#ifdef DEBUG
debugfs_remove
(
fotg210_debug_root
);
debugfs_remove
(
fotg210_debug_root
);
fotg210_debug_root
=
NULL
;
fotg210_debug_root
=
NULL
;
err_debug:
err_debug:
#endif
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
return
retval
;
return
retval
;
}
}
...
@@ -6041,9 +5975,7 @@ module_init(fotg210_hcd_init);
...
@@ -6041,9 +5975,7 @@ module_init(fotg210_hcd_init);
static
void
__exit
fotg210_hcd_cleanup
(
void
)
static
void
__exit
fotg210_hcd_cleanup
(
void
)
{
{
platform_driver_unregister
(
&
fotg210_hcd_driver
);
platform_driver_unregister
(
&
fotg210_hcd_driver
);
#ifdef DEBUG
debugfs_remove
(
fotg210_debug_root
);
debugfs_remove
(
fotg210_debug_root
);
#endif
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
}
}
module_exit
(
fotg210_hcd_cleanup
);
module_exit
(
fotg210_hcd_cleanup
);
drivers/usb/host/fotg210.h
浏览文件 @
d59abb93
...
@@ -174,9 +174,7 @@ struct fotg210_hcd { /* one per controller */
...
@@ -174,9 +174,7 @@ struct fotg210_hcd { /* one per controller */
#endif
#endif
/* debug files */
/* debug files */
#ifdef DEBUG
struct
dentry
*
debug_dir
;
struct
dentry
*
debug_dir
;
#endif
};
};
/* convert between an HCD pointer and the corresponding FOTG210_HCD */
/* convert between an HCD pointer and the corresponding FOTG210_HCD */
...
@@ -741,10 +739,4 @@ static inline unsigned fotg210_read_frame_index(struct fotg210_hcd *fotg210)
...
@@ -741,10 +739,4 @@ static inline unsigned fotg210_read_frame_index(struct fotg210_hcd *fotg210)
})
})
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifndef DEBUG
#define STUB_DEBUG_FILES
#endif
/* DEBUG */
/*-------------------------------------------------------------------------*/
#endif
/* __LINUX_FOTG210_H */
#endif
/* __LINUX_FOTG210_H */
drivers/usb/host/fusbh200-hcd.c
浏览文件 @
d59abb93
...
@@ -57,13 +57,8 @@
...
@@ -57,13 +57,8 @@
static
const
char
hcd_name
[]
=
"fusbh200_hcd"
;
static
const
char
hcd_name
[]
=
"fusbh200_hcd"
;
#undef VERBOSE_DEBUG
#undef FUSBH200_URB_TRACE
#undef FUSBH200_URB_TRACE
#ifdef DEBUG
#define FUSBH200_STATS
#endif
/* magic numbers that can affect system performance */
/* magic numbers that can affect system performance */
#define FUSBH200_TUNE_CERR 3
/* 0-3 qtd retries; 0 == don't stop */
#define FUSBH200_TUNE_CERR 3
/* 0-3 qtd retries; 0 == don't stop */
#define FUSBH200_TUNE_RL_HS 4
/* nak throttle; see 4.9 */
#define FUSBH200_TUNE_RL_HS 4
/* nak throttle; see 4.9 */
...
@@ -108,14 +103,6 @@ MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us");
...
@@ -108,14 +103,6 @@ MODULE_PARM_DESC(hird, "host initiated resume duration, +1 for each 75us");
#define fusbh200_warn(fusbh200, fmt, args...) \
#define fusbh200_warn(fusbh200, fmt, args...) \
dev_warn (fusbh200_to_hcd(fusbh200)->self.controller , fmt , ## args )
dev_warn (fusbh200_to_hcd(fusbh200)->self.controller , fmt , ## args )
#ifdef VERBOSE_DEBUG
# define fusbh200_vdbg fusbh200_dbg
#else
static
inline
void
fusbh200_vdbg
(
struct
fusbh200_hcd
*
fusbh200
,
...)
{}
#endif
#ifdef DEBUG
/* check the values in the HCSPARAMS register
/* check the values in the HCSPARAMS register
* (host controller _Structural_ parameters)
* (host controller _Structural_ parameters)
* see EHCI spec, Table 2-4 for each value
* see EHCI spec, Table 2-4 for each value
...
@@ -130,13 +117,6 @@ static void dbg_hcs_params (struct fusbh200_hcd *fusbh200, char *label)
...
@@ -130,13 +117,6 @@ static void dbg_hcs_params (struct fusbh200_hcd *fusbh200, char *label)
HCS_N_PORTS
(
params
)
HCS_N_PORTS
(
params
)
);
);
}
}
#else
static
inline
void
dbg_hcs_params
(
struct
fusbh200_hcd
*
fusbh200
,
char
*
label
)
{}
#endif
#ifdef DEBUG
/* check the values in the HCCPARAMS register
/* check the values in the HCCPARAMS register
* (host controller _Capability_ parameters)
* (host controller _Capability_ parameters)
...
@@ -153,13 +133,6 @@ static void dbg_hcc_params (struct fusbh200_hcd *fusbh200, char *label)
...
@@ -153,13 +133,6 @@ static void dbg_hcc_params (struct fusbh200_hcd *fusbh200, char *label)
HCC_PGM_FRAMELISTLEN
(
params
)
?
"256/512/1024"
:
"1024"
,
HCC_PGM_FRAMELISTLEN
(
params
)
?
"256/512/1024"
:
"1024"
,
HCC_CANPARK
(
params
)
?
" park"
:
""
);
HCC_CANPARK
(
params
)
?
" park"
:
""
);
}
}
#else
static
inline
void
dbg_hcc_params
(
struct
fusbh200_hcd
*
fusbh200
,
char
*
label
)
{}
#endif
#ifdef DEBUG
static
void
__maybe_unused
static
void
__maybe_unused
dbg_qtd
(
const
char
*
label
,
struct
fusbh200_hcd
*
fusbh200
,
struct
fusbh200_qtd
*
qtd
)
dbg_qtd
(
const
char
*
label
,
struct
fusbh200_hcd
*
fusbh200
,
struct
fusbh200_qtd
*
qtd
)
...
@@ -302,29 +275,6 @@ dbg_port_buf (char *buf, unsigned len, const char *label, int port, u32 status)
...
@@ -302,29 +275,6 @@ dbg_port_buf (char *buf, unsigned len, const char *label, int port, u32 status)
(
status
&
PORT_CONNECT
)
?
" CONNECT"
:
""
);
(
status
&
PORT_CONNECT
)
?
" CONNECT"
:
""
);
}
}
#else
static
inline
void
__maybe_unused
dbg_qh
(
char
*
label
,
struct
fusbh200_hcd
*
fusbh200
,
struct
fusbh200_qh
*
qh
)
{}
static
inline
int
__maybe_unused
dbg_status_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
status
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_command_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
command
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_intr_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
u32
enable
)
{
return
0
;
}
static
inline
int
__maybe_unused
dbg_port_buf
(
char
*
buf
,
unsigned
len
,
const
char
*
label
,
int
port
,
u32
status
)
{
return
0
;
}
#endif
/* DEBUG */
/* functions have the "wrong" filename when they're output... */
/* functions have the "wrong" filename when they're output... */
#define dbg_status(fusbh200, label, status) { \
#define dbg_status(fusbh200, label, status) { \
char _buf [80]; \
char _buf [80]; \
...
@@ -346,13 +296,6 @@ dbg_port_buf (char *buf, unsigned len, const char *label, int port, u32 status)
...
@@ -346,13 +296,6 @@ dbg_port_buf (char *buf, unsigned len, const char *label, int port, u32 status)
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifdef STUB_DEBUG_FILES
static
inline
void
create_debug_files
(
struct
fusbh200_hcd
*
bus
)
{
}
static
inline
void
remove_debug_files
(
struct
fusbh200_hcd
*
bus
)
{
}
#else
/* troubleshooting help: expose state in debugfs */
/* troubleshooting help: expose state in debugfs */
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
...
@@ -775,7 +718,6 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
...
@@ -775,7 +718,6 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
next
+=
temp
;
next
+=
temp
;
}
}
#ifdef FUSBH200_STATS
temp
=
scnprintf
(
next
,
size
,
temp
=
scnprintf
(
next
,
size
,
"irq normal %ld err %ld iaa %ld (lost %ld)
\n
"
,
"irq normal %ld err %ld iaa %ld (lost %ld)
\n
"
,
fusbh200
->
stats
.
normal
,
fusbh200
->
stats
.
error
,
fusbh200
->
stats
.
iaa
,
fusbh200
->
stats
.
normal
,
fusbh200
->
stats
.
error
,
fusbh200
->
stats
.
iaa
,
...
@@ -787,7 +729,6 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
...
@@ -787,7 +729,6 @@ static ssize_t fill_registers_buffer(struct debug_buffer *buf)
fusbh200
->
stats
.
complete
,
fusbh200
->
stats
.
unlink
);
fusbh200
->
stats
.
complete
,
fusbh200
->
stats
.
unlink
);
size
-=
temp
;
size
-=
temp
;
next
+=
temp
;
next
+=
temp
;
#endif
done:
done:
spin_unlock_irqrestore
(
&
fusbh200
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
fusbh200
->
lock
,
flags
);
...
@@ -928,7 +869,6 @@ static inline void remove_debug_files (struct fusbh200_hcd *fusbh200)
...
@@ -928,7 +869,6 @@ static inline void remove_debug_files (struct fusbh200_hcd *fusbh200)
debugfs_remove_recursive
(
fusbh200
->
debug_dir
);
debugfs_remove_recursive
(
fusbh200
->
debug_dir
);
}
}
#endif
/* STUB_DEBUG_FILES */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*
/*
...
@@ -1362,7 +1302,7 @@ static void fusbh200_iaa_watchdog(struct fusbh200_hcd *fusbh200)
...
@@ -1362,7 +1302,7 @@ static void fusbh200_iaa_watchdog(struct fusbh200_hcd *fusbh200)
fusbh200_writel
(
fusbh200
,
STS_IAA
,
&
fusbh200
->
regs
->
status
);
fusbh200_writel
(
fusbh200
,
STS_IAA
,
&
fusbh200
->
regs
->
status
);
}
}
fusbh200_
v
dbg
(
fusbh200
,
"IAA watchdog: status %x cmd %x
\n
"
,
fusbh200_dbg
(
fusbh200
,
"IAA watchdog: status %x cmd %x
\n
"
,
status
,
cmd
);
status
,
cmd
);
end_unlink_async
(
fusbh200
);
end_unlink_async
(
fusbh200
);
}
}
...
@@ -1769,10 +1709,8 @@ static int fusbh200_hub_control (
...
@@ -1769,10 +1709,8 @@ static int fusbh200_hub_control (
if
(
test_bit
(
wIndex
,
&
fusbh200
->
port_c_suspend
))
if
(
test_bit
(
wIndex
,
&
fusbh200
->
port_c_suspend
))
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
status
|=
USB_PORT_STAT_C_SUSPEND
<<
16
;
#ifndef VERBOSE_DEBUG
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
if
(
status
&
~
0xffff
)
/* only if wPortChange is interesting */
dbg_port
(
fusbh200
,
"GetStatus"
,
wIndex
+
1
,
temp
);
#endif
dbg_port
(
fusbh200
,
"GetStatus"
,
wIndex
+
1
,
temp
);
put_unaligned_le32
(
status
,
buf
);
put_unaligned_le32
(
status
,
buf
);
break
;
break
;
case
SetHubFeature
:
case
SetHubFeature
:
...
@@ -1814,7 +1752,7 @@ static int fusbh200_hub_control (
...
@@ -1814,7 +1752,7 @@ static int fusbh200_hub_control (
* which can be fine if this root hub has a
* which can be fine if this root hub has a
* transaction translator built in.
* transaction translator built in.
*/
*/
fusbh200_
vdbg
(
fusbh200
,
"port %d reset
\n
"
,
wIndex
+
1
);
fusbh200_
dbg
(
fusbh200
,
"port %d reset
\n
"
,
wIndex
+
1
);
temp
|=
PORT_RESET
;
temp
|=
PORT_RESET
;
temp
&=
~
PORT_PE
;
temp
&=
~
PORT_PE
;
...
@@ -2230,13 +2168,13 @@ static void fusbh200_clear_tt_buffer(struct fusbh200_hcd *fusbh200, struct fusbh
...
@@ -2230,13 +2168,13 @@ static void fusbh200_clear_tt_buffer(struct fusbh200_hcd *fusbh200, struct fusbh
* Note: this routine is never called for Isochronous transfers.
* Note: this routine is never called for Isochronous transfers.
*/
*/
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
if
(
urb
->
dev
->
tt
&&
!
usb_pipeint
(
urb
->
pipe
)
&&
!
qh
->
clearing_tt
)
{
#ifdef DEBUG
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
struct
usb_device
*
tt
=
urb
->
dev
->
tt
->
hub
;
dev_dbg
(
&
tt
->
dev
,
dev_dbg
(
&
tt
->
dev
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
"clear tt buffer port %d, a%d ep%d t%08x
\n
"
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
urb
->
dev
->
ttport
,
urb
->
dev
->
devnum
,
usb_pipeendpoint
(
urb
->
pipe
),
token
);
usb_pipeendpoint
(
urb
->
pipe
),
token
);
#endif
/* DEBUG */
if
(
urb
->
dev
->
tt
->
hub
!=
if
(
urb
->
dev
->
tt
->
hub
!=
fusbh200_to_hcd
(
fusbh200
)
->
self
.
root_hub
)
{
fusbh200_to_hcd
(
fusbh200
)
->
self
.
root_hub
)
{
if
(
usb_hub_clear_tt_buffer
(
urb
)
==
0
)
if
(
usb_hub_clear_tt_buffer
(
urb
)
==
0
)
...
@@ -2297,7 +2235,7 @@ static int qtd_copy_status (
...
@@ -2297,7 +2235,7 @@ static int qtd_copy_status (
status
=
-
EPROTO
;
status
=
-
EPROTO
;
}
}
fusbh200_
vdbg
(
fusbh200
,
fusbh200_
dbg
(
fusbh200
,
"dev%d ep%d%s qtd token %08x --> status %d
\n
"
,
"dev%d ep%d%s qtd token %08x --> status %d
\n
"
,
usb_pipedevice
(
urb
->
pipe
),
usb_pipedevice
(
urb
->
pipe
),
usb_pipeendpoint
(
urb
->
pipe
),
usb_pipeendpoint
(
urb
->
pipe
),
...
@@ -3529,11 +3467,9 @@ periodic_usecs (struct fusbh200_hcd *fusbh200, unsigned frame, unsigned uframe)
...
@@ -3529,11 +3467,9 @@ periodic_usecs (struct fusbh200_hcd *fusbh200, unsigned frame, unsigned uframe)
break
;
break
;
}
}
}
}
#ifdef DEBUG
if
(
usecs
>
fusbh200
->
uframe_periodic_max
)
if
(
usecs
>
fusbh200
->
uframe_periodic_max
)
fusbh200_err
(
fusbh200
,
"uframe %d sched overrun: %d usecs
\n
"
,
fusbh200_err
(
fusbh200
,
"uframe %d sched overrun: %d usecs
\n
"
,
frame
*
8
+
uframe
,
usecs
);
frame
*
8
+
uframe
,
usecs
);
#endif
return
usecs
;
return
usecs
;
}
}
...
@@ -4586,7 +4522,7 @@ static void itd_link_urb(
...
@@ -4586,7 +4522,7 @@ static void itd_link_urb(
if
(
unlikely
(
list_empty
(
&
stream
->
td_list
)))
{
if
(
unlikely
(
list_empty
(
&
stream
->
td_list
)))
{
fusbh200_to_hcd
(
fusbh200
)
->
self
.
bandwidth_allocated
fusbh200_to_hcd
(
fusbh200
)
->
self
.
bandwidth_allocated
+=
stream
->
bandwidth
;
+=
stream
->
bandwidth
;
fusbh200_
vdbg
(
fusbh200
,
fusbh200_
dbg
(
fusbh200
,
"schedule devp %s ep%d%s-iso period %d start %d.%d
\n
"
,
"schedule devp %s ep%d%s-iso period %d start %d.%d
\n
"
,
urb
->
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
urb
->
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
,
...
@@ -4717,7 +4653,7 @@ static bool itd_complete(struct fusbh200_hcd *fusbh200, struct fusbh200_itd *itd
...
@@ -4717,7 +4653,7 @@ static bool itd_complete(struct fusbh200_hcd *fusbh200, struct fusbh200_itd *itd
if
(
unlikely
(
list_is_singular
(
&
stream
->
td_list
)))
{
if
(
unlikely
(
list_is_singular
(
&
stream
->
td_list
)))
{
fusbh200_to_hcd
(
fusbh200
)
->
self
.
bandwidth_allocated
fusbh200_to_hcd
(
fusbh200
)
->
self
.
bandwidth_allocated
-=
stream
->
bandwidth
;
-=
stream
->
bandwidth
;
fusbh200_
vdbg
(
fusbh200
,
fusbh200_
dbg
(
fusbh200
,
"deschedule devp %s ep%d%s-iso
\n
"
,
"deschedule devp %s ep%d%s-iso
\n
"
,
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
dev
->
devpath
,
stream
->
bEndpointAddress
&
0x0f
,
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
);
(
stream
->
bEndpointAddress
&
USB_DIR_IN
)
?
"in"
:
"out"
);
...
@@ -5115,13 +5051,11 @@ static void fusbh200_stop (struct usb_hcd *hcd)
...
@@ -5115,13 +5051,11 @@ static void fusbh200_stop (struct usb_hcd *hcd)
spin_unlock_irq
(
&
fusbh200
->
lock
);
spin_unlock_irq
(
&
fusbh200
->
lock
);
fusbh200_mem_cleanup
(
fusbh200
);
fusbh200_mem_cleanup
(
fusbh200
);
#ifdef FUSBH200_STATS
fusbh200_dbg
(
fusbh200
,
"irq normal %ld err %ld iaa %ld (lost %ld)
\n
"
,
fusbh200_dbg
(
fusbh200
,
"irq normal %ld err %ld iaa %ld (lost %ld)
\n
"
,
fusbh200
->
stats
.
normal
,
fusbh200
->
stats
.
error
,
fusbh200
->
stats
.
iaa
,
fusbh200
->
stats
.
normal
,
fusbh200
->
stats
.
error
,
fusbh200
->
stats
.
iaa
,
fusbh200
->
stats
.
lost_iaa
);
fusbh200
->
stats
.
lost_iaa
);
fusbh200_dbg
(
fusbh200
,
"complete %ld unlink %ld
\n
"
,
fusbh200_dbg
(
fusbh200
,
"complete %ld unlink %ld
\n
"
,
fusbh200
->
stats
.
complete
,
fusbh200
->
stats
.
unlink
);
fusbh200
->
stats
.
complete
,
fusbh200
->
stats
.
unlink
);
#endif
dbg_status
(
fusbh200
,
"fusbh200_stop completed"
,
dbg_status
(
fusbh200
,
"fusbh200_stop completed"
,
fusbh200_readl
(
fusbh200
,
&
fusbh200
->
regs
->
status
));
fusbh200_readl
(
fusbh200
,
&
fusbh200
->
regs
->
status
));
...
@@ -5365,13 +5299,6 @@ static irqreturn_t fusbh200_irq (struct usb_hcd *hcd)
...
@@ -5365,13 +5299,6 @@ static irqreturn_t fusbh200_irq (struct usb_hcd *hcd)
cmd
=
fusbh200_readl
(
fusbh200
,
&
fusbh200
->
regs
->
command
);
cmd
=
fusbh200_readl
(
fusbh200
,
&
fusbh200
->
regs
->
command
);
bh
=
0
;
bh
=
0
;
#ifdef VERBOSE_DEBUG
/* unrequested/ignored: Frame List Rollover */
dbg_status
(
fusbh200
,
"irq"
,
status
);
#endif
/* INT, ERR, and IAA interrupt rates can be throttled */
/* normal [4.15.1.2] or error [4.15.1.1] completion */
/* normal [4.15.1.2] or error [4.15.1.1] completion */
if
(
likely
((
status
&
(
STS_INT
|
STS_ERR
))
!=
0
))
{
if
(
likely
((
status
&
(
STS_INT
|
STS_ERR
))
!=
0
))
{
if
(
likely
((
status
&
STS_ERR
)
==
0
))
if
(
likely
((
status
&
STS_ERR
)
==
0
))
...
@@ -5871,6 +5798,7 @@ static int fusbh200_hcd_probe(struct platform_device *pdev)
...
@@ -5871,6 +5798,7 @@ static int fusbh200_hcd_probe(struct platform_device *pdev)
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
retval
);
dev_err
(
dev
,
"failed to add hcd with err %d
\n
"
,
retval
);
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
...
@@ -5936,13 +5864,11 @@ static int __init fusbh200_hcd_init(void)
...
@@ -5936,13 +5864,11 @@ static int __init fusbh200_hcd_init(void)
sizeof
(
struct
fusbh200_qh
),
sizeof
(
struct
fusbh200_qtd
),
sizeof
(
struct
fusbh200_qh
),
sizeof
(
struct
fusbh200_qtd
),
sizeof
(
struct
fusbh200_itd
));
sizeof
(
struct
fusbh200_itd
));
#ifdef DEBUG
fusbh200_debug_root
=
debugfs_create_dir
(
"fusbh200"
,
usb_debug_root
);
fusbh200_debug_root
=
debugfs_create_dir
(
"fusbh200"
,
usb_debug_root
);
if
(
!
fusbh200_debug_root
)
{
if
(
!
fusbh200_debug_root
)
{
retval
=
-
ENOENT
;
retval
=
-
ENOENT
;
goto
err_debug
;
goto
err_debug
;
}
}
#endif
retval
=
platform_driver_register
(
&
fusbh200_hcd_fusbh200_driver
);
retval
=
platform_driver_register
(
&
fusbh200_hcd_fusbh200_driver
);
if
(
retval
<
0
)
if
(
retval
<
0
)
...
@@ -5951,11 +5877,9 @@ static int __init fusbh200_hcd_init(void)
...
@@ -5951,11 +5877,9 @@ static int __init fusbh200_hcd_init(void)
platform_driver_unregister
(
&
fusbh200_hcd_fusbh200_driver
);
platform_driver_unregister
(
&
fusbh200_hcd_fusbh200_driver
);
clean:
clean:
#ifdef DEBUG
debugfs_remove
(
fusbh200_debug_root
);
debugfs_remove
(
fusbh200_debug_root
);
fusbh200_debug_root
=
NULL
;
fusbh200_debug_root
=
NULL
;
err_debug:
err_debug:
#endif
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
return
retval
;
return
retval
;
}
}
...
@@ -5964,9 +5888,7 @@ module_init(fusbh200_hcd_init);
...
@@ -5964,9 +5888,7 @@ module_init(fusbh200_hcd_init);
static
void
__exit
fusbh200_hcd_cleanup
(
void
)
static
void
__exit
fusbh200_hcd_cleanup
(
void
)
{
{
platform_driver_unregister
(
&
fusbh200_hcd_fusbh200_driver
);
platform_driver_unregister
(
&
fusbh200_hcd_fusbh200_driver
);
#ifdef DEBUG
debugfs_remove
(
fusbh200_debug_root
);
debugfs_remove
(
fusbh200_debug_root
);
#endif
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_EHCI_LOADED
,
&
usb_hcds_loaded
);
}
}
module_exit
(
fusbh200_hcd_cleanup
);
module_exit
(
fusbh200_hcd_cleanup
);
drivers/usb/host/fusbh200.h
浏览文件 @
d59abb93
...
@@ -165,17 +165,11 @@ struct fusbh200_hcd { /* one per controller */
...
@@ -165,17 +165,11 @@ struct fusbh200_hcd { /* one per controller */
u8
sbrn
;
/* packed release number */
u8
sbrn
;
/* packed release number */
/* irq statistics */
/* irq statistics */
#ifdef FUSBH200_STATS
struct
fusbh200_stats
stats
;
struct
fusbh200_stats
stats
;
# define COUNT(x) do { (x)++; } while (0)
# define COUNT(x) do { (x)++; } while (0)
#else
# define COUNT(x) do {} while (0)
#endif
/* debug files */
/* debug files */
#ifdef DEBUG
struct
dentry
*
debug_dir
;
struct
dentry
*
debug_dir
;
#endif
};
};
/* convert between an HCD pointer and the corresponding FUSBH200_HCD */
/* convert between an HCD pointer and the corresponding FUSBH200_HCD */
...
@@ -734,10 +728,4 @@ static inline unsigned fusbh200_read_frame_index(struct fusbh200_hcd *fusbh200)
...
@@ -734,10 +728,4 @@ static inline unsigned fusbh200_read_frame_index(struct fusbh200_hcd *fusbh200)
})
})
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifndef DEBUG
#define STUB_DEBUG_FILES
#endif
/* DEBUG */
/*-------------------------------------------------------------------------*/
#endif
/* __LINUX_FUSBH200_H */
#endif
/* __LINUX_FUSBH200_H */
drivers/usb/host/hwa-hc.c
浏览文件 @
d59abb93
...
@@ -86,7 +86,7 @@ static int __hwahc_set_cluster_id(struct hwahc *hwahc, u8 cluster_id)
...
@@ -86,7 +86,7 @@ static int __hwahc_set_cluster_id(struct hwahc *hwahc, u8 cluster_id)
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
cluster_id
,
cluster_id
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
if
(
result
<
0
)
if
(
result
<
0
)
dev_err
(
dev
,
"Cannot set WUSB Cluster ID to 0x%02x: %d
\n
"
,
dev_err
(
dev
,
"Cannot set WUSB Cluster ID to 0x%02x: %d
\n
"
,
cluster_id
,
result
);
cluster_id
,
result
);
...
@@ -106,7 +106,7 @@ static int __hwahc_op_set_num_dnts(struct wusbhc *wusbhc, u8 interval, u8 slots)
...
@@ -106,7 +106,7 @@ static int __hwahc_op_set_num_dnts(struct wusbhc *wusbhc, u8 interval, u8 slots)
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
interval
<<
8
|
slots
,
interval
<<
8
|
slots
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
}
}
/*
/*
...
@@ -224,7 +224,7 @@ static int hwahc_op_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb,
...
@@ -224,7 +224,7 @@ static int hwahc_op_urb_dequeue(struct usb_hcd *usb_hcd, struct urb *urb,
struct
wusbhc
*
wusbhc
=
usb_hcd_to_wusbhc
(
usb_hcd
);
struct
wusbhc
*
wusbhc
=
usb_hcd_to_wusbhc
(
usb_hcd
);
struct
hwahc
*
hwahc
=
container_of
(
wusbhc
,
struct
hwahc
,
wusbhc
);
struct
hwahc
*
hwahc
=
container_of
(
wusbhc
,
struct
hwahc
,
wusbhc
);
return
wa_urb_dequeue
(
&
hwahc
->
wa
,
urb
);
return
wa_urb_dequeue
(
&
hwahc
->
wa
,
urb
,
status
);
}
}
/*
/*
...
@@ -281,7 +281,7 @@ static void __hwahc_op_wusbhc_stop(struct wusbhc *wusbhc, int delay)
...
@@ -281,7 +281,7 @@ static void __hwahc_op_wusbhc_stop(struct wusbhc *wusbhc, int delay)
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
delay
*
1000
,
delay
*
1000
,
iface_no
,
iface_no
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
if
(
ret
==
0
)
if
(
ret
==
0
)
msleep
(
delay
);
msleep
(
delay
);
...
@@ -310,7 +310,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
...
@@ -310,7 +310,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
stream_index
,
stream_index
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
dev_err
(
dev
,
"Cannot set WUSB stream index: %d
\n
"
,
result
);
dev_err
(
dev
,
"Cannot set WUSB stream index: %d
\n
"
,
result
);
goto
out
;
goto
out
;
...
@@ -321,7 +321,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
...
@@ -321,7 +321,7 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
WUSB_REQ_SET_WUSB_MAS
,
WUSB_REQ_SET_WUSB_MAS
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
0
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
0
,
wa
->
usb_iface
->
cur_altsetting
->
desc
.
bInterfaceNumber
,
mas_le
,
32
,
1000
/* FIXME: arbitrary */
);
mas_le
,
32
,
USB_CTRL_SET_TIMEOUT
);
if
(
result
<
0
)
if
(
result
<
0
)
dev_err
(
dev
,
"Cannot set WUSB MAS allocation: %d
\n
"
,
result
);
dev_err
(
dev
,
"Cannot set WUSB MAS allocation: %d
\n
"
,
result
);
out:
out:
...
@@ -355,7 +355,7 @@ static int __hwahc_op_mmcie_add(struct wusbhc *wusbhc, u8 interval,
...
@@ -355,7 +355,7 @@ static int __hwahc_op_mmcie_add(struct wusbhc *wusbhc, u8 interval,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
interval
<<
8
|
repeat_cnt
,
interval
<<
8
|
repeat_cnt
,
handle
<<
8
|
iface_no
,
handle
<<
8
|
iface_no
,
wuie
,
wuie
->
bLength
,
1000
/* FIXME: arbitrary */
);
wuie
,
wuie
->
bLength
,
USB_CTRL_SET_TIMEOUT
);
}
}
/*
/*
...
@@ -372,7 +372,7 @@ static int __hwahc_op_mmcie_rm(struct wusbhc *wusbhc, u8 handle)
...
@@ -372,7 +372,7 @@ static int __hwahc_op_mmcie_rm(struct wusbhc *wusbhc, u8 handle)
WUSB_REQ_REMOVE_MMC_IE
,
WUSB_REQ_REMOVE_MMC_IE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
0
,
handle
<<
8
|
iface_no
,
0
,
handle
<<
8
|
iface_no
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
}
}
/*
/*
...
@@ -415,7 +415,7 @@ static int __hwahc_op_dev_info_set(struct wusbhc *wusbhc,
...
@@ -415,7 +415,7 @@ static int __hwahc_op_dev_info_set(struct wusbhc *wusbhc,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
0
,
wusb_dev
->
port_idx
<<
8
|
iface_no
,
0
,
wusb_dev
->
port_idx
<<
8
|
iface_no
,
dev_info
,
sizeof
(
struct
hwa_dev_info
),
dev_info
,
sizeof
(
struct
hwa_dev_info
),
1000
/* FIXME: arbitrary */
);
USB_CTRL_SET_TIMEOUT
);
kfree
(
dev_info
);
kfree
(
dev_info
);
return
ret
;
return
ret
;
}
}
...
@@ -455,7 +455,7 @@ static int __hwahc_dev_set_key(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
...
@@ -455,7 +455,7 @@ static int __hwahc_dev_set_key(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DT_KEY
<<
8
|
key_idx
,
USB_DT_KEY
<<
8
|
key_idx
,
port_idx
<<
8
|
iface_no
,
port_idx
<<
8
|
iface_no
,
keyd
,
keyd_len
,
1000
/* FIXME: arbitrary */
);
keyd
,
keyd_len
,
USB_CTRL_SET_TIMEOUT
);
kzfree
(
keyd
);
/* clear keys etc. */
kzfree
(
keyd
);
/* clear keys etc. */
return
result
;
return
result
;
...
@@ -497,7 +497,7 @@ static int __hwahc_op_set_ptk(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
...
@@ -497,7 +497,7 @@ static int __hwahc_op_set_ptk(struct wusbhc *wusbhc, u8 port_idx, u32 tkid,
USB_REQ_SET_ENCRYPTION
,
USB_REQ_SET_ENCRYPTION
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
USB_DIR_OUT
|
USB_TYPE_CLASS
|
USB_RECIP_INTERFACE
,
encryption_value
,
port_idx
<<
8
|
iface_no
,
encryption_value
,
port_idx
<<
8
|
iface_no
,
NULL
,
0
,
1000
/* FIXME: arbitrary */
);
NULL
,
0
,
USB_CTRL_SET_TIMEOUT
);
if
(
result
<
0
)
if
(
result
<
0
)
dev_err
(
wusbhc
->
dev
,
"Can't set host's WUSB encryption for "
dev_err
(
wusbhc
->
dev
,
"Can't set host's WUSB encryption for "
"port index %u to %s (value %d): %d
\n
"
,
port_idx
,
"port index %u to %s (value %d): %d
\n
"
,
port_idx
,
...
@@ -791,6 +791,7 @@ static int hwahc_probe(struct usb_interface *usb_iface,
...
@@ -791,6 +791,7 @@ static int hwahc_probe(struct usb_interface *usb_iface,
dev_err
(
dev
,
"Cannot add HCD: %d
\n
"
,
result
);
dev_err
(
dev
,
"Cannot add HCD: %d
\n
"
,
result
);
goto
error_add_hcd
;
goto
error_add_hcd
;
}
}
device_wakeup_enable
(
usb_hcd
->
self
.
controller
);
result
=
wusbhc_b_create
(
&
hwahc
->
wusbhc
);
result
=
wusbhc_b_create
(
&
hwahc
->
wusbhc
);
if
(
result
<
0
)
{
if
(
result
<
0
)
{
dev_err
(
dev
,
"Cannot setup phase B of WUSBHC: %d
\n
"
,
result
);
dev_err
(
dev
,
"Cannot setup phase B of WUSBHC: %d
\n
"
,
result
);
...
...
drivers/usb/host/imx21-dbg.c
浏览文件 @
d59abb93
...
@@ -18,6 +18,10 @@
...
@@ -18,6 +18,10 @@
/* this file is part of imx21-hcd.c */
/* this file is part of imx21-hcd.c */
#ifdef CONFIG_DYNAMIC_DEBUG
#define DEBUG
#endif
#ifndef DEBUG
#ifndef DEBUG
static
inline
void
create_debug_files
(
struct
imx21
*
imx21
)
{
}
static
inline
void
create_debug_files
(
struct
imx21
*
imx21
)
{
}
...
...
drivers/usb/host/imx21-hcd.c
浏览文件 @
d59abb93
...
@@ -62,6 +62,10 @@
...
@@ -62,6 +62,10 @@
#include "imx21-hcd.h"
#include "imx21-hcd.h"
#ifdef CONFIG_DYNAMIC_DEBUG
#define DEBUG
#endif
#ifdef DEBUG
#ifdef DEBUG
#define DEBUG_LOG_FRAME(imx21, etd, event) \
#define DEBUG_LOG_FRAME(imx21, etd, event) \
(etd)->event##_frame = readl((imx21)->regs + USBH_FRMNUB)
(etd)->event##_frame = readl((imx21)->regs + USBH_FRMNUB)
...
@@ -1906,6 +1910,7 @@ static int imx21_probe(struct platform_device *pdev)
...
@@ -1906,6 +1910,7 @@ static int imx21_probe(struct platform_device *pdev)
dev_err
(
imx21
->
dev
,
"usb_add_hcd() returned %d
\n
"
,
ret
);
dev_err
(
imx21
->
dev
,
"usb_add_hcd() returned %d
\n
"
,
ret
);
goto
failed_add_hcd
;
goto
failed_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
...
@@ -1926,7 +1931,7 @@ static int imx21_probe(struct platform_device *pdev)
...
@@ -1926,7 +1931,7 @@ static int imx21_probe(struct platform_device *pdev)
static
struct
platform_driver
imx21_hcd_driver
=
{
static
struct
platform_driver
imx21_hcd_driver
=
{
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
hcd_name
,
.
name
=
hcd_name
,
},
},
.
probe
=
imx21_probe
,
.
probe
=
imx21_probe
,
.
remove
=
imx21_remove
,
.
remove
=
imx21_remove
,
...
...
drivers/usb/host/imx21-hcd.h
浏览文件 @
d59abb93
...
@@ -24,6 +24,10 @@
...
@@ -24,6 +24,10 @@
#ifndef __LINUX_IMX21_HCD_H__
#ifndef __LINUX_IMX21_HCD_H__
#define __LINUX_IMX21_HCD_H__
#define __LINUX_IMX21_HCD_H__
#ifdef CONFIG_DYNAMIC_DEBUG
#define DEBUG
#endif
#include <linux/platform_data/usb-mx2.h>
#include <linux/platform_data/usb-mx2.h>
#define NUM_ISO_ETDS 2
#define NUM_ISO_ETDS 2
...
...
drivers/usb/host/isp116x-hcd.c
浏览文件 @
d59abb93
...
@@ -1645,6 +1645,8 @@ static int isp116x_probe(struct platform_device *pdev)
...
@@ -1645,6 +1645,8 @@ static int isp116x_probe(struct platform_device *pdev)
if
(
ret
)
if
(
ret
)
goto
err6
;
goto
err6
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
ret
=
create_debug_file
(
isp116x
);
ret
=
create_debug_file
(
isp116x
);
if
(
ret
)
{
if
(
ret
)
{
ERR
(
"Couldn't create debugfs entry
\n
"
);
ERR
(
"Couldn't create debugfs entry
\n
"
);
...
@@ -1705,7 +1707,7 @@ static struct platform_driver isp116x_driver = {
...
@@ -1705,7 +1707,7 @@ static struct platform_driver isp116x_driver = {
.
suspend
=
isp116x_suspend
,
.
suspend
=
isp116x_suspend
,
.
resume
=
isp116x_resume
,
.
resume
=
isp116x_resume
,
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
hcd_name
,
.
name
=
hcd_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
},
},
};
};
...
...
drivers/usb/host/isp1362-hcd.c
浏览文件 @
d59abb93
...
@@ -2746,6 +2746,8 @@ static int isp1362_probe(struct platform_device *pdev)
...
@@ -2746,6 +2746,8 @@ static int isp1362_probe(struct platform_device *pdev)
retval
=
usb_add_hcd
(
hcd
,
irq
,
irq_flags
|
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
irq
,
irq_flags
|
IRQF_SHARED
);
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
err6
;
goto
err6
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
pr_info
(
"%s, irq %d
\n
"
,
hcd
->
product_desc
,
irq
);
pr_info
(
"%s, irq %d
\n
"
,
hcd
->
product_desc
,
irq
);
create_debug_file
(
isp1362_hcd
);
create_debug_file
(
isp1362_hcd
);
...
@@ -2829,7 +2831,7 @@ static struct platform_driver isp1362_driver = {
...
@@ -2829,7 +2831,7 @@ static struct platform_driver isp1362_driver = {
.
suspend
=
isp1362_suspend
,
.
suspend
=
isp1362_suspend
,
.
resume
=
isp1362_resume
,
.
resume
=
isp1362_resume
,
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
hcd_name
,
.
name
=
hcd_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
},
},
};
};
...
...
drivers/usb/host/isp1760-hcd.c
浏览文件 @
d59abb93
...
@@ -2250,6 +2250,7 @@ struct usb_hcd *isp1760_register(phys_addr_t res_start, resource_size_t res_len,
...
@@ -2250,6 +2250,7 @@ struct usb_hcd *isp1760_register(phys_addr_t res_start, resource_size_t res_len,
ret
=
usb_add_hcd
(
hcd
,
irq
,
irqflags
);
ret
=
usb_add_hcd
(
hcd
,
irq
,
irqflags
);
if
(
ret
)
if
(
ret
)
goto
err_unmap
;
goto
err_unmap
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
hcd
;
return
hcd
;
...
...
drivers/usb/host/ohci-at91.c
浏览文件 @
d59abb93
...
@@ -200,8 +200,10 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
...
@@ -200,8 +200,10 @@ static int usb_hcd_at91_probe(const struct hc_driver *driver,
at91_start_hc
(
pdev
);
at91_start_hc
(
pdev
);
retval
=
usb_add_hcd
(
hcd
,
pdev
->
resource
[
1
].
start
,
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
pdev
->
resource
[
1
].
start
,
IRQF_SHARED
);
if
(
retval
==
0
)
if
(
retval
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
}
/* Error handling */
/* Error handling */
at91_stop_hc
(
pdev
);
at91_stop_hc
(
pdev
);
...
@@ -635,10 +637,17 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
...
@@ -635,10 +637,17 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
{
{
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
pdev
);
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
pdev
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
bool
do_wakeup
=
device_may_wakeup
(
&
pdev
->
dev
);
int
ret
;
if
(
d
evice_may_wakeup
(
&
pdev
->
dev
)
)
if
(
d
o_wakeup
)
enable_irq_wake
(
hcd
->
irq
);
enable_irq_wake
(
hcd
->
irq
);
ret
=
ohci_suspend
(
hcd
,
do_wakeup
);
if
(
ret
)
{
disable_irq_wake
(
hcd
->
irq
);
return
ret
;
}
/*
/*
* The integrated transceivers seem unable to notice disconnect,
* The integrated transceivers seem unable to notice disconnect,
* reconnect, or wakeup without the 48 MHz clock active. so for
* reconnect, or wakeup without the 48 MHz clock active. so for
...
@@ -657,7 +666,7 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
...
@@ -657,7 +666,7 @@ ohci_hcd_at91_drv_suspend(struct platform_device *pdev, pm_message_t mesg)
at91_stop_clock
();
at91_stop_clock
();
}
}
return
0
;
return
ret
;
}
}
static
int
ohci_hcd_at91_drv_resume
(
struct
platform_device
*
pdev
)
static
int
ohci_hcd_at91_drv_resume
(
struct
platform_device
*
pdev
)
...
...
drivers/usb/host/ohci-da8xx.c
浏览文件 @
d59abb93
...
@@ -348,6 +348,8 @@ static int usb_hcd_da8xx_probe(const struct hc_driver *driver,
...
@@ -348,6 +348,8 @@ static int usb_hcd_da8xx_probe(const struct hc_driver *driver,
if
(
error
)
if
(
error
)
goto
err4
;
goto
err4
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
if
(
hub
->
ocic_notify
)
{
if
(
hub
->
ocic_notify
)
{
error
=
hub
->
ocic_notify
(
ohci_da8xx_ocic_handler
);
error
=
hub
->
ocic_notify
(
ohci_da8xx_ocic_handler
);
if
(
!
error
)
if
(
!
error
)
...
@@ -406,19 +408,27 @@ static int ohci_hcd_da8xx_drv_remove(struct platform_device *dev)
...
@@ -406,19 +408,27 @@ static int ohci_hcd_da8xx_drv_remove(struct platform_device *dev)
}
}
#ifdef CONFIG_PM
#ifdef CONFIG_PM
static
int
ohci_da8xx_suspend
(
struct
platform_device
*
dev
,
pm_message_t
message
)
static
int
ohci_da8xx_suspend
(
struct
platform_device
*
pdev
,
pm_message_t
message
)
{
{
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
dev
);
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
p
dev
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
bool
do_wakeup
=
device_may_wakeup
(
&
pdev
->
dev
);
int
ret
;
if
(
time_before
(
jiffies
,
ohci
->
next_statechange
))
if
(
time_before
(
jiffies
,
ohci
->
next_statechange
))
msleep
(
5
);
msleep
(
5
);
ohci
->
next_statechange
=
jiffies
;
ohci
->
next_statechange
=
jiffies
;
ret
=
ohci_suspend
(
hcd
,
do_wakeup
);
if
(
ret
)
return
ret
;
ohci_da8xx_clock
(
0
);
ohci_da8xx_clock
(
0
);
hcd
->
state
=
HC_STATE_SUSPENDED
;
hcd
->
state
=
HC_STATE_SUSPENDED
;
dev
->
dev
.
power
.
power_state
=
PMSG_SUSPEND
;
return
0
;
return
ret
;
}
}
static
int
ohci_da8xx_resume
(
struct
platform_device
*
dev
)
static
int
ohci_da8xx_resume
(
struct
platform_device
*
dev
)
...
...
drivers/usb/host/ohci-dbg.c
浏览文件 @
d59abb93
...
@@ -9,8 +9,6 @@
...
@@ -9,8 +9,6 @@
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifdef DEBUG
#define edstring(ed_type) ({ char *temp; \
#define edstring(ed_type) ({ char *temp; \
switch (ed_type) { \
switch (ed_type) { \
case PIPE_CONTROL: temp = "ctrl"; break; \
case PIPE_CONTROL: temp = "ctrl"; break; \
...
@@ -20,57 +18,6 @@
...
@@ -20,57 +18,6 @@
} temp;})
} temp;})
#define pipestring(pipe) edstring(usb_pipetype(pipe))
#define pipestring(pipe) edstring(usb_pipetype(pipe))
/* debug| print the main components of an URB
* small: 0) header + data packets 1) just header
*/
static
void
__maybe_unused
urb_print
(
struct
urb
*
urb
,
char
*
str
,
int
small
,
int
status
)
{
unsigned
int
pipe
=
urb
->
pipe
;
if
(
!
urb
->
dev
||
!
urb
->
dev
->
bus
)
{
printk
(
KERN_DEBUG
"%s URB: no dev
\n
"
,
str
);
return
;
}
#ifndef OHCI_VERBOSE_DEBUG
if
(
status
!=
0
)
#endif
printk
(
KERN_DEBUG
"%s %p dev=%d ep=%d%s-%s flags=%x len=%d/%d stat=%d
\n
"
,
str
,
urb
,
usb_pipedevice
(
pipe
),
usb_pipeendpoint
(
pipe
),
usb_pipeout
(
pipe
)
?
"out"
:
"in"
,
pipestring
(
pipe
),
urb
->
transfer_flags
,
urb
->
actual_length
,
urb
->
transfer_buffer_length
,
status
);
#ifdef OHCI_VERBOSE_DEBUG
if
(
!
small
)
{
int
i
,
len
;
if
(
usb_pipecontrol
(
pipe
))
{
printk
(
KERN_DEBUG
"%s: setup(8):"
,
__FILE__
);
for
(
i
=
0
;
i
<
8
;
i
++
)
printk
(
" %02x"
,
((
__u8
*
)
urb
->
setup_packet
)
[
i
]);
printk
(
"
\n
"
);
}
if
(
urb
->
transfer_buffer_length
>
0
&&
urb
->
transfer_buffer
)
{
printk
(
KERN_DEBUG
"%s: data(%d/%d):"
,
__FILE__
,
urb
->
actual_length
,
urb
->
transfer_buffer_length
);
len
=
usb_pipeout
(
pipe
)
?
urb
->
transfer_buffer_length
:
urb
->
actual_length
;
for
(
i
=
0
;
i
<
16
&&
i
<
len
;
i
++
)
printk
(
" %02x"
,
((
__u8
*
)
urb
->
transfer_buffer
)
[
i
]);
printk
(
"%s stat:%d
\n
"
,
i
<
len
?
"..."
:
""
,
status
);
}
}
#endif
}
#define ohci_dbg_sw(ohci, next, size, format, arg...) \
#define ohci_dbg_sw(ohci, next, size, format, arg...) \
do { \
do { \
...
@@ -407,22 +354,8 @@ ohci_dump_ed (const struct ohci_hcd *ohci, const char *label,
...
@@ -407,22 +354,8 @@ ohci_dump_ed (const struct ohci_hcd *ohci, const char *label,
}
}
}
}
#else
static
inline
void
ohci_dump
(
struct
ohci_hcd
*
controller
,
int
verbose
)
{}
#undef OHCI_VERBOSE_DEBUG
#endif
/* DEBUG */
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifdef STUB_DEBUG_FILES
static
inline
void
create_debug_files
(
struct
ohci_hcd
*
bus
)
{
}
static
inline
void
remove_debug_files
(
struct
ohci_hcd
*
bus
)
{
}
#else
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_async_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_periodic_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_periodic_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_registers_open
(
struct
inode
*
,
struct
file
*
);
static
int
debug_registers_open
(
struct
inode
*
,
struct
file
*
);
...
@@ -871,7 +804,5 @@ static inline void remove_debug_files (struct ohci_hcd *ohci)
...
@@ -871,7 +804,5 @@ static inline void remove_debug_files (struct ohci_hcd *ohci)
debugfs_remove
(
ohci
->
debug_dir
);
debugfs_remove
(
ohci
->
debug_dir
);
}
}
#endif
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
drivers/usb/host/ohci-exynos.c
浏览文件 @
d59abb93
...
@@ -146,6 +146,7 @@ static int exynos_ohci_probe(struct platform_device *pdev)
...
@@ -146,6 +146,7 @@ static int exynos_ohci_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Failed to add USB HCD
\n
"
);
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
fail_add_hcd:
fail_add_hcd:
...
@@ -191,23 +192,14 @@ static int exynos_ohci_suspend(struct device *dev)
...
@@ -191,23 +192,14 @@ static int exynos_ohci_suspend(struct device *dev)
struct
exynos_ohci_hcd
*
exynos_ohci
=
to_exynos_ohci
(
hcd
);
struct
exynos_ohci_hcd
*
exynos_ohci
=
to_exynos_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
bool
do_wakeup
=
device_may_wakeup
(
dev
);
unsigned
long
flags
;
unsigned
long
flags
;
int
rc
=
0
;
int
rc
=
ohci_suspend
(
hcd
,
do_wakeup
)
;
/*
if
(
rc
)
* Root hub was already suspended. Disable irq emission and
return
rc
;
* mark HW unaccessible, bail out if RH has been resumed. Use
* the spinlock to properly synchronize with possible pending
* RH suspend or resume activity.
*/
spin_lock_irqsave
(
&
ohci
->
lock
,
flags
);
if
(
ohci
->
rh_state
!=
OHCI_RH_SUSPENDED
&&
ohci
->
rh_state
!=
OHCI_RH_HALTED
)
{
rc
=
-
EINVAL
;
goto
fail
;
}
clear_bit
(
HCD_FLAG_HW_ACCESSIBLE
,
&
hcd
->
flags
);
spin_lock_irqsave
(
&
ohci
->
lock
,
flags
);
if
(
exynos_ohci
->
otg
)
if
(
exynos_ohci
->
otg
)
exynos_ohci
->
otg
->
set_host
(
exynos_ohci
->
otg
,
&
hcd
->
self
);
exynos_ohci
->
otg
->
set_host
(
exynos_ohci
->
otg
,
&
hcd
->
self
);
...
@@ -216,10 +208,9 @@ static int exynos_ohci_suspend(struct device *dev)
...
@@ -216,10 +208,9 @@ static int exynos_ohci_suspend(struct device *dev)
clk_disable_unprepare
(
exynos_ohci
->
clk
);
clk_disable_unprepare
(
exynos_ohci
->
clk
);
fail:
spin_unlock_irqrestore
(
&
ohci
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
ohci
->
lock
,
flags
);
return
rc
;
return
0
;
}
}
static
int
exynos_ohci_resume
(
struct
device
*
dev
)
static
int
exynos_ohci_resume
(
struct
device
*
dev
)
...
...
drivers/usb/host/ohci-hcd.c
浏览文件 @
d59abb93
...
@@ -51,8 +51,6 @@
...
@@ -51,8 +51,6 @@
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#undef OHCI_VERBOSE_DEBUG
/* not always helpful */
/* For initializing controller (mask in an HCFS mode too) */
/* For initializing controller (mask in an HCFS mode too) */
#define OHCI_CONTROL_INIT OHCI_CTRL_CBSR
#define OHCI_CONTROL_INIT OHCI_CTRL_CBSR
#define OHCI_INTR_INIT \
#define OHCI_INTR_INIT \
...
@@ -127,10 +125,6 @@ static int ohci_urb_enqueue (
...
@@ -127,10 +125,6 @@ static int ohci_urb_enqueue (
unsigned
long
flags
;
unsigned
long
flags
;
int
retval
=
0
;
int
retval
=
0
;
#ifdef OHCI_VERBOSE_DEBUG
urb_print
(
urb
,
"SUB"
,
usb_pipein
(
pipe
),
-
EINPROGRESS
);
#endif
/* every endpoint has a ed, locate and maybe (re)initialize it */
/* every endpoint has a ed, locate and maybe (re)initialize it */
if
(
!
(
ed
=
ed_get
(
ohci
,
urb
->
ep
,
urb
->
dev
,
pipe
,
urb
->
interval
)))
if
(
!
(
ed
=
ed_get
(
ohci
,
urb
->
ep
,
urb
->
dev
,
pipe
,
urb
->
interval
)))
return
-
ENOMEM
;
return
-
ENOMEM
;
...
@@ -284,10 +278,6 @@ static int ohci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
...
@@ -284,10 +278,6 @@ static int ohci_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
unsigned
long
flags
;
unsigned
long
flags
;
int
rc
;
int
rc
;
#ifdef OHCI_VERBOSE_DEBUG
urb_print
(
urb
,
"UNLINK"
,
1
,
status
);
#endif
spin_lock_irqsave
(
&
ohci
->
lock
,
flags
);
spin_lock_irqsave
(
&
ohci
->
lock
,
flags
);
rc
=
usb_hcd_check_unlink_urb
(
hcd
,
urb
,
status
);
rc
=
usb_hcd_check_unlink_urb
(
hcd
,
urb
,
status
);
if
(
rc
)
{
if
(
rc
)
{
...
@@ -840,7 +830,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
...
@@ -840,7 +830,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
}
}
if
(
ints
&
OHCI_INTR_RHSC
)
{
if
(
ints
&
OHCI_INTR_RHSC
)
{
ohci_
v
dbg
(
ohci
,
"rhsc
\n
"
);
ohci_dbg
(
ohci
,
"rhsc
\n
"
);
ohci
->
next_statechange
=
jiffies
+
STATECHANGE_DELAY
;
ohci
->
next_statechange
=
jiffies
+
STATECHANGE_DELAY
;
ohci_writel
(
ohci
,
OHCI_INTR_RD
|
OHCI_INTR_RHSC
,
ohci_writel
(
ohci
,
OHCI_INTR_RD
|
OHCI_INTR_RHSC
,
&
regs
->
intrstatus
);
&
regs
->
intrstatus
);
...
@@ -862,7 +852,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
...
@@ -862,7 +852,7 @@ static irqreturn_t ohci_irq (struct usb_hcd *hcd)
* this might not happen.
* this might not happen.
*/
*/
else
if
(
ints
&
OHCI_INTR_RD
)
{
else
if
(
ints
&
OHCI_INTR_RD
)
{
ohci_
v
dbg
(
ohci
,
"resume detect
\n
"
);
ohci_dbg
(
ohci
,
"resume detect
\n
"
);
ohci_writel
(
ohci
,
OHCI_INTR_RD
,
&
regs
->
intrstatus
);
ohci_writel
(
ohci
,
OHCI_INTR_RD
,
&
regs
->
intrstatus
);
set_bit
(
HCD_FLAG_POLL_RH
,
&
hcd
->
flags
);
set_bit
(
HCD_FLAG_POLL_RH
,
&
hcd
->
flags
);
if
(
ohci
->
autostop
)
{
if
(
ohci
->
autostop
)
{
...
@@ -1036,6 +1026,7 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
...
@@ -1036,6 +1026,7 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
{
{
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
unsigned
long
flags
;
unsigned
long
flags
;
int
rc
=
0
;
/* Disable irq emission and mark HW unaccessible. Use
/* Disable irq emission and mark HW unaccessible. Use
* the spinlock to properly synchronize with possible pending
* the spinlock to properly synchronize with possible pending
...
@@ -1048,7 +1039,13 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
...
@@ -1048,7 +1039,13 @@ int ohci_suspend(struct usb_hcd *hcd, bool do_wakeup)
clear_bit
(
HCD_FLAG_HW_ACCESSIBLE
,
&
hcd
->
flags
);
clear_bit
(
HCD_FLAG_HW_ACCESSIBLE
,
&
hcd
->
flags
);
spin_unlock_irqrestore
(
&
ohci
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
ohci
->
lock
,
flags
);
return
0
;
synchronize_irq
(
hcd
->
irq
);
if
(
do_wakeup
&&
HCD_WAKEUP_PENDING
(
hcd
))
{
ohci_resume
(
hcd
,
false
);
rc
=
-
EBUSY
;
}
return
rc
;
}
}
EXPORT_SYMBOL_GPL
(
ohci_suspend
);
EXPORT_SYMBOL_GPL
(
ohci_suspend
);
...
@@ -1233,13 +1230,11 @@ static int __init ohci_hcd_mod_init(void)
...
@@ -1233,13 +1230,11 @@ static int __init ohci_hcd_mod_init(void)
sizeof
(
struct
ed
),
sizeof
(
struct
td
));
sizeof
(
struct
ed
),
sizeof
(
struct
td
));
set_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
set_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
#ifdef DEBUG
ohci_debug_root
=
debugfs_create_dir
(
"ohci"
,
usb_debug_root
);
ohci_debug_root
=
debugfs_create_dir
(
"ohci"
,
usb_debug_root
);
if
(
!
ohci_debug_root
)
{
if
(
!
ohci_debug_root
)
{
retval
=
-
ENOENT
;
retval
=
-
ENOENT
;
goto
error_debug
;
goto
error_debug
;
}
}
#endif
#ifdef PS3_SYSTEM_BUS_DRIVER
#ifdef PS3_SYSTEM_BUS_DRIVER
retval
=
ps3_ohci_driver_register
(
&
PS3_SYSTEM_BUS_DRIVER
);
retval
=
ps3_ohci_driver_register
(
&
PS3_SYSTEM_BUS_DRIVER
);
...
@@ -1314,11 +1309,9 @@ static int __init ohci_hcd_mod_init(void)
...
@@ -1314,11 +1309,9 @@ static int __init ohci_hcd_mod_init(void)
ps3_ohci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
ps3_ohci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
error_ps3:
error_ps3:
#endif
#endif
#ifdef DEBUG
debugfs_remove
(
ohci_debug_root
);
debugfs_remove
(
ohci_debug_root
);
ohci_debug_root
=
NULL
;
ohci_debug_root
=
NULL
;
error_debug:
error_debug:
#endif
clear_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
return
retval
;
return
retval
;
...
@@ -1348,9 +1341,7 @@ static void __exit ohci_hcd_mod_exit(void)
...
@@ -1348,9 +1341,7 @@ static void __exit ohci_hcd_mod_exit(void)
#ifdef PS3_SYSTEM_BUS_DRIVER
#ifdef PS3_SYSTEM_BUS_DRIVER
ps3_ohci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
ps3_ohci_driver_unregister
(
&
PS3_SYSTEM_BUS_DRIVER
);
#endif
#endif
#ifdef DEBUG
debugfs_remove
(
ohci_debug_root
);
debugfs_remove
(
ohci_debug_root
);
#endif
clear_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_OHCI_LOADED
,
&
usb_hcds_loaded
);
}
}
module_exit
(
ohci_hcd_mod_exit
);
module_exit
(
ohci_hcd_mod_exit
);
...
...
drivers/usb/host/ohci-hub.c
浏览文件 @
d59abb93
...
@@ -725,10 +725,8 @@ static int ohci_hub_control (
...
@@ -725,10 +725,8 @@ static int ohci_hub_control (
temp
=
roothub_portstatus
(
ohci
,
wIndex
);
temp
=
roothub_portstatus
(
ohci
,
wIndex
);
put_unaligned_le32
(
temp
,
buf
);
put_unaligned_le32
(
temp
,
buf
);
#ifndef OHCI_VERBOSE_DEBUG
if
(
*
(
u16
*
)(
buf
+
2
))
/* only if wPortChange is interesting */
if
(
*
(
u16
*
)(
buf
+
2
))
/* only if wPortChange is interesting */
dbg_port
(
ohci
,
"GetStatus"
,
wIndex
,
temp
);
#endif
dbg_port
(
ohci
,
"GetStatus"
,
wIndex
,
temp
);
break
;
break
;
case
SetHubFeature
:
case
SetHubFeature
:
switch
(
wValue
)
{
switch
(
wValue
)
{
...
...
drivers/usb/host/ohci-jz4740.c
浏览文件 @
d59abb93
...
@@ -217,6 +217,7 @@ static int jz4740_ohci_probe(struct platform_device *pdev)
...
@@ -217,6 +217,7 @@ static int jz4740_ohci_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd: %d
\n
"
,
ret
);
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd: %d
\n
"
,
ret
);
goto
err_disable
;
goto
err_disable
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
...
...
drivers/usb/host/ohci-nxp.c
浏览文件 @
d59abb93
...
@@ -274,8 +274,10 @@ static int ohci_hcd_nxp_probe(struct platform_device *pdev)
...
@@ -274,8 +274,10 @@ static int ohci_hcd_nxp_probe(struct platform_device *pdev)
dev_info
(
&
pdev
->
dev
,
"at 0x%p, irq %d
\n
"
,
hcd
->
regs
,
hcd
->
irq
);
dev_info
(
&
pdev
->
dev
,
"at 0x%p, irq %d
\n
"
,
hcd
->
regs
,
hcd
->
irq
);
ret
=
usb_add_hcd
(
hcd
,
irq
,
0
);
ret
=
usb_add_hcd
(
hcd
,
irq
,
0
);
if
(
ret
==
0
)
if
(
ret
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
ret
;
return
ret
;
}
ohci_nxp_stop_hc
();
ohci_nxp_stop_hc
();
fail_resource:
fail_resource:
...
...
drivers/usb/host/ohci-octeon.c
浏览文件 @
d59abb93
...
@@ -171,6 +171,8 @@ static int ohci_octeon_drv_probe(struct platform_device *pdev)
...
@@ -171,6 +171,8 @@ static int ohci_octeon_drv_probe(struct platform_device *pdev)
goto
err3
;
goto
err3
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
return
0
;
return
0
;
...
...
drivers/usb/host/ohci-omap.c
浏览文件 @
d59abb93
...
@@ -367,6 +367,7 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver,
...
@@ -367,6 +367,7 @@ static int usb_hcd_omap_probe (const struct hc_driver *driver,
if
(
retval
)
if
(
retval
)
goto
err3
;
goto
err3
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err3:
err3:
iounmap
(
hcd
->
regs
);
iounmap
(
hcd
->
regs
);
...
...
drivers/usb/host/ohci-omap3.c
浏览文件 @
d59abb93
...
@@ -130,6 +130,7 @@ static int ohci_hcd_omap3_probe(struct platform_device *pdev)
...
@@ -130,6 +130,7 @@ static int ohci_hcd_omap3_probe(struct platform_device *pdev)
dev_dbg
(
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
dev_dbg
(
dev
,
"failed to add hcd with err %d
\n
"
,
ret
);
goto
err_add_hcd
;
goto
err_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
...
...
drivers/usb/host/ohci-platform.c
浏览文件 @
d59abb93
...
@@ -108,6 +108,8 @@ static int ohci_platform_probe(struct platform_device *dev)
...
@@ -108,6 +108,8 @@ static int ohci_platform_probe(struct platform_device *dev)
if
(
err
)
if
(
err
)
goto
err_put_hcd
;
goto
err_put_hcd
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
platform_set_drvdata
(
dev
,
hcd
);
platform_set_drvdata
(
dev
,
hcd
);
return
err
;
return
err
;
...
...
drivers/usb/host/ohci-ppc-of.c
浏览文件 @
d59abb93
...
@@ -147,8 +147,10 @@ static int ohci_hcd_ppc_of_probe(struct platform_device *op)
...
@@ -147,8 +147,10 @@ static int ohci_hcd_ppc_of_probe(struct platform_device *op)
ohci_hcd_init
(
ohci
);
ohci_hcd_init
(
ohci
);
rv
=
usb_add_hcd
(
hcd
,
irq
,
0
);
rv
=
usb_add_hcd
(
hcd
,
irq
,
0
);
if
(
rv
==
0
)
if
(
rv
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
}
/* by now, 440epx is known to show usb_23 erratum */
/* by now, 440epx is known to show usb_23 erratum */
np
=
of_find_compatible_node
(
NULL
,
NULL
,
"ibm,usb-ehci-440epx"
);
np
=
of_find_compatible_node
(
NULL
,
NULL
,
"ibm,usb-ehci-440epx"
);
...
...
drivers/usb/host/ohci-ps3.c
浏览文件 @
d59abb93
...
@@ -173,6 +173,7 @@ static int ps3_ohci_probe(struct ps3_system_bus_device *dev)
...
@@ -173,6 +173,7 @@ static int ps3_ohci_probe(struct ps3_system_bus_device *dev)
goto
fail_add_hcd
;
goto
fail_add_hcd
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
result
;
return
result
;
fail_add_hcd:
fail_add_hcd:
...
...
drivers/usb/host/ohci-pxa27x.c
浏览文件 @
d59abb93
...
@@ -443,8 +443,10 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
...
@@ -443,8 +443,10 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
ohci
->
num_ports
=
3
;
ohci
->
num_ports
=
3
;
retval
=
usb_add_hcd
(
hcd
,
irq
,
0
);
retval
=
usb_add_hcd
(
hcd
,
irq
,
0
);
if
(
retval
==
0
)
if
(
retval
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
}
pxa27x_stop_hc
(
pxa_ohci
,
&
pdev
->
dev
);
pxa27x_stop_hc
(
pxa_ohci
,
&
pdev
->
dev
);
err3:
err3:
...
...
drivers/usb/host/ohci-q.c
浏览文件 @
d59abb93
...
@@ -68,10 +68,6 @@ __acquires(ohci->lock)
...
@@ -68,10 +68,6 @@ __acquires(ohci->lock)
break
;
break
;
}
}
#ifdef OHCI_VERBOSE_DEBUG
urb_print
(
urb
,
"RET"
,
usb_pipeout
(
urb
->
pipe
),
status
);
#endif
/* urb->complete() can reenter this HCD */
/* urb->complete() can reenter this HCD */
usb_hcd_unlink_urb_from_ep
(
ohci_to_hcd
(
ohci
),
urb
);
usb_hcd_unlink_urb_from_ep
(
ohci_to_hcd
(
ohci
),
urb
);
spin_unlock
(
&
ohci
->
lock
);
spin_unlock
(
&
ohci
->
lock
);
...
@@ -147,7 +143,7 @@ static void periodic_link (struct ohci_hcd *ohci, struct ed *ed)
...
@@ -147,7 +143,7 @@ static void periodic_link (struct ohci_hcd *ohci, struct ed *ed)
{
{
unsigned
i
;
unsigned
i
;
ohci_
vdbg
(
ohci
,
"link %sed %p branch %d [%dus.], interval %d
\n
"
,
ohci_
dbg
(
ohci
,
"link %sed %p branch %d [%dus.], interval %d
\n
"
,
(
ed
->
hwINFO
&
cpu_to_hc32
(
ohci
,
ED_ISO
))
?
"iso "
:
""
,
(
ed
->
hwINFO
&
cpu_to_hc32
(
ohci
,
ED_ISO
))
?
"iso "
:
""
,
ed
,
ed
->
branch
,
ed
->
load
,
ed
->
interval
);
ed
,
ed
->
branch
,
ed
->
load
,
ed
->
interval
);
...
@@ -294,7 +290,7 @@ static void periodic_unlink (struct ohci_hcd *ohci, struct ed *ed)
...
@@ -294,7 +290,7 @@ static void periodic_unlink (struct ohci_hcd *ohci, struct ed *ed)
}
}
ohci_to_hcd
(
ohci
)
->
self
.
bandwidth_allocated
-=
ed
->
load
/
ed
->
interval
;
ohci_to_hcd
(
ohci
)
->
self
.
bandwidth_allocated
-=
ed
->
load
/
ed
->
interval
;
ohci_
vdbg
(
ohci
,
"unlink %sed %p branch %d [%dus.], interval %d
\n
"
,
ohci_
dbg
(
ohci
,
"unlink %sed %p branch %d [%dus.], interval %d
\n
"
,
(
ed
->
hwINFO
&
cpu_to_hc32
(
ohci
,
ED_ISO
))
?
"iso "
:
""
,
(
ed
->
hwINFO
&
cpu_to_hc32
(
ohci
,
ED_ISO
))
?
"iso "
:
""
,
ed
,
ed
->
branch
,
ed
->
load
,
ed
->
interval
);
ed
,
ed
->
branch
,
ed
->
load
,
ed
->
interval
);
}
}
...
@@ -765,7 +761,7 @@ static int td_done(struct ohci_hcd *ohci, struct urb *urb, struct td *td)
...
@@ -765,7 +761,7 @@ static int td_done(struct ohci_hcd *ohci, struct urb *urb, struct td *td)
urb
->
iso_frame_desc
[
td
->
index
].
status
=
cc_to_error
[
cc
];
urb
->
iso_frame_desc
[
td
->
index
].
status
=
cc_to_error
[
cc
];
if
(
cc
!=
TD_CC_NOERROR
)
if
(
cc
!=
TD_CC_NOERROR
)
ohci_
vdbg
(
ohci
,
ohci_
dbg
(
ohci
,
"urb %p iso td %p (%d) len %d cc %d
\n
"
,
"urb %p iso td %p (%d) len %d cc %d
\n
"
,
urb
,
td
,
1
+
td
->
index
,
dlen
,
cc
);
urb
,
td
,
1
+
td
->
index
,
dlen
,
cc
);
...
@@ -797,7 +793,7 @@ static int td_done(struct ohci_hcd *ohci, struct urb *urb, struct td *td)
...
@@ -797,7 +793,7 @@ static int td_done(struct ohci_hcd *ohci, struct urb *urb, struct td *td)
}
}
if
(
cc
!=
TD_CC_NOERROR
&&
cc
<
0x0E
)
if
(
cc
!=
TD_CC_NOERROR
&&
cc
<
0x0E
)
ohci_
vdbg
(
ohci
,
ohci_
dbg
(
ohci
,
"urb %p td %p (%d) cc %d, len=%d/%d
\n
"
,
"urb %p td %p (%d) cc %d, len=%d/%d
\n
"
,
urb
,
td
,
1
+
td
->
index
,
cc
,
urb
,
td
,
1
+
td
->
index
,
cc
,
urb
->
actual_length
,
urb
->
actual_length
,
...
...
drivers/usb/host/ohci-s3c2410.c
浏览文件 @
d59abb93
...
@@ -395,6 +395,7 @@ static int usb_hcd_s3c2410_probe(const struct hc_driver *driver,
...
@@ -395,6 +395,7 @@ static int usb_hcd_s3c2410_probe(const struct hc_driver *driver,
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
err_ioremap
;
goto
err_ioremap
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_ioremap:
err_ioremap:
...
@@ -426,28 +427,15 @@ static int ohci_hcd_s3c2410_drv_remove(struct platform_device *pdev)
...
@@ -426,28 +427,15 @@ static int ohci_hcd_s3c2410_drv_remove(struct platform_device *pdev)
static
int
ohci_hcd_s3c2410_drv_suspend
(
struct
device
*
dev
)
static
int
ohci_hcd_s3c2410_drv_suspend
(
struct
device
*
dev
)
{
{
struct
usb_hcd
*
hcd
=
dev_get_drvdata
(
dev
);
struct
usb_hcd
*
hcd
=
dev_get_drvdata
(
dev
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
unsigned
long
flags
;
bool
do_wakeup
=
device_may_wakeup
(
dev
)
;
int
rc
=
0
;
int
rc
=
0
;
/*
rc
=
ohci_suspend
(
hcd
,
do_wakeup
);
* Root hub was already suspended. Disable irq emission and
if
(
rc
)
* mark HW unaccessible, bail out if RH has been resumed. Use
return
rc
;
* the spinlock to properly synchronize with possible pending
* RH suspend or resume activity.
*/
spin_lock_irqsave
(
&
ohci
->
lock
,
flags
);
if
(
ohci
->
rh_state
!=
OHCI_RH_SUSPENDED
)
{
rc
=
-
EINVAL
;
goto
bail
;
}
clear_bit
(
HCD_FLAG_HW_ACCESSIBLE
,
&
hcd
->
flags
);
s3c2410_stop_hc
(
pdev
);
s3c2410_stop_hc
(
pdev
);
bail:
spin_unlock_irqrestore
(
&
ohci
->
lock
,
flags
);
return
rc
;
return
rc
;
}
}
...
...
drivers/usb/host/ohci-sa1111.c
浏览文件 @
d59abb93
...
@@ -211,8 +211,10 @@ static int ohci_hcd_sa1111_probe(struct sa1111_dev *dev)
...
@@ -211,8 +211,10 @@ static int ohci_hcd_sa1111_probe(struct sa1111_dev *dev)
goto
err2
;
goto
err2
;
ret
=
usb_add_hcd
(
hcd
,
dev
->
irq
[
1
],
0
);
ret
=
usb_add_hcd
(
hcd
,
dev
->
irq
[
1
],
0
);
if
(
ret
==
0
)
if
(
ret
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
ret
;
return
ret
;
}
sa1111_stop_hc
(
dev
);
sa1111_stop_hc
(
dev
);
err2:
err2:
...
...
drivers/usb/host/ohci-sm501.c
浏览文件 @
d59abb93
...
@@ -168,6 +168,7 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
...
@@ -168,6 +168,7 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
retval
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
if
(
retval
)
if
(
retval
)
goto
err5
;
goto
err5
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
/* enable power and unmask interrupts */
/* enable power and unmask interrupts */
...
...
drivers/usb/host/ohci-spear.c
浏览文件 @
d59abb93
...
@@ -103,8 +103,10 @@ static int spear_ohci_hcd_drv_probe(struct platform_device *pdev)
...
@@ -103,8 +103,10 @@ static int spear_ohci_hcd_drv_probe(struct platform_device *pdev)
ohci
=
hcd_to_ohci
(
hcd
);
ohci
=
hcd_to_ohci
(
hcd
);
retval
=
usb_add_hcd
(
hcd
,
platform_get_irq
(
pdev
,
0
),
0
);
retval
=
usb_add_hcd
(
hcd
,
platform_get_irq
(
pdev
,
0
),
0
);
if
(
retval
==
0
)
if
(
retval
==
0
)
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
retval
;
return
retval
;
}
clk_disable_unprepare
(
sohci_p
->
clk
);
clk_disable_unprepare
(
sohci_p
->
clk
);
err_put_hcd:
err_put_hcd:
...
@@ -129,20 +131,26 @@ static int spear_ohci_hcd_drv_remove(struct platform_device *pdev)
...
@@ -129,20 +131,26 @@ static int spear_ohci_hcd_drv_remove(struct platform_device *pdev)
}
}
#if defined(CONFIG_PM)
#if defined(CONFIG_PM)
static
int
spear_ohci_hcd_drv_suspend
(
struct
platform_device
*
dev
,
static
int
spear_ohci_hcd_drv_suspend
(
struct
platform_device
*
p
dev
,
pm_message_t
message
)
pm_message_t
message
)
{
{
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
dev
);
struct
usb_hcd
*
hcd
=
platform_get_drvdata
(
p
dev
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
ohci_hcd
*
ohci
=
hcd_to_ohci
(
hcd
);
struct
spear_ohci
*
sohci_p
=
to_spear_ohci
(
hcd
);
struct
spear_ohci
*
sohci_p
=
to_spear_ohci
(
hcd
);
bool
do_wakeup
=
device_may_wakeup
(
&
pdev
->
dev
);
int
ret
;
if
(
time_before
(
jiffies
,
ohci
->
next_statechange
))
if
(
time_before
(
jiffies
,
ohci
->
next_statechange
))
msleep
(
5
);
msleep
(
5
);
ohci
->
next_statechange
=
jiffies
;
ohci
->
next_statechange
=
jiffies
;
ret
=
ohci_suspend
(
hcd
,
do_wakeup
);
if
(
ret
)
return
ret
;
clk_disable_unprepare
(
sohci_p
->
clk
);
clk_disable_unprepare
(
sohci_p
->
clk
);
return
0
;
return
ret
;
}
}
static
int
spear_ohci_hcd_drv_resume
(
struct
platform_device
*
dev
)
static
int
spear_ohci_hcd_drv_resume
(
struct
platform_device
*
dev
)
...
...
drivers/usb/host/ohci-tilegx.c
浏览文件 @
d59abb93
...
@@ -159,6 +159,7 @@ static int ohci_hcd_tilegx_drv_probe(struct platform_device *pdev)
...
@@ -159,6 +159,7 @@ static int ohci_hcd_tilegx_drv_probe(struct platform_device *pdev)
ret
=
usb_add_hcd
(
hcd
,
pdata
->
irq
,
IRQF_SHARED
);
ret
=
usb_add_hcd
(
hcd
,
pdata
->
irq
,
IRQF_SHARED
);
if
(
ret
==
0
)
{
if
(
ret
==
0
)
{
platform_set_drvdata
(
pdev
,
hcd
);
platform_set_drvdata
(
pdev
,
hcd
);
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
ret
;
return
ret
;
}
}
...
...
drivers/usb/host/ohci-tmio.c
浏览文件 @
d59abb93
...
@@ -250,6 +250,7 @@ static int ohci_hcd_tmio_drv_probe(struct platform_device *dev)
...
@@ -250,6 +250,7 @@ static int ohci_hcd_tmio_drv_probe(struct platform_device *dev)
if
(
ret
)
if
(
ret
)
goto
err_add_hcd
;
goto
err_add_hcd
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
if
(
ret
==
0
)
if
(
ret
==
0
)
return
ret
;
return
ret
;
...
...
drivers/usb/host/ohci.h
浏览文件 @
d59abb93
...
@@ -415,12 +415,11 @@ struct ohci_hcd {
...
@@ -415,12 +415,11 @@ struct ohci_hcd {
struct
ed
*
ed_to_check
;
struct
ed
*
ed_to_check
;
unsigned
zf_delay
;
unsigned
zf_delay
;
#ifdef DEBUG
struct
dentry
*
debug_dir
;
struct
dentry
*
debug_dir
;
struct
dentry
*
debug_async
;
struct
dentry
*
debug_async
;
struct
dentry
*
debug_periodic
;
struct
dentry
*
debug_periodic
;
struct
dentry
*
debug_registers
;
struct
dentry
*
debug_registers
;
#endif
/* platform-specific data -- must come last */
/* platform-specific data -- must come last */
unsigned
long
priv
[
0
]
__aligned
(
sizeof
(
s64
));
unsigned
long
priv
[
0
]
__aligned
(
sizeof
(
s64
));
...
@@ -474,10 +473,6 @@ static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
...
@@ -474,10 +473,6 @@ static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
#ifndef DEBUG
#define STUB_DEBUG_FILES
#endif
/* DEBUG */
#define ohci_dbg(ohci, fmt, args...) \
#define ohci_dbg(ohci, fmt, args...) \
dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
dev_dbg (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
#define ohci_err(ohci, fmt, args...) \
#define ohci_err(ohci, fmt, args...) \
...
@@ -487,12 +482,6 @@ static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
...
@@ -487,12 +482,6 @@ static inline struct usb_hcd *ohci_to_hcd (const struct ohci_hcd *ohci)
#define ohci_warn(ohci, fmt, args...) \
#define ohci_warn(ohci, fmt, args...) \
dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
dev_warn (ohci_to_hcd(ohci)->self.controller , fmt , ## args )
#ifdef OHCI_VERBOSE_DEBUG
# define ohci_vdbg ohci_dbg
#else
# define ohci_vdbg(ohci, fmt, args...) do { } while (0)
#endif
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*
/*
...
...
drivers/usb/host/oxu210hp-hcd.c
浏览文件 @
d59abb93
...
@@ -60,6 +60,10 @@
...
@@ -60,6 +60,10 @@
#define oxu_info(oxu, fmt, args...) \
#define oxu_info(oxu, fmt, args...) \
dev_info(oxu_to_hcd(oxu)->self.controller , fmt , ## args)
dev_info(oxu_to_hcd(oxu)->self.controller , fmt , ## args)
#ifdef CONFIG_DYNAMIC_DEBUG
#define DEBUG
#endif
static
inline
struct
usb_hcd
*
oxu_to_hcd
(
struct
oxu_hcd
*
oxu
)
static
inline
struct
usb_hcd
*
oxu_to_hcd
(
struct
oxu_hcd
*
oxu
)
{
{
return
container_of
((
void
*
)
oxu
,
struct
usb_hcd
,
hcd_priv
);
return
container_of
((
void
*
)
oxu
,
struct
usb_hcd
,
hcd_priv
);
...
@@ -3747,6 +3751,7 @@ static struct usb_hcd *oxu_create(struct platform_device *pdev,
...
@@ -3747,6 +3751,7 @@ static struct usb_hcd *oxu_create(struct platform_device *pdev,
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ERR_PTR
(
ret
);
return
ERR_PTR
(
ret
);
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
hcd
;
return
hcd
;
}
}
...
...
drivers/usb/host/r8a66597-hcd.c
浏览文件 @
d59abb93
...
@@ -2514,6 +2514,7 @@ static int r8a66597_probe(struct platform_device *pdev)
...
@@ -2514,6 +2514,7 @@ static int r8a66597_probe(struct platform_device *pdev)
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Failed to add hcd
\n
"
);
goto
clean_up3
;
goto
clean_up3
;
}
}
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
...
@@ -2534,7 +2535,7 @@ static struct platform_driver r8a66597_driver = {
...
@@ -2534,7 +2535,7 @@ static struct platform_driver r8a66597_driver = {
.
probe
=
r8a66597_probe
,
.
probe
=
r8a66597_probe
,
.
remove
=
r8a66597_remove
,
.
remove
=
r8a66597_remove
,
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
hcd_name
,
.
name
=
hcd_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
.
pm
=
R8A66597_DEV_PM_OPS
,
.
pm
=
R8A66597_DEV_PM_OPS
,
},
},
...
...
drivers/usb/host/sl811-hcd.c
浏览文件 @
d59abb93
...
@@ -1732,6 +1732,8 @@ sl811h_probe(struct platform_device *dev)
...
@@ -1732,6 +1732,8 @@ sl811h_probe(struct platform_device *dev)
if
(
retval
!=
0
)
if
(
retval
!=
0
)
goto
err6
;
goto
err6
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
create_debug_file
(
sl811
);
create_debug_file
(
sl811
);
return
retval
;
return
retval
;
...
...
drivers/usb/host/u132-hcd.c
浏览文件 @
d59abb93
...
@@ -3133,6 +3133,7 @@ static int u132_probe(struct platform_device *pdev)
...
@@ -3133,6 +3133,7 @@ static int u132_probe(struct platform_device *pdev)
u132_u132_put_kref
(
u132
);
u132_u132_put_kref
(
u132
);
return
retval
;
return
retval
;
}
else
{
}
else
{
device_wakeup_enable
(
hcd
->
self
.
controller
);
u132_monitor_queue_work
(
u132
,
100
);
u132_monitor_queue_work
(
u132
,
100
);
return
0
;
return
0
;
}
}
...
@@ -3217,7 +3218,7 @@ static struct platform_driver u132_platform_driver = {
...
@@ -3217,7 +3218,7 @@ static struct platform_driver u132_platform_driver = {
.
suspend
=
u132_suspend
,
.
suspend
=
u132_suspend
,
.
resume
=
u132_resume
,
.
resume
=
u132_resume
,
.
driver
=
{
.
driver
=
{
.
name
=
(
char
*
)
hcd_name
,
.
name
=
hcd_name
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
},
},
};
};
...
...
drivers/usb/host/uhci-debug.c
浏览文件 @
d59abb93
...
@@ -20,7 +20,7 @@
...
@@ -20,7 +20,7 @@
static
struct
dentry
*
uhci_debugfs_root
;
static
struct
dentry
*
uhci_debugfs_root
;
#ifdef DEBUG
#ifdef
CONFIG_DYNAMIC_
DEBUG
/* Handle REALLY large printks so we don't overflow buffers */
/* Handle REALLY large printks so we don't overflow buffers */
static
void
lprintk
(
char
*
buf
)
static
void
lprintk
(
char
*
buf
)
...
@@ -635,7 +635,7 @@ static const struct file_operations uhci_debug_operations = {
...
@@ -635,7 +635,7 @@ static const struct file_operations uhci_debug_operations = {
#endif
/* CONFIG_DEBUG_FS */
#endif
/* CONFIG_DEBUG_FS */
#else
/*
DEBUG
*/
#else
/*
CONFIG_DYNAMIC_DEBUG
*/
static
inline
void
lprintk
(
char
*
buf
)
static
inline
void
lprintk
(
char
*
buf
)
{}
{}
...
...
drivers/usb/host/uhci-grlib.c
浏览文件 @
d59abb93
...
@@ -141,6 +141,7 @@ static int uhci_hcd_grlib_probe(struct platform_device *op)
...
@@ -141,6 +141,7 @@ static int uhci_hcd_grlib_probe(struct platform_device *op)
if
(
rv
)
if
(
rv
)
goto
err_uhci
;
goto
err_uhci
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_uhci:
err_uhci:
...
...
drivers/usb/host/uhci-hcd.c
浏览文件 @
d59abb93
...
@@ -69,18 +69,21 @@ MODULE_PARM_DESC(ignore_oc, "ignore hardware overcurrent indications");
...
@@ -69,18 +69,21 @@ MODULE_PARM_DESC(ignore_oc, "ignore hardware overcurrent indications");
* show all queues in /sys/kernel/debug/uhci/[pci_addr]
* show all queues in /sys/kernel/debug/uhci/[pci_addr]
* debug = 3, show all TDs in URBs when dumping
* debug = 3, show all TDs in URBs when dumping
*/
*/
#ifdef DEBUG
#ifdef
CONFIG_DYNAMIC_
DEBUG
#define DEBUG_CONFIGURED 1
static
int
debug
=
1
;
static
int
debug
=
1
;
module_param
(
debug
,
int
,
S_IRUGO
|
S_IWUSR
);
module_param
(
debug
,
int
,
S_IRUGO
|
S_IWUSR
);
MODULE_PARM_DESC
(
debug
,
"Debug level"
);
MODULE_PARM_DESC
(
debug
,
"Debug level"
);
static
char
*
errbuf
;
#else
#else
#define DEBUG_CONFIGURED 0
#define debug 0
#define debug 0
#define errbuf NULL
#endif
#endif
static
char
*
errbuf
;
#define ERRBUF_LEN (32 * 1024)
#define ERRBUF_LEN (32 * 1024)
static
struct
kmem_cache
*
uhci_up_cachep
;
/* urb_priv */
static
struct
kmem_cache
*
uhci_up_cachep
;
/* urb_priv */
...
@@ -516,13 +519,12 @@ static void release_uhci(struct uhci_hcd *uhci)
...
@@ -516,13 +519,12 @@ static void release_uhci(struct uhci_hcd *uhci)
{
{
int
i
;
int
i
;
if
(
DEBUG_CONFIGURED
)
{
spin_lock_irq
(
&
uhci
->
lock
);
uhci
->
is_initialized
=
0
;
spin_unlock_irq
(
&
uhci
->
lock
);
debugfs_remove
(
uhci
->
dentry
);
spin_lock_irq
(
&
uhci
->
lock
);
}
uhci
->
is_initialized
=
0
;
spin_unlock_irq
(
&
uhci
->
lock
);
debugfs_remove
(
uhci
->
dentry
);
for
(
i
=
0
;
i
<
UHCI_NUM_SKELQH
;
i
++
)
for
(
i
=
0
;
i
<
UHCI_NUM_SKELQH
;
i
++
)
uhci_free_qh
(
uhci
,
uhci
->
skelqh
[
i
]);
uhci_free_qh
(
uhci
,
uhci
->
skelqh
[
i
]);
...
@@ -868,14 +870,14 @@ static int __init uhci_hcd_init(void)
...
@@ -868,14 +870,14 @@ static int __init uhci_hcd_init(void)
ignore_oc
?
", overcurrent ignored"
:
""
);
ignore_oc
?
", overcurrent ignored"
:
""
);
set_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
set_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
if
(
DEBUG_CONFIGURED
)
{
#ifdef CONFIG_DYNAMIC_DEBUG
errbuf
=
kmalloc
(
ERRBUF_LEN
,
GFP_KERNEL
);
errbuf
=
kmalloc
(
ERRBUF_LEN
,
GFP_KERNEL
);
if
(
!
errbuf
)
if
(
!
errbuf
)
goto
errbuf_failed
;
goto
errbuf_failed
;
uhci_debugfs_root
=
debugfs_create_dir
(
"uhci"
,
usb_debug_root
);
uhci_debugfs_root
=
debugfs_create_dir
(
"uhci"
,
usb_debug_root
);
if
(
!
uhci_debugfs_root
)
if
(
!
uhci_debugfs_root
)
goto
debug_failed
;
goto
debug_failed
;
}
#endif
uhci_up_cachep
=
kmem_cache_create
(
"uhci_urb_priv"
,
uhci_up_cachep
=
kmem_cache_create
(
"uhci_urb_priv"
,
sizeof
(
struct
urb_priv
),
0
,
0
,
NULL
);
sizeof
(
struct
urb_priv
),
0
,
0
,
NULL
);
...
@@ -906,12 +908,14 @@ static int __init uhci_hcd_init(void)
...
@@ -906,12 +908,14 @@ static int __init uhci_hcd_init(void)
kmem_cache_destroy
(
uhci_up_cachep
);
kmem_cache_destroy
(
uhci_up_cachep
);
up_failed:
up_failed:
#if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG)
debugfs_remove
(
uhci_debugfs_root
);
debugfs_remove
(
uhci_debugfs_root
);
debug_failed:
debug_failed:
kfree
(
errbuf
);
kfree
(
errbuf
);
errbuf_failed:
errbuf_failed:
#endif
clear_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
return
retval
;
return
retval
;
...
@@ -927,7 +931,9 @@ static void __exit uhci_hcd_cleanup(void)
...
@@ -927,7 +931,9 @@ static void __exit uhci_hcd_cleanup(void)
#endif
#endif
kmem_cache_destroy
(
uhci_up_cachep
);
kmem_cache_destroy
(
uhci_up_cachep
);
debugfs_remove
(
uhci_debugfs_root
);
debugfs_remove
(
uhci_debugfs_root
);
#ifdef CONFIG_DYNAMIC_DEBUG
kfree
(
errbuf
);
kfree
(
errbuf
);
#endif
clear_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
clear_bit
(
USB_UHCI_LOADED
,
&
usb_hcds_loaded
);
}
}
...
...
drivers/usb/host/uhci-pci.c
浏览文件 @
d59abb93
...
@@ -279,7 +279,7 @@ static const struct hc_driver uhci_driver = {
...
@@ -279,7 +279,7 @@ static const struct hc_driver uhci_driver = {
.
hub_control
=
uhci_hub_control
,
.
hub_control
=
uhci_hub_control
,
};
};
static
DEFINE_PCI_DEVICE_TABLE
(
uhci_pci_ids
)
=
{
{
static
const
struct
pci_device_id
uhci_pci_ids
[]
=
{
{
/* handle any USB UHCI controller */
/* handle any USB UHCI controller */
PCI_DEVICE_CLASS
(
PCI_CLASS_SERIAL_USB_UHCI
,
~
0
),
PCI_DEVICE_CLASS
(
PCI_CLASS_SERIAL_USB_UHCI
,
~
0
),
.
driver_data
=
(
unsigned
long
)
&
uhci_driver
,
.
driver_data
=
(
unsigned
long
)
&
uhci_driver
,
...
...
drivers/usb/host/uhci-platform.c
浏览文件 @
d59abb93
...
@@ -108,6 +108,7 @@ static int uhci_hcd_platform_probe(struct platform_device *pdev)
...
@@ -108,6 +108,7 @@ static int uhci_hcd_platform_probe(struct platform_device *pdev)
if
(
ret
)
if
(
ret
)
goto
err_uhci
;
goto
err_uhci
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
return
0
;
return
0
;
err_uhci:
err_uhci:
...
...
drivers/usb/host/whci/hcd.c
浏览文件 @
d59abb93
...
@@ -293,6 +293,7 @@ static int whc_probe(struct umc_dev *umc)
...
@@ -293,6 +293,7 @@ static int whc_probe(struct umc_dev *umc)
dev_err
(
dev
,
"cannot add HCD: %d
\n
"
,
ret
);
dev_err
(
dev
,
"cannot add HCD: %d
\n
"
,
ret
);
goto
error_usb_add_hcd
;
goto
error_usb_add_hcd
;
}
}
device_wakeup_enable
(
usb_hcd
->
self
.
controller
);
ret
=
wusbhc_b_create
(
wusbhc
);
ret
=
wusbhc_b_create
(
wusbhc
);
if
(
ret
)
{
if
(
ret
)
{
...
...
drivers/usb/host/xhci-dbg.c
浏览文件 @
d59abb93
...
@@ -32,7 +32,7 @@ void xhci_dbg_regs(struct xhci_hcd *xhci)
...
@@ -32,7 +32,7 @@ void xhci_dbg_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
"// xHCI capability registers at %p:
\n
"
,
xhci_dbg
(
xhci
,
"// xHCI capability registers at %p:
\n
"
,
xhci
->
cap_regs
);
xhci
->
cap_regs
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hc_capbase
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hc_capbase
);
xhci_dbg
(
xhci
,
"// @%p = 0x%x (CAPLENGTH AND HCIVERSION)
\n
"
,
xhci_dbg
(
xhci
,
"// @%p = 0x%x (CAPLENGTH AND HCIVERSION)
\n
"
,
&
xhci
->
cap_regs
->
hc_capbase
,
temp
);
&
xhci
->
cap_regs
->
hc_capbase
,
temp
);
xhci_dbg
(
xhci
,
"// CAPLENGTH: 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"// CAPLENGTH: 0x%x
\n
"
,
...
@@ -44,13 +44,13 @@ void xhci_dbg_regs(struct xhci_hcd *xhci)
...
@@ -44,13 +44,13 @@ void xhci_dbg_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
"// xHCI operational registers at %p:
\n
"
,
xhci
->
op_regs
);
xhci_dbg
(
xhci
,
"// xHCI operational registers at %p:
\n
"
,
xhci
->
op_regs
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
run_regs_off
);
temp
=
readl
(
&
xhci
->
cap_regs
->
run_regs_off
);
xhci_dbg
(
xhci
,
"// @%p = 0x%x RTSOFF
\n
"
,
xhci_dbg
(
xhci
,
"// @%p = 0x%x RTSOFF
\n
"
,
&
xhci
->
cap_regs
->
run_regs_off
,
&
xhci
->
cap_regs
->
run_regs_off
,
(
unsigned
int
)
temp
&
RTSOFF_MASK
);
(
unsigned
int
)
temp
&
RTSOFF_MASK
);
xhci_dbg
(
xhci
,
"// xHCI runtime registers at %p:
\n
"
,
xhci
->
run_regs
);
xhci_dbg
(
xhci
,
"// xHCI runtime registers at %p:
\n
"
,
xhci
->
run_regs
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
db_off
);
temp
=
readl
(
&
xhci
->
cap_regs
->
db_off
);
xhci_dbg
(
xhci
,
"// @%p = 0x%x DBOFF
\n
"
,
&
xhci
->
cap_regs
->
db_off
,
temp
);
xhci_dbg
(
xhci
,
"// @%p = 0x%x DBOFF
\n
"
,
&
xhci
->
cap_regs
->
db_off
,
temp
);
xhci_dbg
(
xhci
,
"// Doorbell array at %p:
\n
"
,
xhci
->
dba
);
xhci_dbg
(
xhci
,
"// Doorbell array at %p:
\n
"
,
xhci
->
dba
);
}
}
...
@@ -61,7 +61,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
...
@@ -61,7 +61,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
"xHCI capability registers at %p:
\n
"
,
xhci
->
cap_regs
);
xhci_dbg
(
xhci
,
"xHCI capability registers at %p:
\n
"
,
xhci
->
cap_regs
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hc_capbase
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hc_capbase
);
xhci_dbg
(
xhci
,
"CAPLENGTH AND HCIVERSION 0x%x:
\n
"
,
xhci_dbg
(
xhci
,
"CAPLENGTH AND HCIVERSION 0x%x:
\n
"
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
"CAPLENGTH: 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"CAPLENGTH: 0x%x
\n
"
,
...
@@ -69,7 +69,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
...
@@ -69,7 +69,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
"HCIVERSION: 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"HCIVERSION: 0x%x
\n
"
,
(
unsigned
int
)
HC_VERSION
(
temp
));
(
unsigned
int
)
HC_VERSION
(
temp
));
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcs_params1
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcs_params1
);
xhci_dbg
(
xhci
,
"HCSPARAMS 1: 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"HCSPARAMS 1: 0x%x
\n
"
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
" Max device slots: %u
\n
"
,
xhci_dbg
(
xhci
,
" Max device slots: %u
\n
"
,
...
@@ -79,7 +79,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
...
@@ -79,7 +79,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
" Max ports: %u
\n
"
,
xhci_dbg
(
xhci
,
" Max ports: %u
\n
"
,
(
unsigned
int
)
HCS_MAX_PORTS
(
temp
));
(
unsigned
int
)
HCS_MAX_PORTS
(
temp
));
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcs_params2
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcs_params2
);
xhci_dbg
(
xhci
,
"HCSPARAMS 2: 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"HCSPARAMS 2: 0x%x
\n
"
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
" Isoc scheduling threshold: %u
\n
"
,
xhci_dbg
(
xhci
,
" Isoc scheduling threshold: %u
\n
"
,
...
@@ -87,7 +87,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
...
@@ -87,7 +87,7 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
" Maximum allowed segments in event ring: %u
\n
"
,
xhci_dbg
(
xhci
,
" Maximum allowed segments in event ring: %u
\n
"
,
(
unsigned
int
)
HCS_ERST_MAX
(
temp
));
(
unsigned
int
)
HCS_ERST_MAX
(
temp
));
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcs_params3
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcs_params3
);
xhci_dbg
(
xhci
,
"HCSPARAMS 3 0x%x:
\n
"
,
xhci_dbg
(
xhci
,
"HCSPARAMS 3 0x%x:
\n
"
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
" Worst case U1 device exit latency: %u
\n
"
,
xhci_dbg
(
xhci
,
" Worst case U1 device exit latency: %u
\n
"
,
...
@@ -95,14 +95,14 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
...
@@ -95,14 +95,14 @@ static void xhci_print_cap_regs(struct xhci_hcd *xhci)
xhci_dbg
(
xhci
,
" Worst case U2 device exit latency: %u
\n
"
,
xhci_dbg
(
xhci
,
" Worst case U2 device exit latency: %u
\n
"
,
(
unsigned
int
)
HCS_U2_LATENCY
(
temp
));
(
unsigned
int
)
HCS_U2_LATENCY
(
temp
));
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcc_params
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcc_params
);
xhci_dbg
(
xhci
,
"HCC PARAMS 0x%x:
\n
"
,
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
"HCC PARAMS 0x%x:
\n
"
,
(
unsigned
int
)
temp
);
xhci_dbg
(
xhci
,
" HC generates %s bit addresses
\n
"
,
xhci_dbg
(
xhci
,
" HC generates %s bit addresses
\n
"
,
HCC_64BIT_ADDR
(
temp
)
?
"64"
:
"32"
);
HCC_64BIT_ADDR
(
temp
)
?
"64"
:
"32"
);
/* FIXME */
/* FIXME */
xhci_dbg
(
xhci
,
" FIXME: more HCCPARAMS debugging
\n
"
);
xhci_dbg
(
xhci
,
" FIXME: more HCCPARAMS debugging
\n
"
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
run_regs_off
);
temp
=
readl
(
&
xhci
->
cap_regs
->
run_regs_off
);
xhci_dbg
(
xhci
,
"RTSOFF 0x%x:
\n
"
,
temp
&
RTSOFF_MASK
);
xhci_dbg
(
xhci
,
"RTSOFF 0x%x:
\n
"
,
temp
&
RTSOFF_MASK
);
}
}
...
@@ -110,7 +110,7 @@ static void xhci_print_command_reg(struct xhci_hcd *xhci)
...
@@ -110,7 +110,7 @@ static void xhci_print_command_reg(struct xhci_hcd *xhci)
{
{
u32
temp
;
u32
temp
;
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
command
);
temp
=
readl
(
&
xhci
->
op_regs
->
command
);
xhci_dbg
(
xhci
,
"USBCMD 0x%x:
\n
"
,
temp
);
xhci_dbg
(
xhci
,
"USBCMD 0x%x:
\n
"
,
temp
);
xhci_dbg
(
xhci
,
" HC is %s
\n
"
,
xhci_dbg
(
xhci
,
" HC is %s
\n
"
,
(
temp
&
CMD_RUN
)
?
"running"
:
"being stopped"
);
(
temp
&
CMD_RUN
)
?
"running"
:
"being stopped"
);
...
@@ -128,7 +128,7 @@ static void xhci_print_status(struct xhci_hcd *xhci)
...
@@ -128,7 +128,7 @@ static void xhci_print_status(struct xhci_hcd *xhci)
{
{
u32
temp
;
u32
temp
;
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
status
);
temp
=
readl
(
&
xhci
->
op_regs
->
status
);
xhci_dbg
(
xhci
,
"USBSTS 0x%x:
\n
"
,
temp
);
xhci_dbg
(
xhci
,
"USBSTS 0x%x:
\n
"
,
temp
);
xhci_dbg
(
xhci
,
" Event ring is %sempty
\n
"
,
xhci_dbg
(
xhci
,
" Event ring is %sempty
\n
"
,
(
temp
&
STS_EINT
)
?
"not "
:
""
);
(
temp
&
STS_EINT
)
?
"not "
:
""
);
...
@@ -163,7 +163,7 @@ static void xhci_print_ports(struct xhci_hcd *xhci)
...
@@ -163,7 +163,7 @@ static void xhci_print_ports(struct xhci_hcd *xhci)
for
(
j
=
0
;
j
<
NUM_PORT_REGS
;
++
j
)
{
for
(
j
=
0
;
j
<
NUM_PORT_REGS
;
++
j
)
{
xhci_dbg
(
xhci
,
"%p port %s reg = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"%p port %s reg = 0x%x
\n
"
,
addr
,
names
[
j
],
addr
,
names
[
j
],
(
unsigned
int
)
xhci_readl
(
xhci
,
addr
));
(
unsigned
int
)
readl
(
addr
));
addr
++
;
addr
++
;
}
}
}
}
...
@@ -177,7 +177,7 @@ void xhci_print_ir_set(struct xhci_hcd *xhci, int set_num)
...
@@ -177,7 +177,7 @@ void xhci_print_ir_set(struct xhci_hcd *xhci, int set_num)
u64
temp_64
;
u64
temp_64
;
addr
=
&
ir_set
->
irq_pending
;
addr
=
&
ir_set
->
irq_pending
;
temp
=
xhci_readl
(
xhci
,
addr
);
temp
=
readl
(
addr
);
if
(
temp
==
XHCI_INIT_VALUE
)
if
(
temp
==
XHCI_INIT_VALUE
)
return
;
return
;
...
@@ -187,28 +187,28 @@ void xhci_print_ir_set(struct xhci_hcd *xhci, int set_num)
...
@@ -187,28 +187,28 @@ void xhci_print_ir_set(struct xhci_hcd *xhci, int set_num)
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
addr
=
&
ir_set
->
irq_control
;
addr
=
&
ir_set
->
irq_control
;
temp
=
xhci_readl
(
xhci
,
addr
);
temp
=
readl
(
addr
);
xhci_dbg
(
xhci
,
" %p: ir_set.control = 0x%x
\n
"
,
addr
,
xhci_dbg
(
xhci
,
" %p: ir_set.control = 0x%x
\n
"
,
addr
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
addr
=
&
ir_set
->
erst_size
;
addr
=
&
ir_set
->
erst_size
;
temp
=
xhci_readl
(
xhci
,
addr
);
temp
=
readl
(
addr
);
xhci_dbg
(
xhci
,
" %p: ir_set.erst_size = 0x%x
\n
"
,
addr
,
xhci_dbg
(
xhci
,
" %p: ir_set.erst_size = 0x%x
\n
"
,
addr
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
addr
=
&
ir_set
->
rsvd
;
addr
=
&
ir_set
->
rsvd
;
temp
=
xhci_readl
(
xhci
,
addr
);
temp
=
readl
(
addr
);
if
(
temp
!=
XHCI_INIT_VALUE
)
if
(
temp
!=
XHCI_INIT_VALUE
)
xhci_dbg
(
xhci
,
" WARN: %p: ir_set.rsvd = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
" WARN: %p: ir_set.rsvd = 0x%x
\n
"
,
addr
,
(
unsigned
int
)
temp
);
addr
,
(
unsigned
int
)
temp
);
addr
=
&
ir_set
->
erst_base
;
addr
=
&
ir_set
->
erst_base
;
temp_64
=
xhci_read_64
(
xhci
,
addr
);
temp_64
=
readq
(
addr
);
xhci_dbg
(
xhci
,
" %p: ir_set.erst_base = @%08llx
\n
"
,
xhci_dbg
(
xhci
,
" %p: ir_set.erst_base = @%08llx
\n
"
,
addr
,
temp_64
);
addr
,
temp_64
);
addr
=
&
ir_set
->
erst_dequeue
;
addr
=
&
ir_set
->
erst_dequeue
;
temp_64
=
xhci_read_64
(
xhci
,
addr
);
temp_64
=
readq
(
addr
);
xhci_dbg
(
xhci
,
" %p: ir_set.erst_dequeue = @%08llx
\n
"
,
xhci_dbg
(
xhci
,
" %p: ir_set.erst_dequeue = @%08llx
\n
"
,
addr
,
temp_64
);
addr
,
temp_64
);
}
}
...
@@ -219,12 +219,12 @@ void xhci_print_run_regs(struct xhci_hcd *xhci)
...
@@ -219,12 +219,12 @@ void xhci_print_run_regs(struct xhci_hcd *xhci)
int
i
;
int
i
;
xhci_dbg
(
xhci
,
"xHCI runtime registers at %p:
\n
"
,
xhci
->
run_regs
);
xhci_dbg
(
xhci
,
"xHCI runtime registers at %p:
\n
"
,
xhci
->
run_regs
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
run_regs
->
microframe_index
);
temp
=
readl
(
&
xhci
->
run_regs
->
microframe_index
);
xhci_dbg
(
xhci
,
" %p: Microframe index = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
" %p: Microframe index = 0x%x
\n
"
,
&
xhci
->
run_regs
->
microframe_index
,
&
xhci
->
run_regs
->
microframe_index
,
(
unsigned
int
)
temp
);
(
unsigned
int
)
temp
);
for
(
i
=
0
;
i
<
7
;
++
i
)
{
for
(
i
=
0
;
i
<
7
;
++
i
)
{
temp
=
xhci_readl
(
xhci
,
&
xhci
->
run_regs
->
rsvd
[
i
]);
temp
=
readl
(
&
xhci
->
run_regs
->
rsvd
[
i
]);
if
(
temp
!=
XHCI_INIT_VALUE
)
if
(
temp
!=
XHCI_INIT_VALUE
)
xhci_dbg
(
xhci
,
" WARN: %p: Rsvd[%i] = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
" WARN: %p: Rsvd[%i] = 0x%x
\n
"
,
&
xhci
->
run_regs
->
rsvd
[
i
],
&
xhci
->
run_regs
->
rsvd
[
i
],
...
@@ -412,7 +412,7 @@ void xhci_dbg_cmd_ptrs(struct xhci_hcd *xhci)
...
@@ -412,7 +412,7 @@ void xhci_dbg_cmd_ptrs(struct xhci_hcd *xhci)
{
{
u64
val
;
u64
val
;
val
=
xhci_read_64
(
xhci
,
&
xhci
->
op_regs
->
cmd_ring
);
val
=
readq
(
&
xhci
->
op_regs
->
cmd_ring
);
xhci_dbg
(
xhci
,
"// xHC command ring deq ptr low bits + flags = @%08x
\n
"
,
xhci_dbg
(
xhci
,
"// xHC command ring deq ptr low bits + flags = @%08x
\n
"
,
lower_32_bits
(
val
));
lower_32_bits
(
val
));
xhci_dbg
(
xhci
,
"// xHC command ring deq ptr high bits = @%08x
\n
"
,
xhci_dbg
(
xhci
,
"// xHC command ring deq ptr high bits = @%08x
\n
"
,
...
...
drivers/usb/host/xhci-hub.c
浏览文件 @
d59abb93
...
@@ -94,7 +94,7 @@ static void xhci_usb2_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
...
@@ -94,7 +94,7 @@ static void xhci_usb2_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
*/
*/
memset
(
port_removable
,
0
,
sizeof
(
port_removable
));
memset
(
port_removable
,
0
,
sizeof
(
port_removable
));
for
(
i
=
0
;
i
<
ports
;
i
++
)
{
for
(
i
=
0
;
i
<
ports
;
i
++
)
{
portsc
=
xhci_readl
(
xhci
,
xhci
->
usb2_ports
[
i
]);
portsc
=
readl
(
xhci
->
usb2_ports
[
i
]);
/* If a device is removable, PORTSC reports a 0, same as in the
/* If a device is removable, PORTSC reports a 0, same as in the
* hub descriptor DeviceRemovable bits.
* hub descriptor DeviceRemovable bits.
*/
*/
...
@@ -148,7 +148,7 @@ static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
...
@@ -148,7 +148,7 @@ static void xhci_usb3_hub_descriptor(struct usb_hcd *hcd, struct xhci_hcd *xhci,
port_removable
=
0
;
port_removable
=
0
;
/* bit 0 is reserved, bit 1 is for port 1, etc. */
/* bit 0 is reserved, bit 1 is for port 1, etc. */
for
(
i
=
0
;
i
<
ports
;
i
++
)
{
for
(
i
=
0
;
i
<
ports
;
i
++
)
{
portsc
=
xhci_readl
(
xhci
,
xhci
->
usb3_ports
[
i
]);
portsc
=
readl
(
xhci
->
usb3_ports
[
i
]);
if
(
portsc
&
PORT_DEV_REMOVE
)
if
(
portsc
&
PORT_DEV_REMOVE
)
port_removable
|=
1
<<
(
i
+
1
);
port_removable
|=
1
<<
(
i
+
1
);
}
}
...
@@ -342,8 +342,8 @@ static void xhci_disable_port(struct usb_hcd *hcd, struct xhci_hcd *xhci,
...
@@ -342,8 +342,8 @@ static void xhci_disable_port(struct usb_hcd *hcd, struct xhci_hcd *xhci,
}
}
/* Write 1 to disable the port */
/* Write 1 to disable the port */
xhci_writel
(
xhci
,
port_status
|
PORT_PE
,
addr
);
writel
(
port_status
|
PORT_PE
,
addr
);
port_status
=
xhci_readl
(
xhci
,
addr
);
port_status
=
readl
(
addr
);
xhci_dbg
(
xhci
,
"disable port, actual port %d status = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"disable port, actual port %d status = 0x%x
\n
"
,
wIndex
,
port_status
);
wIndex
,
port_status
);
}
}
...
@@ -388,8 +388,8 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue,
...
@@ -388,8 +388,8 @@ static void xhci_clear_port_change_bit(struct xhci_hcd *xhci, u16 wValue,
return
;
return
;
}
}
/* Change bits are all write 1 to clear */
/* Change bits are all write 1 to clear */
xhci_writel
(
xhci
,
port_status
|
status
,
addr
);
writel
(
port_status
|
status
,
addr
);
port_status
=
xhci_readl
(
xhci
,
addr
);
port_status
=
readl
(
addr
);
xhci_dbg
(
xhci
,
"clear port %s change, actual port %d status = 0x%x
\n
"
,
xhci_dbg
(
xhci
,
"clear port %s change, actual port %d status = 0x%x
\n
"
,
port_change_bit
,
wIndex
,
port_status
);
port_change_bit
,
wIndex
,
port_status
);
}
}
...
@@ -415,11 +415,11 @@ void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
...
@@ -415,11 +415,11 @@ void xhci_set_link_state(struct xhci_hcd *xhci, __le32 __iomem **port_array,
{
{
u32
temp
;
u32
temp
;
temp
=
xhci_readl
(
xhci
,
port_array
[
port_id
]);
temp
=
readl
(
port_array
[
port_id
]);
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
&=
~
PORT_PLS_MASK
;
temp
&=
~
PORT_PLS_MASK
;
temp
|=
PORT_LINK_STROBE
|
link_state
;
temp
|=
PORT_LINK_STROBE
|
link_state
;
xhci_writel
(
xhci
,
temp
,
port_array
[
port_id
]);
writel
(
temp
,
port_array
[
port_id
]);
}
}
static
void
xhci_set_remote_wake_mask
(
struct
xhci_hcd
*
xhci
,
static
void
xhci_set_remote_wake_mask
(
struct
xhci_hcd
*
xhci
,
...
@@ -427,7 +427,7 @@ static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci,
...
@@ -427,7 +427,7 @@ static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci,
{
{
u32
temp
;
u32
temp
;
temp
=
xhci_readl
(
xhci
,
port_array
[
port_id
]);
temp
=
readl
(
port_array
[
port_id
]);
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
=
xhci_port_state_to_neutral
(
temp
);
if
(
wake_mask
&
USB_PORT_FEAT_REMOTE_WAKE_CONNECT
)
if
(
wake_mask
&
USB_PORT_FEAT_REMOTE_WAKE_CONNECT
)
...
@@ -445,7 +445,7 @@ static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci,
...
@@ -445,7 +445,7 @@ static void xhci_set_remote_wake_mask(struct xhci_hcd *xhci,
else
else
temp
&=
~
PORT_WKOC_E
;
temp
&=
~
PORT_WKOC_E
;
xhci_writel
(
xhci
,
temp
,
port_array
[
port_id
]);
writel
(
temp
,
port_array
[
port_id
]);
}
}
/* Test and clear port RWC bit */
/* Test and clear port RWC bit */
...
@@ -454,11 +454,11 @@ void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
...
@@ -454,11 +454,11 @@ void xhci_test_and_clear_bit(struct xhci_hcd *xhci, __le32 __iomem **port_array,
{
{
u32
temp
;
u32
temp
;
temp
=
xhci_readl
(
xhci
,
port_array
[
port_id
]);
temp
=
readl
(
port_array
[
port_id
]);
if
(
temp
&
port_bit
)
{
if
(
temp
&
port_bit
)
{
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
|=
port_bit
;
temp
|=
port_bit
;
xhci_writel
(
xhci
,
temp
,
port_array
[
port_id
]);
writel
(
temp
,
port_array
[
port_id
]);
}
}
}
}
...
@@ -623,8 +623,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
...
@@ -623,8 +623,7 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
}
}
xhci_ring_device
(
xhci
,
slot_id
);
xhci_ring_device
(
xhci
,
slot_id
);
}
else
{
}
else
{
int
port_status
=
xhci_readl
(
xhci
,
int
port_status
=
readl
(
port_array
[
wIndex
]);
port_array
[
wIndex
]);
xhci_warn
(
xhci
,
"Port resume took longer than %i msec, port status = 0x%x
\n
"
,
xhci_warn
(
xhci
,
"Port resume took longer than %i msec, port status = 0x%x
\n
"
,
XHCI_MAX_REXIT_TIMEOUT
,
XHCI_MAX_REXIT_TIMEOUT
,
port_status
);
port_status
);
...
@@ -733,12 +732,12 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -733,12 +732,12 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
/* Set the U1 and U2 exit latencies. */
/* Set the U1 and U2 exit latencies. */
memcpy
(
buf
,
&
usb_bos_descriptor
,
memcpy
(
buf
,
&
usb_bos_descriptor
,
USB_DT_BOS_SIZE
+
USB_DT_USB_SS_CAP_SIZE
);
USB_DT_BOS_SIZE
+
USB_DT_USB_SS_CAP_SIZE
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcs_params3
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcs_params3
);
buf
[
12
]
=
HCS_U1_LATENCY
(
temp
);
buf
[
12
]
=
HCS_U1_LATENCY
(
temp
);
put_unaligned_le16
(
HCS_U2_LATENCY
(
temp
),
&
buf
[
13
]);
put_unaligned_le16
(
HCS_U2_LATENCY
(
temp
),
&
buf
[
13
]);
/* Indicate whether the host has LTM support. */
/* Indicate whether the host has LTM support. */
temp
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcc_params
);
temp
=
readl
(
&
xhci
->
cap_regs
->
hcc_params
);
if
(
HCC_LTC
(
temp
))
if
(
HCC_LTC
(
temp
))
buf
[
8
]
|=
USB_LTM_SUPPORT
;
buf
[
8
]
|=
USB_LTM_SUPPORT
;
...
@@ -748,7 +747,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -748,7 +747,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
if
(
!
wIndex
||
wIndex
>
max_ports
)
if
(
!
wIndex
||
wIndex
>
max_ports
)
goto
error
;
goto
error
;
wIndex
--
;
wIndex
--
;
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
(
temp
==
0xffffffff
)
{
if
(
temp
==
0xffffffff
)
{
retval
=
-
ENODEV
;
retval
=
-
ENODEV
;
break
;
break
;
...
@@ -775,7 +774,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -775,7 +774,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
if
(
!
wIndex
||
wIndex
>
max_ports
)
if
(
!
wIndex
||
wIndex
>
max_ports
)
goto
error
;
goto
error
;
wIndex
--
;
wIndex
--
;
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
(
temp
==
0xffffffff
)
{
if
(
temp
==
0xffffffff
)
{
retval
=
-
ENODEV
;
retval
=
-
ENODEV
;
break
;
break
;
...
@@ -784,7 +783,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -784,7 +783,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
/* FIXME: What new port features do we need to support? */
/* FIXME: What new port features do we need to support? */
switch
(
wValue
)
{
switch
(
wValue
)
{
case
USB_PORT_FEAT_SUSPEND
:
case
USB_PORT_FEAT_SUSPEND
:
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
((
temp
&
PORT_PLS_MASK
)
!=
XDEV_U0
)
{
if
((
temp
&
PORT_PLS_MASK
)
!=
XDEV_U0
)
{
/* Resume the port to U0 first */
/* Resume the port to U0 first */
xhci_set_link_state
(
xhci
,
port_array
,
wIndex
,
xhci_set_link_state
(
xhci
,
port_array
,
wIndex
,
...
@@ -797,7 +796,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -797,7 +796,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
* a port unless the port reports that it is in the
* a port unless the port reports that it is in the
* enabled (PED = ‘1’,PLS < ‘3’) state.
* enabled (PED = ‘1’,PLS < ‘3’) state.
*/
*/
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
((
temp
&
PORT_PE
)
==
0
||
(
temp
&
PORT_RESET
)
if
((
temp
&
PORT_PE
)
==
0
||
(
temp
&
PORT_RESET
)
||
(
temp
&
PORT_PLS_MASK
)
>=
XDEV_U3
)
{
||
(
temp
&
PORT_PLS_MASK
)
>=
XDEV_U3
)
{
xhci_warn
(
xhci
,
"USB core suspending device "
xhci_warn
(
xhci
,
"USB core suspending device "
...
@@ -822,11 +821,11 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -822,11 +821,11 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
msleep
(
10
);
/* wait device to enter */
msleep
(
10
);
/* wait device to enter */
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
bus_state
->
suspended_ports
|=
1
<<
wIndex
;
bus_state
->
suspended_ports
|=
1
<<
wIndex
;
break
;
break
;
case
USB_PORT_FEAT_LINK_STATE
:
case
USB_PORT_FEAT_LINK_STATE
:
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
/* Disable port */
/* Disable port */
if
(
link_state
==
USB_SS_PORT_LS_SS_DISABLED
)
{
if
(
link_state
==
USB_SS_PORT_LS_SS_DISABLED
)
{
...
@@ -839,9 +838,8 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -839,9 +838,8 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
temp
|=
PORT_CSC
|
PORT_PEC
|
PORT_WRC
|
temp
|=
PORT_CSC
|
PORT_PEC
|
PORT_WRC
|
PORT_OCC
|
PORT_RC
|
PORT_PLC
|
PORT_OCC
|
PORT_RC
|
PORT_PLC
|
PORT_CEC
;
PORT_CEC
;
xhci_writel
(
xhci
,
temp
|
PORT_PE
,
writel
(
temp
|
PORT_PE
,
port_array
[
wIndex
]);
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
break
;
break
;
}
}
...
@@ -850,7 +848,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -850,7 +848,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
xhci_dbg
(
xhci
,
"Enable port %d
\n
"
,
wIndex
);
xhci_dbg
(
xhci
,
"Enable port %d
\n
"
,
wIndex
);
xhci_set_link_state
(
xhci
,
port_array
,
wIndex
,
xhci_set_link_state
(
xhci
,
port_array
,
wIndex
,
link_state
);
link_state
);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
break
;
break
;
}
}
...
@@ -884,7 +882,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -884,7 +882,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
msleep
(
20
);
/* wait device to enter */
msleep
(
20
);
/* wait device to enter */
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
(
link_state
==
USB_SS_PORT_LS_U3
)
if
(
link_state
==
USB_SS_PORT_LS_U3
)
bus_state
->
suspended_ports
|=
1
<<
wIndex
;
bus_state
->
suspended_ports
|=
1
<<
wIndex
;
break
;
break
;
...
@@ -895,10 +893,9 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -895,10 +893,9 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
* However, khubd will ignore the roothub events until
* However, khubd will ignore the roothub events until
* the roothub is registered.
* the roothub is registered.
*/
*/
xhci_writel
(
xhci
,
temp
|
PORT_POWER
,
writel
(
temp
|
PORT_POWER
,
port_array
[
wIndex
]);
port_array
[
wIndex
]);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
xhci_dbg
(
xhci
,
"set port power, actual port %d status = 0x%x
\n
"
,
wIndex
,
temp
);
xhci_dbg
(
xhci
,
"set port power, actual port %d status = 0x%x
\n
"
,
wIndex
,
temp
);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
...
@@ -911,52 +908,52 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -911,52 +908,52 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
break
;
break
;
case
USB_PORT_FEAT_RESET
:
case
USB_PORT_FEAT_RESET
:
temp
=
(
temp
|
PORT_RESET
);
temp
=
(
temp
|
PORT_RESET
);
xhci_writel
(
xhci
,
temp
,
port_array
[
wIndex
]);
writel
(
temp
,
port_array
[
wIndex
]);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
xhci_dbg
(
xhci
,
"set port reset, actual port %d status = 0x%x
\n
"
,
wIndex
,
temp
);
xhci_dbg
(
xhci
,
"set port reset, actual port %d status = 0x%x
\n
"
,
wIndex
,
temp
);
break
;
break
;
case
USB_PORT_FEAT_REMOTE_WAKE_MASK
:
case
USB_PORT_FEAT_REMOTE_WAKE_MASK
:
xhci_set_remote_wake_mask
(
xhci
,
port_array
,
xhci_set_remote_wake_mask
(
xhci
,
port_array
,
wIndex
,
wake_mask
);
wIndex
,
wake_mask
);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
xhci_dbg
(
xhci
,
"set port remote wake mask, "
xhci_dbg
(
xhci
,
"set port remote wake mask, "
"actual port %d status = 0x%x
\n
"
,
"actual port %d status = 0x%x
\n
"
,
wIndex
,
temp
);
wIndex
,
temp
);
break
;
break
;
case
USB_PORT_FEAT_BH_PORT_RESET
:
case
USB_PORT_FEAT_BH_PORT_RESET
:
temp
|=
PORT_WR
;
temp
|=
PORT_WR
;
xhci_writel
(
xhci
,
temp
,
port_array
[
wIndex
]);
writel
(
temp
,
port_array
[
wIndex
]);
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
break
;
break
;
case
USB_PORT_FEAT_U1_TIMEOUT
:
case
USB_PORT_FEAT_U1_TIMEOUT
:
if
(
hcd
->
speed
!=
HCD_USB3
)
if
(
hcd
->
speed
!=
HCD_USB3
)
goto
error
;
goto
error
;
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]
+
PORTPMSC
);
temp
=
readl
(
port_array
[
wIndex
]
+
PORTPMSC
);
temp
&=
~
PORT_U1_TIMEOUT_MASK
;
temp
&=
~
PORT_U1_TIMEOUT_MASK
;
temp
|=
PORT_U1_TIMEOUT
(
timeout
);
temp
|=
PORT_U1_TIMEOUT
(
timeout
);
xhci_writel
(
xhci
,
temp
,
port_array
[
wIndex
]
+
PORTPMSC
);
writel
(
temp
,
port_array
[
wIndex
]
+
PORTPMSC
);
break
;
break
;
case
USB_PORT_FEAT_U2_TIMEOUT
:
case
USB_PORT_FEAT_U2_TIMEOUT
:
if
(
hcd
->
speed
!=
HCD_USB3
)
if
(
hcd
->
speed
!=
HCD_USB3
)
goto
error
;
goto
error
;
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]
+
PORTPMSC
);
temp
=
readl
(
port_array
[
wIndex
]
+
PORTPMSC
);
temp
&=
~
PORT_U2_TIMEOUT_MASK
;
temp
&=
~
PORT_U2_TIMEOUT_MASK
;
temp
|=
PORT_U2_TIMEOUT
(
timeout
);
temp
|=
PORT_U2_TIMEOUT
(
timeout
);
xhci_writel
(
xhci
,
temp
,
port_array
[
wIndex
]
+
PORTPMSC
);
writel
(
temp
,
port_array
[
wIndex
]
+
PORTPMSC
);
break
;
break
;
default:
default:
goto
error
;
goto
error
;
}
}
/* unblock any posted writes */
/* unblock any posted writes */
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
break
;
break
;
case
ClearPortFeature
:
case
ClearPortFeature
:
if
(
!
wIndex
||
wIndex
>
max_ports
)
if
(
!
wIndex
||
wIndex
>
max_ports
)
goto
error
;
goto
error
;
wIndex
--
;
wIndex
--
;
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
if
(
temp
==
0xffffffff
)
{
if
(
temp
==
0xffffffff
)
{
retval
=
-
ENODEV
;
retval
=
-
ENODEV
;
break
;
break
;
...
@@ -965,7 +962,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -965,7 +962,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
temp
=
xhci_port_state_to_neutral
(
temp
);
temp
=
xhci_port_state_to_neutral
(
temp
);
switch
(
wValue
)
{
switch
(
wValue
)
{
case
USB_PORT_FEAT_SUSPEND
:
case
USB_PORT_FEAT_SUSPEND
:
temp
=
xhci_readl
(
xhci
,
port_array
[
wIndex
]);
temp
=
readl
(
port_array
[
wIndex
]);
xhci_dbg
(
xhci
,
"clear USB_PORT_FEAT_SUSPEND
\n
"
);
xhci_dbg
(
xhci
,
"clear USB_PORT_FEAT_SUSPEND
\n
"
);
xhci_dbg
(
xhci
,
"PORTSC %04x
\n
"
,
temp
);
xhci_dbg
(
xhci
,
"PORTSC %04x
\n
"
,
temp
);
if
(
temp
&
PORT_RESET
)
if
(
temp
&
PORT_RESET
)
...
@@ -1008,8 +1005,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
...
@@ -1008,8 +1005,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
port_array
[
wIndex
],
temp
);
port_array
[
wIndex
],
temp
);
break
;
break
;
case
USB_PORT_FEAT_POWER
:
case
USB_PORT_FEAT_POWER
:
xhci_writel
(
xhci
,
temp
&
~
PORT_POWER
,
writel
(
temp
&
~
PORT_POWER
,
port_array
[
wIndex
]);
port_array
[
wIndex
]);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
temp
=
usb_acpi_power_manageable
(
hcd
->
self
.
root_hub
,
temp
=
usb_acpi_power_manageable
(
hcd
->
self
.
root_hub
,
...
@@ -1070,7 +1066,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
...
@@ -1070,7 +1066,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
spin_lock_irqsave
(
&
xhci
->
lock
,
flags
);
/* For each port, did anything change? If so, set that bit in buf. */
/* For each port, did anything change? If so, set that bit in buf. */
for
(
i
=
0
;
i
<
max_ports
;
i
++
)
{
for
(
i
=
0
;
i
<
max_ports
;
i
++
)
{
temp
=
xhci_readl
(
xhci
,
port_array
[
i
]);
temp
=
readl
(
port_array
[
i
]);
if
(
temp
==
0xffffffff
)
{
if
(
temp
==
0xffffffff
)
{
retval
=
-
ENODEV
;
retval
=
-
ENODEV
;
break
;
break
;
...
@@ -1124,7 +1120,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
...
@@ -1124,7 +1120,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
u32
t1
,
t2
;
u32
t1
,
t2
;
int
slot_id
;
int
slot_id
;
t1
=
xhci_readl
(
xhci
,
port_array
[
port_index
]);
t1
=
readl
(
port_array
[
port_index
]);
t2
=
xhci_port_state_to_neutral
(
t1
);
t2
=
xhci_port_state_to_neutral
(
t1
);
if
((
t1
&
PORT_PE
)
&&
!
(
t1
&
PORT_PLS_MASK
))
{
if
((
t1
&
PORT_PE
)
&&
!
(
t1
&
PORT_PLS_MASK
))
{
...
@@ -1157,7 +1153,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
...
@@ -1157,7 +1153,7 @@ int xhci_bus_suspend(struct usb_hcd *hcd)
t1
=
xhci_port_state_to_neutral
(
t1
);
t1
=
xhci_port_state_to_neutral
(
t1
);
if
(
t1
!=
t2
)
if
(
t1
!=
t2
)
xhci_writel
(
xhci
,
t2
,
port_array
[
port_index
]);
writel
(
t2
,
port_array
[
port_index
]);
}
}
hcd
->
state
=
HC_STATE_SUSPENDED
;
hcd
->
state
=
HC_STATE_SUSPENDED
;
bus_state
->
next_statechange
=
jiffies
+
msecs_to_jiffies
(
10
);
bus_state
->
next_statechange
=
jiffies
+
msecs_to_jiffies
(
10
);
...
@@ -1187,9 +1183,9 @@ int xhci_bus_resume(struct usb_hcd *hcd)
...
@@ -1187,9 +1183,9 @@ int xhci_bus_resume(struct usb_hcd *hcd)
}
}
/* delay the irqs */
/* delay the irqs */
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
command
);
temp
=
readl
(
&
xhci
->
op_regs
->
command
);
temp
&=
~
CMD_EIE
;
temp
&=
~
CMD_EIE
;
xhci_writel
(
xhci
,
temp
,
&
xhci
->
op_regs
->
command
);
writel
(
temp
,
&
xhci
->
op_regs
->
command
);
port_index
=
max_ports
;
port_index
=
max_ports
;
while
(
port_index
--
)
{
while
(
port_index
--
)
{
...
@@ -1198,7 +1194,7 @@ int xhci_bus_resume(struct usb_hcd *hcd)
...
@@ -1198,7 +1194,7 @@ int xhci_bus_resume(struct usb_hcd *hcd)
u32
temp
;
u32
temp
;
int
slot_id
;
int
slot_id
;
temp
=
xhci_readl
(
xhci
,
port_array
[
port_index
]);
temp
=
readl
(
port_array
[
port_index
]);
if
(
DEV_SUPERSPEED
(
temp
))
if
(
DEV_SUPERSPEED
(
temp
))
temp
&=
~
(
PORT_RWC_BITS
|
PORT_CEC
|
PORT_WAKE_BITS
);
temp
&=
~
(
PORT_RWC_BITS
|
PORT_CEC
|
PORT_WAKE_BITS
);
else
else
...
@@ -1235,17 +1231,17 @@ int xhci_bus_resume(struct usb_hcd *hcd)
...
@@ -1235,17 +1231,17 @@ int xhci_bus_resume(struct usb_hcd *hcd)
if
(
slot_id
)
if
(
slot_id
)
xhci_ring_device
(
xhci
,
slot_id
);
xhci_ring_device
(
xhci
,
slot_id
);
}
else
}
else
xhci_writel
(
xhci
,
temp
,
port_array
[
port_index
]);
writel
(
temp
,
port_array
[
port_index
]);
}
}
(
void
)
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
command
);
(
void
)
readl
(
&
xhci
->
op_regs
->
command
);
bus_state
->
next_statechange
=
jiffies
+
msecs_to_jiffies
(
5
);
bus_state
->
next_statechange
=
jiffies
+
msecs_to_jiffies
(
5
);
/* re-enable irqs */
/* re-enable irqs */
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
command
);
temp
=
readl
(
&
xhci
->
op_regs
->
command
);
temp
|=
CMD_EIE
;
temp
|=
CMD_EIE
;
xhci_writel
(
xhci
,
temp
,
&
xhci
->
op_regs
->
command
);
writel
(
temp
,
&
xhci
->
op_regs
->
command
);
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
command
);
temp
=
readl
(
&
xhci
->
op_regs
->
command
);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
xhci
->
lock
,
flags
);
return
0
;
return
0
;
...
...
drivers/usb/host/xhci-mem.c
浏览文件 @
d59abb93
...
@@ -57,7 +57,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci,
...
@@ -57,7 +57,7 @@ static struct xhci_segment *xhci_segment_alloc(struct xhci_hcd *xhci,
/* If the cycle state is 0, set the cycle bit to 1 for all the TRBs */
/* If the cycle state is 0, set the cycle bit to 1 for all the TRBs */
if
(
cycle_state
==
0
)
{
if
(
cycle_state
==
0
)
{
for
(
i
=
0
;
i
<
TRBS_PER_SEGMENT
;
i
++
)
for
(
i
=
0
;
i
<
TRBS_PER_SEGMENT
;
i
++
)
seg
->
trbs
[
i
].
link
.
control
|=
TRB_CYCLE
;
seg
->
trbs
[
i
].
link
.
control
|=
cpu_to_le32
(
TRB_CYCLE
)
;
}
}
seg
->
dma
=
dma
;
seg
->
dma
=
dma
;
seg
->
next
=
NULL
;
seg
->
next
=
NULL
;
...
@@ -308,7 +308,8 @@ static void xhci_reinit_cached_ring(struct xhci_hcd *xhci,
...
@@ -308,7 +308,8 @@ static void xhci_reinit_cached_ring(struct xhci_hcd *xhci,
sizeof
(
union
xhci_trb
)
*
TRBS_PER_SEGMENT
);
sizeof
(
union
xhci_trb
)
*
TRBS_PER_SEGMENT
);
if
(
cycle_state
==
0
)
{
if
(
cycle_state
==
0
)
{
for
(
i
=
0
;
i
<
TRBS_PER_SEGMENT
;
i
++
)
for
(
i
=
0
;
i
<
TRBS_PER_SEGMENT
;
i
++
)
seg
->
trbs
[
i
].
link
.
control
|=
TRB_CYCLE
;
seg
->
trbs
[
i
].
link
.
control
|=
cpu_to_le32
(
TRB_CYCLE
);
}
}
/* All endpoint rings have link TRBs */
/* All endpoint rings have link TRBs */
xhci_link_segments
(
xhci
,
seg
,
seg
->
next
,
type
);
xhci_link_segments
(
xhci
,
seg
,
seg
->
next
,
type
);
...
@@ -432,10 +433,10 @@ static void xhci_free_stream_ctx(struct xhci_hcd *xhci,
...
@@ -432,10 +433,10 @@ static void xhci_free_stream_ctx(struct xhci_hcd *xhci,
unsigned
int
num_stream_ctxs
,
unsigned
int
num_stream_ctxs
,
struct
xhci_stream_ctx
*
stream_ctx
,
dma_addr_t
dma
)
struct
xhci_stream_ctx
*
stream_ctx
,
dma_addr_t
dma
)
{
{
struct
pci_dev
*
pdev
=
to_pci_dev
(
xhci_to_hcd
(
xhci
)
->
self
.
controller
)
;
struct
device
*
dev
=
xhci_to_hcd
(
xhci
)
->
self
.
controller
;
if
(
num_stream_ctxs
>
MEDIUM_STREAM_ARRAY_SIZE
)
if
(
num_stream_ctxs
>
MEDIUM_STREAM_ARRAY_SIZE
)
dma_free_coherent
(
&
pdev
->
dev
,
dma_free_coherent
(
dev
,
sizeof
(
struct
xhci_stream_ctx
)
*
num_stream_ctxs
,
sizeof
(
struct
xhci_stream_ctx
)
*
num_stream_ctxs
,
stream_ctx
,
dma
);
stream_ctx
,
dma
);
else
if
(
num_stream_ctxs
<=
SMALL_STREAM_ARRAY_SIZE
)
else
if
(
num_stream_ctxs
<=
SMALL_STREAM_ARRAY_SIZE
)
...
@@ -460,10 +461,10 @@ static struct xhci_stream_ctx *xhci_alloc_stream_ctx(struct xhci_hcd *xhci,
...
@@ -460,10 +461,10 @@ static struct xhci_stream_ctx *xhci_alloc_stream_ctx(struct xhci_hcd *xhci,
unsigned
int
num_stream_ctxs
,
dma_addr_t
*
dma
,
unsigned
int
num_stream_ctxs
,
dma_addr_t
*
dma
,
gfp_t
mem_flags
)
gfp_t
mem_flags
)
{
{
struct
pci_dev
*
pdev
=
to_pci_dev
(
xhci_to_hcd
(
xhci
)
->
self
.
controller
)
;
struct
device
*
dev
=
xhci_to_hcd
(
xhci
)
->
self
.
controller
;
if
(
num_stream_ctxs
>
MEDIUM_STREAM_ARRAY_SIZE
)
if
(
num_stream_ctxs
>
MEDIUM_STREAM_ARRAY_SIZE
)
return
dma_alloc_coherent
(
&
pdev
->
dev
,
return
dma_alloc_coherent
(
dev
,
sizeof
(
struct
xhci_stream_ctx
)
*
num_stream_ctxs
,
sizeof
(
struct
xhci_stream_ctx
)
*
num_stream_ctxs
,
dma
,
mem_flags
);
dma
,
mem_flags
);
else
if
(
num_stream_ctxs
<=
SMALL_STREAM_ARRAY_SIZE
)
else
if
(
num_stream_ctxs
<=
SMALL_STREAM_ARRAY_SIZE
)
...
@@ -721,8 +722,7 @@ void xhci_free_stream_info(struct xhci_hcd *xhci,
...
@@ -721,8 +722,7 @@ void xhci_free_stream_info(struct xhci_hcd *xhci,
stream_info
->
stream_ctx_array
,
stream_info
->
stream_ctx_array
,
stream_info
->
ctx_array_dma
);
stream_info
->
ctx_array_dma
);
if
(
stream_info
)
kfree
(
stream_info
->
stream_rings
);
kfree
(
stream_info
->
stream_rings
);
kfree
(
stream_info
);
kfree
(
stream_info
);
}
}
...
@@ -1616,7 +1616,7 @@ static void scratchpad_free(struct xhci_hcd *xhci)
...
@@ -1616,7 +1616,7 @@ static void scratchpad_free(struct xhci_hcd *xhci)
{
{
int
num_sp
;
int
num_sp
;
int
i
;
int
i
;
struct
pci_dev
*
pdev
=
to_pci_dev
(
xhci_to_hcd
(
xhci
)
->
self
.
controller
)
;
struct
device
*
dev
=
xhci_to_hcd
(
xhci
)
->
self
.
controller
;
if
(
!
xhci
->
scratchpad
)
if
(
!
xhci
->
scratchpad
)
return
;
return
;
...
@@ -1624,13 +1624,13 @@ static void scratchpad_free(struct xhci_hcd *xhci)
...
@@ -1624,13 +1624,13 @@ static void scratchpad_free(struct xhci_hcd *xhci)
num_sp
=
HCS_MAX_SCRATCHPAD
(
xhci
->
hcs_params2
);
num_sp
=
HCS_MAX_SCRATCHPAD
(
xhci
->
hcs_params2
);
for
(
i
=
0
;
i
<
num_sp
;
i
++
)
{
for
(
i
=
0
;
i
<
num_sp
;
i
++
)
{
dma_free_coherent
(
&
pdev
->
dev
,
xhci
->
page_size
,
dma_free_coherent
(
dev
,
xhci
->
page_size
,
xhci
->
scratchpad
->
sp_buffers
[
i
],
xhci
->
scratchpad
->
sp_buffers
[
i
],
xhci
->
scratchpad
->
sp_dma_buffers
[
i
]);
xhci
->
scratchpad
->
sp_dma_buffers
[
i
]);
}
}
kfree
(
xhci
->
scratchpad
->
sp_dma_buffers
);
kfree
(
xhci
->
scratchpad
->
sp_dma_buffers
);
kfree
(
xhci
->
scratchpad
->
sp_buffers
);
kfree
(
xhci
->
scratchpad
->
sp_buffers
);
dma_free_coherent
(
&
pdev
->
dev
,
num_sp
*
sizeof
(
u64
),
dma_free_coherent
(
dev
,
num_sp
*
sizeof
(
u64
),
xhci
->
scratchpad
->
sp_array
,
xhci
->
scratchpad
->
sp_array
,
xhci
->
scratchpad
->
sp_dma
);
xhci
->
scratchpad
->
sp_dma
);
kfree
(
xhci
->
scratchpad
);
kfree
(
xhci
->
scratchpad
);
...
@@ -1692,7 +1692,7 @@ void xhci_free_command(struct xhci_hcd *xhci,
...
@@ -1692,7 +1692,7 @@ void xhci_free_command(struct xhci_hcd *xhci,
void
xhci_mem_cleanup
(
struct
xhci_hcd
*
xhci
)
void
xhci_mem_cleanup
(
struct
xhci_hcd
*
xhci
)
{
{
struct
pci_dev
*
pdev
=
to_pci_dev
(
xhci_to_hcd
(
xhci
)
->
self
.
controller
)
;
struct
device
*
dev
=
xhci_to_hcd
(
xhci
)
->
self
.
controller
;
struct
xhci_cd
*
cur_cd
,
*
next_cd
;
struct
xhci_cd
*
cur_cd
,
*
next_cd
;
int
size
;
int
size
;
int
i
,
j
,
num_ports
;
int
i
,
j
,
num_ports
;
...
@@ -1700,7 +1700,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
...
@@ -1700,7 +1700,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
/* Free the Event Ring Segment Table and the actual Event Ring */
/* Free the Event Ring Segment Table and the actual Event Ring */
size
=
sizeof
(
struct
xhci_erst_entry
)
*
(
xhci
->
erst
.
num_entries
);
size
=
sizeof
(
struct
xhci_erst_entry
)
*
(
xhci
->
erst
.
num_entries
);
if
(
xhci
->
erst
.
entries
)
if
(
xhci
->
erst
.
entries
)
dma_free_coherent
(
&
pdev
->
dev
,
size
,
dma_free_coherent
(
dev
,
size
,
xhci
->
erst
.
entries
,
xhci
->
erst
.
erst_dma_addr
);
xhci
->
erst
.
entries
,
xhci
->
erst
.
erst_dma_addr
);
xhci
->
erst
.
entries
=
NULL
;
xhci
->
erst
.
entries
=
NULL
;
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"Freed ERST"
);
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"Freed ERST"
);
...
@@ -1748,7 +1748,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
...
@@ -1748,7 +1748,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
"Freed medium stream array pool"
);
"Freed medium stream array pool"
);
if
(
xhci
->
dcbaa
)
if
(
xhci
->
dcbaa
)
dma_free_coherent
(
&
pdev
->
dev
,
sizeof
(
*
xhci
->
dcbaa
),
dma_free_coherent
(
dev
,
sizeof
(
*
xhci
->
dcbaa
),
xhci
->
dcbaa
,
xhci
->
dcbaa
->
dma
);
xhci
->
dcbaa
,
xhci
->
dcbaa
->
dma
);
xhci
->
dcbaa
=
NULL
;
xhci
->
dcbaa
=
NULL
;
...
@@ -1958,7 +1958,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
...
@@ -1958,7 +1958,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
xhci_warn
(
xhci
,
"WARN something wrong with SW event ring "
xhci_warn
(
xhci
,
"WARN something wrong with SW event ring "
"dequeue ptr.
\n
"
);
"dequeue ptr.
\n
"
);
/* Update HC event ring dequeue pointer */
/* Update HC event ring dequeue pointer */
temp
=
xhci_read_64
(
xhci
,
&
xhci
->
ir_set
->
erst_dequeue
);
temp
=
readq
(
&
xhci
->
ir_set
->
erst_dequeue
);
temp
&=
ERST_PTR_MASK
;
temp
&=
ERST_PTR_MASK
;
/* Don't clear the EHB bit (which is RW1C) because
/* Don't clear the EHB bit (which is RW1C) because
* there might be more events to service.
* there might be more events to service.
...
@@ -1967,7 +1967,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
...
@@ -1967,7 +1967,7 @@ static void xhci_set_hc_event_deq(struct xhci_hcd *xhci)
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Write event ring dequeue pointer, "
"// Write event ring dequeue pointer, "
"preserving EHB bit"
);
"preserving EHB bit"
);
xhci_write_64
(
xhci
,
((
u64
)
deq
&
(
u64
)
~
ERST_PTR_MASK
)
|
temp
,
writeq
(
((
u64
)
deq
&
(
u64
)
~
ERST_PTR_MASK
)
|
temp
,
&
xhci
->
ir_set
->
erst_dequeue
);
&
xhci
->
ir_set
->
erst_dequeue
);
}
}
...
@@ -1986,7 +1986,7 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
...
@@ -1986,7 +1986,7 @@ static void xhci_add_in_port(struct xhci_hcd *xhci, unsigned int num_ports,
}
}
/* Port offset and count in the third dword, see section 7.2 */
/* Port offset and count in the third dword, see section 7.2 */
temp
=
xhci_readl
(
xhci
,
addr
+
2
);
temp
=
readl
(
addr
+
2
);
port_offset
=
XHCI_EXT_PORT_OFF
(
temp
);
port_offset
=
XHCI_EXT_PORT_OFF
(
temp
);
port_count
=
XHCI_EXT_PORT_COUNT
(
temp
);
port_count
=
XHCI_EXT_PORT_COUNT
(
temp
);
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
...
@@ -2069,7 +2069,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2069,7 +2069,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
int
cap_count
=
0
;
int
cap_count
=
0
;
addr
=
&
xhci
->
cap_regs
->
hcc_params
;
addr
=
&
xhci
->
cap_regs
->
hcc_params
;
offset
=
XHCI_HCC_EXT_CAPS
(
xhci_readl
(
xhci
,
addr
));
offset
=
XHCI_HCC_EXT_CAPS
(
readl
(
addr
));
if
(
offset
==
0
)
{
if
(
offset
==
0
)
{
xhci_err
(
xhci
,
"No Extended Capability registers, "
xhci_err
(
xhci
,
"No Extended Capability registers, "
"unable to set up roothub.
\n
"
);
"unable to set up roothub.
\n
"
);
...
@@ -2106,7 +2106,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2106,7 +2106,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
/* count extended protocol capability entries for later caching */
/* count extended protocol capability entries for later caching */
do
{
do
{
u32
cap_id
;
u32
cap_id
;
cap_id
=
xhci_readl
(
xhci
,
tmp_addr
);
cap_id
=
readl
(
tmp_addr
);
if
(
XHCI_EXT_CAPS_ID
(
cap_id
)
==
XHCI_EXT_CAPS_PROTOCOL
)
if
(
XHCI_EXT_CAPS_ID
(
cap_id
)
==
XHCI_EXT_CAPS_PROTOCOL
)
cap_count
++
;
cap_count
++
;
tmp_offset
=
XHCI_EXT_CAPS_NEXT
(
cap_id
);
tmp_offset
=
XHCI_EXT_CAPS_NEXT
(
cap_id
);
...
@@ -2120,7 +2120,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2120,7 +2120,7 @@ static int xhci_setup_port_arrays(struct xhci_hcd *xhci, gfp_t flags)
while
(
1
)
{
while
(
1
)
{
u32
cap_id
;
u32
cap_id
;
cap_id
=
xhci_readl
(
xhci
,
addr
);
cap_id
=
readl
(
addr
);
if
(
XHCI_EXT_CAPS_ID
(
cap_id
)
==
XHCI_EXT_CAPS_PROTOCOL
)
if
(
XHCI_EXT_CAPS_ID
(
cap_id
)
==
XHCI_EXT_CAPS_PROTOCOL
)
xhci_add_in_port
(
xhci
,
num_ports
,
addr
,
xhci_add_in_port
(
xhci
,
num_ports
,
addr
,
(
u8
)
XHCI_EXT_PORT_MAJOR
(
cap_id
),
(
u8
)
XHCI_EXT_PORT_MAJOR
(
cap_id
),
...
@@ -2224,7 +2224,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2224,7 +2224,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
INIT_LIST_HEAD
(
&
xhci
->
cancel_cmd_list
);
INIT_LIST_HEAD
(
&
xhci
->
cancel_cmd_list
);
page_size
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
page_size
);
page_size
=
readl
(
&
xhci
->
op_regs
->
page_size
);
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"Supported page size register = 0x%x"
,
page_size
);
"Supported page size register = 0x%x"
,
page_size
);
for
(
i
=
0
;
i
<
16
;
i
++
)
{
for
(
i
=
0
;
i
<
16
;
i
++
)
{
...
@@ -2247,14 +2247,14 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2247,14 +2247,14 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
* Program the Number of Device Slots Enabled field in the CONFIG
* Program the Number of Device Slots Enabled field in the CONFIG
* register with the max value of slots the HC can handle.
* register with the max value of slots the HC can handle.
*/
*/
val
=
HCS_MAX_SLOTS
(
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
hcs_params1
));
val
=
HCS_MAX_SLOTS
(
readl
(
&
xhci
->
cap_regs
->
hcs_params1
));
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// xHC can handle at most %d device slots."
,
val
);
"// xHC can handle at most %d device slots."
,
val
);
val2
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
config_reg
);
val2
=
readl
(
&
xhci
->
op_regs
->
config_reg
);
val
|=
(
val2
&
~
HCS_SLOTS_MASK
);
val
|=
(
val2
&
~
HCS_SLOTS_MASK
);
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Setting Max device slots reg = 0x%x."
,
val
);
"// Setting Max device slots reg = 0x%x."
,
val
);
xhci_writel
(
xhci
,
val
,
&
xhci
->
op_regs
->
config_reg
);
writel
(
val
,
&
xhci
->
op_regs
->
config_reg
);
/*
/*
* Section 5.4.8 - doorbell array must be
* Section 5.4.8 - doorbell array must be
...
@@ -2269,7 +2269,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2269,7 +2269,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Device context base array address = 0x%llx (DMA), %p (virt)"
,
"// Device context base array address = 0x%llx (DMA), %p (virt)"
,
(
unsigned
long
long
)
xhci
->
dcbaa
->
dma
,
xhci
->
dcbaa
);
(
unsigned
long
long
)
xhci
->
dcbaa
->
dma
,
xhci
->
dcbaa
);
xhci_write_64
(
xhci
,
dma
,
&
xhci
->
op_regs
->
dcbaa_ptr
);
writeq
(
dma
,
&
xhci
->
op_regs
->
dcbaa_ptr
);
/*
/*
* Initialize the ring segment pool. The ring must be a contiguous
* Initialize the ring segment pool. The ring must be a contiguous
...
@@ -2312,13 +2312,13 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2312,13 +2312,13 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
(
unsigned
long
long
)
xhci
->
cmd_ring
->
first_seg
->
dma
);
(
unsigned
long
long
)
xhci
->
cmd_ring
->
first_seg
->
dma
);
/* Set the address in the Command Ring Control register */
/* Set the address in the Command Ring Control register */
val_64
=
xhci_read_64
(
xhci
,
&
xhci
->
op_regs
->
cmd_ring
);
val_64
=
readq
(
&
xhci
->
op_regs
->
cmd_ring
);
val_64
=
(
val_64
&
(
u64
)
CMD_RING_RSVD_BITS
)
|
val_64
=
(
val_64
&
(
u64
)
CMD_RING_RSVD_BITS
)
|
(
xhci
->
cmd_ring
->
first_seg
->
dma
&
(
u64
)
~
CMD_RING_RSVD_BITS
)
|
(
xhci
->
cmd_ring
->
first_seg
->
dma
&
(
u64
)
~
CMD_RING_RSVD_BITS
)
|
xhci
->
cmd_ring
->
cycle_state
;
xhci
->
cmd_ring
->
cycle_state
;
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Setting command ring address to 0x%x"
,
val
);
"// Setting command ring address to 0x%x"
,
val
);
xhci_write_64
(
xhci
,
val_64
,
&
xhci
->
op_regs
->
cmd_ring
);
writeq
(
val_64
,
&
xhci
->
op_regs
->
cmd_ring
);
xhci_dbg_cmd_ptrs
(
xhci
);
xhci_dbg_cmd_ptrs
(
xhci
);
xhci
->
lpm_command
=
xhci_alloc_command
(
xhci
,
true
,
true
,
flags
);
xhci
->
lpm_command
=
xhci_alloc_command
(
xhci
,
true
,
true
,
flags
);
...
@@ -2331,7 +2331,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2331,7 +2331,7 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
*/
*/
xhci
->
cmd_ring_reserved_trbs
++
;
xhci
->
cmd_ring_reserved_trbs
++
;
val
=
xhci_readl
(
xhci
,
&
xhci
->
cap_regs
->
db_off
);
val
=
readl
(
&
xhci
->
cap_regs
->
db_off
);
val
&=
DBOFF_MASK
;
val
&=
DBOFF_MASK
;
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Doorbell array is located at offset 0x%x"
"// Doorbell array is located at offset 0x%x"
...
@@ -2382,13 +2382,13 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2382,13 +2382,13 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
}
}
/* set ERST count with the number of entries in the segment table */
/* set ERST count with the number of entries in the segment table */
val
=
xhci_readl
(
xhci
,
&
xhci
->
ir_set
->
erst_size
);
val
=
readl
(
&
xhci
->
ir_set
->
erst_size
);
val
&=
ERST_SIZE_MASK
;
val
&=
ERST_SIZE_MASK
;
val
|=
ERST_NUM_SEGS
;
val
|=
ERST_NUM_SEGS
;
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Write ERST size = %i to ir_set 0 (some bits preserved)"
,
"// Write ERST size = %i to ir_set 0 (some bits preserved)"
,
val
);
val
);
xhci_writel
(
xhci
,
val
,
&
xhci
->
ir_set
->
erst_size
);
writel
(
val
,
&
xhci
->
ir_set
->
erst_size
);
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Set ERST entries to point to event ring."
);
"// Set ERST entries to point to event ring."
);
...
@@ -2396,10 +2396,10 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2396,10 +2396,10 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
xhci_dbg_trace
(
xhci
,
trace_xhci_dbg_init
,
"// Set ERST base address for ir_set 0 = 0x%llx"
,
"// Set ERST base address for ir_set 0 = 0x%llx"
,
(
unsigned
long
long
)
xhci
->
erst
.
erst_dma_addr
);
(
unsigned
long
long
)
xhci
->
erst
.
erst_dma_addr
);
val_64
=
xhci_read_64
(
xhci
,
&
xhci
->
ir_set
->
erst_base
);
val_64
=
readq
(
&
xhci
->
ir_set
->
erst_base
);
val_64
&=
ERST_PTR_MASK
;
val_64
&=
ERST_PTR_MASK
;
val_64
|=
(
xhci
->
erst
.
erst_dma_addr
&
(
u64
)
~
ERST_PTR_MASK
);
val_64
|=
(
xhci
->
erst
.
erst_dma_addr
&
(
u64
)
~
ERST_PTR_MASK
);
xhci_write_64
(
xhci
,
val_64
,
&
xhci
->
ir_set
->
erst_base
);
writeq
(
val_64
,
&
xhci
->
ir_set
->
erst_base
);
/* Set the event ring dequeue address */
/* Set the event ring dequeue address */
xhci_set_hc_event_deq
(
xhci
);
xhci_set_hc_event_deq
(
xhci
);
...
@@ -2431,10 +2431,10 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
...
@@ -2431,10 +2431,10 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
* is necessary for allowing USB 3.0 devices to do remote wakeup from
* is necessary for allowing USB 3.0 devices to do remote wakeup from
* U3 (device suspend).
* U3 (device suspend).
*/
*/
temp
=
xhci_readl
(
xhci
,
&
xhci
->
op_regs
->
dev_notification
);
temp
=
readl
(
&
xhci
->
op_regs
->
dev_notification
);
temp
&=
~
DEV_NOTE_MASK
;
temp
&=
~
DEV_NOTE_MASK
;
temp
|=
DEV_NOTE_FWAKE
;
temp
|=
DEV_NOTE_FWAKE
;
xhci_writel
(
xhci
,
temp
,
&
xhci
->
op_regs
->
dev_notification
);
writel
(
temp
,
&
xhci
->
op_regs
->
dev_notification
);
return
0
;
return
0
;
...
...
drivers/usb/host/xhci-pci.c
浏览文件 @
d59abb93
...
@@ -331,6 +331,7 @@ static const struct hc_driver xhci_pci_hc_driver = {
...
@@ -331,6 +331,7 @@ static const struct hc_driver xhci_pci_hc_driver = {
.
check_bandwidth
=
xhci_check_bandwidth
,
.
check_bandwidth
=
xhci_check_bandwidth
,
.
reset_bandwidth
=
xhci_reset_bandwidth
,
.
reset_bandwidth
=
xhci_reset_bandwidth
,
.
address_device
=
xhci_address_device
,
.
address_device
=
xhci_address_device
,
.
enable_device
=
xhci_enable_device
,
.
update_hub_device
=
xhci_update_hub_device
,
.
update_hub_device
=
xhci_update_hub_device
,
.
reset_device
=
xhci_discover_or_reset_device
,
.
reset_device
=
xhci_discover_or_reset_device
,
...
...
drivers/usb/host/xhci-plat.c
浏览文件 @
d59abb93
...
@@ -69,6 +69,7 @@ static const struct hc_driver xhci_plat_xhci_driver = {
...
@@ -69,6 +69,7 @@ static const struct hc_driver xhci_plat_xhci_driver = {
.
check_bandwidth
=
xhci_check_bandwidth
,
.
check_bandwidth
=
xhci_check_bandwidth
,
.
reset_bandwidth
=
xhci_reset_bandwidth
,
.
reset_bandwidth
=
xhci_reset_bandwidth
,
.
address_device
=
xhci_address_device
,
.
address_device
=
xhci_address_device
,
.
enable_device
=
xhci_enable_device
,
.
update_hub_device
=
xhci_update_hub_device
,
.
update_hub_device
=
xhci_update_hub_device
,
.
reset_device
=
xhci_discover_or_reset_device
,
.
reset_device
=
xhci_discover_or_reset_device
,
...
@@ -139,6 +140,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
...
@@ -139,6 +140,7 @@ static int xhci_plat_probe(struct platform_device *pdev)
ret
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
ret
=
usb_add_hcd
(
hcd
,
irq
,
IRQF_SHARED
);
if
(
ret
)
if
(
ret
)
goto
unmap_registers
;
goto
unmap_registers
;
device_wakeup_enable
(
hcd
->
self
.
controller
);
/* USB 2.0 roothub is stored in the platform_device now. */
/* USB 2.0 roothub is stored in the platform_device now. */
hcd
=
platform_get_drvdata
(
pdev
);
hcd
=
platform_get_drvdata
(
pdev
);
...
...
drivers/usb/host/xhci-ring.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/host/xhci-trace.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/host/xhci.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/host/xhci.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/misc/usbtest.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/musb/musb_host.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/phy/phy-msm-usb.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/phy/phy-mv-usb.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/renesas_usbhs/mod_host.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/storage/protocol.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/wusbcore/cbaf.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/wusbcore/security.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/wusbcore/wa-hc.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/wusbcore/wa-rpipe.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/usb/wusbcore/wa-xfer.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
drivers/uwb/umc-bus.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
firmware/emi62/bitstream.HEX
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
include/linux/scatterlist.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
include/linux/usb/hcd.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
include/linux/uwb/umc.h
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
lib/scatterlist.c
浏览文件 @
d59abb93
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录