Blame SOURCES/ccid-1.4.10-voltage.patch

ee67d4
diff -up ./src/commands.c.voltage ./src/commands.c
ee67d4
--- ./src/commands.c.voltage	2013-03-16 06:52:33.000000000 -0700
ee67d4
+++ ./src/commands.c	2013-11-26 15:44:13.533254750 -0800
ee67d4
@@ -97,6 +97,7 @@ RESPONSECODE CmdPowerOn(unsigned int rea
ee67d4
 	status_t res;
ee67d4
 	int length, count = 1;
ee67d4
 	unsigned int atr_len;
ee67d4
+	int init_voltage = 0;
ee67d4
 	RESPONSECODE return_value = IFD_SUCCESS;
ee67d4
 	_ccid_descriptor *ccid_descriptor = get_ccid_descriptor(reader_index);
ee67d4
 
ee67d4
@@ -207,6 +208,7 @@ RESPONSECODE CmdPowerOn(unsigned int rea
ee67d4
 			voltage = 0;	/* auto */
ee67d4
 		}
ee67d4
 	}
ee67d4
+	init_voltage = voltage;
ee67d4
 
ee67d4
 again:
ee67d4
 	cmd[0] = 0x62; /* IccPowerOn */
ee67d4
@@ -256,14 +258,19 @@ again:
ee67d4
 		}
ee67d4
 
ee67d4
 		/* continue with 3 volts and 5 volts */
ee67d4
-		if (voltage > 1)
ee67d4
+		if (voltage) 
ee67d4
 		{
ee67d4
 			const char *voltage_code[] = { "auto", "5V", "3V", "1.8V" };
ee67d4
 
ee67d4
 			DEBUG_INFO3("Power up with %s failed. Try with %s.",
ee67d4
 				voltage_code[voltage], voltage_code[voltage-1]);
ee67d4
 			voltage--;
ee67d4
-			goto again;
ee67d4
+			if (voltage == 0) {
ee67d4
+			    voltage = 3;
ee67d4
+			}
ee67d4
+			if (voltage != init_voltage) {
ee67d4
+			    goto again;
ee67d4
+			}
ee67d4
 		}
ee67d4
 
ee67d4
 		return IFD_COMMUNICATION_ERROR;