2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-05-27 07:12:15 -04:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:34:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-03 10:12:14 +01:00
|
|
|
|
2010-09-25 23:34:46 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-01 22:29:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-29 15:29:55 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 21:54:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-06-23 01:52:55 +02:00
|
|
|
|
|
|
|
|
|
PM: Make power domain callbacks take precedence over subsystem ones
Change the PM core's behavior related to power domains in such a way
that, if a power domain is defined for a given device, its callbacks
will be executed instead of and not in addition to the device
subsystem's PM callbacks.
The idea behind the initial implementation of power domains handling
by the PM core was that power domain callbacks would be executed in
addition to subsystem callbacks, so that it would be possible to
extend the subsystem callbacks by using power domains. It turns out,
however, that this wouldn't be really convenient in some important
situations.
For example, there are systems in which power can only be removed
from entire power domains. On those systems it is not desirable to
execute device drivers' PM callbacks until it is known that power is
going to be removed from the devices in question, which means that
they should be executed by power domain callbacks rather then by
subsystem (e.g. bus type) PM callbacks, because subsystems generally
have no information about what devices belong to which power domain.
Thus, for instance, if the bus type in question is the platform bus
type, its PM callbacks generally should not be called in addition to
power domain callbacks, because they run device drivers' callbacks
unconditionally if defined.
While in principle the default subsystem PM callbacks, or a subset of
them, may be replaced with different functions, it doesn't seem
correct to do so, because that would change the subsystem's behavior
with respect to all devices in the system, regardless of whether or
not they belong to any power domains. Thus, the only remaining
option is to make power domain callbacks take precedence over
subsystem callbacks.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Kevin Hilman <khilman@ti.com>
2011-04-29 00:35:50 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PM: Make system-wide PM and runtime PM treat subsystems consistently
The code handling system-wide power transitions (eg. suspend-to-RAM)
can in theory execute callbacks provided by the device's bus type,
device type and class in each phase of the power transition. In
turn, the runtime PM core code only calls one of those callbacks at
a time, preferring bus type callbacks to device type or class
callbacks and device type callbacks to class callbacks.
It seems reasonable to make them both behave in the same way in that
respect. Moreover, even though a device may belong to two subsystems
(eg. bus type and device class) simultaneously, in practice power
management callbacks for system-wide power transitions are always
provided by only one of them (ie. if the bus type callbacks are
defined, the device class ones are not and vice versa). Thus it is
possible to modify the code handling system-wide power transitions
so that it follows the core runtime PM code (ie. treats the
subsystem callbacks as mutually exclusive).
On the other hand, the core runtime PM code will choose to execute,
for example, a runtime suspend callback provided by the device type
even if the bus type's struct dev_pm_ops object exists, but the
runtime_suspend pointer in it happens to be NULL. This is confusing,
because it may lead to the execution of callbacks from different
subsystems during different operations (eg. the bus type suspend
callback may be executed during runtime suspend of the device, while
the device type callback will be executed during system suspend).
Make all of the power management code treat subsystem callbacks in
a consistent way, such that:
(1) If the device's type is defined (eg. dev->type is not NULL)
and its pm pointer is not NULL, the callbacks from dev->type->pm
will be used.
(2) If dev->type is NULL or dev->type->pm is NULL, but the device's
class is defined (eg. dev->class is not NULL) and its pm pointer
is not NULL, the callbacks from dev->class->pm will be used.
(3) If dev->type is NULL or dev->type->pm is NULL and dev->class is
NULL or dev->class->pm is NULL, the callbacks from dev->bus->pm
will be used provided that both dev->bus and dev->bus->pm are
not NULL.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Kevin Hilman <khilman@ti.com>
Reasoning-sounds-sane-to: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-18 23:20:21 +01:00
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-18 00:34:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 21:54:52 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 21:54:52 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
2011-07-01 22:29:15 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:34:54 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-10-12 11:53:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-12 22:59:33 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-03 23:39:18 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 21:54:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-29 22:54:36 +02:00
|
|
|
|
|
|
|
|
|
2011-12-01 00:01:31 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-06-23 01:52:55 +02:00
|
|
|
|
|
|
|
|
|
PM: Make power domain callbacks take precedence over subsystem ones
Change the PM core's behavior related to power domains in such a way
that, if a power domain is defined for a given device, its callbacks
will be executed instead of and not in addition to the device
subsystem's PM callbacks.
The idea behind the initial implementation of power domains handling
by the PM core was that power domain callbacks would be executed in
addition to subsystem callbacks, so that it would be possible to
extend the subsystem callbacks by using power domains. It turns out,
however, that this wouldn't be really convenient in some important
situations.
For example, there are systems in which power can only be removed
from entire power domains. On those systems it is not desirable to
execute device drivers' PM callbacks until it is known that power is
going to be removed from the devices in question, which means that
they should be executed by power domain callbacks rather then by
subsystem (e.g. bus type) PM callbacks, because subsystems generally
have no information about what devices belong to which power domain.
Thus, for instance, if the bus type in question is the platform bus
type, its PM callbacks generally should not be called in addition to
power domain callbacks, because they run device drivers' callbacks
unconditionally if defined.
While in principle the default subsystem PM callbacks, or a subset of
them, may be replaced with different functions, it doesn't seem
correct to do so, because that would change the subsystem's behavior
with respect to all devices in the system, regardless of whether or
not they belong to any power domains. Thus, the only remaining
option is to make power domain callbacks take precedence over
subsystem callbacks.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Kevin Hilman <khilman@ti.com>
2011-04-29 00:35:50 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PM: Make system-wide PM and runtime PM treat subsystems consistently
The code handling system-wide power transitions (eg. suspend-to-RAM)
can in theory execute callbacks provided by the device's bus type,
device type and class in each phase of the power transition. In
turn, the runtime PM core code only calls one of those callbacks at
a time, preferring bus type callbacks to device type or class
callbacks and device type callbacks to class callbacks.
It seems reasonable to make them both behave in the same way in that
respect. Moreover, even though a device may belong to two subsystems
(eg. bus type and device class) simultaneously, in practice power
management callbacks for system-wide power transitions are always
provided by only one of them (ie. if the bus type callbacks are
defined, the device class ones are not and vice versa). Thus it is
possible to modify the code handling system-wide power transitions
so that it follows the core runtime PM code (ie. treats the
subsystem callbacks as mutually exclusive).
On the other hand, the core runtime PM code will choose to execute,
for example, a runtime suspend callback provided by the device type
even if the bus type's struct dev_pm_ops object exists, but the
runtime_suspend pointer in it happens to be NULL. This is confusing,
because it may lead to the execution of callbacks from different
subsystems during different operations (eg. the bus type suspend
callback may be executed during runtime suspend of the device, while
the device type callback will be executed during system suspend).
Make all of the power management code treat subsystem callbacks in
a consistent way, such that:
(1) If the device's type is defined (eg. dev->type is not NULL)
and its pm pointer is not NULL, the callbacks from dev->type->pm
will be used.
(2) If dev->type is NULL or dev->type->pm is NULL, but the device's
class is defined (eg. dev->class is not NULL) and its pm pointer
is not NULL, the callbacks from dev->class->pm will be used.
(3) If dev->type is NULL or dev->type->pm is NULL and dev->class is
NULL or dev->class->pm is NULL, the callbacks from dev->bus->pm
will be used provided that both dev->bus and dev->bus->pm are
not NULL.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Kevin Hilman <khilman@ti.com>
Reasoning-sounds-sane-to: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-18 23:20:21 +01:00
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-12-18 00:34:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
2011-12-01 00:01:31 +01:00
|
|
|
|
|
|
|
|
|
2011-11-03 23:39:18 +01:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
2011-10-12 22:59:33 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-10-12 22:59:33 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-01-25 20:50:07 +01:00
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
2011-01-25 20:50:07 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-01-25 20:50:07 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-01-25 20:50:07 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2011-12-01 00:01:31 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-03-26 22:46:52 +02:00
|
|
|
|
|
|
|
|
|
2011-12-01 00:01:31 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:34:54 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2011-03-30 22:57:33 -03:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2011-07-01 22:29:15 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 21:54:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-22 23:48:14 +02:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
|
|
|
|
|
2009-11-25 01:06:37 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-11-25 01:06:37 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-11-25 01:06:37 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2009-11-25 01:06:37 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-06-23 01:52:55 +02:00
|
|
|
|
|
|
|
|
|
PM: Make power domain callbacks take precedence over subsystem ones
Change the PM core's behavior related to power domains in such a way
that, if a power domain is defined for a given device, its callbacks
will be executed instead of and not in addition to the device
subsystem's PM callbacks.
The idea behind the initial implementation of power domains handling
by the PM core was that power domain callbacks would be executed in
addition to subsystem callbacks, so that it would be possible to
extend the subsystem callbacks by using power domains. It turns out,
however, that this wouldn't be really convenient in some important
situations.
For example, there are systems in which power can only be removed
from entire power domains. On those systems it is not desirable to
execute device drivers' PM callbacks until it is known that power is
going to be removed from the devices in question, which means that
they should be executed by power domain callbacks rather then by
subsystem (e.g. bus type) PM callbacks, because subsystems generally
have no information about what devices belong to which power domain.
Thus, for instance, if the bus type in question is the platform bus
type, its PM callbacks generally should not be called in addition to
power domain callbacks, because they run device drivers' callbacks
unconditionally if defined.
While in principle the default subsystem PM callbacks, or a subset of
them, may be replaced with different functions, it doesn't seem
correct to do so, because that would change the subsystem's behavior
with respect to all devices in the system, regardless of whether or
not they belong to any power domains. Thus, the only remaining
option is to make power domain callbacks take precedence over
subsystem callbacks.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Kevin Hilman <khilman@ti.com>
2011-04-29 00:35:50 +02:00
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PM: Make system-wide PM and runtime PM treat subsystems consistently
The code handling system-wide power transitions (eg. suspend-to-RAM)
can in theory execute callbacks provided by the device's bus type,
device type and class in each phase of the power transition. In
turn, the runtime PM core code only calls one of those callbacks at
a time, preferring bus type callbacks to device type or class
callbacks and device type callbacks to class callbacks.
It seems reasonable to make them both behave in the same way in that
respect. Moreover, even though a device may belong to two subsystems
(eg. bus type and device class) simultaneously, in practice power
management callbacks for system-wide power transitions are always
provided by only one of them (ie. if the bus type callbacks are
defined, the device class ones are not and vice versa). Thus it is
possible to modify the code handling system-wide power transitions
so that it follows the core runtime PM code (ie. treats the
subsystem callbacks as mutually exclusive).
On the other hand, the core runtime PM code will choose to execute,
for example, a runtime suspend callback provided by the device type
even if the bus type's struct dev_pm_ops object exists, but the
runtime_suspend pointer in it happens to be NULL. This is confusing,
because it may lead to the execution of callbacks from different
subsystems during different operations (eg. the bus type suspend
callback may be executed during runtime suspend of the device, while
the device type callback will be executed during system suspend).
Make all of the power management code treat subsystem callbacks in
a consistent way, such that:
(1) If the device's type is defined (eg. dev->type is not NULL)
and its pm pointer is not NULL, the callbacks from dev->type->pm
will be used.
(2) If dev->type is NULL or dev->type->pm is NULL, but the device's
class is defined (eg. dev->class is not NULL) and its pm pointer
is not NULL, the callbacks from dev->class->pm will be used.
(3) If dev->type is NULL or dev->type->pm is NULL and dev->class is
NULL or dev->class->pm is NULL, the callbacks from dev->bus->pm
will be used provided that both dev->bus and dev->bus->pm are
not NULL.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Kevin Hilman <khilman@ti.com>
Reasoning-sounds-sane-to: Grant Likely <grant.likely@secretlab.ca>
Acked-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-18 23:20:21 +01:00
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-12-18 00:34:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-10-04 22:08:01 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-09-27 22:54:41 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:00 +02:00
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2010-09-25 23:34:54 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-12-13 20:28:30 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-08-08 23:39:36 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-03 20:21:21 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-12-03 21:04:41 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2009-12-03 21:04:41 +01:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2009-11-25 01:06:37 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:07 +02:00
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
|
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2010-09-25 23:35:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
2011-07-06 10:52:13 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-23 22:02:51 +01:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-07-19 02:01:06 +02:00
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-12-01 00:14:42 +01:00
|
|
|
|
|
|
|
|
|
2009-08-18 23:38:32 +02:00
|
|
|
|