Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
d5dac4a6
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d5dac4a6
编写于
6月 23, 2010
作者:
U
Uwe Kleine-König
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM: imx: dynamically register imx-uart devices (imx27)
Signed-off-by:
N
Uwe Kleine-König
<
u.kleine-koenig@pengutronix.de
>
上级
7cc3c846
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
55 addition
and
110 deletion
+55
-110
arch/arm/mach-imx/Kconfig
arch/arm/mach-imx/Kconfig
+8
-0
arch/arm/mach-imx/devices-imx27.h
arch/arm/mach-imx/devices-imx27.h
+13
-0
arch/arm/mach-imx/devices.c
arch/arm/mach-imx/devices.c
+0
-29
arch/arm/mach-imx/devices.h
arch/arm/mach-imx/devices.h
+0
-8
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
+4
-10
arch/arm/mach-imx/mach-cpuimx27.c
arch/arm/mach-imx/mach-cpuimx27.c
+4
-9
arch/arm/mach-imx/mach-imx27lite.c
arch/arm/mach-imx/mach-imx27lite.c
+3
-3
arch/arm/mach-imx/mach-mx27_3ds.c
arch/arm/mach-imx/mach-mx27_3ds.c
+3
-3
arch/arm/mach-imx/mach-mx27ads.c
arch/arm/mach-imx/mach-mx27ads.c
+8
-21
arch/arm/mach-imx/mach-mxt_td60.c
arch/arm/mach-imx/mach-mxt_td60.c
+5
-12
arch/arm/mach-imx/mach-pca100.c
arch/arm/mach-imx/mach-pca100.c
+2
-3
arch/arm/mach-imx/mach-pcm038.c
arch/arm/mach-imx/mach-pcm038.c
+5
-12
未找到文件。
arch/arm/mach-imx/Kconfig
浏览文件 @
d5dac4a6
...
...
@@ -86,6 +86,7 @@ comment "MX27 platforms:"
config MACH_MX27ADS
bool "MX27ADS platform"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
help
Include support for MX27ADS platform. This includes specific
...
...
@@ -94,6 +95,7 @@ config MACH_MX27ADS
config MACH_PCM038
bool "Phytec phyCORE-i.MX27 CPU module (pcm038)"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_SPI_IMX
select MXC_ULPI if USB_ULPI
...
...
@@ -118,6 +120,7 @@ endchoice
config MACH_CPUIMX27
bool "Eukrea CPUIMX27 module"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
help
Include support for Eukrea CPUIMX27 platform. This includes
...
...
@@ -138,6 +141,7 @@ choice
config MACH_EUKREA_MBIMX27_BASEBOARD
prompt "Eukrea MBIMX27 development board"
bool
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_SPI_IMX
help
This adds board specific devices that can be found on Eukrea's
...
...
@@ -147,12 +151,14 @@ endchoice
config MACH_MX27_3DS
bool "MX27PDK platform"
select IMX_HAVE_PLATFORM_IMX_UART
help
Include support for MX27PDK platform. This includes specific
configurations for the board and its peripherals.
config MACH_IMX27LITE
bool "LogicPD MX27 LITEKIT platform"
select IMX_HAVE_PLATFORM_IMX_UART
help
Include support for MX27 LITEKIT platform. This includes specific
configurations for the board and its peripherals.
...
...
@@ -160,6 +166,7 @@ config MACH_IMX27LITE
config MACH_PCA100
bool "Phytec phyCARD-s (pca100)"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
select IMX_HAVE_PLATFORM_SPI_IMX
select MXC_ULPI if USB_ULPI
...
...
@@ -170,6 +177,7 @@ config MACH_PCA100
config MACH_MXT_TD60
bool "Maxtrack i-MXT TD60"
select IMX_HAVE_PLATFORM_IMX_I2C
select IMX_HAVE_PLATFORM_IMX_UART
select IMX_HAVE_PLATFORM_MXC_NAND
help
Include support for i-MXT (aka td60) platform. This
...
...
arch/arm/mach-imx/devices-imx27.h
浏览文件 @
d5dac4a6
...
...
@@ -14,6 +14,19 @@
#define imx27_add_i2c_imx1(pdata) \
imx_add_imx_i2c(1, MX27_I2C2_BASE_ADDR, SZ_4K, MX27_INT_I2C2, pdata)
#define imx27_add_imx_uart0(pdata) \
imx_add_imx_uart_1irq(0, MX27_UART1_BASE_ADDR, SZ_4K, MX27_INT_UART1, pdata)
#define imx27_add_imx_uart1(pdata) \
imx_add_imx_uart_1irq(1, MX27_UART2_BASE_ADDR, SZ_4K, MX27_INT_UART2, pdata)
#define imx27_add_imx_uart2(pdata) \
imx_add_imx_uart_1irq(2, MX27_UART3_BASE_ADDR, SZ_4K, MX27_INT_UART3, pdata)
#define imx27_add_imx_uart3(pdata) \
imx_add_imx_uart_1irq(3, MX27_UART4_BASE_ADDR, SZ_4K, MX27_INT_UART4, pdata)
#define imx27_add_imx_uart4(pdata) \
imx_add_imx_uart_1irq(4, MX27_UART5_BASE_ADDR, SZ_4K, MX27_INT_UART5, pdata)
#define imx27_add_imx_uart5(pdata) \
imx_add_imx_uart_1irq(5, MX27_UART6_BASE_ADDR, SZ_4K, MX27_INT_UART6, pdata)
#define imx27_add_mxc_nand(pdata) \
imx_add_mxc_nand_v1(MX27_NFC_BASE_ADDR, MX27_INT_NANDFC, pdata)
...
...
arch/arm/mach-imx/devices.c
浏览文件 @
d5dac4a6
...
...
@@ -483,35 +483,6 @@ struct platform_device mxc_usbh2 = {
DEFINE_IMX_SSI_DEVICE
(
0
,
1
,
MX2x_SSI1_BASE_ADDR
,
MX2x_INT_SSI1
);
DEFINE_IMX_SSI_DEVICE
(
1
,
2
,
MX2x_SSI1_BASE_ADDR
,
MX2x_INT_SSI1
);
#ifdef CONFIG_MACH_MX27
#define DEFINE_IMX2x_UART_DEVICE(n, baseaddr, irq) \
static struct resource imx2x_uart_resources ## n[] = { \
{ \
.start = baseaddr, \
.end = baseaddr + 0xb5, \
.flags = IORESOURCE_MEM, \
}, { \
.start = irq, \
.end = irq, \
.flags = IORESOURCE_IRQ, \
}, \
}; \
\
struct platform_device imx2x_uart_device ## n = { \
.name = "imx-uart", \
.id = n, \
.num_resources = ARRAY_SIZE(imx2x_uart_resources ## n), \
.resource = imx2x_uart_resources ## n, \
}
DEFINE_IMX2x_UART_DEVICE
(
0
,
MX2x_UART1_BASE_ADDR
,
MX2x_INT_UART1
);
DEFINE_IMX2x_UART_DEVICE
(
1
,
MX2x_UART2_BASE_ADDR
,
MX2x_INT_UART2
);
DEFINE_IMX2x_UART_DEVICE
(
2
,
MX2x_UART3_BASE_ADDR
,
MX2x_INT_UART3
);
DEFINE_IMX2x_UART_DEVICE
(
3
,
MX2x_UART4_BASE_ADDR
,
MX2x_INT_UART4
);
DEFINE_IMX2x_UART_DEVICE
(
4
,
MX27_UART5_BASE_ADDR
,
MX27_INT_UART5
);
DEFINE_IMX2x_UART_DEVICE
(
5
,
MX27_UART6_BASE_ADDR
,
MX27_INT_UART6
);
#endif
/* GPIO port description */
#define DEFINE_MXC_GPIO_PORT_IRQ(SOC, n, _irq) \
{ \
...
...
arch/arm/mach-imx/devices.h
浏览文件 @
d5dac4a6
...
...
@@ -14,14 +14,6 @@ extern struct platform_device mxc_gpt4;
extern
struct
platform_device
mxc_gpt5
;
#endif
extern
struct
platform_device
mxc_wdt
;
#ifdef CONFIG_MACH_MX27
extern
struct
platform_device
imx2x_uart_device0
;
extern
struct
platform_device
imx2x_uart_device1
;
extern
struct
platform_device
imx2x_uart_device2
;
extern
struct
platform_device
imx2x_uart_device3
;
extern
struct
platform_device
imx2x_uart_device4
;
extern
struct
platform_device
imx2x_uart_device5
;
#endif
extern
struct
platform_device
mxc_w1_master_device
;
extern
struct
platform_device
mxc_fb_device
;
extern
struct
platform_device
mxc_fec_device
;
...
...
arch/arm/mach-imx/eukrea_mbimx27-baseboard.c
浏览文件 @
d5dac4a6
...
...
@@ -32,7 +32,6 @@
#include <mach/imxfb.h>
#include <mach/hardware.h>
#include <mach/mmc.h>
#include <mach/imx-uart.h>
#include "devices-imx27.h"
#include "devices.h"
...
...
@@ -154,13 +153,8 @@ static struct imx_fb_platform_data eukrea_mbimx27_fb_data = {
.
dmacr
=
0x00040060
,
};
static
struct
imxuart_platform_data
uart_pdata
[]
=
{
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
#if defined(CONFIG_TOUCHSCREEN_ADS7846)
...
...
@@ -223,8 +217,8 @@ void __init eukrea_mbimx27_baseboard_init(void)
mxc_gpio_setup_multiple_pins
(
eukrea_mbimx27_pins
,
ARRAY_SIZE
(
eukrea_mbimx27_pins
),
"MBIMX27"
);
mxc_register_device
(
&
imx2x_uart_device1
,
&
uart_pdata
[
0
]
);
mxc_register_device
(
&
imx2x_uart_device2
,
&
uart_pdata
[
1
]
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
mxc_register_device
(
&
mxc_fb_device
,
&
eukrea_mbimx27_fb_data
);
mxc_register_device
(
&
mxc_sdhc_device0
,
NULL
);
...
...
arch/arm/mach-imx/mach-cpuimx27.c
浏览文件 @
d5dac4a6
...
...
@@ -36,7 +36,6 @@
#include <mach/common.h>
#include <mach/hardware.h>
#include <mach/iomux-mx27.h>
#include <mach/imx-uart.h>
#include <mach/mxc_nand.h>
#include "devices-imx27.h"
...
...
@@ -111,12 +110,8 @@ static struct platform_device eukrea_cpuimx27_nor_mtd_device = {
.
resource
=
&
eukrea_cpuimx27_flash_resource
,
};
static
struct
imxuart_platform_data
uart_pdata
[]
=
{
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
const
struct
mxc_nand_platform_data
...
...
@@ -188,7 +183,7 @@ static void __init eukrea_cpuimx27_init(void)
mxc_gpio_setup_multiple_pins
(
eukrea_cpuimx27_pins
,
ARRAY_SIZE
(
eukrea_cpuimx27_pins
),
"CPUIMX27"
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
[
0
]
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_mxc_nand
(
&
cpuimx27_nand_board_info
);
...
...
@@ -203,7 +198,7 @@ static void __init eukrea_cpuimx27_init(void)
/* SDHC2 can be used for Wifi */
mxc_register_device
(
&
mxc_sdhc_device1
,
NULL
);
/* in which case UART4 is also used for Bluetooth */
mxc_register_device
(
&
imx2x_uart_device3
,
&
uart_pdata
[
1
]
);
imx27_add_imx_uart3
(
&
uart_pdata
);
#endif
#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE)
...
...
arch/arm/mach-imx/mach-imx27lite.c
浏览文件 @
d5dac4a6
...
...
@@ -22,9 +22,9 @@
#include <asm/mach/map.h>
#include <mach/hardware.h>
#include <mach/common.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx27.h>
#include "devices-imx27.h"
#include "devices.h"
static
unsigned
int
mx27lite_pins
[]
=
{
...
...
@@ -54,7 +54,7 @@ static unsigned int mx27lite_pins[] = {
PF23_AIN_FEC_TX_EN
,
};
static
struct
imxuart_platform_data
uart_pdata
=
{
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
...
...
@@ -66,7 +66,7 @@ static void __init mx27lite_init(void)
{
mxc_gpio_setup_multiple_pins
(
mx27lite_pins
,
ARRAY_SIZE
(
mx27lite_pins
),
"imx27lite"
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
);
imx27_add_imx_uart0
(
&
uart_pdata
);
platform_add_devices
(
platform_devices
,
ARRAY_SIZE
(
platform_devices
));
}
...
...
arch/arm/mach-imx/mach-mx27_3ds.c
浏览文件 @
d5dac4a6
...
...
@@ -27,9 +27,9 @@
#include <asm/mach/time.h>
#include <mach/hardware.h>
#include <mach/common.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx27.h>
#include "devices-imx27.h"
#include "devices.h"
static
unsigned
int
mx27pdk_pins
[]
=
{
...
...
@@ -59,7 +59,7 @@ static unsigned int mx27pdk_pins[] = {
PF23_AIN_FEC_TX_EN
,
};
static
struct
imxuart_platform_data
uart_pdata
=
{
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
...
...
@@ -71,7 +71,7 @@ static void __init mx27pdk_init(void)
{
mxc_gpio_setup_multiple_pins
(
mx27pdk_pins
,
ARRAY_SIZE
(
mx27pdk_pins
),
"mx27pdk"
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
);
imx27_add_imx_uart0
(
&
uart_pdata
);
platform_add_devices
(
platform_devices
,
ARRAY_SIZE
(
platform_devices
));
}
...
...
arch/arm/mach-imx/mach-mx27ads.c
浏览文件 @
d5dac4a6
...
...
@@ -28,7 +28,6 @@
#include <asm/mach/time.h>
#include <asm/mach/map.h>
#include <mach/gpio.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx27.h>
#include <mach/mxc_nand.h>
#include <mach/imxfb.h>
...
...
@@ -289,20 +288,8 @@ static struct platform_device *platform_devices[] __initdata = {
&
mxc_w1_master_device
,
};
static
struct
imxuart_platform_data
uart_pdata
[]
=
{
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
void
__init
mx27ads_board_init
(
void
)
...
...
@@ -310,12 +297,12 @@ static void __init mx27ads_board_init(void)
mxc_gpio_setup_multiple_pins
(
mx27ads_pins
,
ARRAY_SIZE
(
mx27ads_pins
),
"mx27ads"
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
[
0
]
);
mxc_register_device
(
&
imx2x_uart_device1
,
&
uart_pdata
[
1
]
);
mxc_register_device
(
&
imx2x_uart_device2
,
&
uart_pdata
[
2
]
);
mxc_register_device
(
&
imx2x_uart_device3
,
&
uart_pdata
[
3
]
);
mxc_register_device
(
&
imx2x_uart_device4
,
&
uart_pdata
[
4
]
);
mxc_register_device
(
&
imx2x_uart_device5
,
&
uart_pdata
[
5
]
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
imx27_add_imx_uart3
(
&
uart_pdata
);
imx27_add_imx_uart4
(
&
uart_pdata
);
imx27_add_imx_uart5
(
&
uart_pdata
);
imx27_add_mxc_nand
(
&
mx27ads_nand_board_info
);
/* only the i2c master 1 is used on this CPU card */
...
...
arch/arm/mach-imx/mach-mxt_td60.c
浏览文件 @
d5dac4a6
...
...
@@ -28,7 +28,6 @@
#include <asm/mach/time.h>
#include <asm/mach/map.h>
#include <linux/gpio.h>
#include <mach/imx-uart.h>
#include <mach/iomux-mx27.h>
#include <mach/mxc_nand.h>
#include <linux/i2c/pca953x.h>
...
...
@@ -236,14 +235,8 @@ static struct platform_device *platform_devices[] __initdata = {
&
mxc_fec_device
,
};
static
struct
imxuart_platform_data
uart_pdata
[]
=
{
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
void
__init
mxt_td60_board_init
(
void
)
...
...
@@ -251,9 +244,9 @@ static void __init mxt_td60_board_init(void)
mxc_gpio_setup_multiple_pins
(
mxt_td60_pins
,
ARRAY_SIZE
(
mxt_td60_pins
),
"MXT_TD60"
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
[
0
]
);
mxc_register_device
(
&
imx2x_uart_device1
,
&
uart_pdata
[
1
]
);
mxc_register_device
(
&
imx2x_uart_device2
,
&
uart_pdata
[
2
]
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
imx27_add_mxc_nand
(
&
mxt_td60_nand_board_info
);
i2c_register_board_info
(
0
,
mxt_td60_i2c_devices
,
...
...
arch/arm/mach-imx/mach-pca100.c
浏览文件 @
d5dac4a6
...
...
@@ -37,7 +37,6 @@
#include <mach/hardware.h>
#include <mach/iomux-mx27.h>
#include <asm/mach/time.h>
#include <mach/imx-uart.h>
#include <mach/audmux.h>
#include <mach/ssi.h>
#include <mach/mxc_nand.h>
...
...
@@ -130,7 +129,7 @@ static int pca100_pins[] = {
PD26_AF_USBH2_DATA5
,
};
static
struct
imxuart_platform_data
uart_pdata
=
{
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
...
...
@@ -318,7 +317,7 @@ static void __init pca100_init(void)
mxc_register_device
(
&
imx_ssi_device0
,
&
pca100_ssi_pdata
);
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
);
imx27_add_imx_uart0
(
&
uart_pdata
);
mxc_gpio_mode
(
GPIO_PORTC
|
29
|
GPIO_GPIO
|
GPIO_IN
);
mxc_register_device
(
&
mxc_sdhc_device1
,
&
sdhc_pdata
);
...
...
arch/arm/mach-imx/mach-pcm038.c
浏览文件 @
d5dac4a6
...
...
@@ -36,7 +36,6 @@
#include <mach/common.h>
#include <mach/hardware.h>
#include <mach/iomux-mx27.h>
#include <mach/imx-uart.h>
#include <mach/mxc_nand.h>
#include <mach/mxc_ehci.h>
#include <mach/ulpi.h>
...
...
@@ -161,14 +160,8 @@ static struct platform_device pcm038_nor_mtd_device = {
.
resource
=
&
pcm038_flash_resource
,
};
static
struct
imxuart_platform_data
uart_pdata
[]
=
{
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
},
static
const
struct
imxuart_platform_data
uart_pdata
__initconst
=
{
.
flags
=
IMXUART_HAVE_RTSCTS
,
};
static
const
struct
mxc_nand_platform_data
...
...
@@ -305,9 +298,9 @@ static void __init pcm038_init(void)
pcm038_init_sram
();
mxc_register_device
(
&
imx2x_uart_device0
,
&
uart_pdata
[
0
]
);
mxc_register_device
(
&
imx2x_uart_device1
,
&
uart_pdata
[
1
]
);
mxc_register_device
(
&
imx2x_uart_device2
,
&
uart_pdata
[
2
]
);
imx27_add_imx_uart0
(
&
uart_pdata
);
imx27_add_imx_uart1
(
&
uart_pdata
);
imx27_add_imx_uart2
(
&
uart_pdata
);
mxc_gpio_mode
(
PE16_AF_OWIRE
);
imx27_add_mxc_nand
(
&
pcm038_nand_board_info
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录