|  | @@ -44,3 +44,136 @@
 | 
	
		
			
				|  |  |  #include <linux/platform_data/mtd-nand-omap2.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #include "common.h"
 | 
	
		
			
				|  |  | +#include "omap_device.h"
 | 
	
		
			
				|  |  | +#include "gpmc.h"
 | 
	
		
			
				|  |  | +#include "soc.h"
 | 
	
		
			
				|  |  | +#include "mux.h"
 | 
	
		
			
				|  |  | +#include "hsmmc.h"
 | 
	
		
			
				|  |  | +#include "pm.h"
 | 
	
		
			
				|  |  | +#include "board-flash.h"
 | 
	
		
			
				|  |  | +#include "common-board-devices.h"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#define	NAND_CS	0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * 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
 | 
	
		
			
				|  |  | + *	XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
 | 
	
		
			
				|  |  | + *	XMC = GPIO173, GPIO172, GPIO171: 0 1 0
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +enum {
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_UNKN = 0,
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_AXBX,
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_C1_3,
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_C4,
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_XM,
 | 
	
		
			
				|  |  | +	OMAP3BEAGLE_BOARD_XMC,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static u8 omap3_beagle_version;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * Board-specific configuration
 | 
	
		
			
				|  |  | + * Defaults to BeagleBoard-xMC
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +static struct {
 | 
	
		
			
				|  |  | +	int mmc1_gpio_wp;
 | 
	
		
			
				|  |  | +	int usb_pwr_level;
 | 
	
		
			
				|  |  | +	int dvi_pd_gpio;
 | 
	
		
			
				|  |  | +	int usr_button_gpio;
 | 
	
		
			
				|  |  | +	int mmc_caps;
 | 
	
		
			
				|  |  | +} beagle_config = {
 | 
	
		
			
				|  |  | +	.mmc1_gpio_wp = -EINVAL,
 | 
	
		
			
				|  |  | +	.usb_pwr_level = GPIOF_OUT_INIT_LOW,
 | 
	
		
			
				|  |  | +	.dvi_pd_gpio = -EINVAL,
 | 
	
		
			
				|  |  | +	.usr_button_gpio = 4,
 | 
	
		
			
				|  |  | +	.mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct gpio omap3_beagle_rev_gpios[] __initdata = {
 | 
	
		
			
				|  |  | +	{ 171, GPIOF_IN, "rev_id_0"    },
 | 
	
		
			
				|  |  | +	{ 172, GPIOF_IN, "rev_id_1" },
 | 
	
		
			
				|  |  | +	{ 173, GPIOF_IN, "rev_id_2"    },
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +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_array(omap3_beagle_rev_gpios,
 | 
	
		
			
				|  |  | +				 ARRAY_SIZE(omap3_beagle_rev_gpios));
 | 
	
		
			
				|  |  | +	if (ret < 0) {
 | 
	
		
			
				|  |  | +		printk(KERN_ERR "Unable to get revision detection GPIO pins\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
 | 
	
		
			
				|  |  | +			| (gpio_get_value(173) << 2);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	gpio_free_array(omap3_beagle_rev_gpios,
 | 
	
		
			
				|  |  | +			ARRAY_SIZE(omap3_beagle_rev_gpios));
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	switch (beagle_rev) {
 | 
	
		
			
				|  |  | +	case 7:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
 | 
	
		
			
				|  |  | +		beagle_config.mmc1_gpio_wp = 29;
 | 
	
		
			
				|  |  | +		beagle_config.dvi_pd_gpio = 170;
 | 
	
		
			
				|  |  | +		beagle_config.usr_button_gpio = 7;
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 6:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
 | 
	
		
			
				|  |  | +		beagle_config.mmc1_gpio_wp = 23;
 | 
	
		
			
				|  |  | +		beagle_config.dvi_pd_gpio = 170;
 | 
	
		
			
				|  |  | +		beagle_config.usr_button_gpio = 7;
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 5:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
 | 
	
		
			
				|  |  | +		beagle_config.mmc1_gpio_wp = 23;
 | 
	
		
			
				|  |  | +		beagle_config.dvi_pd_gpio = 170;
 | 
	
		
			
				|  |  | +		beagle_config.usr_button_gpio = 7;
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 0:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
 | 
	
		
			
				|  |  | +		beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH;
 | 
	
		
			
				|  |  | +		beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	case 2:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
 | 
	
		
			
				|  |  | +		beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
 | 
	
		
			
				|  |  | +		omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct mtd_partition omap3beagle_nand_partitions[] = {
 | 
	
		
			
				|  |  | +	/* All the partition sizes are listed in terms of NAND block size */
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		.name		= "X-Loader",
 | 
	
		
			
				|  |  | +		.offset		= 0,
 | 
	
		
			
				|  |  | +		.size		= 4 * NAND_BLOCK_SIZE,
 | 
	
		
			
				|  |  | +		.mask_flags	= MTD_WRITEABLE,	/* force read-only */
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		.name		= "U-Boot",
 | 
	
		
			
				|  |  | +		.offset		= MTDPART_OFS_APPEND,	/* Offset = 0x80000 */
 | 
	
		
			
				|  |  | +		.size		= 15 * NAND_BLOCK_SIZE,
 | 
	
		
			
				|  |  | +		.mask_flags	= MTD_WRITEABLE,	/* force read-only */
 | 
	
		
			
				|  |  | +	},
 | 
	
		
			
				|  |  | +	{
 |