@@ -148,10 +148,15 @@ static int clsic_system_service_set_trace(struct clsic_syssrv_struct *syssrv)
148148static int clsic_system_service_set_trace_level (void * data , u64 val )
149149{
150150 struct clsic_syssrv_struct * syssrv = data ;
151+ int ret ;
151152
152153 syssrv -> trace_level = val ;
153154
154- return clsic_system_service_set_trace (syssrv );
155+ pm_runtime_get_sync (syssrv -> clsic -> dev );
156+ ret = clsic_system_service_set_trace (syssrv );
157+ pm_runtime_put_autosuspend (syssrv -> clsic -> dev );
158+ return ret ;
159+
155160}
156161
157162static int clsic_system_service_get_trace_level (void * data , u64 * val )
@@ -170,10 +175,14 @@ DEFINE_DEBUGFS_ATTRIBUTE(clsic_system_service_trace_level_fops,
170175static int clsic_system_service_set_trace_mask (void * data , u64 val )
171176{
172177 struct clsic_syssrv_struct * syssrv = data ;
178+ int ret ;
173179
174180 syssrv -> trace_mask = val ;
175181
176- return clsic_system_service_set_trace (syssrv );
182+ pm_runtime_get_sync (syssrv -> clsic -> dev );
183+ ret = clsic_system_service_set_trace (syssrv );
184+ pm_runtime_put_autosuspend (syssrv -> clsic -> dev );
185+ return ret ;
177186}
178187
179188static int clsic_system_service_get_trace_mask (void * data , u64 * val )
@@ -189,6 +198,31 @@ DEFINE_DEBUGFS_ATTRIBUTE(clsic_system_service_trace_mask_fops,
189198 clsic_system_service_get_trace_mask ,
190199 clsic_system_service_set_trace_mask , "%llx\n" );
191200
201+ /*
202+ * Simple pm_handler that sets the device trace options if they have been
203+ * changed from the default.
204+ */
205+ static int clsic_system_service_pm_handler (struct clsic_service * handler ,
206+ int pm_event )
207+ {
208+ struct clsic_syssrv_struct * syssrv = handler -> data ;
209+ int ret = 0 ;
210+
211+ switch (pm_event ) {
212+ case PM_EVENT_RESUME :
213+ if ((syssrv -> trace_level != CLSIC_SYSSRV_DEFAULT_TRACE_LEVEL ) ||
214+ (syssrv -> trace_mask != CLSIC_SYSSRV_DEFAULT_TRACE_MASK ))
215+ clsic_system_service_set_trace (syssrv );
216+ break ;
217+ case PM_EVENT_SUSPEND :
218+ default :
219+ break ;
220+ }
221+
222+ return ret ;
223+ }
224+
225+
192226int clsic_system_service_start (struct clsic * clsic ,
193227 struct clsic_service * handler )
194228{
@@ -228,6 +262,7 @@ int clsic_system_service_start(struct clsic *clsic,
228262 handler -> stop = & clsic_system_service_stop ;
229263 handler -> data = syssrv ;
230264 handler -> supports_debuginfo = true;
265+ handler -> pm_handler = & clsic_system_service_pm_handler ;
231266
232267 return 0 ;
233268}
0 commit comments