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
faacd5ad
Commit
faacd5ad
authored
Jun 15, 2015
by
Rafael J. Wysocki
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'acpi-scan' into acpi-cca
parents
0f57d867
0519ade7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
38 deletions
+51
-38
drivers/acpi/internal.h
drivers/acpi/internal.h
+2
-0
drivers/acpi/property.c
drivers/acpi/property.c
+31
-23
drivers/acpi/scan.c
drivers/acpi/scan.c
+16
-14
include/acpi/acpi_bus.h
include/acpi/acpi_bus.h
+2
-1
No files found.
drivers/acpi/internal.h
View file @
faacd5ad
...
@@ -191,6 +191,8 @@ bool acpi_osi_is_win8(void);
...
@@ -191,6 +191,8 @@ bool acpi_osi_is_win8(void);
/*--------------------------------------------------------------------------
/*--------------------------------------------------------------------------
Device properties
Device properties
-------------------------------------------------------------------------- */
-------------------------------------------------------------------------- */
#define ACPI_DT_NAMESPACE_HID "PRP0001"
void
acpi_init_properties
(
struct
acpi_device
*
adev
);
void
acpi_init_properties
(
struct
acpi_device
*
adev
);
void
acpi_free_properties
(
struct
acpi_device
*
adev
);
void
acpi_free_properties
(
struct
acpi_device
*
adev
);
...
...
drivers/acpi/property.c
View file @
faacd5ad
...
@@ -79,50 +79,51 @@ static bool acpi_properties_format_valid(const union acpi_object *properties)
...
@@ -79,50 +79,51 @@ static bool acpi_properties_format_valid(const union acpi_object *properties)
static
void
acpi_init_of_compatible
(
struct
acpi_device
*
adev
)
static
void
acpi_init_of_compatible
(
struct
acpi_device
*
adev
)
{
{
const
union
acpi_object
*
of_compatible
;
const
union
acpi_object
*
of_compatible
;
struct
acpi_hardware_id
*
hwid
;
bool
acpi_of
=
false
;
int
ret
;
int
ret
;
/*
* Check if the special PRP0001 ACPI ID is present and in that
* case we fill in Device Tree compatible properties for this
* device.
*/
list_for_each_entry
(
hwid
,
&
adev
->
pnp
.
ids
,
list
)
{
if
(
!
strcmp
(
hwid
->
id
,
"PRP0001"
))
{
acpi_of
=
true
;
break
;
}
}
if
(
!
acpi_of
)
return
;
ret
=
acpi_dev_get_property_array
(
adev
,
"compatible"
,
ACPI_TYPE_STRING
,
ret
=
acpi_dev_get_property_array
(
adev
,
"compatible"
,
ACPI_TYPE_STRING
,
&
of_compatible
);
&
of_compatible
);
if
(
ret
)
{
if
(
ret
)
{
ret
=
acpi_dev_get_property
(
adev
,
"compatible"
,
ret
=
acpi_dev_get_property
(
adev
,
"compatible"
,
ACPI_TYPE_STRING
,
&
of_compatible
);
ACPI_TYPE_STRING
,
&
of_compatible
);
if
(
ret
)
{
if
(
ret
)
{
acpi_handle_warn
(
adev
->
handle
,
if
(
adev
->
parent
"PRP0001 requires compatible property
\n
"
);
&&
adev
->
parent
->
flags
.
of_compatible_ok
)
goto
out
;
return
;
return
;
}
}
}
}
adev
->
data
.
of_compatible
=
of_compatible
;
adev
->
data
.
of_compatible
=
of_compatible
;
out:
adev
->
flags
.
of_compatible_ok
=
1
;
}
}
void
acpi_init_properties
(
struct
acpi_device
*
adev
)
void
acpi_init_properties
(
struct
acpi_device
*
adev
)
{
{
struct
acpi_buffer
buf
=
{
ACPI_ALLOCATE_BUFFER
};
struct
acpi_buffer
buf
=
{
ACPI_ALLOCATE_BUFFER
};
bool
acpi_of
=
false
;
struct
acpi_hardware_id
*
hwid
;
const
union
acpi_object
*
desc
;
const
union
acpi_object
*
desc
;
acpi_status
status
;
acpi_status
status
;
int
i
;
int
i
;
/*
* Check if ACPI_DT_NAMESPACE_HID is present and inthat case we fill in
* Device Tree compatible properties for this device.
*/
list_for_each_entry
(
hwid
,
&
adev
->
pnp
.
ids
,
list
)
{
if
(
!
strcmp
(
hwid
->
id
,
ACPI_DT_NAMESPACE_HID
))
{
acpi_of
=
true
;
break
;
}
}
status
=
acpi_evaluate_object_typed
(
adev
->
handle
,
"_DSD"
,
NULL
,
&
buf
,
status
=
acpi_evaluate_object_typed
(
adev
->
handle
,
"_DSD"
,
NULL
,
&
buf
,
ACPI_TYPE_PACKAGE
);
ACPI_TYPE_PACKAGE
);
if
(
ACPI_FAILURE
(
status
))
if
(
ACPI_FAILURE
(
status
))
return
;
goto
out
;
desc
=
buf
.
pointer
;
desc
=
buf
.
pointer
;
if
(
desc
->
package
.
count
%
2
)
if
(
desc
->
package
.
count
%
2
)
...
@@ -156,13 +157,20 @@ void acpi_init_properties(struct acpi_device *adev)
...
@@ -156,13 +157,20 @@ void acpi_init_properties(struct acpi_device *adev)
adev
->
data
.
pointer
=
buf
.
pointer
;
adev
->
data
.
pointer
=
buf
.
pointer
;
adev
->
data
.
properties
=
properties
;
adev
->
data
.
properties
=
properties
;
acpi_init_of_compatible
(
adev
);
if
(
acpi_of
)
return
;
acpi_init_of_compatible
(
adev
);
goto
out
;
}
}
fail:
fail:
dev_
warn
(
&
adev
->
dev
,
"Returned _DSD data is not valid, skipping
\n
"
);
dev_
dbg
(
&
adev
->
dev
,
"Returned _DSD data is not valid, skipping
\n
"
);
ACPI_FREE
(
buf
.
pointer
);
ACPI_FREE
(
buf
.
pointer
);
out:
if
(
acpi_of
&&
!
adev
->
flags
.
of_compatible_ok
)
acpi_handle_info
(
adev
->
handle
,
ACPI_DT_NAMESPACE_HID
" requires 'compatible' property
\n
"
);
}
}
void
acpi_free_properties
(
struct
acpi_device
*
adev
)
void
acpi_free_properties
(
struct
acpi_device
*
adev
)
...
...
drivers/acpi/scan.c
View file @
faacd5ad
...
@@ -135,12 +135,13 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
...
@@ -135,12 +135,13 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
struct
acpi_hardware_id
*
id
;
struct
acpi_hardware_id
*
id
;
/*
/*
* Since we skip PRP0001 from the modalias below, 0 should be returned
* Since we skip ACPI_DT_NAMESPACE_HID from the modalias below, 0 should
* if PRP0001 is the only ACPI/PNP ID in the device's list.
* be returned if ACPI_DT_NAMESPACE_HID is the only ACPI/PNP ID in the
* device's list.
*/
*/
count
=
0
;
count
=
0
;
list_for_each_entry
(
id
,
&
acpi_dev
->
pnp
.
ids
,
list
)
list_for_each_entry
(
id
,
&
acpi_dev
->
pnp
.
ids
,
list
)
if
(
strcmp
(
id
->
id
,
"PRP0001"
))
if
(
strcmp
(
id
->
id
,
ACPI_DT_NAMESPACE_HID
))
count
++
;
count
++
;
if
(
!
count
)
if
(
!
count
)
...
@@ -153,7 +154,7 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
...
@@ -153,7 +154,7 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
size
-=
len
;
size
-=
len
;
list_for_each_entry
(
id
,
&
acpi_dev
->
pnp
.
ids
,
list
)
{
list_for_each_entry
(
id
,
&
acpi_dev
->
pnp
.
ids
,
list
)
{
if
(
!
strcmp
(
id
->
id
,
"PRP0001"
))
if
(
!
strcmp
(
id
->
id
,
ACPI_DT_NAMESPACE_HID
))
continue
;
continue
;
count
=
snprintf
(
&
modalias
[
len
],
size
,
"%s:"
,
id
->
id
);
count
=
snprintf
(
&
modalias
[
len
],
size
,
"%s:"
,
id
->
id
);
...
@@ -177,7 +178,8 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
...
@@ -177,7 +178,8 @@ static int create_pnp_modalias(struct acpi_device *acpi_dev, char *modalias,
* @size: Size of the buffer.
* @size: Size of the buffer.
*
*
* Expose DT compatible modalias as of:NnameTCcompatible. This function should
* Expose DT compatible modalias as of:NnameTCcompatible. This function should
* only be called for devices having PRP0001 in their list of ACPI/PNP IDs.
* only be called for devices having ACPI_DT_NAMESPACE_HID in their list of
* ACPI/PNP IDs.
*/
*/
static
int
create_of_modalias
(
struct
acpi_device
*
acpi_dev
,
char
*
modalias
,
static
int
create_of_modalias
(
struct
acpi_device
*
acpi_dev
,
char
*
modalias
,
int
size
)
int
size
)
...
@@ -980,9 +982,9 @@ static void acpi_device_remove_files(struct acpi_device *dev)
...
@@ -980,9 +982,9 @@ static void acpi_device_remove_files(struct acpi_device *dev)
* @adev: ACPI device object to match.
* @adev: ACPI device object to match.
* @of_match_table: List of device IDs to match against.
* @of_match_table: List of device IDs to match against.
*
*
* If @dev has an ACPI companion which has
the special PRP0001 device ID in its
* If @dev has an ACPI companion which has
ACPI_DT_NAMESPACE_HID in its list of
*
list of identifiers and a _DSD object with the "compatible" property, use
*
identifiers and a _DSD object with the "compatible" property, use that
*
that
property to match against the given list of identifiers.
* property to match against the given list of identifiers.
*/
*/
static
bool
acpi_of_match_device
(
struct
acpi_device
*
adev
,
static
bool
acpi_of_match_device
(
struct
acpi_device
*
adev
,
const
struct
of_device_id
*
of_match_table
)
const
struct
of_device_id
*
of_match_table
)
...
@@ -1038,14 +1040,14 @@ static const struct acpi_device_id *__acpi_match_device(
...
@@ -1038,14 +1040,14 @@ static const struct acpi_device_id *__acpi_match_device(
return
id
;
return
id
;
/*
/*
* Next, check
the special "PRP0001"
ID and try to match the
* Next, check
ACPI_DT_NAMESPACE_H
ID and try to match the
* "compatible" property if found.
* "compatible" property if found.
*
*
* The id returned by the below is not valid, but the only
* The id returned by the below is not valid, but the only
* caller passing non-NULL of_ids here is only interested in
* caller passing non-NULL of_ids here is only interested in
* whether or not the return value is NULL.
* whether or not the return value is NULL.
*/
*/
if
(
!
strcmp
(
"PRP0001"
,
hwid
->
id
)
if
(
!
strcmp
(
ACPI_DT_NAMESPACE_HID
,
hwid
->
id
)
&&
acpi_of_match_device
(
device
,
of_ids
))
&&
acpi_of_match_device
(
device
,
of_ids
))
return
id
;
return
id
;
}
}
...
@@ -1671,7 +1673,7 @@ static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
...
@@ -1671,7 +1673,7 @@ static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
static
void
acpi_wakeup_gpe_init
(
struct
acpi_device
*
device
)
static
void
acpi_wakeup_gpe_init
(
struct
acpi_device
*
device
)
{
{
struct
acpi_device_id
button_device_ids
[]
=
{
st
atic
const
st
ruct
acpi_device_id
button_device_ids
[]
=
{
{
"PNP0C0C"
,
0
},
{
"PNP0C0C"
,
0
},
{
"PNP0C0D"
,
0
},
{
"PNP0C0D"
,
0
},
{
"PNP0C0E"
,
0
},
{
"PNP0C0E"
,
0
},
...
@@ -2405,7 +2407,7 @@ static void acpi_default_enumeration(struct acpi_device *device)
...
@@ -2405,7 +2407,7 @@ static void acpi_default_enumeration(struct acpi_device *device)
}
}
static
const
struct
acpi_device_id
generic_device_ids
[]
=
{
static
const
struct
acpi_device_id
generic_device_ids
[]
=
{
{
"PRP0001"
,
},
{
ACPI_DT_NAMESPACE_HID
,
},
{
""
,
},
{
""
,
},
};
};
...
@@ -2413,8 +2415,8 @@ static int acpi_generic_device_attach(struct acpi_device *adev,
...
@@ -2413,8 +2415,8 @@ static int acpi_generic_device_attach(struct acpi_device *adev,
const
struct
acpi_device_id
*
not_used
)
const
struct
acpi_device_id
*
not_used
)
{
{
/*
/*
* Since
PRP0001 is the only ID handled here, the test below can be
* Since
ACPI_DT_NAMESPACE_HID is the only ID handled here, the test
* unconditional.
*
below can be
unconditional.
*/
*/
if
(
adev
->
data
.
of_compatible
)
if
(
adev
->
data
.
of_compatible
)
acpi_default_enumeration
(
adev
);
acpi_default_enumeration
(
adev
);
...
...
include/acpi/acpi_bus.h
View file @
faacd5ad
...
@@ -208,7 +208,8 @@ struct acpi_device_flags {
...
@@ -208,7 +208,8 @@ struct acpi_device_flags {
u32
visited
:
1
;
u32
visited
:
1
;
u32
hotplug_notify
:
1
;
u32
hotplug_notify
:
1
;
u32
is_dock_station
:
1
;
u32
is_dock_station
:
1
;
u32
reserved
:
23
;
u32
of_compatible_ok
:
1
;
u32
reserved
:
22
;
};
};
/* File System */
/* File System */
...
...
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