Just found a device tree bug which corrupts __machine_type. In arch/arm/kernel/devtree.c at end of setup_machine_fdt()
- __machine_arch_type = mdesc->nr; + __machine_arch_type = mdesc_best->nr;
This was stopping some Beagleboard drivers from being initialised as they were doing run-time checking for machine type.