From 64f3d068654589d6114048ac5933cd4498706cfc Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 17 Jul 2011 15:02:10 +0200 Subject: [PATCH 20/26] bcm47xx: register flash drivers Signed-off-by: Hauke Mehrtens --- arch/mips/bcm47xx/setup.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 72 insertions(+), 0 deletions(-) --- a/arch/mips/bcm47xx/setup.c +++ b/arch/mips/bcm47xx/setup.c @@ -31,10 +31,12 @@ #include #include #include +#include #include #include #include #include +#include #include union bcm47xx_bus bcm47xx_bus; @@ -366,3 +368,73 @@ static int __init bcm47xx_register_bus_c return 0; } device_initcall(bcm47xx_register_bus_complete); + +static struct resource bcm47xx_pflash_resource = { + .name = "bcm47xx_pflash", + .start = 0, + .end = 0, + .flags = 0, +}; + +static struct platform_device bcm47xx_pflash_dev = { + .name = "bcm47xx_pflash", + .resource = &bcm47xx_pflash_resource, + .num_resources = 1, +}; + +static struct resource bcm47xx_sflash_resource = { + .name = "bcm47xx_sflash", + .start = 0, + .end = 0, + .flags = 0, +}; + +static struct platform_device bcm47xx_sflash_dev = { + .name = "bcm47xx_sflash", + .resource = &bcm47xx_sflash_resource, + .num_resources = 1, +}; + +static int __init bcm47xx_register_flash(void) +{ +#ifdef CONFIG_BCM47XX_SSB + struct ssb_chipcommon *chipco; +#endif +#ifdef CONFIG_BCM47XX_BCMA + struct bcma_drv_cc *drv_cc; +#endif + switch (bcm47xx_bus_type) { +#ifdef CONFIG_BCM47XX_SSB + case BCM47XX_BUS_TYPE_SSB: + chipco = &bcm47xx_bus.ssb.chipco; + if (chipco->flash_type == SSB_PFLASH) { + bcm47xx_pflash_resource.start = chipco->pflash.window; + bcm47xx_pflash_resource.end = chipco->pflash.window + chipco->pflash.window_size; + return platform_device_register(&bcm47xx_pflash_dev); + } else if (chipco->flash_type == SSB_SFLASH) { + bcm47xx_sflash_dev.dev.platform_data = &bcm47xx_sflash; + return platform_device_register(&bcm47xx_sflash_dev); + } else { + printk(KERN_ERR "No flash device found\n"); + return -1; + } +#endif +#ifdef CONFIG_BCM47XX_BCMA + case BCM47XX_BUS_TYPE_BCMA: + drv_cc = &bcm47xx_bus.bcma.bus.drv_cc; + if (drv_cc->flash_type == BCMA_PFLASH) { + bcm47xx_pflash_resource.start = drv_cc->pflash.window; + bcm47xx_pflash_resource.end = drv_cc->pflash.window + drv_cc->pflash.window_size; + return platform_device_register(&bcm47xx_pflash_dev); + } else if (drv_cc->flash_type == BCMA_SFLASH) { + bcm47xx_sflash_dev.dev.platform_data = &bcm47xx_sflash; + return platform_device_register(&bcm47xx_sflash_dev); + } else { + printk(KERN_ERR "No flash device found\n"); + return -1; + } +#endif + } + return -1; +} +fs_initcall(bcm47xx_register_flash);