@@ -236,6 +236,40 @@ static void svc_i3c_master_disable_interrupts(struct svc_i3c_master *master)
236
236
writel (mask , master -> regs + SVC_I3C_MINTCLR );
237
237
}
238
238
239
+ static void svc_i3c_master_clear_merrwarn (struct svc_i3c_master * master )
240
+ {
241
+ /* Clear pending warnings */
242
+ writel (readl (master -> regs + SVC_I3C_MERRWARN ),
243
+ master -> regs + SVC_I3C_MERRWARN );
244
+ }
245
+
246
+ static void svc_i3c_master_flush_fifo (struct svc_i3c_master * master )
247
+ {
248
+ /* Flush FIFOs */
249
+ writel (SVC_I3C_MDATACTRL_FLUSHTB | SVC_I3C_MDATACTRL_FLUSHRB ,
250
+ master -> regs + SVC_I3C_MDATACTRL );
251
+ }
252
+
253
+ static void svc_i3c_master_reset_fifo_trigger (struct svc_i3c_master * master )
254
+ {
255
+ u32 reg ;
256
+
257
+ /* Set RX and TX tigger levels, flush FIFOs */
258
+ reg = SVC_I3C_MDATACTRL_FLUSHTB |
259
+ SVC_I3C_MDATACTRL_FLUSHRB |
260
+ SVC_I3C_MDATACTRL_UNLOCK_TRIG |
261
+ SVC_I3C_MDATACTRL_TXTRIG_FIFO_NOT_FULL |
262
+ SVC_I3C_MDATACTRL_RXTRIG_FIFO_NOT_EMPTY ;
263
+ writel (reg , master -> regs + SVC_I3C_MDATACTRL );
264
+ }
265
+
266
+ static void svc_i3c_master_reset (struct svc_i3c_master * master )
267
+ {
268
+ svc_i3c_master_clear_merrwarn (master );
269
+ svc_i3c_master_reset_fifo_trigger (master );
270
+ svc_i3c_master_disable_interrupts (master );
271
+ }
272
+
239
273
static inline struct svc_i3c_master *
240
274
to_svc_i3c_master (struct i3c_master_controller * master )
241
275
{
@@ -279,12 +313,6 @@ static void svc_i3c_master_emit_stop(struct svc_i3c_master *master)
279
313
udelay (1 );
280
314
}
281
315
282
- static void svc_i3c_master_clear_merrwarn (struct svc_i3c_master * master )
283
- {
284
- writel (readl (master -> regs + SVC_I3C_MERRWARN ),
285
- master -> regs + SVC_I3C_MERRWARN );
286
- }
287
-
288
316
static int svc_i3c_master_handle_ibi (struct svc_i3c_master * master ,
289
317
struct i3c_dev_desc * dev )
290
318
{
@@ -1334,25 +1362,6 @@ static const struct i3c_master_controller_ops svc_i3c_master_ops = {
1334
1362
.disable_ibi = svc_i3c_master_disable_ibi ,
1335
1363
};
1336
1364
1337
- static void svc_i3c_master_reset (struct svc_i3c_master * master )
1338
- {
1339
- u32 reg ;
1340
-
1341
- /* Clear pending warnings */
1342
- writel (readl (master -> regs + SVC_I3C_MERRWARN ),
1343
- master -> regs + SVC_I3C_MERRWARN );
1344
-
1345
- /* Set RX and TX tigger levels, flush FIFOs */
1346
- reg = SVC_I3C_MDATACTRL_FLUSHTB |
1347
- SVC_I3C_MDATACTRL_FLUSHRB |
1348
- SVC_I3C_MDATACTRL_UNLOCK_TRIG |
1349
- SVC_I3C_MDATACTRL_TXTRIG_FIFO_NOT_FULL |
1350
- SVC_I3C_MDATACTRL_RXTRIG_FIFO_NOT_EMPTY ;
1351
- writel (reg , master -> regs + SVC_I3C_MDATACTRL );
1352
-
1353
- svc_i3c_master_disable_interrupts (master );
1354
- }
1355
-
1356
1365
static int svc_i3c_master_probe (struct platform_device * pdev )
1357
1366
{
1358
1367
struct device * dev = & pdev -> dev ;
0 commit comments