9
9
#include <zephyr/pm/device.h>
10
10
#include <zephyr/pm/device_runtime.h>
11
11
12
+ static int dev_pm_control_resume_ret ;
13
+ static int dev_pm_control_turn_on_ret ;
14
+
12
15
static int dev_init (const struct device * dev )
13
16
{
14
17
if (!pm_device_is_powered (dev )) {
@@ -20,9 +23,26 @@ static int dev_init(const struct device *dev)
20
23
int dev_pm_control (const struct device * dev , enum pm_device_action action )
21
24
{
22
25
ARG_UNUSED (dev );
23
- ARG_UNUSED (action );
24
26
25
- return 0 ;
27
+ int ret = 0 ;
28
+
29
+ switch (action ) {
30
+ case PM_DEVICE_ACTION_SUSPEND :
31
+ break ;
32
+ case PM_DEVICE_ACTION_RESUME :
33
+ ret = dev_pm_control_resume_ret ;
34
+ break ;
35
+ case PM_DEVICE_ACTION_TURN_ON :
36
+ ret = dev_pm_control_turn_on_ret ;
37
+ break ;
38
+ case PM_DEVICE_ACTION_TURN_OFF :
39
+ break ;
40
+ default :
41
+ ret = - ENOTSUP ;
42
+ break ;
43
+ }
44
+
45
+ return ret ;
26
46
}
27
47
28
48
PM_DEVICE_DT_DEFINE (DT_NODELABEL (test_dev ), dev_pm_control );
@@ -133,6 +153,30 @@ ZTEST(device_power_domain, test_device_power_domain)
133
153
pm_device_state_get (reg_1 , & state );
134
154
zassert_equal (PM_DEVICE_STATE_SUSPENDED , state , "" );
135
155
156
+ /* Directly request the supported device but turn on fails */
157
+ dev_pm_control_turn_on_ret = - EBUSY ;
158
+ pm_device_runtime_get (dev );
159
+ dev_pm_control_turn_on_ret = 0 ;
160
+ zassert_false (pm_device_is_powered (dev ), "" );
161
+ pm_device_state_get (dev , & state );
162
+ zassert_equal (PM_DEVICE_STATE_OFF , state , "" );
163
+ pm_device_state_get (reg_1 , & state );
164
+ zassert_equal (PM_DEVICE_STATE_SUSPENDED , state , "" );
165
+ pm_device_state_get (reg_chained , & state );
166
+ zassert_equal (PM_DEVICE_STATE_OFF , state , "" );
167
+
168
+ /* Directly request the supported device but resume fails */
169
+ dev_pm_control_resume_ret = - EBUSY ;
170
+ pm_device_runtime_get (dev );
171
+ dev_pm_control_resume_ret = 0 ;
172
+ zassert_false (pm_device_is_powered (dev ), "" );
173
+ pm_device_state_get (dev , & state );
174
+ zassert_equal (PM_DEVICE_STATE_OFF , state , "" );
175
+ pm_device_state_get (reg_1 , & state );
176
+ zassert_equal (PM_DEVICE_STATE_SUSPENDED , state , "" );
177
+ pm_device_state_get (reg_chained , & state );
178
+ zassert_equal (PM_DEVICE_STATE_OFF , state , "" );
179
+
136
180
TC_PRINT ("DONE\n" );
137
181
}
138
182
0 commit comments