FreeCalypso > hg > freecalypso-sw
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); +}