OMAP3: beagle: add support for beagleboard xM revision C
OMAP3: beagle: add support for beagleboard xM revision C The USB enable GPIO has been in beagleboard xM revision C. The USER button has been moved since beagleboard xM. Also, board specific initialization has been moved to beagle_config struct and initialized in omap3_beagle_init_rev. Default values in struct are for xMC. Signed-off-by: Joel A Fernandes <joelagnel@ti.com> Signed-off-by: Koen Kooi <koen@dominion.thruhere.net> Acked-by: Jason Kridner <jkridner@beagleboard.org> Signed-off-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
parent
094fc55931
commit
5fe8b4c19d
|
@ -60,7 +60,8 @@
|
||||||
* AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
|
* AXBX = GPIO173, GPIO172, GPIO171: 1 1 1
|
||||||
* C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
|
* C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0
|
||||||
* C4 = GPIO173, GPIO172, GPIO171: 1 0 1
|
* C4 = GPIO173, GPIO172, GPIO171: 1 0 1
|
||||||
* XM = GPIO173, GPIO172, GPIO171: 0 0 0
|
* XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
|
||||||
|
* XMC = GPIO173, GPIO172, GPIO171: 0 1 0
|
||||||
*/
|
*/
|
||||||
enum {
|
enum {
|
||||||
OMAP3BEAGLE_BOARD_UNKN = 0,
|
OMAP3BEAGLE_BOARD_UNKN = 0,
|
||||||
|
@ -68,14 +69,26 @@ enum {
|
||||||
OMAP3BEAGLE_BOARD_C1_3,
|
OMAP3BEAGLE_BOARD_C1_3,
|
||||||
OMAP3BEAGLE_BOARD_C4,
|
OMAP3BEAGLE_BOARD_C4,
|
||||||
OMAP3BEAGLE_BOARD_XM,
|
OMAP3BEAGLE_BOARD_XM,
|
||||||
|
OMAP3BEAGLE_BOARD_XMC,
|
||||||
};
|
};
|
||||||
|
|
||||||
static u8 omap3_beagle_version;
|
static u8 omap3_beagle_version;
|
||||||
|
|
||||||
static u8 omap3_beagle_get_rev(void)
|
/*
|
||||||
{
|
* Board-specific configuration
|
||||||
return omap3_beagle_version;
|
* Defaults to BeagleBoard-xMC
|
||||||
}
|
*/
|
||||||
|
static struct {
|
||||||
|
int mmc1_gpio_wp;
|
||||||
|
int usb_pwr_level;
|
||||||
|
int reset_gpio;
|
||||||
|
int usr_button_gpio;
|
||||||
|
} beagle_config = {
|
||||||
|
.mmc1_gpio_wp = -EINVAL,
|
||||||
|
.usb_pwr_level = GPIOF_OUT_INIT_LOW,
|
||||||
|
.reset_gpio = 129,
|
||||||
|
.usr_button_gpio = 4,
|
||||||
|
};
|
||||||
|
|
||||||
static struct gpio omap3_beagle_rev_gpios[] __initdata = {
|
static struct gpio omap3_beagle_rev_gpios[] __initdata = {
|
||||||
{ 171, GPIOF_IN, "rev_id_0" },
|
{ 171, GPIOF_IN, "rev_id_0" },
|
||||||
|
@ -110,18 +123,32 @@ static void __init omap3_beagle_init_rev(void)
|
||||||
case 7:
|
case 7:
|
||||||
printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
|
printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
|
||||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
|
||||||
|
beagle_config.mmc1_gpio_wp = 29;
|
||||||
|
beagle_config.reset_gpio = 170;
|
||||||
|
beagle_config.usr_button_gpio = 7;
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
|
printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
|
||||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
|
||||||
|
beagle_config.mmc1_gpio_wp = 23;
|
||||||
|
beagle_config.reset_gpio = 170;
|
||||||
|
beagle_config.usr_button_gpio = 7;
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
|
printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
|
||||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
|
||||||
|
beagle_config.mmc1_gpio_wp = 23;
|
||||||
|
beagle_config.reset_gpio = 170;
|
||||||
|
beagle_config.usr_button_gpio = 7;
|
||||||
break;
|
break;
|
||||||
case 0:
|
case 0:
|
||||||
printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
|
printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
|
||||||
omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
|
||||||
|
beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
|
||||||
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
|
printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
|
||||||
|
@ -234,7 +261,7 @@ static struct omap2_hsmmc_info mmc[] = {
|
||||||
{
|
{
|
||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||||
.gpio_wp = 29,
|
.gpio_wp = -EINVAL,
|
||||||
},
|
},
|
||||||
{} /* Terminator */
|
{} /* Terminator */
|
||||||
};
|
};
|
||||||
|
@ -252,17 +279,11 @@ static struct gpio_led gpio_leds[];
|
||||||
static int beagle_twl_gpio_setup(struct device *dev,
|
static int beagle_twl_gpio_setup(struct device *dev,
|
||||||
unsigned gpio, unsigned ngpio)
|
unsigned gpio, unsigned ngpio)
|
||||||
{
|
{
|
||||||
int r, usb_pwr_level;
|
int r;
|
||||||
|
|
||||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
|
if (beagle_config.mmc1_gpio_wp != -EINVAL)
|
||||||
mmc[0].gpio_wp = -EINVAL;
|
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
||||||
} else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) ||
|
mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
||||||
(omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) {
|
|
||||||
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
|
|
||||||
mmc[0].gpio_wp = 23;
|
|
||||||
} else {
|
|
||||||
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
|
|
||||||
}
|
|
||||||
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
||||||
mmc[0].gpio_cd = gpio + 0;
|
mmc[0].gpio_cd = gpio + 0;
|
||||||
omap2_hsmmc_init(mmc);
|
omap2_hsmmc_init(mmc);
|
||||||
|
@ -272,9 +293,8 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||||
* high / others active low)
|
* high / others active low)
|
||||||
* DVI reset GPIO is different between beagle revisions
|
* DVI reset GPIO is different between beagle revisions
|
||||||
*/
|
*/
|
||||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
|
/* Valid for all -xM revisions */
|
||||||
usb_pwr_level = GPIOF_OUT_INIT_HIGH;
|
if (cpu_is_omap3630()) {
|
||||||
beagle_dvi_device.reset_gpio = 129;
|
|
||||||
/*
|
/*
|
||||||
* gpio + 1 on Xm controls the TFP410's enable line (active low)
|
* gpio + 1 on Xm controls the TFP410's enable line (active low)
|
||||||
* gpio + 2 control varies depending on the board rev as below:
|
* gpio + 2 control varies depending on the board rev as below:
|
||||||
|
@ -292,8 +312,6 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||||
pr_err("%s: unable to configure DVI_LDO_EN\n",
|
pr_err("%s: unable to configure DVI_LDO_EN\n",
|
||||||
__func__);
|
__func__);
|
||||||
} else {
|
} else {
|
||||||
usb_pwr_level = GPIOF_OUT_INIT_LOW;
|
|
||||||
beagle_dvi_device.reset_gpio = 170;
|
|
||||||
/*
|
/*
|
||||||
* REVISIT: need ehci-omap hooks for external VBUS
|
* REVISIT: need ehci-omap hooks for external VBUS
|
||||||
* power switch and overcurrent detect
|
* power switch and overcurrent detect
|
||||||
|
@ -301,8 +319,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
|
||||||
if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
|
if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
|
||||||
pr_err("%s: unable to configure EHCI_nOC\n", __func__);
|
pr_err("%s: unable to configure EHCI_nOC\n", __func__);
|
||||||
}
|
}
|
||||||
|
beagle_dvi_device.reset_gpio = beagle_config.reset_gpio;
|
||||||
|
|
||||||
gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR");
|
gpio_request_one(gpio + TWL4030_GPIO_MAX, beagle_config.usb_pwr_level,
|
||||||
|
"nEN_USB_PWR");
|
||||||
|
|
||||||
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
|
||||||
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
|
||||||
|
@ -454,7 +474,8 @@ static struct platform_device leds_gpio = {
|
||||||
static struct gpio_keys_button gpio_buttons[] = {
|
static struct gpio_keys_button gpio_buttons[] = {
|
||||||
{
|
{
|
||||||
.code = BTN_EXTRA,
|
.code = BTN_EXTRA,
|
||||||
.gpio = 7,
|
/* Dynamically assigned depending on board */
|
||||||
|
.gpio = -EINVAL,
|
||||||
.desc = "user",
|
.desc = "user",
|
||||||
.wakeup = 1,
|
.wakeup = 1,
|
||||||
},
|
},
|
||||||
|
@ -518,8 +539,8 @@ static void __init beagle_opp_init(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Custom OPP enabled for XM */
|
/* Custom OPP enabled for all xM versions */
|
||||||
if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
|
if (cpu_is_omap3630()) {
|
||||||
struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
|
struct omap_hwmod *mh = omap_hwmod_lookup("mpu");
|
||||||
struct omap_hwmod *dh = omap_hwmod_lookup("iva");
|
struct omap_hwmod *dh = omap_hwmod_lookup("iva");
|
||||||
struct device *dev;
|
struct device *dev;
|
||||||
|
@ -559,6 +580,9 @@ static void __init omap3_beagle_init(void)
|
||||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||||
omap3_beagle_init_rev();
|
omap3_beagle_init_rev();
|
||||||
omap3_beagle_i2c_init();
|
omap3_beagle_i2c_init();
|
||||||
|
|
||||||
|
gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
|
||||||
|
|
||||||
platform_add_devices(omap3_beagle_devices,
|
platform_add_devices(omap3_beagle_devices,
|
||||||
ARRAY_SIZE(omap3_beagle_devices));
|
ARRAY_SIZE(omap3_beagle_devices));
|
||||||
omap_display_init(&beagle_dss_data);
|
omap_display_init(&beagle_dss_data);
|
||||||
|
|
Loading…
Reference in a new issue