The Treo 650 Bootloader in Linux
From ShadoWiki
To get the Treo 650 bootloader working in Linux, you'll need the ipaq driver source from SynCE [1] and you'll want to apply this patch that sends extra initialization packets to the phone.
Oops! This patch is actually reversed - you'll need to apply it with -R I think.
--- ipaq.c 2005-11-30 18:19:05.000000000 -0700
+++ ipaq.c-2.6.13.3 2005-10-11 06:54:55.000000000 -0600
@@ -672,61 +658,15 @@
* through. Since this has a reasonably high failure rate, we retry
* several times.
*/
- retries = KP_RETRIES;
- while (retries--) {
- result = usb_control_msg(serial->dev,
- usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
- 0, 0, NULL, 0, 100);
- if (result != 0) {
- break;
- }
- }
-
- if (!retries)
- goto initfail;
-
- retries = KP_RETRIES;
- while (retries--) {
- result = usb_control_msg(serial->dev,
- usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
- 2, 0, NULL, 0, 100);
- if (result == 0) {
- break;
- }
- }
- if (!retries)
- goto initfail;
-
- retries = KP_RETRIES;
while (retries--) {
result = usb_control_msg(serial->dev,
usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
- 3, 0, NULL, 0, 100);
+ 0x1, 0, NULL, 0, 100);
if (result == 0) {
- break;
+ return 0;
}
}
-
- if (!retries)
- goto initfail;
-
- retries = KP_RETRIES;
- while (retries--) {
- result = usb_control_msg(serial->dev,
- usb_sndctrlpipe(serial->dev, 0), 0x20, 0,
- 0, 0, NULL, 0, 100);
- if (result == 0) {
- break;
- }
- }
-
- if (!retries)
- goto initfail;
-
- return 0;
-
-initfail:
err("%s - failed doing control urb, error %d", __FUNCTION__, result);
goto error;
