@@ -28,6 +28,7 @@ LOG_MODULE_REGISTER(mspi_nrfe, CONFIG_MSPI_LOG_LEVEL);
28
28
#define EP_SEND_TIMEOUT_MS 10
29
29
#define EXTREME_DRIVE_FREQ_THRESHOLD 32000000
30
30
#define CNT0_TOP_CALCULATE (freq ) (NRFX_CEIL_DIV(SystemCoreClock, freq * 2) - 1)
31
+ #define DATA_LINE_INDEX (pinctr_fun ) (pinctr_fun - NRF_FUN_SDP_MSPI_DQ0)
31
32
32
33
#ifdef CONFIG_SOC_NRF54L15
33
34
@@ -348,6 +349,11 @@ static int check_pin_assignments(const struct pinctrl_state *state)
348
349
uint8_t cs_pins [NRFE_MSPI_PINS_MAX ];
349
350
uint8_t cs_pins_cnt = 0 ;
350
351
uint32_t psel = 0 ;
352
+ uint32_t pin_fun = 0 ;
353
+
354
+ for (uint8_t i = 0 ; i < NRFE_MSPI_DATA_LINE_CNT_MAX ; i ++ ) {
355
+ data_pins [i ] = UINT8_MAX ;
356
+ }
351
357
352
358
for (uint8_t i = 0 ; i < state -> pin_cnt ; i ++ ) {
353
359
psel = NRF_GET_PIN (state -> pins [i ]);
@@ -356,12 +362,18 @@ static int check_pin_assignments(const struct pinctrl_state *state)
356
362
NRFE_MSPI_PORT_NUMBER );
357
363
return - ENOTSUP ;
358
364
}
359
- switch (NRF_GET_FUN (state -> pins [i ])) {
365
+ pin_fun = NRF_GET_FUN (state -> pins [i ]);
366
+ switch (pin_fun ) {
360
367
case NRF_FUN_SDP_MSPI_DQ0 :
361
368
case NRF_FUN_SDP_MSPI_DQ1 :
362
369
case NRF_FUN_SDP_MSPI_DQ2 :
363
370
case NRF_FUN_SDP_MSPI_DQ3 :
364
- data_pins [data_pins_cnt ] = NRF_PIN_NUMBER_TO_PIN (psel );
371
+ if (data_pins [DATA_LINE_INDEX (pin_fun )] != UINT8_MAX ) {
372
+ LOG_ERR ("This pin is assigned to an already taken data line: %d.%d." ,
373
+ NRF_PIN_NUMBER_TO_PORT (psel ), NRF_PIN_NUMBER_TO_PIN (psel ));
374
+ return - EINVAL ;
375
+ }
376
+ data_pins [DATA_LINE_INDEX (pin_fun )] = NRF_PIN_NUMBER_TO_PIN (psel );
365
377
data_pins_cnt ++ ;
366
378
break ;
367
379
case NRF_FUN_SDP_MSPI_DQ4 :
@@ -386,7 +398,7 @@ static int check_pin_assignments(const struct pinctrl_state *state)
386
398
}
387
399
break ;
388
400
default :
389
- LOG_ERR ("Not supported pin function: %d" , NRF_GET_FUN ( state -> pins [ i ]) );
401
+ LOG_ERR ("Not supported pin function: %d" , pin_fun );
390
402
return - ENOTSUP ;
391
403
}
392
404
}
0 commit comments