Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
b775e642
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看板
提交
b775e642
编写于
8月 11, 2014
作者:
G
Grant Likely
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'devicetree/next-console' into devicetree/next
上级
32147e9a
ccdb8ed3
变更
17
显示空白变更内容
内联
并排
Showing
17 changed file
with
64 addition
and
119 deletion
+64
-119
arch/arm/boot/dts/versatile-ab.dts
arch/arm/boot/dts/versatile-ab.dts
+4
-0
arch/powerpc/platforms/powermac/feature.c
arch/powerpc/platforms/powermac/feature.c
+5
-15
arch/powerpc/platforms/powermac/pci.c
arch/powerpc/platforms/powermac/pci.c
+1
-1
arch/powerpc/platforms/powermac/smp.c
arch/powerpc/platforms/powermac/smp.c
+1
-1
arch/powerpc/platforms/powermac/udbg_adb.c
arch/powerpc/platforms/powermac/udbg_adb.c
+1
-1
arch/powerpc/platforms/pseries/setup.c
arch/powerpc/platforms/pseries/setup.c
+1
-2
drivers/cpufreq/pmac64-cpufreq.c
drivers/cpufreq/pmac64-cpufreq.c
+1
-2
drivers/edac/cell_edac.c
drivers/edac/cell_edac.c
+1
-2
drivers/of/base.c
drivers/of/base.c
+17
-11
drivers/pci/hotplug/rpaphp_core.c
drivers/pci/hotplug/rpaphp_core.c
+2
-2
drivers/tty/ehv_bytechan.c
drivers/tty/ehv_bytechan.c
+4
-39
drivers/tty/hvc/hvc_opal.c
drivers/tty/hvc/hvc_opal.c
+3
-12
drivers/tty/hvc/hvc_vio.c
drivers/tty/hvc/hvc_vio.c
+10
-19
drivers/tty/serial/pmac_zilog.c
drivers/tty/serial/pmac_zilog.c
+3
-6
drivers/tty/serial/serial_core.c
drivers/tty/serial/serial_core.c
+3
-0
include/linux/of.h
include/linux/of.h
+4
-3
sound/ppc/pmac.c
sound/ppc/pmac.c
+3
-3
未找到文件。
arch/arm/boot/dts/versatile-ab.dts
浏览文件 @
b775e642
...
...
@@ -15,6 +15,10 @@
i2c0
=
&
i2c0
;
};
chosen
{
stdout
-
path
=
&
uart0
;
};
memory
{
reg
=
<
0x0
0x08000000
>;
};
...
...
arch/powerpc/platforms/powermac/feature.c
浏览文件 @
b775e642
...
...
@@ -2805,25 +2805,20 @@ set_initial_features(void)
/* Enable GMAC for now for PCI probing. It will be disabled
* later on after PCI probe
*/
np
=
of_find_node_by_name
(
NULL
,
"ethernet"
);
while
(
np
)
{
for_each_node_by_name
(
np
,
"ethernet"
)
if
(
of_device_is_compatible
(
np
,
"K2-GMAC"
))
g5_gmac_enable
(
np
,
0
,
1
);
np
=
of_find_node_by_name
(
np
,
"ethernet"
);
}
/* Enable FW before PCI probe. Will be disabled later on
* Note: We should have a batter way to check that we are
* dealing with uninorth internal cell and not a PCI cell
* on the external PCI. The code below works though.
*/
np
=
of_find_node_by_name
(
NULL
,
"firewire"
);
while
(
np
)
{
for_each_node_by_name
(
np
,
"firewire"
)
{
if
(
of_device_is_compatible
(
np
,
"pci106b,5811"
))
{
macio_chips
[
0
].
flags
|=
MACIO_FLAG_FW_SUPPORTED
;
g5_fw_enable
(
np
,
0
,
1
);
}
np
=
of_find_node_by_name
(
np
,
"firewire"
);
}
}
#else
/* CONFIG_POWER4 */
...
...
@@ -2834,13 +2829,11 @@ set_initial_features(void)
/* Enable GMAC for now for PCI probing. It will be disabled
* later on after PCI probe
*/
np
=
of_find_node_by_name
(
NULL
,
"ethernet"
);
while
(
np
)
{
for_each_node_by_name
(
np
,
"ethernet"
)
{
if
(
np
->
parent
&&
of_device_is_compatible
(
np
->
parent
,
"uni-north"
)
&&
of_device_is_compatible
(
np
,
"gmac"
))
core99_gmac_enable
(
np
,
0
,
1
);
np
=
of_find_node_by_name
(
np
,
"ethernet"
);
}
/* Enable FW before PCI probe. Will be disabled later on
...
...
@@ -2848,8 +2841,7 @@ set_initial_features(void)
* dealing with uninorth internal cell and not a PCI cell
* on the external PCI. The code below works though.
*/
np
=
of_find_node_by_name
(
NULL
,
"firewire"
);
while
(
np
)
{
for_each_node_by_name
(
np
,
"firewire"
)
{
if
(
np
->
parent
&&
of_device_is_compatible
(
np
->
parent
,
"uni-north"
)
&&
(
of_device_is_compatible
(
np
,
"pci106b,18"
)
||
...
...
@@ -2858,18 +2850,16 @@ set_initial_features(void)
macio_chips
[
0
].
flags
|=
MACIO_FLAG_FW_SUPPORTED
;
core99_firewire_enable
(
np
,
0
,
1
);
}
np
=
of_find_node_by_name
(
np
,
"firewire"
);
}
/* Enable ATA-100 before PCI probe. */
np
=
of_find_node_by_name
(
NULL
,
"ata-6"
);
while
(
np
)
{
for_each_node_by_name
(
np
,
"ata-6"
)
{
if
(
np
->
parent
&&
of_device_is_compatible
(
np
->
parent
,
"uni-north"
)
&&
of_device_is_compatible
(
np
,
"kauai-ata"
))
{
core99_ata100_enable
(
np
,
1
);
}
np
=
of_find_node_by_name
(
np
,
"ata-6"
);
}
/* Switch airport off */
...
...
arch/powerpc/platforms/powermac/pci.c
浏览文件 @
b775e642
...
...
@@ -698,7 +698,7 @@ static void __init fixup_nec_usb2(void)
{
struct
device_node
*
nec
;
for
(
nec
=
NULL
;
(
nec
=
of_find_node_by_name
(
nec
,
"usb"
))
!=
NULL
;
)
{
for
_each_node_by_name
(
nec
,
"usb"
)
{
struct
pci_controller
*
hose
;
u32
data
;
const
u32
*
prop
;
...
...
arch/powerpc/platforms/powermac/smp.c
浏览文件 @
b775e642
...
...
@@ -577,7 +577,7 @@ static void __init smp_core99_setup_i2c_hwsync(int ncpus)
int
ok
;
/* Look for the clock chip */
while
((
cc
=
of_find_node_by_name
(
cc
,
"i2c-hwclock"
))
!=
NULL
)
{
for_each_node_by_name
(
cc
,
"i2c-hwclock"
)
{
p
=
of_get_parent
(
cc
);
ok
=
p
&&
of_device_is_compatible
(
p
,
"uni-n-i2c"
);
of_node_put
(
p
);
...
...
arch/powerpc/platforms/powermac/udbg_adb.c
浏览文件 @
b775e642
...
...
@@ -191,7 +191,7 @@ int __init udbg_adb_init(int force_btext)
* of type "adb". If not, we return a failure, but we keep the
* bext output set for now
*/
for
(
np
=
NULL
;
(
np
=
of_find_node_by_name
(
np
,
"keyboard"
))
!=
NULL
;
)
{
for
_each_node_by_name
(
np
,
"keyboard"
)
{
struct
device_node
*
parent
=
of_get_parent
(
np
);
int
found
=
(
parent
&&
strcmp
(
parent
->
type
,
"adb"
)
==
0
);
of_node_put
(
parent
);
...
...
arch/powerpc/platforms/pseries/setup.c
浏览文件 @
b775e642
...
...
@@ -232,8 +232,7 @@ static void __init pseries_discover_pic(void)
struct
device_node
*
np
;
const
char
*
typep
;
for
(
np
=
NULL
;
(
np
=
of_find_node_by_name
(
np
,
"interrupt-controller"
));)
{
for_each_node_by_name
(
np
,
"interrupt-controller"
)
{
typep
=
of_get_property
(
np
,
"compatible"
,
NULL
);
if
(
strstr
(
typep
,
"open-pic"
))
{
pSeries_mpic_node
=
of_node_get
(
np
);
...
...
drivers/cpufreq/pmac64-cpufreq.c
浏览文件 @
b775e642
...
...
@@ -499,8 +499,7 @@ static int __init g5_pm72_cpufreq_init(struct device_node *cpunode)
}
/* Lookup the i2c hwclock */
for
(
hwclock
=
NULL
;
(
hwclock
=
of_find_node_by_name
(
hwclock
,
"i2c-hwclock"
))
!=
NULL
;){
for_each_node_by_name
(
hwclock
,
"i2c-hwclock"
)
{
const
char
*
loc
=
of_get_property
(
hwclock
,
"hwctrl-location"
,
NULL
);
if
(
loc
==
NULL
)
...
...
drivers/edac/cell_edac.c
浏览文件 @
b775e642
...
...
@@ -134,8 +134,7 @@ static void cell_edac_init_csrows(struct mem_ctl_info *mci)
int
j
;
u32
nr_pages
;
for
(
np
=
NULL
;
(
np
=
of_find_node_by_name
(
np
,
"memory"
))
!=
NULL
;)
{
for_each_node_by_name
(
np
,
"memory"
)
{
struct
resource
r
;
/* We "know" that the Cell firmware only creates one entry
...
...
drivers/of/base.c
浏览文件 @
b775e642
...
...
@@ -17,6 +17,7 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
#include <linux/console.h>
#include <linux/ctype.h>
#include <linux/cpu.h>
#include <linux/module.h>
...
...
@@ -35,7 +36,7 @@ struct device_node *of_allnodes;
EXPORT_SYMBOL
(
of_allnodes
);
struct
device_node
*
of_chosen
;
struct
device_node
*
of_aliases
;
st
atic
st
ruct
device_node
*
of_stdout
;
struct
device_node
*
of_stdout
;
static
struct
kset
*
of_kset
;
...
...
@@ -2062,9 +2063,12 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
of_chosen
=
of_find_node_by_path
(
"/chosen@0"
);
if
(
of_chosen
)
{
/* linux,stdout-path and /aliases/stdout are for legacy compatibility */
const
char
*
name
=
of_get_property
(
of_chosen
,
"stdout-path"
,
NULL
);
if
(
!
name
)
name
=
of_get_property
(
of_chosen
,
"linux,stdout-path"
,
NULL
);
if
(
IS_ENABLED
(
CONFIG_PPC
)
&&
!
name
)
name
=
of_get_property
(
of_aliases
,
"stdout"
,
NULL
);
if
(
name
)
of_stdout
=
of_find_node_by_path
(
name
);
}
...
...
@@ -2180,20 +2184,22 @@ const char *of_prop_next_string(struct property *prop, const char *cur)
EXPORT_SYMBOL_GPL
(
of_prop_next_string
);
/**
* of_device_is_stdout_path - check if a device node matches the
* linux,stdout-path property
* of_console_check() - Test and setup console for DT setup
* @dn - Pointer to device node
* @name - Name to use for preferred console without index. ex. "ttyS"
* @index - Index to use for preferred console.
*
* Check if this device node matches the linux,stdout-path property
* in the chosen node. return true if yes, false otherwise.
* Check if the given device node matches the stdout-path property in the
* /chosen node. If it does then register it as the preferred console and return
* TRUE. Otherwise return FALSE.
*/
int
of_device_is_stdout_path
(
struct
device_node
*
dn
)
bool
of_console_check
(
struct
device_node
*
dn
,
char
*
name
,
int
index
)
{
if
(
!
of_stdout
)
if
(
!
dn
||
dn
!=
of_stdout
||
console_set_on_cmdline
)
return
false
;
return
of_stdout
==
dn
;
return
add_preferred_console
(
name
,
index
,
NULL
);
}
EXPORT_SYMBOL_GPL
(
of_
device_is_stdout_path
);
EXPORT_SYMBOL_GPL
(
of_
console_check
);
/**
* of_find_next_cache_node - Find a node's subsidiary cache
...
...
drivers/pci/hotplug/rpaphp_core.c
浏览文件 @
b775e642
...
...
@@ -375,11 +375,11 @@ static void __exit cleanup_slots(void)
static
int
__init
rpaphp_init
(
void
)
{
struct
device_node
*
dn
=
NULL
;
struct
device_node
*
dn
;
info
(
DRIVER_DESC
" version: "
DRIVER_VERSION
"
\n
"
);
while
((
dn
=
of_find_node_by_name
(
dn
,
"pci"
))
)
for_each_node_by_name
(
dn
,
"pci"
)
rpaphp_add_slot
(
dn
);
return
0
;
...
...
drivers/tty/ehv_bytechan.c
浏览文件 @
b775e642
...
...
@@ -108,55 +108,23 @@ static void disable_tx_interrupt(struct ehv_bc_data *bc)
*
* The byte channel to be used for the console is specified via a "stdout"
* property in the /chosen node.
*
* For compatible with legacy device trees, we also look for a "stdout" alias.
*/
static
int
find_console_handle
(
void
)
{
struct
device_node
*
np
,
*
np2
;
struct
device_node
*
np
=
of_stdout
;
const
char
*
sprop
=
NULL
;
const
uint32_t
*
iprop
;
np
=
of_find_node_by_path
(
"/chosen"
);
if
(
np
)
sprop
=
of_get_property
(
np
,
"stdout-path"
,
NULL
);
if
(
!
np
||
!
sprop
)
{
of_node_put
(
np
);
np
=
of_find_node_by_name
(
NULL
,
"aliases"
);
if
(
np
)
sprop
=
of_get_property
(
np
,
"stdout"
,
NULL
);
}
if
(
!
sprop
)
{
of_node_put
(
np
);
return
0
;
}
/* We don't care what the aliased node is actually called. We only
* care if it's compatible with "epapr,hv-byte-channel", because that
* indicates that it's a byte channel node. We use a temporary
* variable, 'np2', because we can't release 'np' until we're done with
* 'sprop'.
*/
np2
=
of_find_node_by_path
(
sprop
);
of_node_put
(
np
);
np
=
np2
;
if
(
!
np
)
{
pr_warning
(
"ehv-bc: stdout node '%s' does not exist
\n
"
,
sprop
);
return
0
;
}
/* Is it a byte channel? */
if
(
!
of_device_is_compatible
(
np
,
"epapr,hv-byte-channel"
))
{
of_node_put
(
np
);
* indicates that it's a byte channel node.
*/
if
(
!
np
||
!
of_device_is_compatible
(
np
,
"epapr,hv-byte-channel"
))
return
0
;
}
stdout_irq
=
irq_of_parse_and_map
(
np
,
0
);
if
(
stdout_irq
==
NO_IRQ
)
{
pr_err
(
"ehv-bc: no 'interrupts' property in %s node
\n
"
,
sprop
);
of_node_put
(
np
);
pr_err
(
"ehv-bc: no 'interrupts' property in %s node
\n
"
,
np
->
full_name
);
return
0
;
}
...
...
@@ -167,12 +135,9 @@ static int find_console_handle(void)
if
(
!
iprop
)
{
pr_err
(
"ehv-bc: no 'hv-handle' property in %s node
\n
"
,
np
->
name
);
of_node_put
(
np
);
return
0
;
}
stdout_bc
=
be32_to_cpu
(
*
iprop
);
of_node_put
(
np
);
return
1
;
}
...
...
drivers/tty/hvc/hvc_opal.c
浏览文件 @
b775e642
...
...
@@ -342,22 +342,13 @@ static void udbg_init_opal_common(void)
void
__init
hvc_opal_init_early
(
void
)
{
struct
device_node
*
stdout_node
=
NULL
;
struct
device_node
*
stdout_node
=
of_node_get
(
of_stdout
)
;
const
__be32
*
termno
;
const
char
*
name
=
NULL
;
const
struct
hv_ops
*
ops
;
u32
index
;
/* find the boot console from /chosen/stdout */
if
(
of_chosen
)
name
=
of_get_property
(
of_chosen
,
"linux,stdout-path"
,
NULL
);
if
(
name
)
{
stdout_node
=
of_find_node_by_path
(
name
);
/* If the console wasn't in /chosen, try /ibm,opal */
if
(
!
stdout_node
)
{
pr_err
(
"hvc_opal: Failed to locate default console!
\n
"
);
return
;
}
}
else
{
struct
device_node
*
opal
,
*
np
;
/* Current OPAL takeover doesn't provide the stdout
...
...
drivers/tty/hvc/hvc_vio.c
浏览文件 @
b775e642
...
...
@@ -404,42 +404,35 @@ module_exit(hvc_vio_exit);
void
__init
hvc_vio_init_early
(
void
)
{
struct
device_node
*
stdout_node
;
const
__be32
*
termno
;
const
char
*
name
;
const
struct
hv_ops
*
ops
;
/* find the boot console from /chosen/stdout */
if
(
!
of_
chosen
)
if
(
!
of_
stdout
)
return
;
name
=
of_get_property
(
of_chosen
,
"linux,stdout-path"
,
NULL
);
if
(
name
==
NULL
)
return
;
stdout_node
=
of_find_node_by_path
(
name
);
if
(
!
stdout_node
)
return
;
name
=
of_get_property
(
stdout_node
,
"name"
,
NULL
);
name
=
of_get_property
(
of_stdout
,
"name"
,
NULL
);
if
(
!
name
)
{
printk
(
KERN_WARNING
"stdout node missing 'name' property!
\n
"
);
goto
out
;
return
;
}
/* Check if it's a virtual terminal */
if
(
strncmp
(
name
,
"vty"
,
3
)
!=
0
)
goto
out
;
termno
=
of_get_property
(
stdout_node
,
"reg"
,
NULL
);
return
;
termno
=
of_get_property
(
of_stdout
,
"reg"
,
NULL
);
if
(
termno
==
NULL
)
goto
out
;
return
;
hvterm_priv0
.
termno
=
of_read_number
(
termno
,
1
);
spin_lock_init
(
&
hvterm_priv0
.
buf_lock
);
hvterm_privs
[
0
]
=
&
hvterm_priv0
;
/* Check the protocol */
if
(
of_device_is_compatible
(
stdout_node
,
"hvterm1"
))
{
if
(
of_device_is_compatible
(
of_stdout
,
"hvterm1"
))
{
hvterm_priv0
.
proto
=
HV_PROTOCOL_RAW
;
ops
=
&
hvterm_raw_ops
;
}
else
if
(
of_device_is_compatible
(
stdout_node
,
"hvterm-protocol"
))
{
else
if
(
of_device_is_compatible
(
of_stdout
,
"hvterm-protocol"
))
{
hvterm_priv0
.
proto
=
HV_PROTOCOL_HVSI
;
ops
=
&
hvterm_hvsi_ops
;
hvsilib_init
(
&
hvterm_priv0
.
hvsi
,
hvc_get_chars
,
hvc_put_chars
,
...
...
@@ -447,7 +440,7 @@ void __init hvc_vio_init_early(void)
/* HVSI, perform the handshake now */
hvsilib_establish
(
&
hvterm_priv0
.
hvsi
);
}
else
goto
out
;
return
;
udbg_putc
=
udbg_hvc_putc
;
udbg_getc
=
udbg_hvc_getc
;
udbg_getc_poll
=
udbg_hvc_getc_poll
;
...
...
@@ -456,14 +449,12 @@ void __init hvc_vio_init_early(void)
* backend for HVSI, only do udbg
*/
if
(
hvterm_priv0
.
proto
==
HV_PROTOCOL_HVSI
)
goto
out
;
return
;
#endif
/* Check whether the user has requested a different console. */
if
(
!
strstr
(
cmd_line
,
"console="
))
add_preferred_console
(
"hvc"
,
0
,
NULL
);
hvc_instantiate
(
0
,
0
,
ops
);
out:
of_node_put
(
stdout_node
);
}
/* call this from early_init() for a working debug console on
...
...
drivers/tty/serial/pmac_zilog.c
浏览文件 @
b775e642
...
...
@@ -1650,8 +1650,7 @@ static int __init pmz_probe(void)
/*
* Find all escc chips in the system
*/
node_p
=
of_find_node_by_name
(
NULL
,
"escc"
);
while
(
node_p
)
{
for_each_node_by_name
(
node_p
,
"escc"
)
{
/*
* First get channel A/B node pointers
*
...
...
@@ -1669,7 +1668,7 @@ static int __init pmz_probe(void)
of_node_put
(
node_b
);
printk
(
KERN_ERR
"pmac_zilog: missing node %c for escc %s
\n
"
,
(
!
node_a
)
?
'a'
:
'b'
,
node_p
->
full_name
);
goto
next
;
continue
;
}
/*
...
...
@@ -1696,11 +1695,9 @@ static int __init pmz_probe(void)
of_node_put
(
node_b
);
memset
(
&
pmz_ports
[
count
],
0
,
sizeof
(
struct
uart_pmac_port
));
memset
(
&
pmz_ports
[
count
+
1
],
0
,
sizeof
(
struct
uart_pmac_port
));
goto
next
;
continue
;
}
count
+=
2
;
next:
node_p
=
of_find_node_by_name
(
node_p
,
"escc"
);
}
pmz_ports_count
=
count
;
...
...
drivers/tty/serial/serial_core.c
浏览文件 @
b775e642
...
...
@@ -26,6 +26,7 @@
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/of.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
#include <linux/device.h>
...
...
@@ -2615,6 +2616,8 @@ int uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)
spin_lock_init
(
&
uport
->
lock
);
lockdep_set_class
(
&
uport
->
lock
,
&
port_lock_key
);
}
if
(
uport
->
cons
&&
uport
->
dev
)
of_console_check
(
uport
->
dev
->
of_node
,
uport
->
cons
->
name
,
uport
->
line
);
uart_configure_port
(
drv
,
state
,
uport
);
...
...
include/linux/of.h
浏览文件 @
b775e642
...
...
@@ -113,6 +113,7 @@ static inline void of_node_put(struct device_node *node) { }
extern
struct
device_node
*
of_allnodes
;
extern
struct
device_node
*
of_chosen
;
extern
struct
device_node
*
of_aliases
;
extern
struct
device_node
*
of_stdout
;
extern
raw_spinlock_t
devtree_lock
;
static
inline
bool
of_have_populated_dt
(
void
)
...
...
@@ -352,7 +353,7 @@ const __be32 *of_prop_next_u32(struct property *prop, const __be32 *cur,
*/
const
char
*
of_prop_next_string
(
struct
property
*
prop
,
const
char
*
cur
);
int
of_device_is_stdout_path
(
struct
device_node
*
dn
);
bool
of_console_check
(
struct
device_node
*
dn
,
char
*
name
,
int
index
);
#else
/* CONFIG_OF */
...
...
@@ -564,9 +565,9 @@ static inline int of_machine_is_compatible(const char *compat)
return
0
;
}
static
inline
int
of_device_is_stdout_path
(
struct
device_node
*
dn
)
static
inline
bool
of_console_check
(
const
struct
device_node
*
dn
,
const
char
*
name
,
int
index
)
{
return
0
;
return
false
;
}
static
inline
const
__be32
*
of_prop_next_u32
(
struct
property
*
prop
,
...
...
sound/ppc/pmac.c
浏览文件 @
b775e642
...
...
@@ -992,9 +992,9 @@ static int snd_pmac_detect(struct snd_pmac *chip)
return
-
ENODEV
;
if
(
!
sound
)
{
sound
=
of_find_node_by_name
(
NULL
,
"sound"
);
while
(
sound
&&
sound
->
parent
!
=
chip
->
node
)
sound
=
of_find_node_by_name
(
sound
,
"sound"
)
;
for_each_node_by_name
(
sound
,
"sound"
)
if
(
sound
->
parent
=
=
chip
->
node
)
break
;
}
if
(
!
sound
)
{
of_node_put
(
chip
->
node
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录