Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[pandora-kernel.git] / arch / mips / sibyte / swarm / platform.c
index 54847fe..0973352 100644 (file)
@@ -83,3 +83,57 @@ static int __init swarm_pata_init(void)
 device_initcall(swarm_pata_init);
 
 #endif /* defined(CONFIG_SIBYTE_SWARM) || defined(CONFIG_SIBYTE_LITTLESUR) */
+
+#define sb1250_dev_struct(num) \
+       static struct resource sb1250_res##num = {              \
+               .name = "SB1250 MAC " __stringify(num),         \
+               .flags = IORESOURCE_MEM,                \
+               .start = A_MAC_CHANNEL_BASE(num),       \
+               .end = A_MAC_CHANNEL_BASE(num + 1) -1,  \
+       };\
+       static struct platform_device sb1250_dev##num = {       \
+               .name = "sb1250-mac",                   \
+       .id = num,                                      \
+       .resource = &sb1250_res##num,                   \
+       .num_resources = 1,                             \
+       }
+
+sb1250_dev_struct(0);
+sb1250_dev_struct(1);
+sb1250_dev_struct(2);
+sb1250_dev_struct(3);
+
+static struct platform_device *sb1250_devs[] __initdata = {
+       &sb1250_dev0,
+       &sb1250_dev1,
+       &sb1250_dev2,
+       &sb1250_dev3,
+};
+
+static int __init sb1250_device_init(void)
+{
+       int ret;
+
+       /* Set the number of available units based on the SOC type.  */
+       switch (soc_type) {
+       case K_SYS_SOC_TYPE_BCM1250:
+       case K_SYS_SOC_TYPE_BCM1250_ALT:
+               ret = platform_add_devices(sb1250_devs, 3);
+               break;
+       case K_SYS_SOC_TYPE_BCM1120:
+       case K_SYS_SOC_TYPE_BCM1125:
+       case K_SYS_SOC_TYPE_BCM1125H:
+       case K_SYS_SOC_TYPE_BCM1250_ALT2:       /* Hybrid */
+               ret = platform_add_devices(sb1250_devs, 2);
+               break;
+       case K_SYS_SOC_TYPE_BCM1x55:
+       case K_SYS_SOC_TYPE_BCM1x80:
+               ret = platform_add_devices(sb1250_devs, 4);
+               break;
+       default:
+               ret = -ENODEV;
+               break;
+       }
+       return ret;
+}
+device_initcall(sb1250_device_init);