summaryrefslogtreecommitdiffstats
path: root/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch')
-rw-r--r--extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch135
1 files changed, 135 insertions, 0 deletions
diff --git a/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch
new file mode 100644
index 00000000..f29c9a6d
--- /dev/null
+++ b/extras/recipes-kernel/linux/linux-omap-psp-2.6.32/beagleboard-xmc/0001-omap-Beagle-revision-detection.patch
@@ -0,0 +1,135 @@
1From 325afc09116e11e28265b648ef33d8c0306c61f1 Mon Sep 17 00:00:00 2001
2From: Robert Nelson <robertcnelson@gmail.com>
3Date: Thu, 23 Sep 2010 18:22:47 -0700
4Subject: [PATCH 01/10] omap: Beagle: revision detection
5
6Due to the omap3530 ES3.0 Silicon being used on both the
7B5/B6 and C1/2/3 Beagle we can't use the cpu_is_omap34xx()
8routines to differentiate the Beagle Boards.
9
10However gpio pins 171,172,173 where setup for this prupose, so
11lets use them.
12
13Changes:
14for older U-Boot's, use omap_mux_init_gpio()
15keep Beagle Rev in board-omap3beagle.c
16gpio_free on gpio request failure
17
18Tested on Beagle Revisions: B5, C2, C4, and xMA
19
20Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
21Acked-by: Jarkko Nikula <jhnikula@gmail.com>
22Signed-off-by: Tony Lindgren <tony@atomide.com>
23---
24 arch/arm/mach-omap2/board-omap3beagle.c | 88 +++++++++++++++++++++++++++++++
25 1 files changed, 88 insertions(+), 0 deletions(-)
26
27diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
28index 2677b41..7ca2b3b 100644
29--- a/arch/arm/mach-omap2/board-omap3beagle.c
30+++ b/arch/arm/mach-omap2/board-omap3beagle.c
31@@ -175,6 +175,93 @@ static void __init omap3beagle_ks8851_init(void)
32 static inline void __init omap3beagle_ks8851_init(void) { return; }
33 #endif
34
35+/*
36+ * OMAP3 Beagle revision
37+ * Run time detection of Beagle revision is done by reading GPIO.
38+ * GPIO ID -
39+ * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
40+ * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
41+ * C4 = GPIO173, GPIO172, GPIO171: 1 0 1
42+ * XM = GPIO173, GPIO172, GPIO171: 0 0 0
43+ */
44+enum {
45+ OMAP3BEAGLE_BOARD_UNKN = 0,
46+ OMAP3BEAGLE_BOARD_AXBX,
47+ OMAP3BEAGLE_BOARD_C1_3,
48+ OMAP3BEAGLE_BOARD_C4,
49+ OMAP3BEAGLE_BOARD_XM,
50+};
51+
52+static u8 omap3_beagle_version;
53+
54+static u8 omap3_beagle_get_rev(void)
55+{
56+ return omap3_beagle_version;
57+}
58+
59+static void __init omap3_beagle_init_rev(void)
60+{
61+ int ret;
62+ u16 beagle_rev = 0;
63+
64+ omap_mux_init_gpio(171, OMAP_PIN_INPUT_PULLUP);
65+ omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
66+ omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
67+
68+ ret = gpio_request(171, "rev_id_0");
69+ if (ret < 0)
70+ goto fail0;
71+
72+ ret = gpio_request(172, "rev_id_1");
73+ if (ret < 0)
74+ goto fail1;
75+
76+ ret = gpio_request(173, "rev_id_2");
77+ if (ret < 0)
78+ goto fail2;
79+
80+ gpio_direction_input(171);
81+ gpio_direction_input(172);
82+ gpio_direction_input(173);
83+
84+ beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
85+ | (gpio_get_value(173) << 2);
86+
87+ switch (beagle_rev) {
88+ case 7:
89+ printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
90+ omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
91+ break;
92+ case 6:
93+ printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
94+ omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
95+ break;
96+ case 5:
97+ printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
98+ omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
99+ break;
100+ case 0:
101+ printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
102+ omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
103+ break;
104+ default:
105+ printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
106+ omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
107+ }
108+
109+ return;
110+
111+fail2:
112+ gpio_free(172);
113+fail1:
114+ gpio_free(171);
115+fail0:
116+ printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
117+ omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
118+
119+ return;
120+}
121+
122 static struct mtd_partition omap3beagle_nand_partitions[] = {
123 /* All the partition sizes are listed in terms of NAND block size */
124 {
125@@ -853,6 +940,7 @@ static int __init cameraboard_setup(char *str)
126 static void __init omap3_beagle_init(void)
127 {
128 omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
129+ omap3_beagle_init_rev();
130 omap3_beagle_i2c_init();
131
132 if (cpu_is_omap3630()) {
133--
1341.6.6.1
135