[flashrom] [commit] r1628 - trunk

repository service svn at flashrom.org
Mon Dec 24 23:07:37 CET 2012


Author: stefanct
Date: Mon Dec 24 23:07:36 2012
New Revision: 1628
URL: http://flashrom.org/trac/flashrom/changeset/1628

Log:
Add a "device" parameter for Dediprog.

This patch adds a "device" parameter for Dediprog which enables use of
multiple dediprogs connected to a single machine. Very handy for test racks.

Example usage:
flashrom -p dediprog:device=0
flashrom -p dediprog:device=1
etc...

The patch was originally written by Nathan Laredo.
Thanks to David Hendricks for submitting it upstream.
Additional error handling, man page etc. by Stefan Tauner.

Signed-off-by: Nathan Laredo <nil at google.com>
Signed-off-by: David Hendricks <dhendrix at google.com>
Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>

Modified:
   trunk/dediprog.c
   trunk/flashrom.8

Modified: trunk/dediprog.c
==============================================================================
--- trunk/dediprog.c	Fri Nov 30 17:46:45 2012	(r1627)
+++ trunk/dediprog.c	Mon Dec 24 23:07:36 2012	(r1628)
@@ -19,6 +19,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <errno.h>
 #include <usb.h>
 #include "flash.h"
 #include "chipdrivers.h"
@@ -46,7 +47,8 @@
 #endif
 
 /* Might be useful for other USB devices as well. static for now. */
-static struct usb_device *get_device_by_vid_pid(uint16_t vid, uint16_t pid)
+/* device parameter allows user to specify one device of multiple installed */
+static struct usb_device *get_device_by_vid_pid(uint16_t vid, uint16_t pid, unsigned int device)
 {
 	struct usb_bus *bus;
 	struct usb_device *dev;
@@ -54,8 +56,11 @@
 	for (bus = usb_get_busses(); bus; bus = bus->next)
 		for (dev = bus->devices; dev; dev = dev->next)
 			if ((dev->descriptor.idVendor == vid) &&
-			    (dev->descriptor.idProduct == pid))
-				return dev;
+			    (dev->descriptor.idProduct == pid)) {
+				if (device == 0)
+					return dev;
+				device--;
+			}
 
 	return NULL;
 }
@@ -777,8 +782,9 @@
 int dediprog_init(void)
 {
 	struct usb_device *dev;
-	char *voltage;
+	char *voltage, *device;
 	int millivolt = 3500;
+	long usedevice = 0;
 	int ret;
 
 	msg_pspew("%s\n", __func__);
@@ -792,11 +798,35 @@
 		msg_pinfo("Setting voltage to %i mV\n", millivolt);
 	}
 
+	device = extract_programmer_param("device");
+	if (device) {
+		char *dev_suffix;
+		errno = 0;
+		usedevice = strtol(device, &dev_suffix, 10);
+		if (errno != 0 || device == dev_suffix) {
+			msg_perr("Error: Could not convert 'device'.\n");
+			free(device);
+			return 1;
+		}
+		if (usedevice < 0 || usedevice > UINT_MAX) {
+			msg_perr("Error: Value for 'device' is out of range.\n");
+			free(device);
+			return 1;
+		}
+		if (strlen(dev_suffix) > 0) {
+			msg_perr("Error: Garbage following 'device' value.\n");
+			free(device);
+			return 1;
+		}
+		msg_pinfo("Using device %li.\n", usedevice);
+	}
+	free(device);
+
 	/* Here comes the USB stuff. */
 	usb_init();
 	usb_find_busses();
 	usb_find_devices();
-	dev = get_device_by_vid_pid(0x0483, 0xdada);
+	dev = get_device_by_vid_pid(0x0483, 0xdada, (unsigned int) usedevice);
 	if (!dev) {
 		msg_perr("Could not find a Dediprog SF100 on USB!\n");
 		return 1;

Modified: trunk/flashrom.8
==============================================================================
--- trunk/flashrom.8	Fri Nov 30 17:46:45 2012	(r1627)
+++ trunk/flashrom.8	Mon Dec 24 23:07:36 2012	(r1628)
@@ -1,4 +1,4 @@
-.TH FLASHROM 8 "Feb 15, 2012"
+.TH FLASHROM 8 "Dec, 2012"
 .SH NAME
 flashrom \- detect, read, write, verify and erase flash chips
 .SH SYNOPSIS
@@ -651,6 +651,15 @@
 can be
 .BR 0V ", " 1.8V ", " 2.5V ", " 3.5V
 or the equivalent in mV.
+.sp
+An optional
+.B device
+parameter specifies which of multiple connected Dediprog devices should be used.
+Please be aware that the order depends on libusb's usb_get_busses() function and that the numbering starts
+at 0.
+Usage example to select the second device:
+.sp
+.B "  flashrom \-p dediprog:device=1"
 .SS
 .BR "rayer_spi " programmer
 The default I/O base address used for the parallel port is 0x378 and you can use




More information about the flashrom mailing list