|
@@ -50,6 +50,93 @@
|
|
|
|
|
|
#define NAND_BLOCK_SIZE SZ_128K
|
|
|
|
|
|
+/*
|
|
|
+ * OMAP3 Beagle revision
|
|
|
+ * Run time detection of Beagle revision is done by reading GPIO.
|
|
|
+ * GPIO ID -
|
|
|
+ * AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
|
|
|
+ * C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
|
|
|
+ * C4 = GPIO173, GPIO172, GPIO171: 1 0 1
|
|
|
+ * XM = GPIO173, GPIO172, GPIO171: 0 0 0
|
|
|
+ */
|
|
|
+enum {
|
|
|
+ OMAP3BEAGLE_BOARD_UNKN = 0,
|
|
|
+ OMAP3BEAGLE_BOARD_AXBX,
|
|
|
+ OMAP3BEAGLE_BOARD_C1_3,
|
|
|
+ OMAP3BEAGLE_BOARD_C4,
|
|
|
+ OMAP3BEAGLE_BOARD_XM,
|
|
|
+};
|
|
|
+
|
|
|
+static u8 omap3_beagle_version;
|
|
|
+
|
|
|
+static u8 omap3_beagle_get_rev(void)
|
|
|
+{
|
|
|
+ return omap3_beagle_version;
|
|
|
+}
|
|
|
+
|
|
|
+static void __init omap3_beagle_init_rev(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+ u16 beagle_rev = 0;
|
|
|
+
|
|
|
+ omap_mux_init_gpio(171, OMAP_PIN_INPUT_PULLUP);
|
|
|
+ omap_mux_init_gpio(172, OMAP_PIN_INPUT_PULLUP);
|
|
|
+ omap_mux_init_gpio(173, OMAP_PIN_INPUT_PULLUP);
|
|
|
+
|
|
|
+ ret = gpio_request(171, "rev_id_0");
|
|
|
+ if (ret < 0)
|
|
|
+ goto fail0;
|
|
|
+
|
|
|
+ ret = gpio_request(172, "rev_id_1");
|
|
|
+ if (ret < 0)
|
|
|
+ goto fail1;
|
|
|
+
|
|
|
+ ret = gpio_request(173, "rev_id_2");
|
|
|
+ if (ret < 0)
|
|
|
+ goto fail2;
|
|
|
+
|
|
|
+ gpio_direction_input(171);
|
|
|
+ gpio_direction_input(172);
|
|
|
+ gpio_direction_input(173);
|
|
|
+
|
|
|
+ beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
|
|
|
+ | (gpio_get_value(173) << 2);
|
|
|
+
|
|
|
+ switch (beagle_rev) {
|
|
|
+ case 7:
|
|
|
+ printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
+ printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
|
|
|
+ break;
|
|
|
+ case 0:
|
|
|
+ printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
|
|
|
+ }
|
|
|
+
|
|
|
+ return;
|
|
|
+
|
|
|
+fail2:
|
|
|
+ gpio_free(172);
|
|
|
+fail1:
|
|
|
+ gpio_free(171);
|
|
|
+fail0:
|
|
|
+ printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
|
|
|
+ omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
|
|
|
+
|
|
|
+ return;
|
|
|
+}
|
|
|
+
|
|
|
static struct mtd_partition omap3beagle_nand_partitions[] = {
|
|
|
/* All the partition sizes are listed in terms of NAND block size */
|
|
|
{
|
|
@@ -464,6 +551,7 @@ static struct omap_musb_board_data musb_board_data = {
|
|
|
static void __init omap3_beagle_init(void)
|
|
|
{
|
|
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
|
|
+ omap3_beagle_init_rev();
|
|
|
omap3_beagle_i2c_init();
|
|
|
platform_add_devices(omap3_beagle_devices,
|
|
|
ARRAY_SIZE(omap3_beagle_devices));
|