summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.6/072-bcma-register-parallel-flash-device.patch
blob: cacb9034307537e2dad3bdabc1866ac91c951b55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
--- a/drivers/bcma/bcma_private.h
+++ b/drivers/bcma/bcma_private.h
@@ -45,6 +45,7 @@ int bcma_sprom_get(struct bcma_bus *bus)
 /* driver_chipcommon.c */
 #ifdef CONFIG_BCMA_DRIVER_MIPS
 void bcma_chipco_serial_init(struct bcma_drv_cc *cc);
+extern struct platform_device bcma_pflash_dev;
 #endif /* CONFIG_BCMA_DRIVER_MIPS */
 
 /* driver_chipcommon_pmu.c */
--- a/drivers/bcma/driver_mips.c
+++ b/drivers/bcma/driver_mips.c
@@ -18,6 +18,7 @@
 #include <linux/serial_core.h>
 #include <linux/serial_reg.h>
 #include <linux/time.h>
+#include <linux/platform_device.h>
 
 /* The 47162a0 hangs when reading MIPS DMP registers registers */
 static inline bool bcma_core_mips_bcm47162a0_quirk(struct bcma_device *dev)
@@ -178,6 +179,19 @@ u32 bcma_cpu_clock(struct bcma_drv_mips
 }
 EXPORT_SYMBOL(bcma_cpu_clock);
 
+static struct resource bcma_pflash_resource = {
+	.name	= "bcma_pflash",
+	.start	= 0,
+	.end	= 0,
+	.flags  = 0,
+};
+
+struct platform_device bcma_pflash_dev = {
+	.name		= "bcm47xx-pflash",
+	.resource	= &bcma_pflash_resource,
+	.num_resources	= 1,
+};
+
 static void bcma_core_mips_flash_detect(struct bcma_drv_mips *mcore)
 {
 	struct bcma_bus *bus = mcore->core->bus;
@@ -200,6 +214,9 @@ static void bcma_core_mips_flash_detect(
 			cc->pflash.buswidth = 1;
 		else
 			cc->pflash.buswidth = 2;
+
+		bcma_pflash_resource.start = cc->pflash.window;
+		bcma_pflash_resource.end = cc->pflash.window + cc->pflash.window_size;
 		break;
 	default:
 		bcma_err(bus, "Flash type not supported\n");
--- a/drivers/bcma/main.c
+++ b/drivers/bcma/main.c
@@ -149,6 +149,14 @@ static int bcma_register_cores(struct bc
 		dev_id++;
 	}
 
+#ifdef CONFIG_BCMA_DRIVER_MIPS
+	if (bus->drv_cc.pflash.present) {
+		err = platform_device_register(&bcma_pflash_dev);
+		if (err)
+			bcma_err(bus, "Error registering parallel flash\n");
+	}
+#endif
+
 #ifdef CONFIG_BCMA_SFLASH
 	if (bus->drv_cc.sflash.present) {
 		err = platform_device_register(&bcma_sflash_dev);