//Setup EM406 for SIRF binary mode at 38400bit/s
#if GPS_PROTOCOL == 2
This would imply that only the EM406 GPS configuration calls init_gps(), but each GPS of every type defines such a function.
I can't see how the MTK init_gps() ever gets called, for example.
What am I missing?