generalize channel activation / channel mode modify

* we only need one piece of code to calculate rsl_ie_chan_mode from
  our run-time data structures (gsm_lchan)
* add some more channel modes for TCH/H and data
* use enum's to make the compiler warn us about unhandled enum values
* make sure the caller determines the (signalling,speech,data) mode
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index a7577d2..078e95f 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1746,6 +1746,7 @@
 		DEBUGP(DRR, "CHANNEL MODE MODIFY ACK\n");
 		/* We've successfully modified the MS side of the channel,
 		 * now go on to modify the BTS side of the channel */
+		msg->lchan->rsl_cmode = RSL_CMOD_SPD_SPEECH;
 		rc = rsl_chan_mode_modify_req(msg->lchan);
 		break;
 	case GSM48_MT_RR_STATUS: