Edward O'Callaghan has uploaded this change for review.
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;
To view, visit change 63130. To unsubscribe, or for help writing mail filters, visit settings.