Skip to content

Commit 76f74b2

Browse files
simontrimmerafordcirrus
authored andcommitted
mfd: clsic: system service reapply trace settings on pm resume
Change-Id: I2f36f399af3270cc19d9449f5c40883f4829b901 Signed-off-by: Simon Trimmer <[email protected]>
1 parent aa3e2f3 commit 76f74b2

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

drivers/mfd/clsic/clsic-syssrv.c

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,15 @@ static int clsic_system_service_set_trace(struct clsic_syssrv_struct *syssrv)
148148
static 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

157162
static int clsic_system_service_get_trace_level(void *data, u64 *val)
@@ -170,10 +175,14 @@ DEFINE_DEBUGFS_ATTRIBUTE(clsic_system_service_trace_level_fops,
170175
static 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

179188
static 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+
192226
int 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

Comments
 (0)