Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
b775e642
Commit
b775e642
authored
Aug 11, 2014
by
Grant Likely
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'devicetree/next-console' into devicetree/next
parents
32147e9a
ccdb8ed3
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
64 additions
and
119 deletions
+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
No files found.
arch/arm/boot/dts/versatile-ab.dts
View file @
b775e642
...
...
@@ -15,6 +15,10 @@ aliases {
i2c0
=
&
i2c0
;
};
chosen
{
stdout
-
path
=
&
uart0
;
};
memory
{
reg
=
<
0x0
0x08000000
>;
};
...
...
arch/powerpc/platforms/powermac/feature.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
*
* Check if this device node matches the linux,stdout-path property
* in the chosen node. return true if yes, false otherwise.
* 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 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
View file @
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
View file @
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'.
* indicates that it's a byte channel node.
*/
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
);
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
View file @
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
(
!
stdout_node
)
{
pr_err
(
"hvc_opal: Failed to locate default console!
\n
"
);
return
;
}
}
else
{
/* If the console wasn't in /chosen, try /ibm,opal */
if
(
!
stdout_node
)
{
struct
device_node
*
opal
,
*
np
;
/* Current OPAL takeover doesn't provide the stdout
...
...
drivers/tty/hvc/hvc_vio.c
View file @
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
View file @
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
View file @
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
View file @
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
View file @
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
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment