[PATCH] osmo-bts[master]: LC15: Hardware changes: - Change system devices path - Remov...

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Minh-Quang Nguyen gerrit-no-reply at lists.osmocom.org
Mon Jun 13 13:29:16 UTC 2016


Review at  https://gerrit.osmocom.org/237

LC15: Hardware changes:
- Change system devices path
- Remove obsoleted sensors and add new sensors
- Change TRX and sensors numbering to 0,1 instead of 1,2 (JFD)

Change-Id: I5172daf68d3145a6398e37df87df21b0e5affe42
---
M src/osmo-bts-litecell15/calib_file.c
M src/osmo-bts-litecell15/hw_misc.c
M src/osmo-bts-litecell15/l1_transp_hw.c
M src/osmo-bts-litecell15/misc/lc15bts_bid.c
M src/osmo-bts-litecell15/misc/lc15bts_clock.c
M src/osmo-bts-litecell15/misc/lc15bts_mgr.c
M src/osmo-bts-litecell15/misc/lc15bts_mgr.h
M src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
M src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
M src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
M src/osmo-bts-litecell15/misc/lc15bts_misc.c
M src/osmo-bts-litecell15/misc/lc15bts_par.c
M src/osmo-bts-litecell15/misc/lc15bts_par.h
M src/osmo-bts-litecell15/misc/lc15bts_power.c
M src/osmo-bts-litecell15/misc/lc15bts_power.h
M src/osmo-bts-litecell15/misc/lc15bts_temp.c
M src/osmo-bts-litecell15/misc/lc15bts_temp.h
17 files changed, 322 insertions(+), 336 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/37/237/1

diff --git a/src/osmo-bts-litecell15/calib_file.c b/src/osmo-bts-litecell15/calib_file.c
index da79df6..c6be4f0 100644
--- a/src/osmo-bts-litecell15/calib_file.c
+++ b/src/osmo-bts-litecell15/calib_file.c
@@ -53,31 +53,31 @@
 
 static const struct calib_file_desc calib_files[] = {
 	{
-		.fname = "calib_rx1a.conf",
+		.fname = "calib_rx0a.conf",
 		.rx = 1,
 		.trx = 0,
+		.rxpath = 0,
+	}, {
+		.fname = "calib_rx0b.conf",
+		.rx = 1,
+		.trx = 0,
+		.rxpath = 1,
+	}, {
+		.fname = "calib_rx1a.conf",
+		.rx = 1,
+		.trx = 1,
 		.rxpath = 0,
 	}, {
 		.fname = "calib_rx1b.conf",
 		.rx = 1,
-		.trx = 0,
-		.rxpath = 1,
-	}, {
-		.fname = "calib_rx2a.conf",
-		.rx = 1,
-		.trx = 1,
-		.rxpath = 0,
-	}, {
-		.fname = "calib_rx2b.conf",
-		.rx = 1,
 		.trx = 1,
 		.rxpath = 1,
 	}, {
-		.fname = "calib_tx1.conf",
+		.fname = "calib_tx0.conf",
 		.rx = 0,
 		.trx = 0,
 	}, {
-		.fname = "calib_tx2.conf",
+		.fname = "calib_tx1.conf",
 		.rx = 0,
 		.trx = 1,
 	},
diff --git a/src/osmo-bts-litecell15/hw_misc.c b/src/osmo-bts-litecell15/hw_misc.c
index cd53e26..49232b2 100644
--- a/src/osmo-bts-litecell15/hw_misc.c
+++ b/src/osmo-bts-litecell15/hw_misc.c
@@ -63,7 +63,7 @@
 		return -EINVAL;
 	}
 
-	fd = open("/sys/class/leds/usr0/brightness", O_WRONLY);
+	fd = open("/var/lc15/leds/led0/brightness", O_WRONLY);
 	if (fd < 0)
 		return -ENODEV;
 
@@ -73,7 +73,7 @@
 	}
 	close(fd);
 
-	fd = open("/sys/class/leds/usr1/brightness", O_WRONLY);
+	fd = open("/var/lc15/leds/led1/brightness", O_WRONLY);
 	if (fd < 0)
 		return -ENODEV;
 
diff --git a/src/osmo-bts-litecell15/l1_transp_hw.c b/src/osmo-bts-litecell15/l1_transp_hw.c
index 7e6cd68..6381864 100644
--- a/src/osmo-bts-litecell15/l1_transp_hw.c
+++ b/src/osmo-bts-litecell15/l1_transp_hw.c
@@ -249,7 +249,7 @@
 	struct osmo_wqueue *wq = &hdl->write_q[q];
 	struct osmo_fd *write_ofd = &hdl->write_q[q].bfd;
 
-        snprintf(buf, sizeof(buf)-1, "%s%d", rd_devnames[q], plink->num+1);
+        snprintf(buf, sizeof(buf)-1, "%s%d", rd_devnames[q], plink->num);
         buf[sizeof(buf)-1] = '\0';
 
 	rc = open(buf, O_RDONLY);
@@ -270,7 +270,7 @@
 		return rc;
 	}
 
-        snprintf(buf, sizeof(buf)-1, "%s%d", wr_devnames[q], plink->num+1);
+        snprintf(buf, sizeof(buf)-1, "%s%d", wr_devnames[q], plink->num);
         buf[sizeof(buf)-1] = '\0';
 
 	rc = open(buf, O_WRONLY);
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_bid.c b/src/osmo-bts-litecell15/misc/lc15bts_bid.c
index 1fb5851..06a126a 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_bid.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_bid.c
@@ -27,8 +27,8 @@
 
 #include "lc15bts_bid.h"
 
-#define BOARD_REV_SYSFS		"/sys/devices/0.lc15/revision"
-#define BOARD_OPT_SYSFS		"/sys/devices/0.lc15/option"
+#define BOARD_REV_SYSFS		"/var/lc15/platform/revision"
+#define BOARD_OPT_SYSFS		"/var/lc15/platform/option"
  
 static const int option_type_mask[_NUM_OPTION_TYPES] = {
         [LC15BTS_OPTION_OCXO]		= 0x07,
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_clock.c b/src/osmo-bts-litecell15/misc/lc15bts_clock.c
index 90ecb7a..f4df5d3 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_clock.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_clock.c
@@ -27,15 +27,15 @@
 
 #include "lc15bts_clock.h"
 
-#define CLKERR_ERR_SYSFS	"/sys/devices/5002000.clkerr/clkerr1_average"
-#define CLKERR_ACC_SYSFS	"/sys/devices/5002000.clkerr/clkerr1_average_accuracy"
-#define CLKERR_INT_SYSFS	"/sys/devices/5002000.clkerr/clkerr1_average_interval"
-#define CLKERR_FLT_SYSFS	"/sys/devices/5002000.clkerr/clkerr1_fault"
-#define CLKERR_RFS_SYSFS	"/sys/devices/5002000.clkerr/refresh"
-#define CLKERR_RST_SYSFS	"/sys/devices/5002000.clkerr/reset"
+#define CLKERR_ERR_SYSFS	"/var/lc15/clkerr/clkerr1_average"
+#define CLKERR_ACC_SYSFS	"/var/lc15/clkerr/clkerr1_average_accuracy"
+#define CLKERR_INT_SYSFS	"/var/lc15/clkerr/clkerr1_average_interval"
+#define CLKERR_FLT_SYSFS	"/var/lc15/clkerr/clkerr1_fault"
+#define CLKERR_RFS_SYSFS	"/var/lc15/clkerr/refresh"
+#define CLKERR_RST_SYSFS	"/var/lc15/clkerr/reset"
 
-#define OCXODAC_VAL_SYSFS	"/sys/bus/iio/devices/iio:device0/out_voltage0_raw"
-#define OCXODAC_ROM_SYSFS	"/sys/bus/iio/devices/iio:device0/store_eeprom"
+#define OCXODAC_VAL_SYSFS	"/var/lc15/ocxo/voltage"
+#define OCXODAC_ROM_SYSFS	"/var/lc15/ocxo/eeprom"
 
 /* clock error */
 static int clkerr_fd_err = -1;
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr.c
index a4c5650..506e525 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_mgr.c
@@ -74,7 +74,15 @@
 			.thresh_warn	= 60,
 			.thresh_crit	= 78,
 		},
-		.memory_limit	= {
+		.logrf_limit	= {
+			.thresh_warn	= 60,
+			.thresh_crit	= 78,
+		},
+		.ocxo_limit	= {
+			.thresh_warn	= 60,
+			.thresh_crit	= 78,
+		},
+		.tx0_limit	= {
 			.thresh_warn	= 60,
 			.thresh_crit	= 78,
 		},
@@ -82,7 +90,7 @@
 			.thresh_warn	= 60,
 			.thresh_crit	= 78,
 		},
-		.tx2_limit	= {
+		.pa0_limit	= {
 			.thresh_warn	= 60,
 			.thresh_crit	= 78,
 		},
@@ -90,12 +98,8 @@
 			.thresh_warn	= 60,
 			.thresh_crit	= 78,
 		},
-		.pa2_limit	= {
-			.thresh_warn	= 60,
-			.thresh_crit	= 78,
-		},
 		.action_warn		= 0,
-		.action_crit		= TEMP_ACT_PA1_OFF | TEMP_ACT_PA2_OFF,
+		.action_crit		= TEMP_ACT_PA0_OFF | TEMP_ACT_PA1_OFF,
 		.state			= STATE_NORMAL,
 	}
 };
@@ -260,12 +264,12 @@
 	hours_timer_cb(NULL);
 
  	/* Enable the PAs */
-	rc = lc15bts_power_set(LC15BTS_POWER_PA1, 1);
+	rc = lc15bts_power_set(LC15BTS_POWER_PA0, 1);
 	if (rc < 0) {
 		exit(3);
 	}
 
-	rc = lc15bts_power_set(LC15BTS_POWER_PA2, 1);
+	rc = lc15bts_power_set(LC15BTS_POWER_PA1, 1);
 	if (rc < 0) {
 		exit(3);
 	}
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr.h b/src/osmo-bts-litecell15/misc/lc15bts_mgr.h
index 466d0b2..98bd701 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr.h
+++ b/src/osmo-bts-litecell15/misc/lc15bts_mgr.h
@@ -21,8 +21,8 @@
 #if 0
 	TEMP_ACT_PWR_CONTRL	=	0x1,
 #endif
-	TEMP_ACT_PA1_OFF	=	0x2,
-	TEMP_ACT_PA2_OFF	=	0x4,
+	TEMP_ACT_PA0_OFF	=	0x2,
+	TEMP_ACT_PA1_OFF	=	0x4,
 	TEMP_ACT_BTS_SRV_OFF	=	0x10,
 };
 
@@ -31,8 +31,8 @@
 #if 0
 	TEMP_ACT_NORM_PW_CONTRL	=	0x1,
 #endif
-	TEMP_ACT_NORM_PA1_ON	=	0x2,
-	TEMP_ACT_NORM_PA2_ON	=	0x4,
+	TEMP_ACT_NORM_PA0_ON	=	0x2,
+	TEMP_ACT_NORM_PA1_ON	=	0x4,
 	TEMP_ACT_NORM_BTS_SRV_ON=	0x10,
 };
 
@@ -62,11 +62,12 @@
 	LIMIT_SUPPLY_NODE,
 	LIMIT_SOC_NODE,
 	LIMIT_FPGA_NODE,
-	LIMIT_MEMORY_NODE,
+	LIMIT_LOGRF_NODE,
+	LIMIT_OCXO_NODE,
+	LIMIT_TX0_NODE,
 	LIMIT_TX1_NODE,
-	LIMIT_TX2_NODE,
+	LIMIT_PA0_NODE,
 	LIMIT_PA1_NODE,
-	LIMIT_PA2_NODE,
 };
 
 struct lc15bts_mgr_instance {
@@ -82,11 +83,12 @@
 		struct lc15bts_temp_limit supply_limit;
 		struct lc15bts_temp_limit soc_limit;
 		struct lc15bts_temp_limit fpga_limit;
-		struct lc15bts_temp_limit memory_limit;
+		struct lc15bts_temp_limit logrf_limit;
+		struct lc15bts_temp_limit ocxo_limit;
+		struct lc15bts_temp_limit tx0_limit;
 		struct lc15bts_temp_limit tx1_limit;
-		struct lc15bts_temp_limit tx2_limit;
+		struct lc15bts_temp_limit pa0_limit;
 		struct lc15bts_temp_limit pa1_limit;
-		struct lc15bts_temp_limit pa2_limit;
 	} temp;
 
 	struct {
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
index d2100eb..903c5fe 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_mgr_nl.c
@@ -47,7 +47,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 
-#define ETH0_ADDR_SYSFS		"/sys/class/net/eth0/address"
+#define ETH0_ADDR_SYSFS		"/var/lc15/net/eth0/address"
 
 static struct osmo_fd nl_fd;
 
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
index 00b8657..042fc87 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_mgr_temp.c
@@ -85,6 +85,16 @@
 static void handle_normal_actions(int actions)
 {
 	/* switch on the PA */
+	if (actions & TEMP_ACT_NORM_PA0_ON) {
+		if (lc15bts_power_set(LC15BTS_POWER_PA0, 1) != 0) {
+			LOGP(DTEMP, LOGL_ERROR,
+				"Failed to switch on the PA #0\n");
+		} else {
+			LOGP(DTEMP, LOGL_NOTICE,
+				"Switched on the PA #0 as normal action.\n");
+		}
+	}
+
 	if (actions & TEMP_ACT_NORM_PA1_ON) {
 		if (lc15bts_power_set(LC15BTS_POWER_PA1, 1) != 0) {
 			LOGP(DTEMP, LOGL_ERROR,
@@ -92,16 +102,6 @@
 		} else {
 			LOGP(DTEMP, LOGL_NOTICE,
 				"Switched on the PA #1 as normal action.\n");
-		}
-	}
-
-	if (actions & TEMP_ACT_NORM_PA2_ON) {
-		if (lc15bts_power_set(LC15BTS_POWER_PA2, 1) != 0) {
-			LOGP(DTEMP, LOGL_ERROR,
-				"Failed to switch on the PA #2\n");
-		} else {
-			LOGP(DTEMP, LOGL_NOTICE,
-				"Switched on the PA #2 as normal action.\n");
 		}
 	}
 
@@ -120,16 +120,6 @@
 static void handle_actions(int actions)
 {
 	/* switch off the PA */
-	if (actions & TEMP_ACT_PA2_OFF) {
-		if (lc15bts_power_set(LC15BTS_POWER_PA2, 0) != 0) {
-			LOGP(DTEMP, LOGL_ERROR,
-				"Failed to switch off the PA #2. Stop BTS?\n");
-		} else {
-			LOGP(DTEMP, LOGL_NOTICE,
-				"Switched off the PA #2 due temperature.\n");
-		}
-	}
-
 	if (actions & TEMP_ACT_PA1_OFF) {
 		if (lc15bts_power_set(LC15BTS_POWER_PA1, 0) != 0) {
 			LOGP(DTEMP, LOGL_ERROR,
@@ -137,6 +127,16 @@
 		} else {
 			LOGP(DTEMP, LOGL_NOTICE,
 				"Switched off the PA #1 due temperature.\n");
+		}
+	}
+
+	if (actions & TEMP_ACT_PA0_OFF) {
+		if (lc15bts_power_set(LC15BTS_POWER_PA0, 0) != 0) {
+			LOGP(DTEMP, LOGL_ERROR,
+				"Failed to switch off the PA #0. Stop BTS?\n");
+		} else {
+			LOGP(DTEMP, LOGL_NOTICE,
+				"Switched off the PA #0 due temperature.\n");
 		}
 	}
 
@@ -215,7 +215,7 @@
 	LOGP(DTEMP, LOGL_DEBUG, "Going to check the temperature.\n");
 
 	/* Read the current supply temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_SUPPLY, LC15BTS_TEMP_INPUT);
+	rc = lc15bts_temp_get(LC15BTS_TEMP_SUPPLY);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
 			"Failed to read the supply temperature. rc=%d\n", rc);
@@ -230,7 +230,7 @@
 	}
 
 	/* Read the current SoC temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_SOC, LC15BTS_TEMP_INPUT);
+	rc = lc15bts_temp_get(LC15BTS_TEMP_SOC);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
 			"Failed to read the SoC temperature. rc=%d\n", rc);
@@ -245,7 +245,7 @@
 	}
 
 	/* Read the current fpga temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_FPGA, LC15BTS_TEMP_INPUT);
+	rc = lc15bts_temp_get(LC15BTS_TEMP_FPGA);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
 			"Failed to read the fpga temperature. rc=%d\n", rc);
@@ -259,23 +259,53 @@
 		LOGP(DTEMP, LOGL_DEBUG, "FPGA temperature is: %d\n", temp);
 	}
 
-	/* Read the current memory temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_MEMORY, LC15BTS_TEMP_INPUT);
+	/* Read the current RF log detector temperature */
+	rc = lc15bts_temp_get(LC15BTS_TEMP_LOGRF);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
-			"Failed to read the memory temperature. rc=%d\n", rc);
+			"Failed to read the RF log detector temperature. rc=%d\n", rc);
 		warn_thresh_passed = crit_thresh_passed = 1;
 	} else {
 		int temp = rc / 1000;
-		if (temp > s_mgr->temp.memory_limit.thresh_warn)
+		if (temp > s_mgr->temp.logrf_limit.thresh_warn)
 			warn_thresh_passed = 1;
-		if (temp > s_mgr->temp.memory_limit.thresh_crit)
+		if (temp > s_mgr->temp.logrf_limit.thresh_crit)
 			crit_thresh_passed = 1;
-		LOGP(DTEMP, LOGL_DEBUG, "Memory temperature is: %d\n", temp);
+		LOGP(DTEMP, LOGL_DEBUG, "RF log detector temperature is: %d\n", temp);
+	}
+
+	/* Read the current OCXO temperature */
+	rc = lc15bts_temp_get(LC15BTS_TEMP_OCXO);
+	if (rc < 0) {
+		LOGP(DTEMP, LOGL_ERROR,
+			"Failed to read the OCXO temperature. rc=%d\n", rc);
+		warn_thresh_passed = crit_thresh_passed = 1;
+	} else {
+		int temp = rc / 1000;
+		if (temp > s_mgr->temp.ocxo_limit.thresh_warn)
+			warn_thresh_passed = 1;
+		if (temp > s_mgr->temp.ocxo_limit.thresh_crit)
+			crit_thresh_passed = 1;
+		LOGP(DTEMP, LOGL_DEBUG, "OCXO temperature is: %d\n", temp);
 	}
 
 	/* Read the current TX #1 temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_TX1, LC15BTS_TEMP_INPUT);
+	rc = lc15bts_temp_get(LC15BTS_TEMP_TX0);
+	if (rc < 0) {
+		LOGP(DTEMP, LOGL_ERROR,
+			"Failed to read the TX #0 temperature. rc=%d\n", rc);
+		warn_thresh_passed = crit_thresh_passed = 1;
+	} else {
+		int temp = rc / 1000;
+		if (temp > s_mgr->temp.tx0_limit.thresh_warn)
+			warn_thresh_passed = 1;
+		if (temp > s_mgr->temp.tx0_limit.thresh_crit)
+			crit_thresh_passed = 1;
+		LOGP(DTEMP, LOGL_DEBUG, "TX #0 temperature is: %d\n", temp);
+	}
+
+	/* Read the current TX #2 temperature */
+	rc = lc15bts_temp_get(LC15BTS_TEMP_TX1);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
 			"Failed to read the TX #1 temperature. rc=%d\n", rc);
@@ -289,23 +319,23 @@
 		LOGP(DTEMP, LOGL_DEBUG, "TX #1 temperature is: %d\n", temp);
 	}
 
-	/* Read the current TX #2 temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_TX2, LC15BTS_TEMP_INPUT);
+	/* Read the current PA #1 temperature */
+	rc = lc15bts_temp_get(LC15BTS_TEMP_PA0);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
-			"Failed to read the TX #2 temperature. rc=%d\n", rc);
+			"Failed to read the PA #0 temperature. rc=%d\n", rc);
 		warn_thresh_passed = crit_thresh_passed = 1;
 	} else {
 		int temp = rc / 1000;
-		if (temp > s_mgr->temp.tx2_limit.thresh_warn)
+		if (temp > s_mgr->temp.pa0_limit.thresh_warn)
 			warn_thresh_passed = 1;
-		if (temp > s_mgr->temp.tx2_limit.thresh_crit)
+		if (temp > s_mgr->temp.pa0_limit.thresh_crit)
 			crit_thresh_passed = 1;
-		LOGP(DTEMP, LOGL_DEBUG, "TX #2 temperature is: %d\n", temp);
+		LOGP(DTEMP, LOGL_DEBUG, "PA #0 temperature is: %d\n", temp);
 	}
 
-	/* Read the current PA #1 temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_PA1, LC15BTS_TEMP_INPUT);
+	/* Read the current PA #2 temperature */
+	rc = lc15bts_temp_get(LC15BTS_TEMP_PA1);
 	if (rc < 0) {
 		LOGP(DTEMP, LOGL_ERROR,
 			"Failed to read the PA #1 temperature. rc=%d\n", rc);
@@ -317,21 +347,6 @@
 		if (temp > s_mgr->temp.pa1_limit.thresh_crit)
 			crit_thresh_passed = 1;
 		LOGP(DTEMP, LOGL_DEBUG, "PA #1 temperature is: %d\n", temp);
-	}
-
-	/* Read the current PA #2 temperature */
-	rc = lc15bts_temp_get(LC15BTS_TEMP_PA2, LC15BTS_TEMP_INPUT);
-	if (rc < 0) {
-		LOGP(DTEMP, LOGL_ERROR,
-			"Failed to read the PA #2 temperature. rc=%d\n", rc);
-		warn_thresh_passed = crit_thresh_passed = 1;
-	} else {
-		int temp = rc / 1000;
-		if (temp > s_mgr->temp.pa2_limit.thresh_warn)
-			warn_thresh_passed = 1;
-		if (temp > s_mgr->temp.pa2_limit.thresh_crit)
-			crit_thresh_passed = 1;
-		LOGP(DTEMP, LOGL_DEBUG, "PA #2 temperature is: %d\n", temp);
 	}
 
 	lc15bts_mgr_temp_handle(s_mgr, crit_thresh_passed, warn_thresh_passed);	
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c b/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
index e5ef55f..280c9c7 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_mgr_vty.c
@@ -67,11 +67,12 @@
 	case LIMIT_SUPPLY_NODE:
 	case LIMIT_SOC_NODE:
 	case LIMIT_FPGA_NODE:
-	case LIMIT_MEMORY_NODE:
+	case LIMIT_LOGRF_NODE:
+	case LIMIT_OCXO_NODE:
+	case LIMIT_TX0_NODE:
 	case LIMIT_TX1_NODE:
-	case LIMIT_TX2_NODE:
+	case LIMIT_PA0_NODE:
 	case LIMIT_PA1_NODE:
-	case LIMIT_PA2_NODE:
 		vty->node = MGR_NODE;
 		break;
 	default:
@@ -90,11 +91,12 @@
 	case LIMIT_SUPPLY_NODE:
 	case LIMIT_SOC_NODE:
 	case LIMIT_FPGA_NODE:
-	case LIMIT_MEMORY_NODE:
+	case LIMIT_LOGRF_NODE:
+	case LIMIT_OCXO_NODE:
+	case LIMIT_TX0_NODE:
 	case LIMIT_TX1_NODE:
-	case LIMIT_TX2_NODE:
+	case LIMIT_PA0_NODE:
 	case LIMIT_PA1_NODE:
-	case LIMIT_PA2_NODE:
 		return 1;
 	default:
 		return 0;
@@ -154,30 +156,36 @@
 	1,
 };
 
-static struct cmd_node limit_memory_node = {
-	LIMIT_MEMORY_NODE,
-	"%s(limit-memory)# ",
+static struct cmd_node limit_logrf_node = {
+	LIMIT_LOGRF_NODE,
+	"%s(limit-logrf)# ",
 	1,
 };
 
+static struct cmd_node limit_ocxo_node = {
+	LIMIT_OCXO_NODE,
+	"%s(limit-ocxo)# ",
+	1,
+};
+
+static struct cmd_node limit_tx0_node = {
+	LIMIT_TX0_NODE,
+	"%s(limit-tx0)# ",
+	1,
+};
 static struct cmd_node limit_tx1_node = {
 	LIMIT_TX1_NODE,
 	"%s(limit-tx1)# ",
 	1,
 };
-static struct cmd_node limit_tx2_node = {
-	LIMIT_TX2_NODE,
-	"%s(limit-tx2)# ",
+static struct cmd_node limit_pa0_node = {
+	LIMIT_PA0_NODE,
+	"%s(limit-pa0)# ",
 	1,
 };
 static struct cmd_node limit_pa1_node = {
 	LIMIT_PA1_NODE,
 	"%s(limit-pa1)# ",
-	1,
-};
-static struct cmd_node limit_pa2_node = {
-	LIMIT_PA2_NODE,
-	"%s(limit-pa2)# ",
 	1,
 };
 
@@ -202,10 +210,10 @@
 static void write_norm_action(struct vty *vty, const char *name, int actions)
 {
 	vty_out(vty, " %s%s", name, VTY_NEWLINE);
+	vty_out(vty, "  %spa0-on%s",
+		(actions & TEMP_ACT_NORM_PA0_ON) ? "" : "no ", VTY_NEWLINE);
 	vty_out(vty, "  %spa1-on%s",
 		(actions & TEMP_ACT_NORM_PA1_ON) ? "" : "no ", VTY_NEWLINE);
-	vty_out(vty, "  %spa2-on%s",
-		(actions & TEMP_ACT_NORM_PA2_ON) ? "" : "no ", VTY_NEWLINE);
 	vty_out(vty, "  %sbts-service-on%s",
 		(actions & TEMP_ACT_NORM_BTS_SRV_ON) ? "" : "no ", VTY_NEWLINE);
 }
@@ -213,10 +221,10 @@
 static void write_action(struct vty *vty, const char *name, int actions)
 {
 	vty_out(vty, " %s%s", name, VTY_NEWLINE);
+	vty_out(vty, "  %spa0-off%s",
+		(actions & TEMP_ACT_PA0_OFF) ? "" : "no ", VTY_NEWLINE);
 	vty_out(vty, "  %spa1-off%s",
 		(actions & TEMP_ACT_PA1_OFF) ? "" : "no ", VTY_NEWLINE);
-	vty_out(vty, "  %spa2-off%s",
-		(actions & TEMP_ACT_PA2_OFF) ? "" : "no ", VTY_NEWLINE);
 	vty_out(vty, "  %sbts-service-off%s",
 		(actions & TEMP_ACT_BTS_SRV_OFF) ? "" : "no ", VTY_NEWLINE);
 }
@@ -228,11 +236,12 @@
 	write_temp_limit(vty, "limits supply", &s_mgr->temp.supply_limit);
 	write_temp_limit(vty, "limits soc", &s_mgr->temp.soc_limit);
 	write_temp_limit(vty, "limits fpga", &s_mgr->temp.fpga_limit);
-	write_temp_limit(vty, "limits memory", &s_mgr->temp.memory_limit);
+	write_temp_limit(vty, "limits logrf", &s_mgr->temp.logrf_limit);
+	write_temp_limit(vty, "limits ocxo", &s_mgr->temp.ocxo_limit);
+	write_temp_limit(vty, "limits tx0", &s_mgr->temp.tx0_limit);
 	write_temp_limit(vty, "limits tx1", &s_mgr->temp.tx1_limit);
-	write_temp_limit(vty, "limits tx2", &s_mgr->temp.tx2_limit);
+	write_temp_limit(vty, "limits pa0", &s_mgr->temp.pa0_limit);
 	write_temp_limit(vty, "limits pa1", &s_mgr->temp.pa1_limit);
-	write_temp_limit(vty, "limits pa2", &s_mgr->temp.pa2_limit);
 
 	write_norm_action(vty, "actions normal", s_mgr->temp.action_norm);
 	write_action(vty, "actions warn", s_mgr->temp.action_warn);
@@ -259,11 +268,12 @@
 CFG_LIMIT(supply, "SUPPLY\n", LIMIT_SUPPLY_NODE, supply_limit)
 CFG_LIMIT(soc, "SOC\n", LIMIT_SOC_NODE, soc_limit)
 CFG_LIMIT(fpga, "FPGA\n", LIMIT_FPGA_NODE, fpga_limit)
-CFG_LIMIT(memory, "MEMORY\n", LIMIT_MEMORY_NODE, memory_limit)
+CFG_LIMIT(logrf, "LOGRF\n", LIMIT_LOGRF_NODE, logrf_limit)
+CFG_LIMIT(ocxo, "OCXO\n", LIMIT_OCXO_NODE, ocxo_limit)
+CFG_LIMIT(tx0, "TX0\n", LIMIT_TX0_NODE, tx0_limit)
 CFG_LIMIT(tx1, "TX1\n", LIMIT_TX1_NODE, tx1_limit)
-CFG_LIMIT(tx2, "TX2\n", LIMIT_TX2_NODE, tx2_limit)
+CFG_LIMIT(pa0, "PA0\n", LIMIT_PA0_NODE, pa0_limit)
 CFG_LIMIT(pa1, "PA1\n", LIMIT_PA1_NODE, pa1_limit)
-CFG_LIMIT(pa2, "PA2\n", LIMIT_PA2_NODE, pa2_limit)
 #undef CFG_LIMIT
 
 DEFUN(cfg_limit_warning, cfg_thresh_warning_cmd,
@@ -298,6 +308,24 @@
 CFG_ACTION(critical, "Critical Actions\n", ACT_CRIT_NODE, action_crit)
 #undef CFG_ACTION
 
+DEFUN(cfg_action_pa0_on, cfg_action_pa0_on_cmd,
+	"pa0-on",
+	"Switch the Power Amplifier #0 on\n")
+{
+	int *action = vty->index;
+	*action |= TEMP_ACT_NORM_PA0_ON;
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_no_action_pa0_on, cfg_no_action_pa0_on_cmd,
+	"no pa0-on",
+	NO_STR "Switch the Power Amplifieri #0 on\n")
+{
+	int *action = vty->index;
+	*action &= ~TEMP_ACT_NORM_PA0_ON;
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_action_pa1_on, cfg_action_pa1_on_cmd,
 	"pa1-on",
 	"Switch the Power Amplifier #1 on\n")
@@ -313,24 +341,6 @@
 {
 	int *action = vty->index;
 	*action &= ~TEMP_ACT_NORM_PA1_ON;
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_pa2_on, cfg_action_pa2_on_cmd,
-	"pa2-on",
-	"Switch the Power Amplifier #2 on\n")
-{
-	int *action = vty->index;
-	*action |= TEMP_ACT_NORM_PA2_ON;
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa2_on, cfg_no_action_pa2_on_cmd,
-	"no pa2-on",
-	NO_STR "Switch the Power Amplifieri #2 on\n")
-{
-	int *action = vty->index;
-	*action &= ~TEMP_ACT_NORM_PA2_ON;
 	return CMD_SUCCESS;
 }
 
@@ -352,39 +362,39 @@
 	return CMD_SUCCESS;
 }
 
+DEFUN(cfg_action_pa0_off, cfg_action_pa0_off_cmd,
+	"pa0-off",
+	"Switch the Power Amplifier #0 off\n")
+{
+	int *action = vty->index;
+	*action |= TEMP_ACT_PA0_OFF;
+	return CMD_SUCCESS;
+}
+
+DEFUN(cfg_no_action_pa0_off, cfg_no_action_pa0_off_cmd,
+	"no pa0-off",
+	NO_STR "Do not switch off the Power Amplifier #0\n")
+{
+	int *action = vty->index;
+	*action &= ~TEMP_ACT_PA0_OFF;
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_action_pa1_off, cfg_action_pa1_off_cmd,
-	"pa1-off",
-	"Switch the Power Amplifier #1 off\n")
-{
-	int *action = vty->index;
-	*action |= TEMP_ACT_PA1_OFF;
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_no_action_pa1_off, cfg_no_action_pa1_off_cmd,
-	"no pa1-off",
-	NO_STR "Do not switch off the Power Amplifier #1\n")
-{
-	int *action = vty->index;
-	*action &= ~TEMP_ACT_PA1_OFF;
-	return CMD_SUCCESS;
-}
-
-DEFUN(cfg_action_pa2_off, cfg_action_pa2_off_cmd,
-        "pa2-off",
-        "Switch the Power Amplifier #2 off\n")
+        "pa1-off",
+        "Switch the Power Amplifier #1 off\n")
 {
         int *action = vty->index;
-        *action |= TEMP_ACT_PA2_OFF;
+        *action |= TEMP_ACT_PA1_OFF;
         return CMD_SUCCESS;
 }
 
-DEFUN(cfg_no_action_pa2_off, cfg_no_action_pa2_off_cmd,
-        "no pa2-off",
-        NO_STR "Do not switch off the Power Amplifier #2\n")
+DEFUN(cfg_no_action_pa1_off, cfg_no_action_pa1_off_cmd,
+        "no pa1-off",
+        NO_STR "Do not switch off the Power Amplifier #1\n")
 {
         int *action = vty->index;
-        *action &= ~TEMP_ACT_PA2_OFF;
+        *action &= ~TEMP_ACT_PA1_OFF;
         return CMD_SUCCESS;
 }
 
@@ -413,45 +423,49 @@
 		lc15bts_mgr_temp_get_state(s_mgr->temp.state), VTY_NEWLINE);
 	vty_out(vty, "Current Temperatures%s", VTY_NEWLINE);
 	vty_out(vty, " Main Supply : %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_SUPPLY,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+		lc15bts_temp_get(LC15BTS_TEMP_SUPPLY) / 1000.0f, 
 		VTY_NEWLINE);
 	vty_out(vty, " SoC         : %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_SOC,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+		lc15bts_temp_get(LC15BTS_TEMP_SOC) / 1000.0f, 
 		VTY_NEWLINE);
 	vty_out(vty, " FPGA        : %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_FPGA,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+		lc15bts_temp_get(LC15BTS_TEMP_FPGA) / 1000.0f, 
 		VTY_NEWLINE);
-	vty_out(vty, " Memory (DDR): %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_MEMORY,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+	vty_out(vty, " LogRF       : %f Celcius%s",
+		lc15bts_temp_get(LC15BTS_TEMP_LOGRF) / 1000.0f, 
+		VTY_NEWLINE);
+	vty_out(vty, " OCXO        : %f Celcius%s",
+		lc15bts_temp_get(LC15BTS_TEMP_OCXO) / 1000.0f, 
+		VTY_NEWLINE);
+	vty_out(vty, " TX 0        : %f Celcius%s",
+		lc15bts_temp_get(LC15BTS_TEMP_TX0) / 1000.0f, 
 		VTY_NEWLINE);
 	vty_out(vty, " TX 1        : %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_TX1,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+		lc15bts_temp_get(LC15BTS_TEMP_TX1) / 1000.0f, 
 		VTY_NEWLINE);
-	vty_out(vty, " TX 2        : %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_TX2,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+	vty_out(vty, " Power Amp #0: %f Celcius%s",
+		lc15bts_temp_get(LC15BTS_TEMP_PA0) / 1000.0f, 
 		VTY_NEWLINE);
 	vty_out(vty, " Power Amp #1: %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_PA1,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
-		VTY_NEWLINE);
-	vty_out(vty, " Power Amp #2: %f Celcius%s",
-		lc15bts_temp_get(LC15BTS_TEMP_PA2,
-			LC15BTS_TEMP_INPUT) / 1000.0f, 
+		lc15bts_temp_get(LC15BTS_TEMP_PA1) / 1000.0f, 
 		VTY_NEWLINE);
 
 	vty_out(vty, "Power Status%s", VTY_NEWLINE);
-	vty_out(vty, " Main Supply : (ON) [%6.2f Vdc, %4.2f A, %6.2f W]%s",
+	vty_out(vty, " Main Supply :  ON  [%6.2f Vdc, %4.2f A, %6.2f W]%s",
 		lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY, 
 			LC15BTS_POWER_VOLTAGE)/1000.0f,
 		lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY, 
 			LC15BTS_POWER_CURRENT)/1000.0f,
 		lc15bts_power_sensor_get(LC15BTS_POWER_SUPPLY, 
+			LC15BTS_POWER_POWER)/1000000.0f,
+		VTY_NEWLINE);
+	vty_out(vty, " Power Amp #0:  %s [%6.2f Vdc, %4.2f A, %6.2f W]%s",
+		lc15bts_power_get(LC15BTS_POWER_PA0) ? "ON " : "OFF",
+		lc15bts_power_sensor_get(LC15BTS_POWER_PA0, 
+			LC15BTS_POWER_VOLTAGE)/1000.0f,
+		lc15bts_power_sensor_get(LC15BTS_POWER_PA0, 
+			LC15BTS_POWER_CURRENT)/1000.0f,
+		lc15bts_power_sensor_get(LC15BTS_POWER_PA0, 
 			LC15BTS_POWER_POWER)/1000000.0f,
 		VTY_NEWLINE);
 	vty_out(vty, " Power Amp #1:  %s [%6.2f Vdc, %4.2f A, %6.2f W]%s",
@@ -461,15 +475,6 @@
 		lc15bts_power_sensor_get(LC15BTS_POWER_PA1, 
 			LC15BTS_POWER_CURRENT)/1000.0f,
 		lc15bts_power_sensor_get(LC15BTS_POWER_PA1, 
-			LC15BTS_POWER_POWER)/1000000.0f,
-		VTY_NEWLINE);
-	vty_out(vty, " Power Amp #2:  %s [%6.2f Vdc, %4.2f A, %6.2f W]%s",
-		lc15bts_power_get(LC15BTS_POWER_PA2) ? "ON " : "OFF",
-		lc15bts_power_sensor_get(LC15BTS_POWER_PA2, 
-			LC15BTS_POWER_VOLTAGE)/1000.0f,
-		lc15bts_power_sensor_get(LC15BTS_POWER_PA2, 
-			LC15BTS_POWER_CURRENT)/1000.0f,
-		lc15bts_power_sensor_get(LC15BTS_POWER_PA2, 
 			LC15BTS_POWER_POWER)/1000000.0f,
 		VTY_NEWLINE);
 
@@ -496,20 +501,20 @@
 
 static void register_normal_action(int act)
 {
+	install_element(act, &cfg_action_pa0_on_cmd);
+	install_element(act, &cfg_no_action_pa0_on_cmd);
 	install_element(act, &cfg_action_pa1_on_cmd);
 	install_element(act, &cfg_no_action_pa1_on_cmd);
-	install_element(act, &cfg_action_pa2_on_cmd);
-	install_element(act, &cfg_no_action_pa2_on_cmd);
 	install_element(act, &cfg_action_bts_srv_on_cmd);
 	install_element(act, &cfg_no_action_bts_srv_on_cmd);
 }
 
 static void register_action(int act)
 {
+	install_element(act, &cfg_action_pa0_off_cmd);
+	install_element(act, &cfg_no_action_pa0_off_cmd);
 	install_element(act, &cfg_action_pa1_off_cmd);
 	install_element(act, &cfg_no_action_pa1_off_cmd);
-	install_element(act, &cfg_action_pa2_off_cmd);
-	install_element(act, &cfg_no_action_pa2_off_cmd);
 	install_element(act, &cfg_action_bts_srv_off_cmd);
 	install_element(act, &cfg_no_action_bts_srv_off_cmd);
 }
@@ -542,30 +547,35 @@
 	register_limit(LIMIT_FPGA_NODE);
 	vty_install_default(LIMIT_FPGA_NODE);
 
-	install_node(&limit_memory_node, config_write_dummy);
-	install_element(MGR_NODE, &cfg_limit_memory_cmd);
-	register_limit(LIMIT_MEMORY_NODE);
-	vty_install_default(LIMIT_MEMORY_NODE);
+	install_node(&limit_logrf_node, config_write_dummy);
+	install_element(MGR_NODE, &cfg_limit_logrf_cmd);
+	register_limit(LIMIT_LOGRF_NODE);
+	vty_install_default(LIMIT_LOGRF_NODE);
+
+	install_node(&limit_ocxo_node, config_write_dummy);
+	install_element(MGR_NODE, &cfg_limit_ocxo_cmd);
+	register_limit(LIMIT_OCXO_NODE);
+	vty_install_default(LIMIT_OCXO_NODE);
+
+	install_node(&limit_tx0_node, config_write_dummy);
+	install_element(MGR_NODE, &cfg_limit_tx0_cmd);
+	register_limit(LIMIT_TX0_NODE);
+	vty_install_default(LIMIT_TX0_NODE);
 
 	install_node(&limit_tx1_node, config_write_dummy);
 	install_element(MGR_NODE, &cfg_limit_tx1_cmd);
 	register_limit(LIMIT_TX1_NODE);
 	vty_install_default(LIMIT_TX1_NODE);
 
-	install_node(&limit_tx2_node, config_write_dummy);
-	install_element(MGR_NODE, &cfg_limit_tx2_cmd);
-	register_limit(LIMIT_TX2_NODE);
-	vty_install_default(LIMIT_TX2_NODE);
+	install_node(&limit_pa0_node, config_write_dummy);
+	install_element(MGR_NODE, &cfg_limit_pa0_cmd);
+	register_limit(LIMIT_PA0_NODE);
+	vty_install_default(LIMIT_PA0_NODE);
 
 	install_node(&limit_pa1_node, config_write_dummy);
 	install_element(MGR_NODE, &cfg_limit_pa1_cmd);
 	register_limit(LIMIT_PA1_NODE);
 	vty_install_default(LIMIT_PA1_NODE);
-
-	install_node(&limit_pa2_node, config_write_dummy);
-	install_element(MGR_NODE, &cfg_limit_pa2_cmd);
-	register_limit(LIMIT_PA2_NODE);
-	vty_install_default(LIMIT_PA2_NODE);
 
 	/* install the normal node */
 	install_node(&act_norm_node, config_write_dummy);
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_misc.c b/src/osmo-bts-litecell15/misc/lc15bts_misc.c
index e0602c8..5ff8e31 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_misc.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_misc.c
@@ -74,37 +74,41 @@
 		.ee_par = LC15BTS_PAR_TEMP_FPGA_MAX,
 
 	}, {
-		.name = "memory",
+		.name = "logrf",
 		.has_max = 1,
-		.sensor = LC15BTS_TEMP_MEMORY,
-		.ee_par = LC15BTS_PAR_TEMP_MEMORY_MAX,
+		.sensor = LC15BTS_TEMP_LOGRF,
+		.ee_par = LC15BTS_PAR_TEMP_LOGRF_MAX,
+	}, {
+		.name = "ocxo",
+		.has_max = 1,
+		.sensor = LC15BTS_TEMP_OCXO,
+		.ee_par = LC15BTS_PAR_TEMP_OCXO_MAX,
+	}, {
+		.name = "tx0",
+		.has_max = 0,
+		.sensor = LC15BTS_TEMP_TX0,
+		.ee_par = LC15BTS_PAR_TEMP_TX0_MAX,
 	}, {
 		.name = "tx1",
 		.has_max = 0,
 		.sensor = LC15BTS_TEMP_TX1,
 		.ee_par = LC15BTS_PAR_TEMP_TX1_MAX,
 	}, {
-		.name = "tx2",
-		.has_max = 0,
-		.sensor = LC15BTS_TEMP_TX2,
-		.ee_par = LC15BTS_PAR_TEMP_TX2_MAX,
+		.name = "pa0",
+		.has_max = 1,
+		.sensor = LC15BTS_TEMP_PA0,
+		.ee_par = LC15BTS_PAR_TEMP_PA0_MAX,
 	}, {
 		.name = "pa1",
 		.has_max = 1,
 		.sensor = LC15BTS_TEMP_PA1,
 		.ee_par = LC15BTS_PAR_TEMP_PA1_MAX,
-	}, {
-		.name = "pa2",
-		.has_max = 1,
-		.sensor = LC15BTS_TEMP_PA2,
-		.ee_par = LC15BTS_PAR_TEMP_PA2_MAX,
 	}
 };
 
 void lc15bts_check_temp(int no_rom_write)
 {
 	int temp_old[ARRAY_SIZE(temp_data)];
-	int temp_hi[ARRAY_SIZE(temp_data)];
 	int temp_cur[ARRAY_SIZE(temp_data)];
 	int i, rc;
 
@@ -112,40 +116,24 @@
 		int ret;
 		rc = lc15bts_par_get_int(temp_data[i].ee_par, &ret);
 		temp_old[i] = ret * 1000;
-		if (temp_data[i].has_max) {
-			temp_hi[i] = lc15bts_temp_get(temp_data[i].sensor,
-							LC15BTS_TEMP_HIGHEST);
-			temp_cur[i] = lc15bts_temp_get(temp_data[i].sensor,
-							LC15BTS_TEMP_INPUT);
 
-			if ((temp_cur[i] < 0 && temp_cur[i] > -1000) ||
-			    (temp_hi[i] < 0 && temp_hi[i] > -1000)) {
-				LOGP(DTEMP, LOGL_ERROR, "Error reading temperature\n");
-				continue;
-			}
+		temp_cur[i] = lc15bts_temp_get(temp_data[i].sensor);
+		if (temp_cur[i] < 0 && temp_cur[i] > -1000) {
+			LOGP(DTEMP, LOGL_ERROR, "Error reading temperature (%d)\n", temp_data[i].sensor);
+			continue;
 		}
-		else {
-			temp_cur[i] = lc15bts_temp_get(temp_data[i].sensor,
-							LC15BTS_TEMP_INPUT);
-
-			if (temp_cur[i] < 0 && temp_cur[i] > -1000) {
-				LOGP(DTEMP, LOGL_ERROR, "Error reading temperature\n");
-				continue;
-			}
-			temp_hi[i] = temp_cur[i];
-		}
-
+	
 		LOGP(DTEMP, LOGL_DEBUG, "Current %s temperature: %d.%d C\n",
 		     temp_data[i].name, temp_cur[i]/1000, temp_cur[i]%1000);
 
-		if (temp_hi[i] > temp_old[i]) {
+		if (temp_cur[i] > temp_old[i]) {
 			LOGP(DTEMP, LOGL_NOTICE, "New maximum %s "
 			     "temperature: %d.%d C\n", temp_data[i].name,
-			     temp_hi[i]/1000, temp_hi[i]%1000);
+			     temp_cur[i]/1000, temp_old[i]%1000);
 
 			if (!no_rom_write) {
 				rc = lc15bts_par_set_int(temp_data[i].ee_par,
-						  temp_hi[i]/1000);
+						  temp_cur[i]/1000);
 				if (rc < 0)
 					LOGP(DTEMP, LOGL_ERROR, "error writing new %s "
 					     "max temp %d (%s)\n", temp_data[i].name,
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_par.c b/src/osmo-bts-litecell15/misc/lc15bts_par.c
index 7154426..3d80e67 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_par.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_par.c
@@ -46,11 +46,12 @@
 	{ LC15BTS_PAR_TEMP_SUPPLY_MAX,	"temp-supply-max" },
 	{ LC15BTS_PAR_TEMP_SOC_MAX,	"temp-soc-max" },
 	{ LC15BTS_PAR_TEMP_FPGA_MAX,	"temp-fpga-max" },
-	{ LC15BTS_PAR_TEMP_MEMORY_MAX,	"temp-memory-max" },
+	{ LC15BTS_PAR_TEMP_LOGRF_MAX,	"temp-logrf-max" },
+	{ LC15BTS_PAR_TEMP_OCXO_MAX,	"temp-ocxo-max" },
+	{ LC15BTS_PAR_TEMP_TX0_MAX,	"temp-tx0-max" },
 	{ LC15BTS_PAR_TEMP_TX1_MAX,	"temp-tx1-max" },
-	{ LC15BTS_PAR_TEMP_TX2_MAX,	"temp-tx2-max" },
+	{ LC15BTS_PAR_TEMP_PA0_MAX,	"temp-pa0-max" },
 	{ LC15BTS_PAR_TEMP_PA1_MAX,	"temp-pa1-max" },
-	{ LC15BTS_PAR_TEMP_PA2_MAX,	"temp-pa2-max" },
 	{ LC15BTS_PAR_SERNR,		"serial-nr" },
 	{ LC15BTS_PAR_HOURS, 		"hours-running" },
 	{ LC15BTS_PAR_BOOTS, 		"boot-count" },
@@ -64,11 +65,12 @@
 	case LC15BTS_PAR_TEMP_SUPPLY_MAX:
         case LC15BTS_PAR_TEMP_SOC_MAX:
         case LC15BTS_PAR_TEMP_FPGA_MAX:
-        case LC15BTS_PAR_TEMP_MEMORY_MAX:
+        case LC15BTS_PAR_TEMP_LOGRF_MAX:
+        case LC15BTS_PAR_TEMP_OCXO_MAX:
+        case LC15BTS_PAR_TEMP_TX0_MAX:
         case LC15BTS_PAR_TEMP_TX1_MAX:
-        case LC15BTS_PAR_TEMP_TX2_MAX:
+        case LC15BTS_PAR_TEMP_PA0_MAX:
         case LC15BTS_PAR_TEMP_PA1_MAX:
-        case LC15BTS_PAR_TEMP_PA2_MAX:
 	case LC15BTS_PAR_SERNR:
 	case LC15BTS_PAR_HOURS:
 	case LC15BTS_PAR_BOOTS:
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_par.h b/src/osmo-bts-litecell15/misc/lc15bts_par.h
index 7c18271..c50a69f 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_par.h
+++ b/src/osmo-bts-litecell15/misc/lc15bts_par.h
@@ -7,11 +7,12 @@
 	LC15BTS_PAR_TEMP_SUPPLY_MAX,
 	LC15BTS_PAR_TEMP_SOC_MAX,
 	LC15BTS_PAR_TEMP_FPGA_MAX,
-	LC15BTS_PAR_TEMP_MEMORY_MAX,
+	LC15BTS_PAR_TEMP_LOGRF_MAX,
+	LC15BTS_PAR_TEMP_OCXO_MAX,
+	LC15BTS_PAR_TEMP_TX0_MAX,
 	LC15BTS_PAR_TEMP_TX1_MAX,
-	LC15BTS_PAR_TEMP_TX2_MAX,
+	LC15BTS_PAR_TEMP_PA0_MAX,
 	LC15BTS_PAR_TEMP_PA1_MAX,
-	LC15BTS_PAR_TEMP_PA2_MAX,
 	LC15BTS_PAR_SERNR,
 	LC15BTS_PAR_HOURS,
 	LC15BTS_PAR_BOOTS,
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_power.c b/src/osmo-bts-litecell15/misc/lc15bts_power.c
index a2997ee..5b01d36 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_power.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_power.c
@@ -30,24 +30,24 @@
 
 #define LC15BTS_PA_VOLTAGE      24000000
 
-#define PA_SUPPLY_MIN_SYSFS     "/sys/devices/0.pa-supply/min_microvolts"
-#define PA_SUPPLY_MAX_SYSFS     "/sys/devices/0.pa-supply/max_microvolts"
+#define PA_SUPPLY_MIN_SYSFS     "/var/lc15/pa-supply/min_microvolts"
+#define PA_SUPPLY_MAX_SYSFS     "/var/lc15/pa-supply/max_microvolts"
 
 static const char *power_enable_devs[_NUM_POWER_SOURCES] = {
-        [LC15BTS_POWER_PA1]     = "/sys/devices/0.pa1/state",
-        [LC15BTS_POWER_PA2]     = "/sys/devices/0.pa2/state",
+	[LC15BTS_POWER_PA0]     = "/var/lc15/pa-state/pa0/state",
+	[LC15BTS_POWER_PA1]     = "/var/lc15/pa-state/pa1/state",
 };
 
 static const char *power_sensor_devs[_NUM_POWER_SOURCES] = {
-        [LC15BTS_POWER_SUPPLY]	= "/sys/bus/i2c/devices/2-0040/hwmon/hwmon6/",
-        [LC15BTS_POWER_PA1]	= "/sys/bus/i2c/devices/2-0044/hwmon/hwmon7/",
-        [LC15BTS_POWER_PA2]	= "/sys/bus/i2c/devices/2-0045/hwmon/hwmon8/",
+	[LC15BTS_POWER_SUPPLY]	= "/var/lc15/pwr-sense/pa-supply/",
+	[LC15BTS_POWER_PA0]	= "/var/lc15/pwr-sense/pa0/",
+	[LC15BTS_POWER_PA1]	= "/var/lc15/pwr-sense/pa1/",
 };
 
 static const char *power_sensor_type_str[_NUM_POWER_TYPES] = {
-	[LC15BTS_POWER_POWER]	= "power1_input",
-	[LC15BTS_POWER_VOLTAGE]	= "in1_input",
-	[LC15BTS_POWER_CURRENT]	= "curr1_input",
+	[LC15BTS_POWER_POWER]	= "power",
+	[LC15BTS_POWER_VOLTAGE]	= "voltage",
+	[LC15BTS_POWER_CURRENT]	= "current",
 };
 
 int lc15bts_power_sensor_get(
@@ -94,8 +94,8 @@
 	int fd;
 	int rc;
 
-	if ((source != LC15BTS_POWER_PA1) 
-		&& (source != LC15BTS_POWER_PA2) ) {
+	if ((source != LC15BTS_POWER_PA0) 
+		&& (source != LC15BTS_POWER_PA1) ) {
 		return -EINVAL;
 	}
             
@@ -144,6 +144,7 @@
 {
 	int fd;
 	int rc;
+	int retVal = 0;
 	char enstr[10];
 
 	fd = open(power_enable_devs[source], O_RDONLY);
@@ -152,7 +153,7 @@
 	}
 
 	rc = read(fd, enstr, sizeof(enstr));
-        enstr[sizeof(enstr)-1] = '\0';
+        enstr[rc-1] = '\0';
         
 	close(fd);
 
@@ -163,5 +164,10 @@
                 return -EIO;
         }
 
-        return atoi(enstr);
+	rc = strcmp(enstr, "enabled");
+	if(rc == 0) {
+		retVal = 1;
+	}
+	
+        return retVal;
 }
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_power.h b/src/osmo-bts-litecell15/misc/lc15bts_power.h
index 4bb2748..8963b76 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_power.h
+++ b/src/osmo-bts-litecell15/misc/lc15bts_power.h
@@ -3,8 +3,8 @@
 
 enum lc15bts_power_source {
 	LC15BTS_POWER_SUPPLY,
+	LC15BTS_POWER_PA0,
 	LC15BTS_POWER_PA1,
-	LC15BTS_POWER_PA2,
 	_NUM_POWER_SOURCES
 };
 
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_temp.c b/src/osmo-bts-litecell15/misc/lc15bts_temp.c
index fa6300e..aa35854 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_temp.c
+++ b/src/osmo-bts-litecell15/misc/lc15bts_temp.c
@@ -31,43 +31,27 @@
 
 
 static const char *temp_devs[_NUM_TEMP_SENSORS] = {
-        [LC15BTS_TEMP_SUPPLY]	= "/sys/bus/i2c/devices/2-004d/hwmon/hwmon5/temp1_",
-        [LC15BTS_TEMP_SOC]	= "/sys/class/hwmon/hwmon1/temp1_",
-        [LC15BTS_TEMP_FPGA]	= "/sys/devices/0.iio_hwmon/temp1_",
-        [LC15BTS_TEMP_MEMORY]	= "/sys/bus/i2c/devices/2-004c/hwmon/hwmon4/temp1_",
-        [LC15BTS_TEMP_TX1]	= "/sys/devices/0.ncp15xh103_tx1/temp1_",
-        [LC15BTS_TEMP_TX2]	= "/sys/devices/0.ncp15xh103_tx2/temp1_",
-        [LC15BTS_TEMP_PA1]	= "/sys/bus/i2c/devices/2-004d/hwmon/hwmon5/temp2_",
-        [LC15BTS_TEMP_PA2]	= "/sys/bus/i2c/devices/2-004c/hwmon/hwmon4/temp2_",
+	[LC15BTS_TEMP_SUPPLY]	= "/var/lc15/temp/pa-supply/temp",
+	[LC15BTS_TEMP_SOC]	= "/var/lc15/temp/cpu/temp",
+	[LC15BTS_TEMP_FPGA]	= "/var/lc15/temp/fpga/temp",
+	[LC15BTS_TEMP_LOGRF]	= "/var/lc15/temp/logrf/temp",
+	[LC15BTS_TEMP_OCXO]	= "/var/lc15/temp/ocxo/temp",
+	[LC15BTS_TEMP_TX0]	= "/var/lc15/temp/tx0/temp",
+	[LC15BTS_TEMP_TX1]	= "/var/lc15/temp/tx1/temp",
+	[LC15BTS_TEMP_PA0]	= "/var/lc15/temp/pa0/temp",
+	[LC15BTS_TEMP_PA1]	= "/var/lc15/temp/pa1/temp",
 };
 
-static const int temp_has_fault[_NUM_TEMP_SENSORS] = {
-        [LC15BTS_TEMP_PA1]	= 1,
-        [LC15BTS_TEMP_PA2]	= 1,
-};
-
-static const char *temp_type_str[_NUM_TEMP_TYPES] = {
-	[LC15BTS_TEMP_INPUT] = "input",
-	[LC15BTS_TEMP_LOWEST] = "lowest",
-	[LC15BTS_TEMP_HIGHEST] = "highest",
-	[LC15BTS_TEMP_FAULT] = "fault",
-};
-
-int lc15bts_temp_get(enum lc15bts_temp_sensor sensor,
-		      enum lc15bts_temp_type type)
+int lc15bts_temp_get(enum lc15bts_temp_sensor sensor)
 {
 	char buf[PATH_MAX];
 	char tempstr[8];
-	char faultstr[8];
 	int fd, rc;
 
 	if (sensor < 0 || sensor >= _NUM_TEMP_SENSORS)
 		return -EINVAL;
 
-	if (type >= ARRAY_SIZE(temp_type_str))
-		return -EINVAL;
-
-	snprintf(buf, sizeof(buf)-1, "%s%s", temp_devs[sensor], temp_type_str[type]);
+	snprintf(buf, sizeof(buf)-1, "%s", temp_devs[sensor]);
 	buf[sizeof(buf)-1] = '\0';
 
 	fd = open(buf, O_RDONLY);
@@ -85,32 +69,6 @@
 		return -EIO;
 	}
 	close(fd);
-
-	// Check fault
-	if (type == LC15BTS_TEMP_FAULT || !temp_has_fault[sensor])
-		return atoi(tempstr);
-		
-        snprintf(buf, sizeof(buf)-1, "%s%s",  temp_devs[sensor], temp_type_str[LC15BTS_TEMP_FAULT]);
-        buf[sizeof(buf)-1] = '\0';
-
-        fd = open(buf, O_RDONLY);
-        if (fd < 0)
-                return fd;
-
-        rc = read(fd, faultstr, sizeof(faultstr));
-        tempstr[sizeof(faultstr)-1] = '\0';
-        if (rc < 0) {
-                close(fd);
-                return rc;
-        }
-        if (rc == 0) {
-                close(fd);
-                return -EIO;
-        }
-        close(fd);
-
-	if (atoi(faultstr))
-		return -EIO;
 
 	return atoi(tempstr);
 }
diff --git a/src/osmo-bts-litecell15/misc/lc15bts_temp.h b/src/osmo-bts-litecell15/misc/lc15bts_temp.h
index 4b70cb8..aca8fe2 100644
--- a/src/osmo-bts-litecell15/misc/lc15bts_temp.h
+++ b/src/osmo-bts-litecell15/misc/lc15bts_temp.h
@@ -5,11 +5,12 @@
 	LC15BTS_TEMP_SUPPLY,
 	LC15BTS_TEMP_SOC,
 	LC15BTS_TEMP_FPGA,
-	LC15BTS_TEMP_MEMORY,
+	LC15BTS_TEMP_LOGRF,
+	LC15BTS_TEMP_OCXO,
+	LC15BTS_TEMP_TX0,
 	LC15BTS_TEMP_TX1,
-	LC15BTS_TEMP_TX2,
+	LC15BTS_TEMP_PA0,
 	LC15BTS_TEMP_PA1,
-	LC15BTS_TEMP_PA2,
 	_NUM_TEMP_SENSORS
 };
 
@@ -21,7 +22,6 @@
 	_NUM_TEMP_TYPES
 };
 
-int lc15bts_temp_get(enum lc15bts_temp_sensor sensor,
-		      enum lc15bts_temp_type type);
+int lc15bts_temp_get(enum lc15bts_temp_sensor sensor);
 
 #endif

-- 
To view, visit https://gerrit.osmocom.org/237
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5172daf68d3145a6398e37df87df21b0e5affe42
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Minh-Quang Nguyen <minh-quang.nguyen at nutaq.com>



More information about the gerrit-log mailing list