summaryrefslogtreecommitdiffstats
path: root/target/linux/brcm47xx/patches-3.6/061-ssb-register-parallel-flash-device.patch
blob: 6e0d491842ed658b4d3441453bcbd82da0766572 (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
68
69
70
71
72
73
74
75
76
--- a/drivers/ssb/driver_mipscore.c
+++ b/drivers/ssb/driver_mipscore.c
@@ -14,6 +14,7 @@
 #include <linux/serial_core.h>
 #include <linux/serial_reg.h>
 #include <linux/time.h>
+#include <linux/platform_device.h>
 
 #include "ssb_private.h"
 
@@ -186,6 +187,19 @@ static void ssb_mips_serial_init(struct
 		mcore->nr_serial_ports = 0;
 }
 
+static struct resource ssb_pflash_resource = {
+	.name	= "ssb_pflash",
+	.start	= 0,
+	.end	= 0,
+	.flags  = 0,
+};
+
+struct platform_device ssb_pflash_dev = {
+	.name		= "bcm47xx-pflash",
+	.resource	= &ssb_pflash_resource,
+	.num_resources	= 1,
+};
+
 static void ssb_mips_flash_detect(struct ssb_mipscore *mcore)
 {
 	struct ssb_bus *bus = mcore->dev->bus;
@@ -196,6 +210,9 @@ static void ssb_mips_flash_detect(struct
 		mcore->pflash.buswidth = 2;
 		mcore->pflash.window = SSB_FLASH1;
 		mcore->pflash.window_size = SSB_FLASH1_SZ;
+		ssb_pflash_resource.start = mcore->pflash.window;
+		ssb_pflash_resource.end = mcore->pflash.window + 
+					  mcore->pflash.window_size;
 		return;
 	}
 
@@ -216,6 +233,9 @@ static void ssb_mips_flash_detect(struct
 			mcore->pflash.buswidth = 1;
 		else
 			mcore->pflash.buswidth = 2;
+		ssb_pflash_resource.start = mcore->pflash.window;
+		ssb_pflash_resource.end = mcore->pflash.window + 
+					  mcore->pflash.window_size;
 		break;
 	}
 }
--- a/drivers/ssb/main.c
+++ b/drivers/ssb/main.c
@@ -543,6 +543,14 @@ static int ssb_devices_register(struct s
 				   "Error registering serial flash\n");
 	}
 #endif
+#ifdef CONFIG_SSB_DRIVER_MIPS
+	if (bus->mipscore.pflash.present) {
+		err = platform_device_register(&ssb_pflash_dev);
+		if (err)
+			ssb_printk(KERN_ERR PFX
+				   "Error registering parallel flash\n");
+	}
+#endif
 
 	return 0;
 error:
--- a/drivers/ssb/ssb_private.h
+++ b/drivers/ssb/ssb_private.h
@@ -223,4 +223,6 @@ static inline int ssb_sflash_init(struct
 }
 #endif /* CONFIG_SSB_SFLASH */
 
+extern struct platform_device ssb_pflash_dev;
+
 #endif /* LINUX_SSB_PRIVATE_H_ */