g_sa1111 = sachip;
 
        has_devs = ~0;
-       if (machine_is_assabet() || machine_is_jornada720() ||
-           machine_is_badge4())
-               has_devs &= ~SA1111_DEVID_PS2_MSE;
-       else
-               has_devs &= ~SA1111_DEVID_SAC;
+       if (pd)
+               has_devs &= ~pd->disable_devs;
 
        for (i = 0; i < ARRAY_SIZE(sa1111_devices); i++)
                if (sa1111_devices[i].devid & has_devs)
 
 
 struct sa1111_platform_data {
        int     irq_base;       /* base for cascaded on-chip IRQs */
+       unsigned disable_devs;
        void    *data;
        int     (*enable)(void *, unsigned);
        void    (*disable)(void *, unsigned);
 
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = LUBBOCK_SA1111_IRQ_BASE,
+       .disable_devs   = SA1111_DEVID_SAC,
 };
 
 static struct platform_device sa1111_device = {
 
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
        .enable         = badge4_sa1111_enable,
        .disable        = badge4_sa1111_disable,
 };
 
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
 };
 
 static u64 sa1111_dmamask = 0xffffffffUL;
 
 
 static struct sa1111_platform_data sa1111_info = {
        .irq_base       = IRQ_BOARD_END,
+       .disable_devs   = SA1111_DEVID_PS2_MSE,
 };
 
 static u64 sa1111_dmamask = 0xffffffffUL;