Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
1ed73166
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
5
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1ed73166
编写于
12月 07, 2012
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau/bios: implement opcode 0xa9
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
d2bcea68
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
53 addition
and
8 deletion
+53
-8
drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
+1
-1
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
+45
-2
drivers/gpu/drm/nouveau/core/subdev/gpio/base.c
drivers/gpu/drm/nouveau/core/subdev/gpio/base.c
+1
-1
drivers/gpu/drm/nouveau/core/subdev/gpio/nv50.c
drivers/gpu/drm/nouveau/core/subdev/gpio/nv50.c
+3
-2
drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
+3
-2
未找到文件。
drivers/gpu/drm/nouveau/core/include/subdev/gpio.h
浏览文件 @
1ed73166
...
...
@@ -11,7 +11,7 @@ struct nouveau_gpio {
struct
nouveau_subdev
base
;
/* hardware interfaces */
void
(
*
reset
)(
struct
nouveau_gpio
*
);
void
(
*
reset
)(
struct
nouveau_gpio
*
,
u8
func
);
int
(
*
drive
)(
struct
nouveau_gpio
*
,
int
line
,
int
dir
,
int
out
);
int
(
*
sense
)(
struct
nouveau_gpio
*
,
int
line
);
void
(
*
irq_enable
)(
struct
nouveau_gpio
*
,
int
line
,
bool
);
...
...
drivers/gpu/drm/nouveau/core/subdev/bios/init.c
浏览文件 @
1ed73166
...
...
@@ -2,11 +2,12 @@
#include <core/device.h>
#include <subdev/bios.h>
#include <subdev/bios/conn.h>
#include <subdev/bios/bmp.h>
#include <subdev/bios/bit.h>
#include <subdev/bios/conn.h>
#include <subdev/bios/dcb.h>
#include <subdev/bios/dp.h>
#include <subdev/bios/gpio.h>
#include <subdev/bios/init.h>
#include <subdev/devinit.h>
#include <subdev/clock.h>
...
...
@@ -1781,7 +1782,7 @@ init_gpio(struct nvbios_init *init)
init
->
offset
+=
1
;
if
(
init_exec
(
init
)
&&
gpio
&&
gpio
->
reset
)
gpio
->
reset
(
gpio
);
gpio
->
reset
(
gpio
,
DCB_GPIO_UNUSED
);
}
/**
...
...
@@ -1995,6 +1996,47 @@ init_i2c_long_if(struct nvbios_init *init)
init_exec_set
(
init
,
false
);
}
/**
* INIT_GPIO_NE - opcode 0xa9
*
*/
static
void
init_gpio_ne
(
struct
nvbios_init
*
init
)
{
struct
nouveau_bios
*
bios
=
init
->
bios
;
struct
nouveau_gpio
*
gpio
=
nouveau_gpio
(
bios
);
struct
dcb_gpio_func
func
;
u8
count
=
nv_ro08
(
bios
,
init
->
offset
+
1
);
u8
idx
=
0
,
ver
,
len
;
u16
data
,
i
;
trace
(
"GPIO_NE
\t
"
);
init
->
offset
+=
2
;
for
(
i
=
init
->
offset
;
i
<
init
->
offset
+
count
;
i
++
)
cont
(
"0x%02x "
,
nv_ro08
(
bios
,
i
));
cont
(
"
\n
"
);
while
((
data
=
dcb_gpio_parse
(
bios
,
0
,
idx
++
,
&
ver
,
&
len
,
&
func
)))
{
if
(
func
.
func
!=
DCB_GPIO_UNUSED
)
{
for
(
i
=
init
->
offset
;
i
<
init
->
offset
+
count
;
i
++
)
{
if
(
func
.
func
==
nv_ro08
(
bios
,
i
))
break
;
}
trace
(
"
\t
FUNC[0x%02x]"
,
func
.
func
);
if
(
i
==
(
init
->
offset
+
count
))
{
cont
(
" *"
);
if
(
init_exec
(
init
)
&&
gpio
&&
gpio
->
reset
)
gpio
->
reset
(
gpio
,
func
.
func
);
}
cont
(
"
\n
"
);
}
}
init
->
offset
+=
count
;
}
static
struct
nvbios_init_opcode
{
void
(
*
exec
)(
struct
nvbios_init
*
);
}
init_opcode
[]
=
{
...
...
@@ -2059,6 +2101,7 @@ static struct nvbios_init_opcode {
[
0x98
]
=
{
init_auxch
},
[
0x99
]
=
{
init_zm_auxch
},
[
0x9a
]
=
{
init_i2c_long_if
},
[
0xa9
]
=
{
init_gpio_ne
},
};
#define init_opcode_nr (sizeof(init_opcode) / sizeof(init_opcode[0]))
...
...
drivers/gpu/drm/nouveau/core/subdev/gpio/base.c
浏览文件 @
1ed73166
...
...
@@ -270,7 +270,7 @@ nouveau_gpio_init(struct nouveau_gpio *gpio)
int
ret
=
nouveau_subdev_init
(
&
gpio
->
base
);
if
(
ret
==
0
&&
gpio
->
reset
)
{
if
(
dmi_check_system
(
gpio_reset_ids
))
gpio
->
reset
(
gpio
);
gpio
->
reset
(
gpio
,
DCB_GPIO_UNUSED
);
}
return
ret
;
}
drivers/gpu/drm/nouveau/core/subdev/gpio/nv50.c
浏览文件 @
1ed73166
...
...
@@ -29,7 +29,7 @@ struct nv50_gpio_priv {
};
static
void
nv50_gpio_reset
(
struct
nouveau_gpio
*
gpio
)
nv50_gpio_reset
(
struct
nouveau_gpio
*
gpio
,
u8
match
)
{
struct
nouveau_bios
*
bios
=
nouveau_bios
(
gpio
);
struct
nv50_gpio_priv
*
priv
=
(
void
*
)
gpio
;
...
...
@@ -48,7 +48,8 @@ nv50_gpio_reset(struct nouveau_gpio *gpio)
u32
val
=
(
unk1
<<
16
)
|
unk0
;
u32
reg
=
regs
[
line
>>
4
];
line
&=
0x0f
;
if
(
func
==
0xff
)
if
(
func
==
DCB_GPIO_UNUSED
||
(
match
!=
DCB_GPIO_UNUSED
&&
match
!=
func
))
continue
;
gpio
->
set
(
gpio
,
0
,
func
,
line
,
defs
);
...
...
drivers/gpu/drm/nouveau/core/subdev/gpio/nvd0.c
浏览文件 @
1ed73166
...
...
@@ -29,7 +29,7 @@ struct nvd0_gpio_priv {
};
static
void
nvd0_gpio_reset
(
struct
nouveau_gpio
*
gpio
)
nvd0_gpio_reset
(
struct
nouveau_gpio
*
gpio
,
u8
match
)
{
struct
nouveau_bios
*
bios
=
nouveau_bios
(
gpio
);
struct
nvd0_gpio_priv
*
priv
=
(
void
*
)
gpio
;
...
...
@@ -45,7 +45,8 @@ nvd0_gpio_reset(struct nouveau_gpio *gpio)
u8
unk0
=
(
data
&
0x00ff0000
)
>>
16
;
u8
unk1
=
(
data
&
0x1f000000
)
>>
24
;
if
(
func
==
0xff
)
if
(
func
==
DCB_GPIO_UNUSED
||
(
match
!=
DCB_GPIO_UNUSED
&&
match
!=
func
))
continue
;
gpio
->
set
(
gpio
,
0
,
func
,
line
,
defs
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录