Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
6139dbbb
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
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看板
提交
6139dbbb
编写于
3月 02, 2007
作者:
R
Russell King
提交者:
Russell King
3月 02, 2007
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'omap-fixes' of master.kernel.org:/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
上级
9623b373
1f4d1774
变更
15
隐藏空白更改
内联
并排
Showing
15 changed file
with
72 addition
and
55 deletion
+72
-55
arch/arm/mach-omap1/board-nokia770.c
arch/arm/mach-omap1/board-nokia770.c
+3
-1
arch/arm/mach-omap1/clock.c
arch/arm/mach-omap1/clock.c
+13
-7
arch/arm/mach-omap1/irq.c
arch/arm/mach-omap1/irq.c
+1
-1
arch/arm/mach-omap1/pm.c
arch/arm/mach-omap1/pm.c
+9
-3
arch/arm/mach-omap1/serial.c
arch/arm/mach-omap1/serial.c
+9
-9
arch/arm/mach-omap2/board-h4.c
arch/arm/mach-omap2/board-h4.c
+7
-6
arch/arm/mach-omap2/timer-gp.c
arch/arm/mach-omap2/timer-gp.c
+2
-1
arch/arm/plat-omap/dma.c
arch/arm/plat-omap/dma.c
+3
-11
arch/arm/plat-omap/dmtimer.c
arch/arm/plat-omap/dmtimer.c
+4
-2
arch/arm/plat-omap/gpio.c
arch/arm/plat-omap/gpio.c
+5
-4
arch/arm/plat-omap/mcbsp.c
arch/arm/plat-omap/mcbsp.c
+1
-1
arch/arm/plat-omap/mux.c
arch/arm/plat-omap/mux.c
+2
-2
include/asm-arm/arch-omap/entry-macro.S
include/asm-arm/arch-omap/entry-macro.S
+6
-0
include/asm-arm/arch-omap/memory.h
include/asm-arm/arch-omap/memory.h
+1
-1
include/asm-arm/arch-omap/omap-alsa.h
include/asm-arm/arch-omap/omap-alsa.h
+6
-6
未找到文件。
arch/arm/mach-omap1/board-nokia770.c
浏览文件 @
6139dbbb
...
...
@@ -16,6 +16,8 @@
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
#include <linux/workqueue.h>
#include <linux/delay.h>
#include <asm/hardware.h>
#include <asm/mach-types.h>
...
...
@@ -103,7 +105,7 @@ static struct ads7846_platform_data nokia770_ads7846_platform_data __initdata =
static
struct
spi_board_info
nokia770_spi_board_info
[]
__initdata
=
{
[
0
]
=
{
.
modalias
=
"lcd_lph8923
"
,
.
modalias
=
"lcd_mipid
"
,
.
bus_num
=
2
,
.
chip_select
=
3
,
.
max_speed_hz
=
12000000
,
...
...
arch/arm/mach-omap1/clock.c
浏览文件 @
6139dbbb
...
...
@@ -432,8 +432,7 @@ static int omap1_clk_enable(struct clk *clk)
}
if
(
clk
->
flags
&
CLOCK_NO_IDLE_PARENT
)
if
(
!
cpu_is_omap24xx
())
omap1_clk_deny_idle
(
clk
->
parent
);
omap1_clk_deny_idle
(
clk
->
parent
);
}
ret
=
clk
->
enable
(
clk
);
...
...
@@ -454,8 +453,7 @@ static void omap1_clk_disable(struct clk *clk)
if
(
likely
(
clk
->
parent
))
{
omap1_clk_disable
(
clk
->
parent
);
if
(
clk
->
flags
&
CLOCK_NO_IDLE_PARENT
)
if
(
!
cpu_is_omap24xx
())
omap1_clk_allow_idle
(
clk
->
parent
);
omap1_clk_allow_idle
(
clk
->
parent
);
}
}
}
...
...
@@ -471,7 +469,7 @@ static int omap1_clk_enable_generic(struct clk *clk)
if
(
unlikely
(
clk
->
enable_reg
==
0
))
{
printk
(
KERN_ERR
"clock.c: Enable for %s without enable code
\n
"
,
clk
->
name
);
return
0
;
return
-
EINVAL
;
}
if
(
clk
->
flags
&
ENABLE_REG_32BIT
)
{
...
...
@@ -651,10 +649,18 @@ int __init omap1_clk_init(void)
int
crystal_type
=
0
;
/* Default 12 MHz */
u32
reg
;
#ifdef CONFIG_DEBUG_LL
/* Resets some clocks that may be left on from bootloader,
* but leaves serial clocks on.
*/
omap_writel
(
0x3
<<
29
,
MOD_CONF_CTRL_0
);
#endif
/* USB_REQ_EN will be disabled later if necessary (usb_dc_ck) */
reg
=
omap_readw
(
SOFT_REQ_REG
)
&
(
1
<<
4
);
omap_writew
(
reg
,
SOFT_REQ_REG
);
omap_writew
(
0
,
SOFT_REQ_REG2
);
if
(
!
cpu_is_omap15xx
())
omap_writew
(
0
,
SOFT_REQ_REG2
);
clk_init
(
&
omap1_clk_functions
);
...
...
@@ -685,7 +691,7 @@ int __init omap1_clk_init(void)
info
=
omap_get_config
(
OMAP_TAG_CLOCK
,
struct
omap_clock_config
);
if
(
info
!=
NULL
)
{
if
(
!
cpu_is_omap15
10
())
if
(
!
cpu_is_omap15
xx
())
crystal_type
=
info
->
system_clock_type
;
}
...
...
arch/arm/mach-omap1/irq.c
浏览文件 @
6139dbbb
...
...
@@ -238,7 +238,7 @@ void __init omap_init_irq(void)
if
(
cpu_is_omap730
())
omap_unmask_irq
(
INT_730_IH2_IRQ
);
else
if
(
cpu_is_omap15
10
())
else
if
(
cpu_is_omap15
xx
())
omap_unmask_irq
(
INT_1510_IH2_IRQ
);
else
if
(
cpu_is_omap16xx
())
omap_unmask_irq
(
INT_1610_IH2_IRQ
);
...
...
arch/arm/mach-omap1/pm.c
浏览文件 @
6139dbbb
...
...
@@ -256,7 +256,8 @@ void omap_pm_suspend(void)
tps65010_set_led
(
LED1
,
OFF
);
}
omap_writew
(
0xffff
,
ULPD_SOFT_DISABLE_REQ_REG
);
if
(
!
cpu_is_omap15xx
())
omap_writew
(
0xffff
,
ULPD_SOFT_DISABLE_REQ_REG
);
/*
* Step 1: turn off interrupts (FIXME: NOTE: already disabled)
...
...
@@ -434,7 +435,8 @@ void omap_pm_suspend(void)
MPUI1610_RESTORE
(
OMAP_IH2_3_MIR
);
}
omap_writew
(
0
,
ULPD_SOFT_DISABLE_REQ_REG
);
if
(
!
cpu_is_omap15xx
())
omap_writew
(
0
,
ULPD_SOFT_DISABLE_REQ_REG
);
/*
* Reenable interrupts
...
...
@@ -704,6 +706,8 @@ static struct pm_ops omap_pm_ops ={
static
int
__init
omap_pm_init
(
void
)
{
int
error
;
printk
(
"Power Management for TI OMAP.
\n
"
);
/*
...
...
@@ -760,7 +764,9 @@ static int __init omap_pm_init(void)
omap_pm_init_proc
();
#endif
subsys_create_file
(
&
power_subsys
,
&
sleep_while_idle_attr
);
error
=
subsys_create_file
(
&
power_subsys
,
&
sleep_while_idle_attr
);
if
(
error
)
printk
(
KERN_ERR
"subsys_create_file failed: %d
\n
"
,
error
);
if
(
cpu_is_omap16xx
())
{
/* configure LOW_PWR pin */
...
...
arch/arm/mach-omap1/serial.c
浏览文件 @
6139dbbb
/*
* linux/arch/arm/mach-omap1/serial.c
*
* OMAP1
CPU identification code
* OMAP1
serial support.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
...
...
@@ -59,7 +59,7 @@ static void __init omap_serial_reset(struct plat_serial8250_port *p)
omap_serial_outp
(
p
,
UART_OMAP_SCR
,
0x08
);
/* TX watermark */
omap_serial_outp
(
p
,
UART_OMAP_MDR1
,
0x00
);
/* enable UART */
if
(
!
cpu_is_omap15
10
())
{
if
(
!
cpu_is_omap15
xx
())
{
omap_serial_outp
(
p
,
UART_OMAP_SYSC
,
0x01
);
while
(
!
(
omap_serial_in
(
p
,
UART_OMAP_SYSC
)
&
0x01
));
}
...
...
@@ -121,7 +121,7 @@ void __init omap_serial_init(void)
serial_platform_data
[
1
].
irq
=
INT_730_UART_MODEM_IRDA_2
;
}
if
(
cpu_is_omap15
10
())
{
if
(
cpu_is_omap15
xx
())
{
serial_platform_data
[
0
].
uartclk
=
OMAP1510_BASE_BAUD
*
16
;
serial_platform_data
[
1
].
uartclk
=
OMAP1510_BASE_BAUD
*
16
;
serial_platform_data
[
2
].
uartclk
=
OMAP1510_BASE_BAUD
*
16
;
...
...
@@ -147,10 +147,10 @@ void __init omap_serial_init(void)
printk
(
"Could not get uart1_ck
\n
"
);
else
{
clk_enable
(
uart1_ck
);
if
(
cpu_is_omap15
10
())
if
(
cpu_is_omap15
xx
())
clk_set_rate
(
uart1_ck
,
12000000
);
}
if
(
cpu_is_omap15
10
())
{
if
(
cpu_is_omap15
xx
())
{
omap_cfg_reg
(
UART1_TX
);
omap_cfg_reg
(
UART1_RTS
);
if
(
machine_is_omap_innovator
())
{
...
...
@@ -167,12 +167,12 @@ void __init omap_serial_init(void)
printk
(
"Could not get uart2_ck
\n
"
);
else
{
clk_enable
(
uart2_ck
);
if
(
cpu_is_omap15
10
())
if
(
cpu_is_omap15
xx
())
clk_set_rate
(
uart2_ck
,
12000000
);
else
clk_set_rate
(
uart2_ck
,
48000000
);
}
if
(
cpu_is_omap15
10
())
{
if
(
cpu_is_omap15
xx
())
{
omap_cfg_reg
(
UART2_TX
);
omap_cfg_reg
(
UART2_RTS
);
if
(
machine_is_omap_innovator
())
{
...
...
@@ -189,10 +189,10 @@ void __init omap_serial_init(void)
printk
(
"Could not get uart3_ck
\n
"
);
else
{
clk_enable
(
uart3_ck
);
if
(
cpu_is_omap15
10
())
if
(
cpu_is_omap15
xx
())
clk_set_rate
(
uart3_ck
,
12000000
);
}
if
(
cpu_is_omap15
10
())
{
if
(
cpu_is_omap15
xx
())
{
omap_cfg_reg
(
UART3_TX
);
omap_cfg_reg
(
UART3_RX
);
}
...
...
arch/arm/mach-omap2/board-h4.c
浏览文件 @
6139dbbb
...
...
@@ -39,7 +39,6 @@
#include "prcm-regs.h"
#include <asm/io.h>
#include <asm/delay.h>
static
unsigned
int
row_gpios
[
6
]
=
{
88
,
89
,
124
,
11
,
6
,
96
};
static
unsigned
int
col_gpios
[
7
]
=
{
90
,
91
,
100
,
36
,
12
,
97
,
98
};
...
...
@@ -179,9 +178,11 @@ static int h4_select_irda(struct device *dev, int state)
return
err
;
}
static
void
set_trans_mode
(
void
*
data
)
static
void
set_trans_mode
(
struct
work_struct
*
work
)
{
int
*
mode
=
data
;
struct
omap_irda_config
*
irda_config
=
container_of
(
work
,
struct
omap_irda_config
,
gpio_expa
.
work
);
int
mode
=
irda_config
->
mode
;
unsigned
char
expa
;
int
err
=
0
;
...
...
@@ -191,7 +192,7 @@ static void set_trans_mode(void *data)
expa
&=
~
0x01
;
if
(
!
(
*
mode
&
IR_SIRMODE
))
{
/* MIR/FIR */
if
(
!
(
mode
&
IR_SIRMODE
))
{
/* MIR/FIR */
expa
|=
0x01
;
}
...
...
@@ -204,9 +205,9 @@ static int h4_transceiver_mode(struct device *dev, int mode)
{
struct
omap_irda_config
*
irda_config
=
dev
->
platform_data
;
irda_config
->
mode
=
mode
;
cancel_delayed_work
(
&
irda_config
->
gpio_expa
);
PREPARE_WORK
(
&
irda_config
->
gpio_expa
,
set_trans_mode
,
&
mode
);
#error this is not permitted - mode is an argument variable
PREPARE_DELAYED_WORK
(
&
irda_config
->
gpio_expa
,
set_trans_mode
);
schedule_delayed_work
(
&
irda_config
->
gpio_expa
,
0
);
return
0
;
...
...
arch/arm/mach-omap2/timer-gp.c
浏览文件 @
6139dbbb
...
...
@@ -24,6 +24,7 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/irq.h>
#include <asm/mach/time.h>
#include <asm/arch/dmtimer.h>
...
...
@@ -64,7 +65,7 @@ static void __init omap2_gp_timer_init(void)
BUG_ON
(
gptimer
==
NULL
);
omap_dm_timer_set_source
(
gptimer
,
OMAP_TIMER_SRC_SYS_CLK
);
tick_period
=
clk_get_rate
(
omap_dm_timer_get_fclk
(
gptimer
))
/
100
;
tick_period
=
clk_get_rate
(
omap_dm_timer_get_fclk
(
gptimer
))
/
HZ
;
tick_period
-=
1
;
setup_irq
(
omap_dm_timer_get_irq
(
gptimer
),
&
omap2_gp_timer_irq
);
...
...
arch/arm/plat-omap/dma.c
浏览文件 @
6139dbbb
...
...
@@ -557,7 +557,7 @@ int omap_request_dma(int dev_id, const char *dev_name,
omap_enable_channel_irq
(
free_ch
);
/* Clear the CSR register and IRQ status register */
OMAP_DMA_CSR_REG
(
free_ch
)
=
OMAP2_DMA_CSR_CLEAR_MASK
;
omap_writel
(
~
0x0
,
OMAP_DMA4_IRQSTATUS_L0
);
omap_writel
(
1
<<
free_ch
,
OMAP_DMA4_IRQSTATUS_L0
);
}
*
dma_ch_out
=
free_ch
;
...
...
@@ -597,10 +597,7 @@ void omap_free_dma(int lch)
/* Clear the CSR register and IRQ status register */
OMAP_DMA_CSR_REG
(
lch
)
=
OMAP2_DMA_CSR_CLEAR_MASK
;
val
=
omap_readl
(
OMAP_DMA4_IRQSTATUS_L0
);
val
|=
1
<<
lch
;
omap_writel
(
val
,
OMAP_DMA4_IRQSTATUS_L0
);
omap_writel
(
1
<<
lch
,
OMAP_DMA4_IRQSTATUS_L0
);
/* Disable all DMA interrupts for the channel. */
OMAP_DMA_CICR_REG
(
lch
)
=
0
;
...
...
@@ -927,7 +924,6 @@ static irqreturn_t omap1_dma_irq_handler(int irq, void *dev_id)
static
int
omap2_dma_handle_ch
(
int
ch
)
{
u32
status
=
OMAP_DMA_CSR_REG
(
ch
);
u32
val
;
if
(
!
status
)
return
0
;
...
...
@@ -948,11 +944,7 @@ static int omap2_dma_handle_ch(int ch)
dma_chan
[
ch
].
dev_id
);
OMAP_DMA_CSR_REG
(
ch
)
=
OMAP2_DMA_CSR_CLEAR_MASK
;
val
=
omap_readl
(
OMAP_DMA4_IRQSTATUS_L0
);
/* ch in this function is from 0-31 while in register it is 1-32 */
val
=
1
<<
(
ch
);
omap_writel
(
val
,
OMAP_DMA4_IRQSTATUS_L0
);
omap_writel
(
1
<<
ch
,
OMAP_DMA4_IRQSTATUS_L0
);
if
(
likely
(
dma_chan
[
ch
].
callback
!=
NULL
))
dma_chan
[
ch
].
callback
(
ch
,
status
,
dma_chan
[
ch
].
data
);
...
...
arch/arm/plat-omap/dmtimer.c
浏览文件 @
6139dbbb
...
...
@@ -90,8 +90,8 @@ static struct omap_dm_timer dm_timers[] = {
{
.
phys_base
=
0xfffb2c00
,
.
irq
=
INT_1610_GPTIMER4
},
{
.
phys_base
=
0xfffb3400
,
.
irq
=
INT_1610_GPTIMER5
},
{
.
phys_base
=
0xfffb3c00
,
.
irq
=
INT_1610_GPTIMER6
},
{
.
phys_base
=
0xfffb
4
400
,
.
irq
=
INT_1610_GPTIMER7
},
{
.
phys_base
=
0xfffb
4c
00
,
.
irq
=
INT_1610_GPTIMER8
},
{
.
phys_base
=
0xfffb
7
400
,
.
irq
=
INT_1610_GPTIMER7
},
{
.
phys_base
=
0xfffb
d4
00
,
.
irq
=
INT_1610_GPTIMER8
},
};
#elif defined(CONFIG_ARCH_OMAP2)
...
...
@@ -314,6 +314,8 @@ struct clk *omap_dm_timer_get_fclk(struct omap_dm_timer *timer)
__u32
omap_dm_timer_modify_idlect_mask
(
__u32
inputmask
)
{
BUG
();
return
0
;
}
#endif
...
...
arch/arm/plat-omap/gpio.c
浏览文件 @
6139dbbb
...
...
@@ -974,10 +974,11 @@ static struct irq_chip gpio_irq_chip = {
};
static
struct
irq_chip
mpuio_irq_chip
=
{
.
name
=
"MPUIO"
,
.
ack
=
mpuio_ack_irq
,
.
mask
=
mpuio_mask_irq
,
.
unmask
=
mpuio_unmask_irq
.
name
=
"MPUIO"
,
.
ack
=
mpuio_ack_irq
,
.
mask
=
mpuio_mask_irq
,
.
unmask
=
mpuio_unmask_irq
,
.
set_type
=
gpio_irq_type
,
};
static
int
initialized
;
...
...
arch/arm/plat-omap/mcbsp.c
浏览文件 @
6139dbbb
...
...
@@ -20,8 +20,8 @@
#include <linux/interrupt.h>
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/delay.h>
#include <asm/delay.h>
#include <asm/io.h>
#include <asm/irq.h>
...
...
arch/arm/plat-omap/mux.c
浏览文件 @
6139dbbb
...
...
@@ -116,7 +116,7 @@ int __init_or_module omap_cfg_reg(const unsigned long index)
}
/* Check for pull up or pull down selection on 1610 */
if
(
!
cpu_is_omap15
10
())
{
if
(
!
cpu_is_omap15
xx
())
{
if
(
cfg
->
pu_pd_reg
&&
cfg
->
pull_val
)
{
spin_lock_irqsave
(
&
mux_spin_lock
,
flags
);
pu_pd_orig
=
omap_readl
(
cfg
->
pu_pd_reg
);
...
...
@@ -172,7 +172,7 @@ int __init_or_module omap_cfg_reg(const unsigned long index)
printk
(
" %s (0x%08x) = 0x%08x -> 0x%08x
\n
"
,
cfg
->
mux_reg_name
,
cfg
->
mux_reg
,
reg_orig
,
reg
);
if
(
!
cpu_is_omap15
10
())
{
if
(
!
cpu_is_omap15
xx
())
{
if
(
cfg
->
pu_pd_reg
&&
cfg
->
pull_val
)
{
printk
(
" %s (0x%08x) = 0x%08x -> 0x%08x
\n
"
,
cfg
->
pu_pd_name
,
cfg
->
pu_pd_reg
,
...
...
include/asm-arm/arch-omap/entry-macro.S
浏览文件 @
6139dbbb
...
...
@@ -61,6 +61,12 @@
.
macro
disable_fiq
.
endm
.
macro
get_irqnr_preamble
,
base
,
tmp
.
endm
.
macro
arch_ret_to_user
,
tmp1
,
tmp2
.
endm
.
macro
get_irqnr_and_base
,
irqnr
,
irqstat
,
base
,
tmp
ldr
\
base
,
=
VA_IC_BASE
ldr
\
irqnr
,
[
\
base
,
#
0x98
]
/*
IRQ
pending
reg
1
*/
...
...
include/asm-arm/arch-omap/memory.h
浏览文件 @
6139dbbb
...
...
@@ -70,7 +70,7 @@
#define virt_to_lbus(x) ((x) - PAGE_OFFSET + OMAP1510_LB_OFFSET)
#define lbus_to_virt(x) ((x) - OMAP1510_LB_OFFSET + PAGE_OFFSET)
#define is_lbus_device(dev) (cpu_is_omap15
10
() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
#define is_lbus_device(dev) (cpu_is_omap15
xx
() && dev && (strncmp(dev->bus_id, "ohci", 4) == 0))
#define __arch_page_to_dma(dev, page) ({is_lbus_device(dev) ? \
(dma_addr_t)virt_to_lbus(page_address(page)) : \
...
...
include/asm-arm/arch-omap/omap-alsa.h
浏览文件 @
6139dbbb
...
...
@@ -65,7 +65,7 @@ struct audio_stream {
int
period
;
/* current transfer period */
int
periods
;
/* current count of periods registerd in the DMA engine */
spinlock_t
dma_lock
;
/* for locking in DMA operations */
s
nd_pcm_substream_t
*
stream
;
/* the pcm stream */
s
truct
snd_pcm_substream
*
stream
;
/* the pcm stream */
unsigned
linked
:
1
;
/* dma channels linked */
int
offset
;
/* store start position of the last period in the alsa buffer */
int
(
*
hw_start
)(
void
);
/* interface to start HW interface, e.g. McBSP */
...
...
@@ -76,8 +76,8 @@ struct audio_stream {
* Alsa card structure for aic23
*/
struct
snd_card_omap_codec
{
s
nd_card_t
*
card
;
s
nd_pcm_t
*
pcm
;
s
truct
snd_card
*
card
;
s
truct
snd_pcm
*
pcm
;
long
samplerate
;
struct
audio_stream
s
[
2
];
/* playback & capture */
};
...
...
@@ -89,9 +89,9 @@ struct snd_card_omap_codec {
struct
omap_alsa_codec_config
{
char
*
name
;
struct
omap_mcbsp_reg_cfg
*
mcbsp_regs_alsa
;
s
nd_pcm_hw_constraint_list_
t
*
hw_constraints_rates
;
s
nd_pcm_hardware_t
*
snd_omap_alsa_playback
;
s
nd_pcm_hardware_t
*
snd_omap_alsa_capture
;
s
truct
snd_pcm_hw_constraint_lis
t
*
hw_constraints_rates
;
s
truct
snd_pcm_hardware
*
snd_omap_alsa_playback
;
s
truct
snd_pcm_hardware
*
snd_omap_alsa_capture
;
void
(
*
codec_configure_dev
)(
void
);
void
(
*
codec_set_samplerate
)(
long
);
void
(
*
codec_clock_setup
)(
void
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录