Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
e9191028
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e9191028
编写于
11月 29, 2010
作者:
L
Lennert Buytenhek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM: plat-omap: irq_data conversion.
Signed-off-by:
N
Lennert Buytenhek
<
buytenh@secretlab.ca
>
上级
f272c00e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
47 deletion
+46
-47
arch/arm/plat-omap/gpio.c
arch/arm/plat-omap/gpio.c
+46
-47
未找到文件。
arch/arm/plat-omap/gpio.c
浏览文件 @
e9191028
...
@@ -729,17 +729,17 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
...
@@ -729,17 +729,17 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio, int trigger)
return
-
EINVAL
;
return
-
EINVAL
;
}
}
static
int
gpio_irq_type
(
unsigned
irq
,
unsigned
type
)
static
int
gpio_irq_type
(
struct
irq_data
*
d
,
unsigned
type
)
{
{
struct
gpio_bank
*
bank
;
struct
gpio_bank
*
bank
;
unsigned
gpio
;
unsigned
gpio
;
int
retval
;
int
retval
;
unsigned
long
flags
;
unsigned
long
flags
;
if
(
!
cpu_class_is_omap2
()
&&
irq
>
IH_MPUIO_BASE
)
if
(
!
cpu_class_is_omap2
()
&&
d
->
irq
>
IH_MPUIO_BASE
)
gpio
=
OMAP_MPUIO
(
irq
-
IH_MPUIO_BASE
);
gpio
=
OMAP_MPUIO
(
d
->
irq
-
IH_MPUIO_BASE
);
else
else
gpio
=
irq
-
IH_GPIO_BASE
;
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
if
(
check_gpio
(
gpio
)
<
0
)
if
(
check_gpio
(
gpio
)
<
0
)
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -752,19 +752,19 @@ static int gpio_irq_type(unsigned irq, unsigned type)
...
@@ -752,19 +752,19 @@ static int gpio_irq_type(unsigned irq, unsigned type)
&&
(
type
&
(
IRQ_TYPE_LEVEL_LOW
|
IRQ_TYPE_LEVEL_HIGH
)))
&&
(
type
&
(
IRQ_TYPE_LEVEL_LOW
|
IRQ_TYPE_LEVEL_HIGH
)))
return
-
EINVAL
;
return
-
EINVAL
;
bank
=
get_irq_chip_data
(
irq
);
bank
=
irq_data_get_irq_chip_data
(
d
);
spin_lock_irqsave
(
&
bank
->
lock
,
flags
);
spin_lock_irqsave
(
&
bank
->
lock
,
flags
);
retval
=
_set_gpio_triggering
(
bank
,
get_gpio_index
(
gpio
),
type
);
retval
=
_set_gpio_triggering
(
bank
,
get_gpio_index
(
gpio
),
type
);
if
(
retval
==
0
)
{
if
(
retval
==
0
)
{
irq_desc
[
irq
].
status
&=
~
IRQ_TYPE_SENSE_MASK
;
irq_desc
[
d
->
irq
].
status
&=
~
IRQ_TYPE_SENSE_MASK
;
irq_desc
[
irq
].
status
|=
type
;
irq_desc
[
d
->
irq
].
status
|=
type
;
}
}
spin_unlock_irqrestore
(
&
bank
->
lock
,
flags
);
spin_unlock_irqrestore
(
&
bank
->
lock
,
flags
);
if
(
type
&
(
IRQ_TYPE_LEVEL_LOW
|
IRQ_TYPE_LEVEL_HIGH
))
if
(
type
&
(
IRQ_TYPE_LEVEL_LOW
|
IRQ_TYPE_LEVEL_HIGH
))
__set_irq_handler_unlocked
(
irq
,
handle_level_irq
);
__set_irq_handler_unlocked
(
d
->
irq
,
handle_level_irq
);
else
if
(
type
&
(
IRQ_TYPE_EDGE_FALLING
|
IRQ_TYPE_EDGE_RISING
))
else
if
(
type
&
(
IRQ_TYPE_EDGE_FALLING
|
IRQ_TYPE_EDGE_RISING
))
__set_irq_handler_unlocked
(
irq
,
handle_edge_irq
);
__set_irq_handler_unlocked
(
d
->
irq
,
handle_edge_irq
);
return
retval
;
return
retval
;
}
}
...
@@ -1021,15 +1021,15 @@ static void _reset_gpio(struct gpio_bank *bank, int gpio)
...
@@ -1021,15 +1021,15 @@ static void _reset_gpio(struct gpio_bank *bank, int gpio)
}
}
/* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
/* Use disable_irq_wake() and enable_irq_wake() functions from drivers */
static
int
gpio_wake_enable
(
unsigned
int
irq
,
unsigned
int
enable
)
static
int
gpio_wake_enable
(
struct
irq_data
*
d
,
unsigned
int
enable
)
{
{
unsigned
int
gpio
=
irq
-
IH_GPIO_BASE
;
unsigned
int
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
struct
gpio_bank
*
bank
;
struct
gpio_bank
*
bank
;
int
retval
;
int
retval
;
if
(
check_gpio
(
gpio
)
<
0
)
if
(
check_gpio
(
gpio
)
<
0
)
return
-
ENODEV
;
return
-
ENODEV
;
bank
=
get_irq_chip_data
(
irq
);
bank
=
irq_data_get_irq_chip_data
(
d
);
retval
=
_set_gpio_wakeup
(
bank
,
get_gpio_index
(
gpio
),
enable
);
retval
=
_set_gpio_wakeup
(
bank
,
get_gpio_index
(
gpio
),
enable
);
return
retval
;
return
retval
;
...
@@ -1142,7 +1142,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
...
@@ -1142,7 +1142,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
u32
retrigger
=
0
;
u32
retrigger
=
0
;
int
unmasked
=
0
;
int
unmasked
=
0
;
desc
->
chip
->
ack
(
irq
);
desc
->
irq_data
.
chip
->
irq_ack
(
&
desc
->
irq_data
);
bank
=
get_irq_data
(
irq
);
bank
=
get_irq_data
(
irq
);
#ifdef CONFIG_ARCH_OMAP1
#ifdef CONFIG_ARCH_OMAP1
...
@@ -1199,7 +1199,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
...
@@ -1199,7 +1199,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
configured, we could unmask GPIO bank interrupt immediately */
configured, we could unmask GPIO bank interrupt immediately */
if
(
!
level_mask
&&
!
unmasked
)
{
if
(
!
level_mask
&&
!
unmasked
)
{
unmasked
=
1
;
unmasked
=
1
;
desc
->
chip
->
unmask
(
irq
);
desc
->
irq_data
.
chip
->
irq_unmask
(
&
desc
->
irq_data
);
}
}
isr
|=
retrigger
;
isr
|=
retrigger
;
...
@@ -1235,41 +1235,40 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
...
@@ -1235,41 +1235,40 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
interrupt */
interrupt */
exit:
exit:
if
(
!
unmasked
)
if
(
!
unmasked
)
desc
->
chip
->
unmask
(
irq
);
desc
->
irq_data
.
chip
->
irq_unmask
(
&
desc
->
irq_data
);
}
}
static
void
gpio_irq_shutdown
(
unsigned
int
irq
)
static
void
gpio_irq_shutdown
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
irq
-
IH_GPIO_BASE
;
unsigned
int
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
_reset_gpio
(
bank
,
gpio
);
_reset_gpio
(
bank
,
gpio
);
}
}
static
void
gpio_ack_irq
(
unsigned
int
irq
)
static
void
gpio_ack_irq
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
irq
-
IH_GPIO_BASE
;
unsigned
int
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
_clear_gpio_irqstatus
(
bank
,
gpio
);
_clear_gpio_irqstatus
(
bank
,
gpio
);
}
}
static
void
gpio_mask_irq
(
unsigned
int
irq
)
static
void
gpio_mask_irq
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
irq
-
IH_GPIO_BASE
;
unsigned
int
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
_set_gpio_irqenable
(
bank
,
gpio
,
0
);
_set_gpio_irqenable
(
bank
,
gpio
,
0
);
_set_gpio_triggering
(
bank
,
get_gpio_index
(
gpio
),
IRQ_TYPE_NONE
);
_set_gpio_triggering
(
bank
,
get_gpio_index
(
gpio
),
IRQ_TYPE_NONE
);
}
}
static
void
gpio_unmask_irq
(
unsigned
int
irq
)
static
void
gpio_unmask_irq
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
irq
-
IH_GPIO_BASE
;
unsigned
int
gpio
=
d
->
irq
-
IH_GPIO_BASE
;
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
unsigned
int
irq_mask
=
1
<<
get_gpio_index
(
gpio
);
unsigned
int
irq_mask
=
1
<<
get_gpio_index
(
gpio
);
struct
irq_desc
*
desc
=
irq_to_desc
(
irq
);
struct
irq_desc
*
desc
=
irq_to_desc
(
d
->
irq
);
u32
trigger
=
desc
->
status
&
IRQ_TYPE_SENSE_MASK
;
u32
trigger
=
desc
->
status
&
IRQ_TYPE_SENSE_MASK
;
if
(
trigger
)
if
(
trigger
)
...
@@ -1287,12 +1286,12 @@ static void gpio_unmask_irq(unsigned int irq)
...
@@ -1287,12 +1286,12 @@ static void gpio_unmask_irq(unsigned int irq)
static
struct
irq_chip
gpio_irq_chip
=
{
static
struct
irq_chip
gpio_irq_chip
=
{
.
name
=
"GPIO"
,
.
name
=
"GPIO"
,
.
shutdown
=
gpio_irq_shutdown
,
.
irq_
shutdown
=
gpio_irq_shutdown
,
.
ack
=
gpio_ack_irq
,
.
irq_ack
=
gpio_ack_irq
,
.
mask
=
gpio_mask_irq
,
.
irq_mask
=
gpio_mask_irq
,
.
unmask
=
gpio_unmask_irq
,
.
irq_unmask
=
gpio_unmask_irq
,
.
set_type
=
gpio_irq_type
,
.
irq_
set_type
=
gpio_irq_type
,
.
set_wake
=
gpio_wake_enable
,
.
irq_
set_wake
=
gpio_wake_enable
,
};
};
/*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
...
@@ -1301,36 +1300,36 @@ static struct irq_chip gpio_irq_chip = {
...
@@ -1301,36 +1300,36 @@ static struct irq_chip gpio_irq_chip = {
/* MPUIO uses the always-on 32k clock */
/* MPUIO uses the always-on 32k clock */
static
void
mpuio_ack_irq
(
unsigned
int
irq
)
static
void
mpuio_ack_irq
(
struct
irq_data
*
d
)
{
{
/* The ISR is reset automatically, so do nothing here. */
/* The ISR is reset automatically, so do nothing here. */
}
}
static
void
mpuio_mask_irq
(
unsigned
int
irq
)
static
void
mpuio_mask_irq
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
OMAP_MPUIO
(
irq
-
IH_MPUIO_BASE
);
unsigned
int
gpio
=
OMAP_MPUIO
(
d
->
irq
-
IH_MPUIO_BASE
);
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
_set_gpio_irqenable
(
bank
,
gpio
,
0
);
_set_gpio_irqenable
(
bank
,
gpio
,
0
);
}
}
static
void
mpuio_unmask_irq
(
unsigned
int
irq
)
static
void
mpuio_unmask_irq
(
struct
irq_data
*
d
)
{
{
unsigned
int
gpio
=
OMAP_MPUIO
(
irq
-
IH_MPUIO_BASE
);
unsigned
int
gpio
=
OMAP_MPUIO
(
d
->
irq
-
IH_MPUIO_BASE
);
struct
gpio_bank
*
bank
=
get_irq_chip_data
(
irq
);
struct
gpio_bank
*
bank
=
irq_data_get_irq_chip_data
(
d
);
_set_gpio_irqenable
(
bank
,
gpio
,
1
);
_set_gpio_irqenable
(
bank
,
gpio
,
1
);
}
}
static
struct
irq_chip
mpuio_irq_chip
=
{
static
struct
irq_chip
mpuio_irq_chip
=
{
.
name
=
"MPUIO"
,
.
name
=
"MPUIO"
,
.
ack
=
mpuio_ack_irq
,
.
irq_ack
=
mpuio_ack_irq
,
.
mask
=
mpuio_mask_irq
,
.
irq_mask
=
mpuio_mask_irq
,
.
unmask
=
mpuio_unmask_irq
,
.
irq_unmask
=
mpuio_unmask_irq
,
.
set_type
=
gpio_irq_type
,
.
irq_
set_type
=
gpio_irq_type
,
#ifdef CONFIG_ARCH_OMAP16XX
#ifdef CONFIG_ARCH_OMAP16XX
/* REVISIT: assuming only 16xx supports MPUIO wake events */
/* REVISIT: assuming only 16xx supports MPUIO wake events */
.
set_wake
=
gpio_wake_enable
,
.
irq_
set_wake
=
gpio_wake_enable
,
#endif
#endif
};
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录