Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
060c83fa
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看板
提交
060c83fa
编写于
9月 27, 2013
作者:
L
Linus Walleij
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'ixp4-cleanup' into devel
上级
44d94e8d
098e30f6
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
160 addition
and
117 deletion
+160
-117
arch/arm/mach-ixp4xx/common.c
arch/arm/mach-ixp4xx/common.c
+38
-11
arch/arm/mach-ixp4xx/dsmg600-setup.c
arch/arm/mach-ixp4xx/dsmg600-setup.c
+38
-27
arch/arm/mach-ixp4xx/include/mach/platform.h
arch/arm/mach-ixp4xx/include/mach/platform.h
+0
-39
arch/arm/mach-ixp4xx/ixdp425-setup.c
arch/arm/mach-ixp4xx/ixdp425-setup.c
+5
-3
arch/arm/mach-ixp4xx/nas100d-setup.c
arch/arm/mach-ixp4xx/nas100d-setup.c
+30
-19
arch/arm/mach-ixp4xx/nslu2-setup.c
arch/arm/mach-ixp4xx/nslu2-setup.c
+12
-5
drivers/input/misc/ixp4xx-beeper.c
drivers/input/misc/ixp4xx-beeper.c
+16
-9
drivers/ptp/ptp_ixp46x.c
drivers/ptp/ptp_ixp46x.c
+8
-1
drivers/staging/media/lirc/lirc_serial.c
drivers/staging/media/lirc/lirc_serial.c
+13
-3
未找到文件。
arch/arm/mach-ixp4xx/common.c
浏览文件 @
060c83fa
...
...
@@ -81,6 +81,44 @@ void __init ixp4xx_map_io(void)
iotable_init
(
ixp4xx_io_desc
,
ARRAY_SIZE
(
ixp4xx_io_desc
));
}
/*
* GPIO-functions
*/
/*
* The following converted to the real HW bits the gpio_line_config
*/
/* GPIO pin types */
#define IXP4XX_GPIO_OUT 0x1
#define IXP4XX_GPIO_IN 0x2
/* GPIO signal types */
#define IXP4XX_GPIO_LOW 0
#define IXP4XX_GPIO_HIGH 1
/* GPIO Clocks */
#define IXP4XX_GPIO_CLK_0 14
#define IXP4XX_GPIO_CLK_1 15
static
void
gpio_line_config
(
u8
line
,
u32
direction
)
{
if
(
direction
==
IXP4XX_GPIO_IN
)
*
IXP4XX_GPIO_GPOER
|=
(
1
<<
line
);
else
*
IXP4XX_GPIO_GPOER
&=
~
(
1
<<
line
);
}
static
void
gpio_line_get
(
u8
line
,
int
*
value
)
{
*
value
=
(
*
IXP4XX_GPIO_GPINR
>>
line
)
&
0x1
;
}
static
void
gpio_line_set
(
u8
line
,
int
value
)
{
if
(
value
==
IXP4XX_GPIO_HIGH
)
*
IXP4XX_GPIO_GPOUTR
|=
(
1
<<
line
);
else
if
(
value
==
IXP4XX_GPIO_LOW
)
*
IXP4XX_GPIO_GPOUTR
&=
~
(
1
<<
line
);
}
/*************************************************************************
* IXP4xx chipset IRQ handling
...
...
@@ -117,17 +155,6 @@ static int ixp4xx_gpio_to_irq(struct gpio_chip *chip, unsigned gpio)
return
-
EINVAL
;
}
int
irq_to_gpio
(
unsigned
int
irq
)
{
int
gpio
=
(
irq
<
32
)
?
irq2gpio
[
irq
]
:
-
EINVAL
;
if
(
gpio
==
-
1
)
return
-
EINVAL
;
return
gpio
;
}
EXPORT_SYMBOL
(
irq_to_gpio
);
static
int
ixp4xx_set_irq_type
(
struct
irq_data
*
d
,
unsigned
int
type
)
{
int
line
=
irq2gpio
[
d
->
irq
];
...
...
arch/arm/mach-ixp4xx/dsmg600-setup.c
浏览文件 @
060c83fa
...
...
@@ -26,6 +26,7 @@
#include <linux/reboot.h>
#include <linux/i2c.h>
#include <linux/i2c-gpio.h>
#include <linux/gpio.h>
#include <mach/hardware.h>
...
...
@@ -161,11 +162,8 @@ static struct platform_device *dsmg600_devices[] __initdata = {
static
void
dsmg600_power_off
(
void
)
{
/* enable the pwr cntl gpio */
gpio_line_config
(
DSMG600_PO_GPIO
,
IXP4XX_GPIO_OUT
);
/* poweroff */
gpio_line_set
(
DSMG600_PO_GPIO
,
IXP4XX_GPIO_HIGH
);
/* enable the pwr cntl and drive it high */
gpio_direction_output
(
DSMG600_PO_GPIO
,
1
);
}
/* This is used to make sure the power-button pusher is serious. The button
...
...
@@ -202,7 +200,7 @@ static void dsmg600_power_handler(unsigned long data)
ctrl_alt_del
();
/* Change the state of the power LED to "blink" */
gpio_
line_set
(
DSMG600_LED_PWR_GPIO
,
IXP4XX_GPIO_LOW
);
gpio_
set_value
(
DSMG600_LED_PWR_GPIO
,
0
);
}
else
{
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
}
...
...
@@ -228,6 +226,40 @@ static void __init dsmg600_timer_init(void)
ixp4xx_timer_init
();
}
static
int
__init
dsmg600_gpio_init
(
void
)
{
if
(
!
machine_is_dsmg600
())
return
0
;
gpio_request
(
DSMG600_RB_GPIO
,
"reset button"
);
if
(
request_irq
(
gpio_to_irq
(
DSMG600_RB_GPIO
),
&
dsmg600_reset_handler
,
IRQF_DISABLED
|
IRQF_TRIGGER_LOW
,
"DSM-G600 reset button"
,
NULL
)
<
0
)
{
printk
(
KERN_DEBUG
"Reset Button IRQ %d not available
\n
"
,
gpio_to_irq
(
DSMG600_RB_GPIO
));
}
/*
* The power button on the D-Link DSM-G600 is on GPIO 15, but
* it cannot handle interrupts on that GPIO line. So we'll
* have to poll it with a kernel timer.
*/
/* Make sure that the power button GPIO is set up as an input */
gpio_request
(
DSMG600_PB_GPIO
,
"power button"
);
gpio_direction_input
(
DSMG600_PB_GPIO
);
/* Request poweroff GPIO line */
gpio_request
(
DSMG600_PO_GPIO
,
"power off button"
);
/* Set the initial value for the power button IRQ handler */
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
mod_timer
(
&
dsmg600_power_timer
,
jiffies
+
msecs_to_jiffies
(
500
));
return
0
;
}
device_initcall
(
dsmg600_gpio_init
);
static
void
__init
dsmg600_init
(
void
)
{
ixp4xx_sys_init
();
...
...
@@ -251,27 +283,6 @@ static void __init dsmg600_init(void)
platform_add_devices
(
dsmg600_devices
,
ARRAY_SIZE
(
dsmg600_devices
));
pm_power_off
=
dsmg600_power_off
;
if
(
request_irq
(
gpio_to_irq
(
DSMG600_RB_GPIO
),
&
dsmg600_reset_handler
,
IRQF_DISABLED
|
IRQF_TRIGGER_LOW
,
"DSM-G600 reset button"
,
NULL
)
<
0
)
{
printk
(
KERN_DEBUG
"Reset Button IRQ %d not available
\n
"
,
gpio_to_irq
(
DSMG600_RB_GPIO
));
}
/* The power button on the D-Link DSM-G600 is on GPIO 15, but
* it cannot handle interrupts on that GPIO line. So we'll
* have to poll it with a kernel timer.
*/
/* Make sure that the power button GPIO is set up as an input */
gpio_line_config
(
DSMG600_PB_GPIO
,
IXP4XX_GPIO_IN
);
/* Set the initial value for the power button IRQ handler */
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
mod_timer
(
&
dsmg600_power_timer
,
jiffies
+
msecs_to_jiffies
(
500
));
}
MACHINE_START
(
DSMG600
,
"D-Link DSM-G600 RevA"
)
...
...
arch/arm/mach-ixp4xx/include/mach/platform.h
浏览文件 @
060c83fa
...
...
@@ -131,44 +131,5 @@ struct pci_sys_data;
extern
int
ixp4xx_setup
(
int
nr
,
struct
pci_sys_data
*
sys
);
extern
struct
pci_ops
ixp4xx_ops
;
/*
* GPIO-functions
*/
/*
* The following converted to the real HW bits the gpio_line_config
*/
/* GPIO pin types */
#define IXP4XX_GPIO_OUT 0x1
#define IXP4XX_GPIO_IN 0x2
/* GPIO signal types */
#define IXP4XX_GPIO_LOW 0
#define IXP4XX_GPIO_HIGH 1
/* GPIO Clocks */
#define IXP4XX_GPIO_CLK_0 14
#define IXP4XX_GPIO_CLK_1 15
static
inline
void
gpio_line_config
(
u8
line
,
u32
direction
)
{
if
(
direction
==
IXP4XX_GPIO_IN
)
*
IXP4XX_GPIO_GPOER
|=
(
1
<<
line
);
else
*
IXP4XX_GPIO_GPOER
&=
~
(
1
<<
line
);
}
static
inline
void
gpio_line_get
(
u8
line
,
int
*
value
)
{
*
value
=
(
*
IXP4XX_GPIO_GPINR
>>
line
)
&
0x1
;
}
static
inline
void
gpio_line_set
(
u8
line
,
int
value
)
{
if
(
value
==
IXP4XX_GPIO_HIGH
)
*
IXP4XX_GPIO_GPOUTR
|=
(
1
<<
line
);
else
if
(
value
==
IXP4XX_GPIO_LOW
)
*
IXP4XX_GPIO_GPOUTR
&=
~
(
1
<<
line
);
}
#endif // __ASSEMBLY__
arch/arm/mach-ixp4xx/ixdp425-setup.c
浏览文件 @
060c83fa
...
...
@@ -20,6 +20,7 @@
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <asm/types.h>
#include <asm/setup.h>
#include <asm/memory.h>
...
...
@@ -80,10 +81,10 @@ ixdp425_flash_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
if
(
ctrl
&
NAND_CTRL_CHANGE
)
{
if
(
ctrl
&
NAND_NCE
)
{
gpio_
line_set
(
IXDP425_NAND_NCE_PIN
,
IXP4XX_GPIO_LOW
);
gpio_
set_value
(
IXDP425_NAND_NCE_PIN
,
0
);
udelay
(
5
);
}
else
gpio_
line_set
(
IXDP425_NAND_NCE_PIN
,
IXP4XX_GPIO_HIGH
);
gpio_
set_value
(
IXDP425_NAND_NCE_PIN
,
1
);
offset
=
(
ctrl
&
NAND_CLE
)
?
IXDP425_NAND_CMD_BYTE
:
0
;
offset
|=
(
ctrl
&
NAND_ALE
)
?
IXDP425_NAND_ADDR_BYTE
:
0
;
...
...
@@ -227,7 +228,8 @@ static void __init ixdp425_init(void)
ixdp425_flash_nand_resource
.
start
=
IXP4XX_EXP_BUS_BASE
(
3
),
ixdp425_flash_nand_resource
.
end
=
IXP4XX_EXP_BUS_BASE
(
3
)
+
0x10
-
1
;
gpio_line_config
(
IXDP425_NAND_NCE_PIN
,
IXP4XX_GPIO_OUT
);
gpio_request
(
IXDP425_NAND_NCE_PIN
,
"NAND NCE pin"
);
gpio_direction_output
(
IXDP425_NAND_NCE_PIN
,
0
);
/* Configure expansion bus for NAND Flash */
*
IXP4XX_EXP_CS3
=
IXP4XX_EXP_BUS_CS_EN
|
...
...
arch/arm/mach-ixp4xx/nas100d-setup.c
浏览文件 @
060c83fa
...
...
@@ -184,11 +184,8 @@ static void nas100d_power_off(void)
{
/* This causes the box to drop the power and go dead. */
/* enable the pwr cntl gpio */
gpio_line_config
(
NAS100D_PO_GPIO
,
IXP4XX_GPIO_OUT
);
/* do the deed */
gpio_line_set
(
NAS100D_PO_GPIO
,
IXP4XX_GPIO_HIGH
);
/* enable the pwr cntl gpio and assert power off */
gpio_direction_output
(
NAS100D_PO_GPIO
,
1
);
}
/* This is used to make sure the power-button pusher is serious. The button
...
...
@@ -225,7 +222,7 @@ static void nas100d_power_handler(unsigned long data)
ctrl_alt_del
();
/* Change the state of the power LED to "blink" */
gpio_
line_set
(
NAS100D_LED_PWR_GPIO
,
IXP4XX_GPIO_LOW
);
gpio_
set_value
(
NAS100D_LED_PWR_GPIO
,
0
);
}
else
{
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
}
...
...
@@ -242,6 +239,33 @@ static irqreturn_t nas100d_reset_handler(int irq, void *dev_id)
return
IRQ_HANDLED
;
}
static
int
__init
nas100d_gpio_init
(
void
)
{
if
(
!
machine_is_nas100d
())
return
0
;
/*
* The power button on the Iomega NAS100d is on GPIO 14, but
* it cannot handle interrupts on that GPIO line. So we'll
* have to poll it with a kernel timer.
*/
/* Request the power off GPIO */
gpio_request
(
NAS100D_PO_GPIO
,
"power off"
);
/* Make sure that the power button GPIO is set up as an input */
gpio_request
(
NAS100D_PB_GPIO
,
"power button"
);
gpio_direction_input
(
NAS100D_PB_GPIO
);
/* Set the initial value for the power button IRQ handler */
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
mod_timer
(
&
nas100d_power_timer
,
jiffies
+
msecs_to_jiffies
(
500
));
return
0
;
}
device_initcall
(
nas100d_gpio_init
);
static
void
__init
nas100d_init
(
void
)
{
uint8_t
__iomem
*
f
;
...
...
@@ -278,19 +302,6 @@ static void __init nas100d_init(void)
gpio_to_irq
(
NAS100D_RB_GPIO
));
}
/* The power button on the Iomega NAS100d is on GPIO 14, but
* it cannot handle interrupts on that GPIO line. So we'll
* have to poll it with a kernel timer.
*/
/* Make sure that the power button GPIO is set up as an input */
gpio_line_config
(
NAS100D_PB_GPIO
,
IXP4XX_GPIO_IN
);
/* Set the initial value for the power button IRQ handler */
power_button_countdown
=
PBUTTON_HOLDDOWN_COUNT
;
mod_timer
(
&
nas100d_power_timer
,
jiffies
+
msecs_to_jiffies
(
500
));
/*
* Map in a portion of the flash and read the MAC address.
* Since it is stored in BE in the flash itself, we need to
...
...
arch/arm/mach-ixp4xx/nslu2-setup.c
浏览文件 @
060c83fa
...
...
@@ -197,11 +197,8 @@ static void nslu2_power_off(void)
{
/* This causes the box to drop the power and go dead. */
/* enable the pwr cntl gpio */
gpio_line_config
(
NSLU2_PO_GPIO
,
IXP4XX_GPIO_OUT
);
/* do the deed */
gpio_line_set
(
NSLU2_PO_GPIO
,
IXP4XX_GPIO_HIGH
);
/* enable the pwr cntl gpio and assert power off */
gpio_direction_output
(
NSLU2_PO_GPIO
,
1
);
}
static
irqreturn_t
nslu2_power_handler
(
int
irq
,
void
*
dev_id
)
...
...
@@ -223,6 +220,16 @@ static irqreturn_t nslu2_reset_handler(int irq, void *dev_id)
return
IRQ_HANDLED
;
}
static
int
__init
nslu2_gpio_init
(
void
)
{
if
(
!
machine_is_nslu2
())
return
0
;
/* Request the power off GPIO */
return
gpio_request
(
NSLU2_PO_GPIO
,
"power off"
);
}
device_initcall
(
nslu2_gpio_init
);
static
void
__init
nslu2_timer_init
(
void
)
{
/* The xtal on this machine is non-standard. */
...
...
drivers/input/misc/ixp4xx-beeper.c
浏览文件 @
060c83fa
...
...
@@ -20,6 +20,7 @@
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/gpio.h>
#include <mach/hardware.h>
MODULE_AUTHOR
(
"Alessandro Zummo <a.zummo@towertech.it>"
);
...
...
@@ -35,15 +36,12 @@ static void ixp4xx_spkr_control(unsigned int pin, unsigned int count)
spin_lock_irqsave
(
&
beep_lock
,
flags
);
if
(
count
)
{
gpio_line_config
(
pin
,
IXP4XX_GPIO_OUT
);
gpio_line_set
(
pin
,
IXP4XX_GPIO_LOW
);
if
(
count
)
{
gpio_direction_output
(
pin
,
0
);
*
IXP4XX_OSRT2
=
(
count
&
~
IXP4XX_OST_RELOAD_MASK
)
|
IXP4XX_OST_ENABLE
;
}
else
{
gpio_line_config
(
pin
,
IXP4XX_GPIO_IN
);
gpio_line_set
(
pin
,
IXP4XX_GPIO_HIGH
);
gpio_direction_output
(
pin
,
1
);
gpio_direction_input
(
pin
);
*
IXP4XX_OSRT2
=
0
;
}
...
...
@@ -78,11 +76,13 @@ static int ixp4xx_spkr_event(struct input_dev *dev, unsigned int type, unsigned
static
irqreturn_t
ixp4xx_spkr_interrupt
(
int
irq
,
void
*
dev_id
)
{
unsigned
int
pin
=
(
unsigned
int
)
dev_id
;
/* clear interrupt */
*
IXP4XX_OSST
=
IXP4XX_OSST_TIMER_2_PEND
;
/* flip the beeper output */
*
IXP4XX_GPIO_GPOUTR
^=
(
1
<<
(
unsigned
int
)
dev_id
);
gpio_set_value
(
pin
,
!
gpio_get_value
(
pin
)
);
return
IRQ_HANDLED
;
}
...
...
@@ -110,11 +110,15 @@ static int ixp4xx_spkr_probe(struct platform_device *dev)
input_dev
->
sndbit
[
0
]
=
BIT_MASK
(
SND_BELL
)
|
BIT_MASK
(
SND_TONE
);
input_dev
->
event
=
ixp4xx_spkr_event
;
err
=
gpio_request
(
dev
->
id
,
"ixp4-beeper"
);
if
(
err
)
goto
err_free_device
;
err
=
request_irq
(
IRQ_IXP4XX_TIMER2
,
&
ixp4xx_spkr_interrupt
,
IRQF_NO_SUSPEND
,
"ixp4xx-beeper"
,
(
void
*
)
dev
->
id
);
if
(
err
)
goto
err_free_
device
;
goto
err_free_
gpio
;
err
=
input_register_device
(
input_dev
);
if
(
err
)
...
...
@@ -126,6 +130,8 @@ static int ixp4xx_spkr_probe(struct platform_device *dev)
err_free_irq:
free_irq
(
IRQ_IXP4XX_TIMER2
,
(
void
*
)
dev
->
id
);
err_free_gpio:
gpio_free
(
dev
->
id
);
err_free_device:
input_free_device
(
input_dev
);
...
...
@@ -144,6 +150,7 @@ static int ixp4xx_spkr_remove(struct platform_device *dev)
ixp4xx_spkr_control
(
pin
,
0
);
free_irq
(
IRQ_IXP4XX_TIMER2
,
(
void
*
)
dev
->
id
);
gpio_free
(
dev
->
id
);
return
0
;
}
...
...
drivers/ptp/ptp_ixp46x.c
浏览文件 @
060c83fa
...
...
@@ -259,8 +259,15 @@ static struct ixp_clock ixp_clock;
static
int
setup_interrupt
(
int
gpio
)
{
int
irq
;
int
err
;
gpio_line_config
(
gpio
,
IXP4XX_GPIO_IN
);
err
=
gpio_request
(
gpio
,
"ixp4-ptp"
);
if
(
err
)
return
err
;
err
=
gpio_direction_input
(
gpio
);
if
(
err
)
return
err
;
irq
=
gpio_to_irq
(
gpio
);
...
...
drivers/staging/media/lirc/lirc_serial.c
浏览文件 @
060c83fa
...
...
@@ -67,7 +67,7 @@
#include <linux/delay.h>
#include <linux/poll.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/fcntl.h>
...
...
@@ -321,7 +321,7 @@ static void on(void)
* status LED and ground
*/
if
(
type
==
LIRC_NSLU2
)
{
gpio_
line_set
(
NSLU2_LED_GRN
,
IXP4XX_GPIO_LOW
);
gpio_
set_value
(
NSLU2_LED_GRN
,
0
);
return
;
}
#endif
...
...
@@ -335,7 +335,7 @@ static void off(void)
{
#ifdef CONFIG_LIRC_SERIAL_NSLU2
if
(
type
==
LIRC_NSLU2
)
{
gpio_
line_set
(
NSLU2_LED_GRN
,
IXP4XX_GPIO_HIGH
);
gpio_
set_value
(
NSLU2_LED_GRN
,
1
);
return
;
}
#endif
...
...
@@ -839,6 +839,16 @@ static int lirc_serial_probe(struct platform_device *dev)
{
int
i
,
nlow
,
nhigh
,
result
;
#ifdef CONFIG_LIRC_SERIAL_NSLU2
/* This GPIO is used for a LED on the NSLU2 */
result
=
devm_gpio_request
(
dev
,
NSLU2_LED_GRN
,
"lirc-serial"
);
if
(
result
)
return
result
;
result
=
gpio_direction_output
(
NSLU2_LED_GRN
,
0
);
if
(
result
)
return
result
;
#endif
result
=
request_irq
(
irq
,
irq_handler
,
(
share_irq
?
IRQF_SHARED
:
0
),
LIRC_DRIVER_NAME
,
(
void
*
)
&
hardware
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录