Blame SOURCES/ccid-1.4.10-voltage.patch

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