Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
Commits
2256c13b
Commit
2256c13b
authored
Oct 06, 2005
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SPARC64]: Probe for power device on ISA bus too.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
edb4a353
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
13 deletions
+51
-13
arch/sparc64/kernel/power.c
arch/sparc64/kernel/power.c
+51
-13
No files found.
arch/sparc64/kernel/power.c
View file @
2256c13b
...
...
@@ -17,6 +17,7 @@
#include <asm/system.h>
#include <asm/ebus.h>
#include <asm/isa.h>
#include <asm/auxio.h>
#include <linux/unistd.h>
...
...
@@ -100,46 +101,83 @@ again:
return
0
;
}
static
int
__init
has_button_interrupt
(
struct
linux_ebus_device
*
edev
)
static
int
__init
has_button_interrupt
(
unsigned
int
irq
,
int
prom_node
)
{
if
(
edev
->
irqs
[
0
]
==
PCI_IRQ_NONE
)
if
(
irq
==
PCI_IRQ_NONE
)
return
0
;
if
(
!
prom_node_has_property
(
edev
->
prom_node
,
"button"
))
if
(
!
prom_node_has_property
(
prom_node
,
"button"
))
return
0
;
return
1
;
}
void
__init
power_init
(
void
)
static
int
__init
power_probe_ebus
(
struct
resource
**
resp
,
unsigned
int
*
irq_p
,
int
*
prom_node_p
)
{
struct
linux_ebus
*
ebus
;
struct
linux_ebus_device
*
edev
;
for_each_ebus
(
ebus
)
{
for_each_ebusdev
(
edev
,
ebus
)
{
if
(
!
strcmp
(
edev
->
prom_name
,
"power"
))
{
*
resp
=
&
edev
->
resource
[
0
];
*
irq_p
=
edev
->
irqs
[
0
];
*
prom_node_p
=
edev
->
prom_node
;
return
0
;
}
}
}
return
-
ENODEV
;
}
static
int
__init
power_probe_isa
(
struct
resource
**
resp
,
unsigned
int
*
irq_p
,
int
*
prom_node_p
)
{
struct
sparc_isa_bridge
*
isa_bus
;
struct
sparc_isa_device
*
isa_dev
;
for_each_isa
(
isa_bus
)
{
for_each_isadev
(
isa_dev
,
isa_bus
)
{
if
(
!
strcmp
(
isa_dev
->
prom_name
,
"power"
))
{
*
resp
=
&
isa_dev
->
resource
;
*
irq_p
=
isa_dev
->
irq
;
*
prom_node_p
=
isa_dev
->
prom_node
;
return
0
;
}
}
}
return
-
ENODEV
;
}
void
__init
power_init
(
void
)
{
struct
resource
*
res
=
NULL
;
unsigned
int
irq
;
int
prom_node
;
static
int
invoked
;
if
(
invoked
)
return
;
invoked
=
1
;
for_each_ebus
(
ebus
)
{
for_each_ebusdev
(
edev
,
ebus
)
{
if
(
!
strcmp
(
edev
->
prom_name
,
"power"
))
goto
found
;
}
}
if
(
!
power_probe_ebus
(
&
res
,
&
irq
,
&
prom_node
))
goto
found
;
if
(
!
power_probe_isa
(
&
res
,
&
irq
,
&
prom_node
))
goto
found
;
return
;
found:
power_reg
=
ioremap
(
edev
->
resource
[
0
].
start
,
0x4
);
power_reg
=
ioremap
(
res
->
start
,
0x4
);
printk
(
"power: Control reg at %p ... "
,
power_reg
);
poweroff_method
=
machine_halt
;
/* able to use the standard halt */
if
(
has_button_interrupt
(
edev
))
{
if
(
has_button_interrupt
(
irq
,
prom_node
))
{
if
(
kernel_thread
(
powerd
,
NULL
,
CLONE_FS
)
<
0
)
{
printk
(
"Failed to start power daemon.
\n
"
);
return
;
}
printk
(
"powerd running.
\n
"
);
if
(
request_irq
(
edev
->
irqs
[
0
]
,
if
(
request_irq
(
irq
,
power_handler
,
SA_SHIRQ
,
"power"
,
NULL
)
<
0
)
printk
(
"power: Error, cannot register IRQ handler.
\n
"
);
}
else
{
...
...
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