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
nexedi
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
Show 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 {
...
@@ -75,8 +75,7 @@ enum {
EC_FLAGS_WAIT_GPE
=
0
,
/* Don't check status until GPE arrives */
EC_FLAGS_WAIT_GPE
=
0
,
/* Don't check status until GPE arrives */
EC_FLAGS_QUERY_PENDING
,
/* Query is pending */
EC_FLAGS_QUERY_PENDING
,
/* Query is pending */
EC_FLAGS_GPE_MODE
,
/* Expect GPE to be sent for status change */
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_ONLY_IBF_GPE
,
/* Expect GPE only for IBF = 0 event */
EC_FLAGS_ADDRESS
,
/* Address is being written */
};
};
static
int
acpi_ec_remove
(
struct
acpi_device
*
device
,
int
type
);
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)
...
@@ -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
)
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
))
&&
if
(
likely
(
test_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
))
&&
likely
(
!
force_poll
))
{
likely
(
!
force_poll
))
{
if
(
wait_event_timeout
(
ec
->
wait
,
acpi_ec_check_status
(
ec
,
event
),
if
(
wait_event_timeout
(
ec
->
wait
,
acpi_ec_check_status
(
ec
,
event
),
msecs_to_jiffies
(
ACPI_EC_DELAY
)))
msecs_to_jiffies
(
ACPI_EC_DELAY
)))
goto
end
;
return
0
;
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
if
(
acpi_ec_check_status
(
ec
,
event
))
{
if
(
acpi_ec_check_status
(
ec
,
event
))
{
if
(
test_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
)
)
{
if
(
event
==
ACPI_EC_EVENT_OBF_1
)
{
/* miss
address
GPE, don't expect it anymore */
/* miss
OBF = 1
GPE, don't expect it anymore */
printk
(
KERN_INFO
PREFIX
"missing
address
confirmation,"
printk
(
KERN_INFO
PREFIX
"missing
OBF_1
confirmation,"
"
don't expect it any longer
.
\n
"
);
"
switching to degraded mode
.
\n
"
);
set_bit
(
EC_FLAGS_
NO_ADDRESS
_GPE
,
&
ec
->
flags
);
set_bit
(
EC_FLAGS_
ONLY_IBF
_GPE
,
&
ec
->
flags
);
}
else
{
}
else
{
/* missing GPEs, switch back to poll mode */
/* 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
"
);
"switch off interrupt mode.
\n
"
);
clear_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
);
clear_bit
(
EC_FLAGS_GPE_MODE
,
&
ec
->
flags
);
}
}
goto
end
;
return
0
;
}
}
}
else
{
}
else
{
unsigned
long
delay
=
jiffies
+
msecs_to_jiffies
(
ACPI_EC_DELAY
);
unsigned
long
delay
=
jiffies
+
msecs_to_jiffies
(
ACPI_EC_DELAY
);
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
clear_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
while
(
time_before
(
jiffies
,
delay
))
{
while
(
time_before
(
jiffies
,
delay
))
{
if
(
acpi_ec_check_status
(
ec
,
event
))
if
(
acpi_ec_check_status
(
ec
,
event
))
goto
end
;
return
0
;
}
}
}
}
printk
(
KERN_ERR
PREFIX
"acpi_ec_wait timeout,"
printk
(
KERN_ERR
PREFIX
"acpi_ec_wait timeout,"
" status = %d, expect_event = %d
\n
"
,
" status = %d, expect_event = %d
\n
"
,
acpi_ec_read_status
(
ec
),
event
);
acpi_ec_read_status
(
ec
),
event
);
ret
=
-
ETIME
;
return
-
ETIME
;
end:
clear_bit
(
EC_FLAGS_ADDRESS
,
&
ec
->
flags
);
return
ret
;
}
}
static
int
acpi_ec_transaction_unlocked
(
struct
acpi_ec
*
ec
,
u8
command
,
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,
...
@@ -224,9 +216,6 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
"write_cmd timeout, command = %d
\n
"
,
command
);
"write_cmd timeout, command = %d
\n
"
,
command
);
goto
end
;
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
);
set_bit
(
EC_FLAGS_WAIT_GPE
,
&
ec
->
flags
);
acpi_ec_write_data
(
ec
,
*
(
wdata
++
));
acpi_ec_write_data
(
ec
,
*
(
wdata
++
));
}
}
...
@@ -242,6 +231,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
...
@@ -242,6 +231,8 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, u8 command,
clear_bit
(
EC_FLAGS_QUERY_PENDING
,
&
ec
->
flags
);
clear_bit
(
EC_FLAGS_QUERY_PENDING
,
&
ec
->
flags
);
for
(;
rdata_len
>
0
;
--
rdata_len
)
{
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
);
result
=
acpi_ec_wait
(
ec
,
ACPI_EC_EVENT_OBF_1
,
force_poll
);
if
(
result
)
{
if
(
result
)
{
printk
(
KERN_ERR
PREFIX
"read timeout, command = %d
\n
"
,
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