Edward O'Callaghan has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/63130 )
Change subject: pony_spi.c: Extract out get_params to simplify init ......................................................................
pony_spi.c: Extract out get_params to simplify init
In light of `commit caa0335114a81`, extract out the get_param logic to its own function to simplify the number of cleanup paths.
BUG=none TEST=builds
Change-Id: I364febc05c870683cbad114583762b0c006f4bac Signed-off-by: Edward O'Callaghan quasisec@google.com --- M pony_spi.c 1 file changed, 48 insertions(+), 40 deletions(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/30/63130/1
diff --git a/pony_spi.c b/pony_spi.c index a3ac274..2285c64 100644 --- a/pony_spi.c +++ b/pony_spi.c @@ -120,13 +120,51 @@ return ret; }
+static int get_params(enum pony_type *type, bool *have_device) +{ + char *arg = NULL; + int ret = 0; + + /* defaults */ + *type = TYPE_SI_PROG; + *have_device = false; + + /* The parameter is in format "dev=/dev/device,type=serbang" */ + arg = extract_programmer_param("dev"); + if (arg && strlen(arg)) { + sp_fd = sp_openserport(arg, 9600); + if (sp_fd == SER_INV_FD) + ret = 1; + else + *have_device = true; + } + free(arg); + + arg = extract_programmer_param("type"); + if (arg && !strcasecmp(arg, "serbang")) { + *type = TYPE_SERBANG; + } else if (arg && !strcasecmp(arg, "si_prog")) { + *type = TYPE_SI_PROG; + } else if (arg && !strcasecmp( arg, "ajawe")) { + *type = TYPE_AJAWE; + } else if (arg && !strlen(arg)) { + msg_perr("Error: Missing argument for programmer type.\n"); + ret = 1; + } else if (arg){ + msg_perr("Error: Invalid programmer type specified.\n"); + ret = 1; + } + free(arg); + + return ret; +} + static int pony_spi_init(void) { int i, data_out; - char *arg = NULL; - enum pony_type type = TYPE_SI_PROG; + enum pony_type type; const char *name; - int have_device = 0; + bool have_device; int have_prog = 0;
struct pony_spi_data *data = calloc(1, sizeof(*data)); @@ -139,49 +177,19 @@ data->negate_mosi = 0; data->negate_miso = 0;
- /* The parameter is in format "dev=/dev/device,type=serbang" */ - arg = extract_programmer_param("dev"); - if (arg && strlen(arg)) { - sp_fd = sp_openserport(arg, 9600); - if (sp_fd == SER_INV_FD) { - free(arg); - free(data); - return 1; - } - if (register_shutdown(pony_spi_shutdown, data) != 0) { - free(arg); - free(data); - serialport_shutdown(NULL); - return 1; - } - have_device++; - } - free(arg); - + get_params(&type, &have_device); if (!have_device) { msg_perr("Error: No valid device specified.\n" "Use flashrom -p pony_spi:dev=/dev/device[,type=name]\n"); - free(data); return 1; }
- arg = extract_programmer_param("type"); - if (arg && !strcasecmp(arg, "serbang")) { - type = TYPE_SERBANG; - } else if (arg && !strcasecmp(arg, "si_prog")) { - type = TYPE_SI_PROG; - } else if (arg && !strcasecmp( arg, "ajawe")) { - type = TYPE_AJAWE; - } else if (arg && !strlen(arg)) { - msg_perr("Error: Missing argument for programmer type.\n"); - free(arg); - return 1; - } else if (arg){ - msg_perr("Error: Invalid programmer type specified.\n"); - free(arg); + + if (register_shutdown(pony_spi_shutdown, data) != 0) { + free(data); + serialport_shutdown(NULL); return 1; } - free(arg);
/* * Configure the serial port pins, depending on the used programmer. @@ -221,12 +229,12 @@
switch (type) { case TYPE_AJAWE: - have_prog = 1; + have_prog = true; break; case TYPE_SI_PROG: case TYPE_SERBANG: default: - have_prog = 1; + have_prog = true; /* We toggle RTS/SCK a few times and see if DSR changes too. */ for (i = 1; i <= 10; i++) { data_out = i & 1;