diff --git a/alpaca.c b/alpaca.c index a6bd133..b292621 100644 --- a/alpaca.c +++ b/alpaca.c @@ -73,7 +73,11 @@ void *alpaca_open(struct device *dev) err(1, "failed to open %s", dev->alpaca_dev); alpaca_device_power(alpaca, 0); - alpaca_usb_device_power(alpaca, 0); + + if (dev->usb_always_on) + alpaca_usb_device_power(alpaca, 1); + else + alpaca_usb_device_power(alpaca, 0); usleep(500000); @@ -156,7 +160,9 @@ int alpaca_power_on(struct device *dev) int alpaca_power_off(struct device *dev) { alpaca_device_power(dev->cdb, 0); - alpaca_usb_device_power(dev->cdb, 0); + + if (!dev->usb_always_on) + alpaca_usb_device_power(dev->cdb, 0); return 0; } diff --git a/device.h b/device.h index 5dce18a..0e94b1c 100644 --- a/device.h +++ b/device.h @@ -19,6 +19,7 @@ struct device { unsigned voltage; bool tickle_mmc; bool pshold_shutdown; + bool usb_always_on; struct fastboot *fastboot; unsigned int fastboot_key_timeout; diff --git a/device_parser.c b/device_parser.c index 0ebe151..3e71a95 100644 --- a/device_parser.c +++ b/device_parser.c @@ -138,6 +138,8 @@ static void parse_board(struct device_parser *dp) dev->description = strdup(value); } else if (!strcmp(key, "fastboot_key_timeout")) { dev->fastboot_key_timeout = strtoul(value, NULL, 10); + } else if (!strcmp(key, "usb_always_on")) { + dev->usb_always_on = !strcmp(value, "true"); } else { fprintf(stderr, "device parser: unknown key \"%s\"\n", key); exit(1);