Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
eee7c497
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 大约 4 年
通知
14
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
eee7c497
编写于
2月 03, 2010
作者:
S
Sascha Hauer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
i.MX27 pca100: Add USB support
Signed-off-by:
N
Sascha Hauer
<
s.hauer@pengutronix.de
>
上级
d186f04c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
104 addition
and
0 deletion
+104
-0
arch/arm/mach-mx2/Kconfig
arch/arm/mach-mx2/Kconfig
+1
-0
arch/arm/mach-mx2/mach-pca100.c
arch/arm/mach-mx2/mach-pca100.c
+103
-0
未找到文件。
arch/arm/mach-mx2/Kconfig
浏览文件 @
eee7c497
...
...
@@ -100,6 +100,7 @@ config MACH_IMX27LITE
config MACH_PCA100
bool "Phytec phyCARD-s (pca100)"
depends on MACH_MX27
select MXC_ULPI if USB_ULPI
help
Include support for phyCARD-s (aka pca100) platform. This
includes specific configurations for the module and its peripherals.
...
...
arch/arm/mach-mx2/mach-pca100.c
浏览文件 @
eee7c497
...
...
@@ -26,6 +26,9 @@
#include <linux/spi/eeprom.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <linux/usb/otg.h>
#include <linux/usb/ulpi.h>
#include <linux/fsl_devices.h>
#include <asm/mach/arch.h>
#include <asm/mach-types.h>
...
...
@@ -41,9 +44,14 @@
#include <mach/mxc_nand.h>
#include <mach/irqs.h>
#include <mach/mmc.h>
#include <mach/mxc_ehci.h>
#include <mach/ulpi.h>
#include "devices.h"
#define OTG_PHY_CS_GPIO (GPIO_PORTB + 23)
#define USBH2_PHY_CS_GPIO (GPIO_PORTB + 24)
static
int
pca100_pins
[]
=
{
/* UART1 */
PE12_PF_UART1_TXD
,
...
...
@@ -92,6 +100,34 @@ static int pca100_pins[] = {
PD29_PF_CSPI1_SCLK
,
PD30_PF_CSPI1_MISO
,
PD31_PF_CSPI1_MOSI
,
/* OTG */
OTG_PHY_CS_GPIO
|
GPIO_GPIO
|
GPIO_OUT
,
PC7_PF_USBOTG_DATA5
,
PC8_PF_USBOTG_DATA6
,
PC9_PF_USBOTG_DATA0
,
PC10_PF_USBOTG_DATA2
,
PC11_PF_USBOTG_DATA1
,
PC12_PF_USBOTG_DATA4
,
PC13_PF_USBOTG_DATA3
,
PE0_PF_USBOTG_NXT
,
PE1_PF_USBOTG_STP
,
PE2_PF_USBOTG_DIR
,
PE24_PF_USBOTG_CLK
,
PE25_PF_USBOTG_DATA7
,
/* USBH2 */
USBH2_PHY_CS_GPIO
|
GPIO_GPIO
|
GPIO_OUT
,
PA0_PF_USBH2_CLK
,
PA1_PF_USBH2_DIR
,
PA2_PF_USBH2_DATA7
,
PA3_PF_USBH2_NXT
,
PA4_PF_USBH2_STP
,
PD19_AF_USBH2_DATA4
,
PD20_AF_USBH2_DATA3
,
PD21_AF_USBH2_DATA6
,
PD22_AF_USBH2_DATA0
,
PD23_AF_USBH2_DATA2
,
PD24_AF_USBH2_DATA1
,
PD26_AF_USBH2_DATA5
,
};
static
struct
imxuart_platform_data
uart_pdata
=
{
...
...
@@ -182,6 +218,50 @@ static struct imxmmc_platform_data sdhc_pdata = {
.
exit
=
pca100_sdhc2_exit
,
};
static
int
otg_phy_init
(
struct
platform_device
*
pdev
)
{
gpio_set_value
(
OTG_PHY_CS_GPIO
,
0
);
return
0
;
}
static
struct
mxc_usbh_platform_data
otg_pdata
=
{
.
init
=
otg_phy_init
,
.
portsc
=
MXC_EHCI_MODE_ULPI
,
.
flags
=
MXC_EHCI_INTERFACE_DIFF_UNI
,
};
static
int
usbh2_phy_init
(
struct
platform_device
*
pdev
)
{
gpio_set_value
(
USBH2_PHY_CS_GPIO
,
0
);
return
0
;
}
static
struct
mxc_usbh_platform_data
usbh2_pdata
=
{
.
init
=
usbh2_phy_init
,
.
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
pca100_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="
,
pca100_otg_mode
);
static
void
__init
pca100_init
(
void
)
{
int
ret
;
...
...
@@ -220,6 +300,29 @@ static void __init pca100_init(void)
mxc_register_device
(
&
mxc_spi_device0
,
&
pca100_spi_0_data
);
#endif
gpio_request
(
OTG_PHY_CS_GPIO
,
"usb-otg-cs"
);
gpio_direction_output
(
OTG_PHY_CS_GPIO
,
1
);
gpio_request
(
USBH2_PHY_CS_GPIO
,
"usb-host2-cs"
);
gpio_direction_output
(
USBH2_PHY_CS_GPIO
,
1
);
#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
)
{
gpio_set_value
(
OTG_PHY_CS_GPIO
,
0
);
mxc_register_device
(
&
mxc_otg_udc_device
,
&
otg_device_pdata
);
}
platform_add_devices
(
platform_devices
,
ARRAY_SIZE
(
platform_devices
));
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录