Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
8894f491
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
8894f491
编写于
5月 30, 2014
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nouveau: register a drm_dp_aux channel for each dp connector
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
ebd6acbb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
3 deletion
+55
-3
drivers/gpu/drm/nouveau/nouveau_connector.c
drivers/gpu/drm/nouveau/nouveau_connector.c
+52
-3
drivers/gpu/drm/nouveau/nouveau_connector.h
drivers/gpu/drm/nouveau/nouveau_connector.h
+3
-0
未找到文件。
drivers/gpu/drm/nouveau/nouveau_connector.c
浏览文件 @
8894f491
...
...
@@ -105,6 +105,8 @@ nouveau_connector_destroy(struct drm_connector *connector)
kfree
(
nv_connector
->
edid
);
drm_sysfs_connector_remove
(
connector
);
drm_connector_cleanup
(
connector
);
if
(
nv_connector
->
aux
.
transfer
)
drm_dp_aux_unregister
(
&
nv_connector
->
aux
);
kfree
(
connector
);
}
...
...
@@ -946,6 +948,38 @@ nouveau_connector_hotplug(void *data, u32 type, int index)
return
NVKM_EVENT_DROP
;
}
static
ssize_t
nouveau_connector_aux_xfer
(
struct
drm_dp_aux
*
aux
,
struct
drm_dp_aux_msg
*
msg
)
{
struct
nouveau_connector
*
nv_connector
=
container_of
(
aux
,
typeof
(
*
nv_connector
),
aux
);
struct
nouveau_encoder
*
nv_encoder
;
struct
nouveau_i2c_port
*
port
;
int
ret
;
nv_encoder
=
find_encoder
(
&
nv_connector
->
base
,
DCB_OUTPUT_DP
);
if
(
!
nv_encoder
||
!
(
port
=
nv_encoder
->
i2c
))
return
-
ENODEV
;
if
(
WARN_ON
(
msg
->
size
>
16
))
return
-
E2BIG
;
if
(
msg
->
size
==
0
)
return
msg
->
size
;
ret
=
nouveau_i2c
(
port
)
->
acquire
(
port
,
0
);
if
(
ret
)
return
ret
;
ret
=
port
->
func
->
aux
(
port
,
false
,
msg
->
request
,
msg
->
address
,
msg
->
buffer
,
msg
->
size
);
nouveau_i2c
(
port
)
->
release
(
port
);
if
(
ret
>=
0
)
{
msg
->
reply
=
ret
;
return
msg
->
size
;
}
return
ret
;
}
static
int
drm_conntype_from_dcb
(
enum
dcb_connector_type
dcb
)
{
...
...
@@ -1066,8 +1100,8 @@ nouveau_connector_create(struct drm_device *dev, int index)
}
}
type
=
drm_conntype_from_dcb
(
nv_connector
->
type
);
if
(
type
==
DRM_MODE_CONNECTOR_LVDS
)
{
switch
((
type
=
drm_conntype_from_dcb
(
nv_connector
->
type
)))
{
case
DRM_MODE_CONNECTOR_LVDS
:
ret
=
nouveau_bios_parse_lvds_table
(
dev
,
0
,
&
dummy
,
&
dummy
);
if
(
ret
)
{
NV_ERROR
(
drm
,
"Error parsing LVDS table, disabling
\n
"
);
...
...
@@ -1076,8 +1110,23 @@ nouveau_connector_create(struct drm_device *dev, int index)
}
funcs
=
&
nouveau_connector_funcs_lvds
;
}
else
{
break
;
case
DRM_MODE_CONNECTOR_DisplayPort
:
case
DRM_MODE_CONNECTOR_eDP
:
nv_connector
->
aux
.
dev
=
dev
->
dev
;
nv_connector
->
aux
.
transfer
=
nouveau_connector_aux_xfer
;
ret
=
drm_dp_aux_register
(
&
nv_connector
->
aux
);
if
(
ret
)
{
NV_ERROR
(
drm
,
"failed to register aux channel
\n
"
);
kfree
(
nv_connector
);
return
ERR_PTR
(
ret
);
}
funcs
=
&
nouveau_connector_funcs
;
break
;
default:
funcs
=
&
nouveau_connector_funcs
;
break
;
}
/* defaults, will get overridden in detect() */
...
...
drivers/gpu/drm/nouveau/nouveau_connector.h
浏览文件 @
8894f491
...
...
@@ -28,6 +28,7 @@
#define __NOUVEAU_CONNECTOR_H__
#include <drm/drm_edid.h>
#include <drm/drm_dp_helper.h>
#include "nouveau_crtc.h"
#include <core/event.h>
...
...
@@ -70,6 +71,8 @@ struct nouveau_connector {
u32
status
;
struct
work_struct
work
;
struct
drm_dp_aux
aux
;
int
dithering_mode
;
int
dithering_depth
;
int
scaling_mode
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录