RBS2000: Automatically connect/start/configure/enable most MOs
diff --git a/openbsc/src/libbsc/bts_ericsson_rbs2000.c b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
index 6480d34..1b64b36 100644
--- a/openbsc/src/libbsc/bts_ericsson_rbs2000.c
+++ b/openbsc/src/libbsc/bts_ericsson_rbs2000.c
@@ -161,13 +161,12 @@
 	case OM2K_MO_CLS_IS:
 		if (nsd->new_state->availability == OM2K_MO_S_ENABLED) {
 			/* IS is enabled, we can proceed with TRXC/RX/TX/TS */
+			break;
 		}
-		if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
-		    nsd->new_state->availability == OM2K_MO_S_DISABLED)
+		if (nsd->new_state->operational != NM_OPSTATE_ENABLED)
 			break;
 		/* IS has started, we can configure + enable it */
 		abis_om2k_tx_is_conf_req(nsd->bts);
-		abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
 		break;
 	case OM2K_MO_CLS_TF:
 		if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
@@ -176,12 +175,10 @@
 		if (nsd->new_state->availability == OM2K_MO_S_STARTED) {
 			/* TF has started, configure + enable it */
 			abis_om2k_tx_is_conf_req(nsd->bts);
-			abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
 		}
 		break;
 	case OM2K_MO_CLS_TRXC:
-		if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
-		    nsd->new_state->availability != OM2K_MO_S_STARTED)
+		if (nsd->new_state->availability != OM2K_MO_S_STARTED)
 			break;
 		/* TRXC is started, connect the TX and RX objects */
 		memcpy(&mo, nsd->om2k_mo, sizeof(mo));
@@ -196,7 +193,6 @@
 			break;
 		/* RX is started, configure + enable it */
 		abis_om2k_tx_rx_conf_req(nsd->obj);
-		abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
 		break;
 	case OM2K_MO_CLS_TX:
 		if (nsd->new_state->operational != NM_OPSTATE_ENABLED ||
@@ -204,6 +200,18 @@
 			break;
 		/* RX is started, configure + enable it */
 		abis_om2k_tx_tx_conf_req(nsd->obj);
+		break;
+	}
+}
+
+static void nm_conf_res(struct nm_om2k_signal_data *nsd)
+{
+	switch (nsd->om2k_mo->class) {
+	case OM2K_MO_CLS_IS:
+	case OM2K_MO_CLS_TF:
+	case OM2K_MO_CLS_RX:
+	case OM2K_MO_CLS_TX:
+		/* If configuration was a success, enable it */
 		abis_om2k_tx_enable_req(nsd->bts, nsd->om2k_mo);
 		break;
 	}
@@ -219,6 +227,10 @@
 	case S_NM_STATECHG_OPER:
 	case S_NM_STATECHG_ADM:
 		nm_statechg_evt(signal, signal_data);
+		break;
+	case S_NM_OM2K_CONF_RES:
+		nm_conf_res(signal_data);
+		break;
 	default:
 		break;
 	}