diff loadtools/gtapower.c @ 84:ccc5161848c7

loadtools: support building for GTA0x AP
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Tue, 20 Aug 2013 04:51:15 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/gtapower.c	Tue Aug 20 04:51:15 2013 +0000
@@ -0,0 +1,54 @@
+/*
+ * This module is included only when loadtools are being built to run on the
+ * GTA0x application processor (AP).  It provides automated modem power
+ * control, i.e., coordinates modem power control with loadtools operations
+ * for convenience.
+ */
+
+#include <sys/types.h>
+#include <sys/file.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+/*
+ * Check this pathname: it is correct for the kernel version I'm using
+ * on my test GTA02, but it differs for some other kernel versions.
+ */
+static char modem_powerctl_pathname[] =
+	"/sys/bus/platform/devices/gta02-pm-gsm.0/power_on";
+
+void
+set_gta_modem_power_ctrl(boolval)
+{
+	char strbuf[16];
+	int len, fd;
+
+	len = sprintf(strbuf, "%d\n", boolval);
+	fd = open(modem_powerctl_pathname, O_WRONLY);
+	if (fd < 0) {
+		perror(modem_powerctl_pathname);
+		exit(1);
+	}
+	write(fd, strbuf, len);
+	close(fd);
+}
+
+void
+fork_gta_modem_poweron()
+{
+	int i;
+
+	i = fork();
+	if (i < 0) {
+		perror("fork");
+		exit(1);
+	}
+	if (i)
+		return;
+	printf("Toggling %s\n", modem_powerctl_pathname);
+	set_gta_modem_power_ctrl(0);
+	usleep(350000);
+	set_gta_modem_power_ctrl(1);
+	exit(0);
+}