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
0af2f653
Commit
0af2f653
authored
Nov 20, 2007
by
Len Brown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Revert "ACPI: EC: Workaround for optimized controllers"
This reverts commit
f2d68935
.
parent
f2d68935
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
13 additions
and
22 deletions
+13
-22
drivers/acpi/ec.c
drivers/acpi/ec.c
+13
-22
No files found.
drivers/acpi/ec.c
View file @
0af2f653
...
...
@@ -75,8 +75,7 @@ enum {
EC_FLAGS_WAIT_GPE
=
0
,
/* Don't check status until GPE arrives */
EC_FLAGS_QUERY_PENDING
,
/* Query is pending */
EC_FLAGS_GPE_MODE
,
/* Expect GPE to be sent for status change */
EC_FLAGS_NO_ADDRESS_GPE
,
/* Expect GPE only for non-address event */
EC_FLAGS_ADDRESS
,
/* Address is being written */
EC_FLAGS_ONLY_IBF_GPE
,
/* Expect GPE only for IBF = 0 event */
};
static
int
acpi_ec_remove
(
struct
acpi_device
*
device
,
int
type
);
...
...
@@ -167,45 +166,38 @@ static inline int acpi_ec_check_status(struct acpi_ec *ec, enum ec_event event)
static
int
acpi_ec_wait
(
struct
acpi_ec
*
ec
,
enum
ec_event
event
,
int
force_poll
)
{
int
ret
=
0
;
if
(
unlikely
(
test_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
)
&&
test_bit
(
EC_FLAGS_NO_ADDRESS_GPE
,
&
ec
->
flags
)))
force_poll
=
1
;
if
(
likely
(
test_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
))
&&
likely
(
!
force_poll
))
{
if
(
wait_event_timeout
(
ec
->
wait
,
acpi_ec_check_status
(
ec
,
event
),
msecs_to_jiffies
(
ACPI_EC_DELAY
)))
goto
end
;
return
0
;
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
if
(
acpi_ec_check_status
(
ec
,
event
))
{
if
(
test_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
)
)
{
/* miss
address
GPE, don't expect it anymore */
printk
(
KERN_INFO
PREFIX
"missing
address
confirmation,"
"
don't expect it any longer
.
\n
"
);
set_bit
(
EC_FLAGS_
NO_ADDRESS
_GPE
,
&
ec
->
flags
);
if
(
event
==
ACPI_EC_EVENT_OBF_1
)
{
/* miss
OBF = 1
GPE, don't expect it anymore */
printk
(
KERN_INFO
PREFIX
"missing
OBF_1
confirmation,"
"
switching to degraded mode
.
\n
"
);
set_bit
(
EC_FLAGS_
ONLY_IBF
_GPE
,
&
ec
->
flags
);
}
else
{
/* missing GPEs, switch back to poll mode */
printk
(
KERN_INFO
PREFIX
"missing confirmations,"
printk
(
KERN_INFO
PREFIX
"missing
IBF_1
confirmations,"
"switch off interrupt mode.
\n
"
);
clear_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
);
}
goto
end
;
return
0
;
}
}
else
{
unsigned
long
delay
=
jiffies
+
msecs_to_jiffies
(
ACPI_EC_DELAY
);
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
while
(
time_before
(
jiffies
,
delay
))
{
if
(
acpi_ec_check_status
(
ec
,
event
))
goto
end
;
return
0
;
}
}
printk
(
KERN_ERR
PREFIX
"acpi_ec_wait timeout,"
" status = %d, expect_event = %d
\n
"
,
acpi_ec_read_status
(
ec
),
event
);
ret
=
-
ETIME
;
end:
clear_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
);
return
ret
;
return
-
ETIME
;
}
static
int
acpi_ec_transaction_unlocked
(
struct
acpi_ec
*
ec
,
u8
command
,
...
...
@@ -224,9 +216,6 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
"write_cmd timeout, command = %d
\n
"
,
command
);
goto
end
;
}
/* mark the address byte written to EC */
if
(
rdata_len
+
wdata_len
>
1
)
set_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
);
set_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
acpi_ec_write_data
(
ec
,
*
(
wdata
++
));
}
...
...
@@ -242,6 +231,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
clear_bit
(
EC_FLAGS_QUERY_PENDING
,
&
ec
->
flags
);
for
(;
rdata_len
>
0
;
--
rdata_len
)
{
if
(
test_bit
(
EC_FLAGS_ONLY_IBF_GPE
,
&
ec
->
flags
))
force_poll
=
1
;
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_OBF_1
,
force_poll
);
if
(
result
)
{
printk
(
KERN_ERR
PREFIX
"read timeout, command = %d
\n
"
,
...
...
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