@@ -663,36 +663,32 @@ static int ec_slave_config(ec_slave_t *slave)
663663 }
664664 }
665665
666- // preop state done
667- if (slave -> current_state == slave -> requested_state ) {
668- ret = 0 ;
669- goto errorout ;
670- }
671-
672- // Config process data sm
673- ec_datagram_fpwr (datagram , slave -> station_address ,
674- ESCREG_OF (ESCREG -> SYNCM [pdo_sm_offset ]), EC_SYNC_PAGE_SIZE * pdo_sm_count );
675- ec_datagram_zero (datagram );
676- for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
677- ec_slave_sm_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_SYNC_PAGE_SIZE * i );
678- }
679- datagram -> netdev_idx = slave -> netdev_idx ;
680- ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
681- if (ret < 0 ) {
682- step = 21 ;
683- goto errorout ;
684- }
666+ if (slave -> config ) {
667+ // Config process data sm
668+ ec_datagram_fpwr (datagram , slave -> station_address ,
669+ ESCREG_OF (ESCREG -> SYNCM [pdo_sm_offset ]), EC_SYNC_PAGE_SIZE * pdo_sm_count );
670+ ec_datagram_zero (datagram );
671+ for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
672+ ec_slave_sm_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_SYNC_PAGE_SIZE * i );
673+ }
674+ datagram -> netdev_idx = slave -> netdev_idx ;
675+ ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
676+ if (ret < 0 ) {
677+ step = 21 ;
678+ goto errorout ;
679+ }
685680
686- ec_datagram_fpwr (datagram , slave -> station_address , ESCREG_OF (ESCREG -> FMMU [0 ]), EC_FMMU_PAGE_SIZE * pdo_sm_count );
687- ec_datagram_zero (datagram );
688- for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
689- ec_slave_fmmu_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_FMMU_PAGE_SIZE * i );
690- }
691- datagram -> netdev_idx = slave -> netdev_idx ;
692- ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
693- if (ret < 0 ) {
694- step = 22 ;
695- goto errorout ;
681+ ec_datagram_fpwr (datagram , slave -> station_address , ESCREG_OF (ESCREG -> FMMU [0 ]), EC_FMMU_PAGE_SIZE * pdo_sm_count );
682+ ec_datagram_zero (datagram );
683+ for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
684+ ec_slave_fmmu_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_FMMU_PAGE_SIZE * i );
685+ }
686+ datagram -> netdev_idx = slave -> netdev_idx ;
687+ ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
688+ if (ret < 0 ) {
689+ step = 22 ;
690+ goto errorout ;
691+ }
696692 }
697693
698694 if (slave -> config && slave -> config -> dc_assign_activate ) {
@@ -769,6 +765,12 @@ static int ec_slave_config(ec_slave_t *slave)
769765 }
770766 }
771767
768+ // preop state done
769+ if (slave -> current_state == slave -> requested_state ) {
770+ ret = 0 ;
771+ goto errorout ;
772+ }
773+
772774 ret = ec_slave_state_change (slave , EC_SLAVE_STATE_SAFEOP );
773775 if (ret < 0 ) {
774776 step = 28 ;
0 commit comments