Comment 20 for bug 111694

Revision history for this message
JWZ (marr9999) wrote :

Good news, everyone! :^)

The DeLorme Earthmate LT-20 (and LT-40) GPS receivers now work again under Linux! The new 2.6.26 kernel incorporates a series of patches by Mike Isely which fix the problems with the supporting driver.

The full story is a bit more involved, so for anyone interested, please read on....

As near as I've been able to discern, DeLorme has had at least 4 USB-based GPS receivers which all go by the "Earthmate" name. There is the original USB-based "Earthmate", 2 variants (details below) of the "Earthmate LT-20", and the recent "Earthmate LT-40". (It appears that there may have even been an older RS-232 "Earthmate" as well, but I'm ignoring any such device here since it is irrelevant to this discussion.

The 'cypress_m8' Linux kernel module initially (until the 2.6.19 kernel came out) worked fine with the original USB Earthmate and the 1st (older) variant of the Earthmate LT-20.

A patch to the 'cypress_m8' driver by Mike Isely went into what became the Linux 2.6.19 kernel. For me, it caused my previously-working LT-20 to stop working. I discovered this (way back in Mar 2007) and, after some testing, posted about it, including a "quick 'n' dirty" 1-line fix that made my LT-20 start working again:

   http://<email address hidden>/msg52237.html

Shortly thereafter, I got an email from Mike Isely. He explained that his patch that got included in creating the Linux 2.6.19 kernel made his original USB Earthmate GPS receiver work more reliably, preventing some situation in which the driver was monopolizing his CPU, sometimes even forcing a reboot.

We began an email exchange/discussion (which eventually drifted off the 'linux-usb-devel' mailing list) about fixing the driver properly, to support both the original Earthmate and the LT-20 version. At that time, the LT-40 didn't exist.

We both got distracted for several months doing other things. In that time, Mike had conveniently purchased an Earthmate LT-20 to do some testing. We finally got around to resuming the discussion and testing. Up until late January 2008, neither of us realized that there was such a thing as a "new" LT-20 variant. Mike came up with a patch to the 'cypress_m8' driver that worked with his original Earthmate and with his (new) LT-20. When I tested it, it didn't work with my (old) LT-20, though.

We quickly realized that DeLorme had put out a newer version of the LT-20 but with the same USB 'Product ID' (PID).

As it turns out, both of the Earthmate LT-20 receivers I own are the older variant. Mike owns both the old original Earthmate (non-"LT-20") and the newer variant of the LT-20.

Once we realized this and reported our respective LT-20 device capabilities to each other, Mike quickly came up with another patch which worked perfectly on my older LT-20 devices. Since DeLorme didn't change the PID between the old and new LT-20 receivers, Mike was forced to use the device's report of the 'maximum packet size' (32 bytes on the old LT-20 devices but only 8 bytes on the new LT-20 devices) to discern the proper way to process the datastream.

In fact, for anyone interested in the really gory details, here's the releavant part of the output from 'cat /proc/bus/usb/devices' for every USB-based Earthmate GPS receiver except the LT-40....

The oldest, "original" (non-"LT-20") USB Earthmate:

   T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
   D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
   P: Vendor=1163 ProdID=0100 Rev= 0.04
   S: Manufacturer=DeLorme Publishing
   S: Product=DeLorme USB Earthmate
   C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
   I:* If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=cypress
   E: Ad=81(I) Atr=03(Int.) MxPS= 32 Ivl=6ms
   E: Ad=02(O) Atr=03(Int.) MxPS= 32 Ivl=6ms

The "older" (32-byte) Earthmate LT-20:

   T: Bus=04 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
   D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
   P: Vendor=1163 ProdID=0200 Rev= 0.01
   S: Manufacturer=DeLorme Publishing
   S: Product=DeLorme USB Earthmate
   C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
   I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=cypress
   E: Ad=81(I) Atr=03(Int.) MxPS= 32 Ivl=6ms
   E: Ad=02(O) Atr=03(Int.) MxPS= 32 Ivl=6ms

The "newer" (8-byte) Earthmate LT-20:

   T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=1.5 MxCh= 0
   D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
   P: Vendor=1163 ProdID=0200 Rev= 1.11
   S: Manufacturer=DeLorme Publishing
   S: Product=DeLorme USB Earthmate
   C:* #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=400mA
   I:* If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=cypress
   E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
   E: Ad=02(O) Atr=03(Int.) MxPS= 8 Ivl=10ms

The original (non-"LT-20", non-"LT-40") Earthmate has a unique USB PID ("ProdID=0100"), making it easy to distinguish. As you can see, among other things, the 2 variants of the LT-20 have different values for "Spd" and for "MxPS" on both the Input and Output endpoints. In USB parlance, the older LT-20 is a "full-speed" device (12 Mbps) and the newer LT-20 is a "low-speed" (1.5 Mbps) device.

Sometime after those tests were made and Mike's repair patches were created, both Mike and I purchased the newer Earthmate LT-40. It appears to be much more like the old LT-20 than the new LT-20. Here's the output from 'cat /proc/bus/usb/devices' for the LT-40:

   T: Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=12 MxCh= 0
   D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
   P: Vendor=1163 ProdID=0200 Rev= 0.01
   S: Manufacturer=DeLorme Publishing
   S: Product=DeLorme USB Earthmate
   C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
   I: If#= 0 Alt= 0 #EPs= 2 Cls=03(HID ) Sub=00 Prot=00 Driver=cypress
   E: Ad=81(I) Atr=03(Int.) MxPS= 32 Ivl=4ms
   E: Ad=02(O) Atr=03(Int.) MxPS= 32 Ivl=4ms

More importantly, these new LT-40 GPS receivers work perfectly with the new 2.6.26 kernel too.

The bottom line is that the new 2.6.26 kernel properly supports all 4 of these USB-based DeLorme Earthmate GPS receivers.

My sincere thanks to Mike Isely for providing these very useful patches and pushing them upstream for kernel inclusion! He did all the hard work -- all I did was test and report.

Hopefully this will be useful to all you Linux-loving Earthmate GPS users, like me! :^)

Regards,
Bill Marr