dyn TS: fix: abis_om2000: also handle dyn TS as TCH

Add ts2comb() to switch on dyn TS so that dyn TS in TCH mode are also treated
like normal TCH/H or TCH/F pchans. Use ts2comb() instead of pchan2comb().

Change-Id: Iddc51a4409488d91db59228ca66aaab73ce3f1df
diff --git a/openbsc/src/libbsc/abis_om2000.c b/openbsc/src/libbsc/abis_om2000.c
index 2e5a79a..1745a72 100644
--- a/openbsc/src/libbsc/abis_om2000.c
+++ b/openbsc/src/libbsc/abis_om2000.c
@@ -1123,13 +1123,27 @@
 	case GSM_PCHAN_TCH_F:
 	case GSM_PCHAN_TCH_H:
 	case GSM_PCHAN_PDCH:
-	case GSM_PCHAN_TCH_F_PDCH:
 		return 8;
 	default:
 		return 0;
 	}
 }
 
+static uint8_t ts2comb(struct gsm_bts_trx_ts *ts)
+{
+	switch (ts->pchan) {
+	case GSM_PCHAN_TCH_F_PDCH:
+		if (ts->flags & TS_F_PDCH_ACTIVE)
+			return pchan2comb(GSM_PCHAN_PDCH);
+		else
+			return pchan2comb(GSM_PCHAN_TCH_F);
+	case GSM_PCHAN_TCH_F_TCH_H_PDCH:
+		return pchan2comb(ts->dyn.pchan_is);
+	default:
+		return pchan2comb(ts->pchan);
+	}
+}
+
 static int put_freq_list(uint8_t *buf, uint16_t arfcn)
 {
 	buf[0] = 0x00; /* TX/RX address */
@@ -1179,7 +1193,7 @@
 	o2k = (struct abis_om2k_hdr *) msgb_put(msg, sizeof(*o2k));
 	fill_om2k_hdr(o2k, &mo, OM2K_MSGT_TS_CONF_REQ);
 
-	msgb_tv_put(msg, OM2K_DEI_COMBINATION, pchan2comb(ts->pchan));
+	msgb_tv_put(msg, OM2K_DEI_COMBINATION, ts2comb(ts));
 	msgb_tv_put(msg, OM2K_DEI_TS_NR, ts->nr);
 	msgb_tlv_put(msg, OM2K_DEI_FREQ_LIST, freq_list_len, freq_list);
 	msgb_tv_put(msg, OM2K_DEI_HSN, ts->hopping.hsn);