Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ee14373c
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ee14373c
编写于
2月 04, 2010
作者:
S
Sascha Hauer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
i.MX31 pcm037: Add USB support
Signed-off-by:
N
Sascha Hauer
<
s.hauer@pengutronix.de
>
上级
773f206b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
93 addition
and
45 deletion
+93
-45
arch/arm/mach-mx3/Kconfig
arch/arm/mach-mx3/Kconfig
+1
-0
arch/arm/mach-mx3/mach-pcm037.c
arch/arm/mach-mx3/mach-pcm037.c
+92
-45
未找到文件。
arch/arm/mach-mx3/Kconfig
浏览文件 @
ee14373c
...
...
@@ -34,6 +34,7 @@ config MACH_MX31ADS_WM1133_EV1
config MACH_PCM037
bool "Support Phytec pcm037 (i.MX31) platforms"
select ARCH_MX31
select MXC_ULPI if USB_ULPI
help
Include support for Phytec pcm037 platform. This includes
specific configurations for the board and its peripherals.
...
...
arch/arm/mach-mx3/mach-pcm037.c
浏览文件 @
ee14373c
...
...
@@ -33,6 +33,9 @@
#include <linux/irq.h>
#include <linux/fsl_devices.h>
#include <linux/can/platform/sja1000.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <linux/fsl_devices.h>
#include <media/soc_camera.h>
...
...
@@ -51,6 +54,8 @@
#include <mach/mx3_camera.h>
#include <mach/mx3fb.h>
#include <mach/mxc_nand.h>
#include <mach/mxc_ehci.h>
#include <mach/ulpi.h>
#include "devices.h"
#include "pcm037.h"
...
...
@@ -172,19 +177,7 @@ static unsigned int pcm037_pins[] = {
MX31_PIN_CSI_VSYNC__CSI_VSYNC
,
/* GPIO */
IOMUX_MODE
(
MX31_PIN_ATA_DMACK
,
IOMUX_CONFIG_GPIO
),
};
static
struct
physmap_flash_data
pcm037_flash_data
=
{
.
width
=
2
,
};
static
struct
resource
pcm037_flash_resource
=
{
.
start
=
0xa0000000
,
.
end
=
0xa1ffffff
,
.
flags
=
IORESOURCE_MEM
,
};
static
int
usbotg_pins
[]
=
{
/* OTG */
MX31_PIN_USBOTG_DATA0__USBOTG_DATA0
,
MX31_PIN_USBOTG_DATA1__USBOTG_DATA1
,
MX31_PIN_USBOTG_DATA2__USBOTG_DATA2
,
...
...
@@ -197,39 +190,29 @@ static int usbotg_pins[] = {
MX31_PIN_USBOTG_DIR__USBOTG_DIR
,
MX31_PIN_USBOTG_NXT__USBOTG_NXT
,
MX31_PIN_USBOTG_STP__USBOTG_STP
,
/* USB host 2 */
IOMUX_MODE
(
MX31_PIN_USBH2_CLK
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DIR
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_NXT
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_STP
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DATA0
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_USBH2_DATA1
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_STXD3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SRXD3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SCK3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SFS3
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_STXD6
,
IOMUX_CONFIG_FUNC
),
IOMUX_MODE
(
MX31_PIN_SRXD6
,
IOMUX_CONFIG_FUNC
),
};
/* USB OTG HS port */
static
int
__init
gpio_usbotg_hs_activate
(
void
)
{
int
ret
=
mxc_iomux_setup_multiple_pins
(
usbotg_pins
,
ARRAY_SIZE
(
usbotg_pins
),
"usbotg"
);
if
(
ret
<
0
)
{
printk
(
KERN_ERR
"Cannot set up OTG pins
\n
"
);
return
ret
;
}
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA0
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA1
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA2
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA3
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA4
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA5
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA6
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DATA7
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_CLK
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_DIR
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_NXT
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
mxc_iomux_set_pad
(
MX31_PIN_USBOTG_STP
,
PAD_CTL_DRV_MAX
|
PAD_CTL_SRE_FAST
);
return
0
;
}
static
struct
physmap_flash_data
pcm037_flash_data
=
{
.
width
=
2
,
};
/* OTG config */
static
struct
fsl_usb2_platform_data
usb_pdata
=
{
.
operating_mode
=
FSL_USB2_DR_DEVICE
,
.
phy_mode
=
FSL_USB2_PHY_ULPI
,
static
struct
resource
pcm037_flash_resource
=
{
.
start
=
0xa0000000
,
.
end
=
0xa1ffffff
,
.
flags
=
IORESOURCE_MEM
,
};
static
struct
platform_device
pcm037_flash
=
{
...
...
@@ -561,16 +544,65 @@ static struct platform_device pcm970_sja1000 = {
.
num_resources
=
ARRAY_SIZE
(
pcm970_sja1000_resources
),
};
static
struct
mxc_usbh_platform_data
otg_pdata
=
{
.
portsc
=
MXC_EHCI_MODE_ULPI
,
.
flags
=
MXC_EHCI_INTERFACE_DIFF_UNI
,
};
static
struct
mxc_usbh_platform_data
usbh2_pdata
=
{
.
portsc
=
MXC_EHCI_MODE_ULPI
,
.
flags
=
MXC_EHCI_INTERFACE_DIFF_UNI
,
};
static
struct
fsl_usb2_platform_data
otg_device_pdata
=
{
.
operating_mode
=
FSL_USB2_DR_DEVICE
,
.
phy_mode
=
FSL_USB2_PHY_ULPI
,
};
static
int
otg_mode_host
;
static
int
__init
pcm037_otg_mode
(
char
*
options
)
{
if
(
!
strcmp
(
options
,
"host"
))
otg_mode_host
=
1
;
else
if
(
!
strcmp
(
options
,
"device"
))
otg_mode_host
=
0
;
else
pr_info
(
"otg_mode neither
\"
host
\"
nor
\"
device
\"
. "
"Defaulting to device
\n
"
);
return
0
;
}
__setup
(
"otg_mode="
,
pcm037_otg_mode
);
/*
* Board specific initialization.
*/
static
void
__init
mxc_board_init
(
void
)
{
int
ret
;
u32
tmp
;
mxc_iomux_set_gpr
(
MUX_PGP_UH2
,
1
);
mxc_iomux_setup_multiple_pins
(
pcm037_pins
,
ARRAY_SIZE
(
pcm037_pins
),
"pcm037"
);
#define H2_PAD_CFG (PAD_CTL_DRV_MAX | PAD_CTL_SRE_FAST | PAD_CTL_HYS_CMOS \
| PAD_CTL_ODE_CMOS | PAD_CTL_100K_PU)
mxc_iomux_set_pad
(
MX31_PIN_USBH2_CLK
,
H2_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DIR
,
H2_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_NXT
,
H2_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_STP
,
H2_PAD_CFG
);
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DATA0
,
H2_PAD_CFG
);
/* USBH2_DATA0 */
mxc_iomux_set_pad
(
MX31_PIN_USBH2_DATA1
,
H2_PAD_CFG
);
/* USBH2_DATA1 */
mxc_iomux_set_pad
(
MX31_PIN_SRXD6
,
H2_PAD_CFG
);
/* USBH2_DATA2 */
mxc_iomux_set_pad
(
MX31_PIN_STXD6
,
H2_PAD_CFG
);
/* USBH2_DATA3 */
mxc_iomux_set_pad
(
MX31_PIN_SFS3
,
H2_PAD_CFG
);
/* USBH2_DATA4 */
mxc_iomux_set_pad
(
MX31_PIN_SCK3
,
H2_PAD_CFG
);
/* USBH2_DATA5 */
mxc_iomux_set_pad
(
MX31_PIN_SRXD3
,
H2_PAD_CFG
);
/* USBH2_DATA6 */
mxc_iomux_set_pad
(
MX31_PIN_STXD3
,
H2_PAD_CFG
);
/* USBH2_DATA7 */
if
(
pcm037_variant
()
==
PCM037_EET
)
mxc_iomux_setup_multiple_pins
(
pcm037_uart1_pins
,
ARRAY_SIZE
(
pcm037_uart1_pins
),
"pcm037_uart1"
);
...
...
@@ -608,8 +640,6 @@ static void __init mxc_board_init(void)
mxc_register_device
(
&
mxcsdhc_device0
,
&
sdhc_pdata
);
mxc_register_device
(
&
mx3_ipu
,
&
mx3_ipu_data
);
mxc_register_device
(
&
mx3_fb
,
&
mx3fb_pdata
);
if
(
!
gpio_usbotg_hs_activate
())
mxc_register_device
(
&
mxc_otg_udc_device
,
&
usb_pdata
);
/* CSI */
/* Camera power: default - off */
...
...
@@ -623,6 +653,23 @@ static void __init mxc_board_init(void)
mxc_register_device
(
&
mx3_camera
,
&
camera_pdata
);
platform_device_register
(
&
pcm970_sja1000
);
#if defined(CONFIG_USB_ULPI)
if
(
otg_mode_host
)
{
otg_pdata
.
otg
=
otg_ulpi_create
(
&
mxc_ulpi_access_ops
,
USB_OTG_DRV_VBUS
|
USB_OTG_DRV_VBUS_EXT
);
mxc_register_device
(
&
mxc_otg_host
,
&
otg_pdata
);
}
usbh2_pdata
.
otg
=
otg_ulpi_create
(
&
mxc_ulpi_access_ops
,
USB_OTG_DRV_VBUS
|
USB_OTG_DRV_VBUS_EXT
);
mxc_register_device
(
&
mxc_usbh2
,
&
usbh2_pdata
);
#endif
if
(
!
otg_mode_host
)
mxc_register_device
(
&
mxc_otg_udc_device
,
&
otg_device_pdata
);
}
static
void
__init
pcm037_timer_init
(
void
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录