diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c index e50e332c0..b75c3f355 100644 --- a/openbsc/src/libbsc/abis_rsl.c +++ b/openbsc/src/libbsc/abis_rsl.c @@ -446,14 +446,6 @@ int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type, struct rsl_ie_chan_mode cm; struct gsm48_chan_desc cd; - rc = channel_mode_from_lchan(&cm, lchan); - if (rc < 0) { - LOGP(DRSL, LOGL_ERROR, - "%s Cannot find channel mode from lchan type\n", - gsm_ts_and_pchan_name(lchan->ts)); - return rc; - } - /* If a TCH_F/PDCH TS is in PDCH mode, deactivate PDCH first. */ if (lchan->ts->pchan == GSM_PCHAN_TCH_F_PDCH && (lchan->ts->flags & TS_F_PDCH_ACTIVE)) { @@ -463,6 +455,14 @@ int rsl_chan_activate_lchan(struct gsm_lchan *lchan, uint8_t act_type, return rsl_ipacc_pdch_activate(lchan->ts, 0); } + rc = channel_mode_from_lchan(&cm, lchan); + if (rc < 0) { + LOGP(DRSL, LOGL_ERROR, + "%s Cannot find channel mode from lchan type\n", + gsm_ts_and_pchan_name(lchan->ts)); + return rc; + } + rsl_lchan_set_state(lchan, LCHAN_S_ACT_REQ); ta = lchan->rqd_ta;