Add bs11_config commands to set the PLL mode from E1_LOCKED to STANDALONE
and vice-versa.  This has not yet been tested yet.

diff --git a/include/openbsc/abis_nm.h b/include/openbsc/abis_nm.h
index 73bb19c..5c1ae8e 100644
--- a/include/openbsc/abis_nm.h
+++ b/include/openbsc/abis_nm.h
@@ -379,6 +379,7 @@
 	NM_ATT_BS11_PLL			= 0xf2,
 	NM_ATT_BS11_RX_OFFSET		= 0xf3,
 	NM_ATT_BS11_ANT_TYPE		= 0xf4,
+	NM_ATT_BS11_PLL_MODE		= 0xfc,
 	NM_ATT_BS11_PASSWORD		= 0xfd,
 };
 #define NM_ATT_BS11_FILE_DATA	NM_ATT_EVENT_TYPE
@@ -472,6 +473,11 @@
 	BS11_TRX_POWER_DCS_160mW= 0x0d,
 };
 
+enum abis_bs11_li_pll_mode {
+	BS11_LI_PLL_LOCKED	= 2,
+	BS11_LI_PLL_STANDALONE	= 3,
+};
+
 enum abis_bs11_phase {
 	BS11_STATE_SOFTWARE_RQD		= 0x01,
 	BS11_STATE_LOAD_SMU_INTENDED	= 0x11,
@@ -548,6 +554,7 @@
 int abis_nm_bs11_get_trx_power(struct gsm_bts_trx *trx);
 int abis_nm_bs11_factory_logon(struct gsm_bts *bts, int on);
 int abis_nm_bs11_set_trx1_pw(struct gsm_bts *bts, const char *password);
+int abis_nm_bs11_set_pll_locked(struct gsm_bts *bts, int locked);
 int abis_nm_bs11_get_state(struct gsm_bts *bts);
 int abis_nm_bs11_load_swl(struct gsm_bts *bts, const char *fname,
 			  u_int8_t win_size, int forced, gsm_cbfn *cbfn);
diff --git a/src/abis_nm.c b/src/abis_nm.c
index 7a9a3f5..3cbfd84 100644
--- a/src/abis_nm.c
+++ b/src/abis_nm.c
@@ -1733,6 +1733,22 @@
 	return abis_nm_sendmsg(bts, msg);
 }
 
+/* change the BS-11 PLL Mode to either locked (E1 derived) or standalone */
+int abis_nm_bs11_set_pll_locked(struct gsm_bts *bts, int locked)
+{
+	struct abis_om_hdr *oh;
+	struct msgb *msg;
+	
+	msg = nm_msgb_alloc();
+	oh = (struct abis_om_hdr *) msgb_put(msg, ABIS_OM_FOM_HDR_SIZE);
+	fill_om_fom_hdr(oh, 3, NM_MT_BS11_SET_ATTR, NM_OC_BS11,
+			BS11_OBJ_LI, 0x00, 0x00);
+	msgb_tlv_put(msg, NM_ATT_BS11_PLL_MODE, 1,
+		     locked ? BS11_LI_PLL_LOCKED : BS11_LI_PLL_STANDALONE);
+	
+	return abis_nm_sendmsg(bts, msg);
+}
+
 int abis_nm_bs11_get_state(struct gsm_bts *bts)
 {
 	return __simple_cmd(bts, NM_MT_BS11_GET_STATE);
diff --git a/src/bs11_config.c b/src/bs11_config.c
index b603e8b..7f75985 100644
--- a/src/bs11_config.c
+++ b/src/bs11_config.c
@@ -459,6 +459,16 @@
 				sleep(1);
 				abis_nm_bs11_factory_logon(g_bts, 0);
 				command = NULL;
+			} else if (!strcmp(command, "pll-e1-locked")) {
+				abis_nm_bs11_set_pll_locked(g_bts, 1);
+				sleep(1);
+				abis_nm_bs11_factory_logon(g_bts, 0);
+				command = NULL;
+			} else if (!strcmp(command, "pll-standalone")) {
+				abis_nm_bs11_set_pll_locked(g_bts, 0);
+				sleep(1);
+				abis_nm_bs11_factory_logon(g_bts, 0);
+				command = NULL;
 			} else if (!strcmp(command, "oml-tei")) {
 				abis_nm_bs11_conn_oml_tei(g_bts, 0, 1, 0xff, TEI_OML);
 				command = NULL;
@@ -615,6 +625,8 @@
 	printf("\tsoftware\tDownload Software (only in administrative state)\n");
 	printf("\tcreate-trx1\tCreate objects for TRX1 (Danger: Your BS-11 might overheat)\n");
 	printf("\tdelete-trx1\tDelete objects for TRX1\n");
+	printf("\tpll-e1-locked\tSet the PLL to be locked to E1 clock\n");
+	printf("\tpll-standalone\tSet the PLL to be in standalone mode\n");
 	printf("\toml-tei\tSet OML E1 TS and TEI\n");
 }