2008-10-09 21:51:42 +07:00
|
|
|
/*
|
|
|
|
* linux/arch/arm/mach-omap2/board-omap3beagle.c
|
|
|
|
*
|
|
|
|
* Copyright (C) 2008 Texas Instruments
|
|
|
|
*
|
|
|
|
* Modified from mach-omap2/board-3430sdp.c
|
|
|
|
*
|
|
|
|
* Initial code: Syed Mohammed Khasim
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/kernel.h>
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/platform_device.h>
|
|
|
|
#include <linux/delay.h>
|
|
|
|
#include <linux/err.h>
|
|
|
|
#include <linux/clk.h>
|
|
|
|
#include <linux/io.h>
|
|
|
|
#include <linux/leds.h>
|
2012-11-07 21:25:30 +07:00
|
|
|
#include <linux/pwm.h>
|
|
|
|
#include <linux/leds_pwm.h>
|
2008-10-09 21:51:42 +07:00
|
|
|
#include <linux/gpio.h>
|
|
|
|
#include <linux/input.h>
|
|
|
|
#include <linux/gpio_keys.h>
|
2011-01-07 22:41:13 +07:00
|
|
|
#include <linux/opp.h>
|
2012-10-23 01:08:27 +07:00
|
|
|
#include <linux/cpu.h>
|
2008-10-09 21:51:42 +07:00
|
|
|
|
|
|
|
#include <linux/mtd/mtd.h>
|
|
|
|
#include <linux/mtd/partitions.h>
|
|
|
|
#include <linux/mtd/nand.h>
|
2010-09-15 21:49:23 +07:00
|
|
|
#include <linux/mmc/host.h>
|
2013-02-06 20:28:50 +07:00
|
|
|
#include <linux/usb/phy.h>
|
2013-03-20 22:44:43 +07:00
|
|
|
#include <linux/usb/nop-usb-xceiv.h>
|
2008-10-09 21:51:42 +07:00
|
|
|
|
2009-05-29 04:04:03 +07:00
|
|
|
#include <linux/regulator/machine.h>
|
2009-12-14 02:05:51 +07:00
|
|
|
#include <linux/i2c/twl.h>
|
2009-01-15 18:09:53 +07:00
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
#include <asm/mach-types.h>
|
|
|
|
#include <asm/mach/arch.h>
|
|
|
|
#include <asm/mach/map.h>
|
|
|
|
#include <asm/mach/flash.h>
|
|
|
|
|
2011-05-11 18:05:07 +07:00
|
|
|
#include <video/omapdss.h>
|
2013-02-12 18:16:46 +07:00
|
|
|
#include <video/omap-panel-data.h>
|
2012-08-24 20:21:06 +07:00
|
|
|
#include <linux/platform_data/mtd-nand-omap2.h>
|
2008-10-09 21:51:42 +07:00
|
|
|
|
2012-10-25 05:05:45 +07:00
|
|
|
#include "common.h"
|
|
|
|
#include "omap_device.h"
|
|
|
|
#include "gpmc.h"
|
2012-10-06 03:25:59 +07:00
|
|
|
#include "soc.h"
|
2009-12-12 07:16:32 +07:00
|
|
|
#include "mux.h"
|
2010-02-16 01:03:34 +07:00
|
|
|
#include "hsmmc.h"
|
2011-01-07 22:41:13 +07:00
|
|
|
#include "pm.h"
|
2012-02-29 19:41:56 +07:00
|
|
|
#include "board-flash.h"
|
2011-04-25 05:09:06 +07:00
|
|
|
#include "common-board-devices.h"
|
2008-10-09 21:51:42 +07:00
|
|
|
|
2012-02-29 19:41:56 +07:00
|
|
|
#define NAND_CS 0
|
|
|
|
|
2012-11-07 21:25:30 +07:00
|
|
|
static struct pwm_lookup pwm_lookup[] = {
|
|
|
|
/* LEDB -> PMU_STAT */
|
|
|
|
PWM_LOOKUP("twl-pwmled", 1, "leds_pwm", "beagleboard::pmu_stat"),
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct led_pwm pwm_leds[] = {
|
|
|
|
{
|
|
|
|
.name = "beagleboard::pmu_stat",
|
|
|
|
.max_brightness = 127,
|
|
|
|
.pwm_period_ns = 7812500,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct led_pwm_platform_data pwm_data = {
|
|
|
|
.num_leds = ARRAY_SIZE(pwm_leds),
|
|
|
|
.leds = pwm_leds,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct platform_device leds_pwm = {
|
|
|
|
.name = "leds_pwm",
|
|
|
|
.id = -1,
|
|
|
|
.dev = {
|
|
|
|
.platform_data = &pwm_data,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2010-09-24 08:22:47 +07:00
|
|
|
/*
|
|
|
|
* 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
|
2011-07-05 17:38:22 +07:00
|
|
|
* XMA/XMB = GPIO173, GPIO172, GPIO171: 0 0 0
|
|
|
|
* XMC = GPIO173, GPIO172, GPIO171: 0 1 0
|
2010-09-24 08:22:47 +07:00
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
OMAP3BEAGLE_BOARD_UNKN = 0,
|
|
|
|
OMAP3BEAGLE_BOARD_AXBX,
|
|
|
|
OMAP3BEAGLE_BOARD_C1_3,
|
|
|
|
OMAP3BEAGLE_BOARD_C4,
|
|
|
|
OMAP3BEAGLE_BOARD_XM,
|
2011-07-05 17:38:22 +07:00
|
|
|
OMAP3BEAGLE_BOARD_XMC,
|
2010-09-24 08:22:47 +07:00
|
|
|
};
|
|
|
|
|
|
|
|
static u8 omap3_beagle_version;
|
|
|
|
|
2011-07-05 17:38:22 +07:00
|
|
|
/*
|
|
|
|
* Board-specific configuration
|
|
|
|
* Defaults to BeagleBoard-xMC
|
|
|
|
*/
|
|
|
|
static struct {
|
|
|
|
int mmc1_gpio_wp;
|
2013-05-09 06:48:00 +07:00
|
|
|
bool usb_pwr_level; /* 0 - Active Low, 1 - Active High */
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
int dvi_pd_gpio;
|
2011-07-05 17:38:22 +07:00
|
|
|
int usr_button_gpio;
|
2012-05-10 04:19:15 +07:00
|
|
|
int mmc_caps;
|
2011-07-05 17:38:22 +07:00
|
|
|
} beagle_config = {
|
|
|
|
.mmc1_gpio_wp = -EINVAL,
|
2013-05-09 06:48:00 +07:00
|
|
|
.usb_pwr_level = 0,
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
.dvi_pd_gpio = -EINVAL,
|
2011-07-05 17:38:22 +07:00
|
|
|
.usr_button_gpio = 4,
|
2012-05-10 04:19:15 +07:00
|
|
|
.mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
2011-07-05 17:38:22 +07:00
|
|
|
};
|
2010-09-24 08:22:47 +07:00
|
|
|
|
2011-05-03 22:22:09 +07:00
|
|
|
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" },
|
|
|
|
};
|
|
|
|
|
2010-09-24 08:22:47 +07:00
|
|
|
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);
|
|
|
|
|
2011-05-03 22:22:09 +07:00
|
|
|
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;
|
|
|
|
}
|
2010-09-24 08:22:47 +07:00
|
|
|
|
|
|
|
beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
|
|
|
|
| (gpio_get_value(173) << 2);
|
|
|
|
|
2011-05-31 18:58:56 +07:00
|
|
|
gpio_free_array(omap3_beagle_rev_gpios,
|
|
|
|
ARRAY_SIZE(omap3_beagle_rev_gpios));
|
|
|
|
|
2010-09-24 08:22:47 +07:00
|
|
|
switch (beagle_rev) {
|
|
|
|
case 7:
|
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
|
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_AXBX;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.mmc1_gpio_wp = 29;
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
beagle_config.dvi_pd_gpio = 170;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.usr_button_gpio = 7;
|
2010-09-24 08:22:47 +07:00
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
|
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_C1_3;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.mmc1_gpio_wp = 23;
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
beagle_config.dvi_pd_gpio = 170;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.usr_button_gpio = 7;
|
2010-09-24 08:22:47 +07:00
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: C4\n");
|
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.mmc1_gpio_wp = 23;
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
beagle_config.dvi_pd_gpio = 170;
|
2011-07-05 17:38:22 +07:00
|
|
|
beagle_config.usr_button_gpio = 7;
|
2010-09-24 08:22:47 +07:00
|
|
|
break;
|
|
|
|
case 0:
|
2011-07-05 17:38:22 +07:00
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
|
2010-09-24 08:22:47 +07:00
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
|
2013-05-09 06:48:00 +07:00
|
|
|
beagle_config.usb_pwr_level = 1;
|
2012-05-10 04:19:15 +07:00
|
|
|
beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
|
2011-07-05 17:38:22 +07:00
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: xM C\n");
|
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_XMC;
|
2012-05-10 04:19:15 +07:00
|
|
|
beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
|
2010-09-24 08:22:47 +07:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
printk(KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n", beagle_rev);
|
|
|
|
omap3_beagle_version = OMAP3BEAGLE_BOARD_UNKN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
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 */
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "U-Boot Env",
|
|
|
|
.offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */
|
|
|
|
.size = 1 * NAND_BLOCK_SIZE,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "Kernel",
|
|
|
|
.offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */
|
|
|
|
.size = 32 * NAND_BLOCK_SIZE,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "File System",
|
|
|
|
.offset = MTDPART_OFS_APPEND, /* Offset = 0x680000 */
|
|
|
|
.size = MTDPART_SIZ_FULL,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2010-04-22 15:23:42 +07:00
|
|
|
/* DSS */
|
|
|
|
|
2012-03-05 19:29:28 +07:00
|
|
|
static struct tfp410_platform_data dvi_panel = {
|
2011-08-29 21:48:19 +07:00
|
|
|
.i2c_bus_num = 3,
|
2012-02-17 18:30:27 +07:00
|
|
|
.power_down_gpio = -1,
|
2010-11-17 20:34:34 +07:00
|
|
|
};
|
|
|
|
|
2010-04-22 15:23:42 +07:00
|
|
|
static struct omap_dss_device beagle_dvi_device = {
|
|
|
|
.type = OMAP_DISPLAY_TYPE_DPI,
|
|
|
|
.name = "dvi",
|
2012-03-05 19:29:28 +07:00
|
|
|
.driver_name = "tfp410",
|
2010-11-17 20:34:34 +07:00
|
|
|
.data = &dvi_panel,
|
2010-04-22 15:23:42 +07:00
|
|
|
.phy.dpi.data_lines = 24,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct omap_dss_device beagle_tv_device = {
|
|
|
|
.name = "tv",
|
|
|
|
.driver_name = "venc",
|
|
|
|
.type = OMAP_DISPLAY_TYPE_VENC,
|
|
|
|
.phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct omap_dss_device *beagle_dss_devices[] = {
|
|
|
|
&beagle_dvi_device,
|
|
|
|
&beagle_tv_device,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct omap_dss_board_info beagle_dss_data = {
|
|
|
|
.num_devices = ARRAY_SIZE(beagle_dss_devices),
|
|
|
|
.devices = beagle_dss_devices,
|
|
|
|
.default_device = &beagle_dvi_device,
|
|
|
|
};
|
|
|
|
|
2009-05-29 04:03:59 +07:00
|
|
|
#include "sdram-micron-mt46h32m32lf-6.h"
|
|
|
|
|
2010-02-16 01:03:34 +07:00
|
|
|
static struct omap2_hsmmc_info mmc[] = {
|
2008-12-11 08:37:17 +07:00
|
|
|
{
|
|
|
|
.mmc = 1,
|
2012-05-10 04:19:15 +07:00
|
|
|
.caps = MMC_CAP_4_BIT_DATA,
|
2011-07-05 17:38:22 +07:00
|
|
|
.gpio_wp = -EINVAL,
|
2012-02-21 00:43:29 +07:00
|
|
|
.deferred = true,
|
2008-12-11 08:37:17 +07:00
|
|
|
},
|
|
|
|
{} /* Terminator */
|
|
|
|
};
|
|
|
|
|
2011-06-07 01:57:07 +07:00
|
|
|
static struct regulator_consumer_supply beagle_vmmc1_supply[] = {
|
|
|
|
REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
|
2009-05-29 04:04:03 +07:00
|
|
|
};
|
|
|
|
|
2011-06-07 01:57:07 +07:00
|
|
|
static struct regulator_consumer_supply beagle_vsim_supply[] = {
|
|
|
|
REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"),
|
2009-05-29 04:04:03 +07:00
|
|
|
};
|
|
|
|
|
2008-12-11 08:37:17 +07:00
|
|
|
static struct gpio_led gpio_leds[];
|
|
|
|
|
2013-03-20 22:44:43 +07:00
|
|
|
/* PHY's VCC regulator might be added later, so flag that we need it */
|
|
|
|
static struct nop_usb_xceiv_platform_data hsusb2_phy_data = {
|
|
|
|
.needs_vcc = true,
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct usbhs_phy_data phy_data[] = {
|
|
|
|
{
|
|
|
|
.port = 2,
|
|
|
|
.reset_gpio = 147,
|
|
|
|
.vcc_gpio = -1, /* updated in beagle_twl_gpio_setup */
|
|
|
|
.vcc_polarity = 1, /* updated in beagle_twl_gpio_setup */
|
|
|
|
.platform_data = &hsusb2_phy_data,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2008-12-11 08:37:17 +07:00
|
|
|
static int beagle_twl_gpio_setup(struct device *dev,
|
|
|
|
unsigned gpio, unsigned ngpio)
|
|
|
|
{
|
2011-07-05 17:38:22 +07:00
|
|
|
int r;
|
|
|
|
|
|
|
|
mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
|
2008-12-11 08:37:17 +07:00
|
|
|
/* gpio + 0 is "mmc0_cd" (input/IRQ) */
|
2009-01-15 18:09:53 +07:00
|
|
|
mmc[0].gpio_cd = gpio + 0;
|
2012-02-21 00:43:29 +07:00
|
|
|
omap_hsmmc_late_init(mmc);
|
2008-12-11 08:37:17 +07:00
|
|
|
|
2011-01-12 00:13:35 +07:00
|
|
|
/*
|
|
|
|
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
|
|
|
|
* high / others active low)
|
2011-05-03 22:22:09 +07:00
|
|
|
* DVI reset GPIO is different between beagle revisions
|
2011-01-12 07:23:29 +07:00
|
|
|
*/
|
2011-07-05 17:38:22 +07:00
|
|
|
/* Valid for all -xM revisions */
|
|
|
|
if (cpu_is_omap3630()) {
|
2011-05-03 22:22:09 +07:00
|
|
|
/*
|
|
|
|
* gpio + 1 on Xm controls the TFP410's enable line (active low)
|
|
|
|
* gpio + 2 control varies depending on the board rev as below:
|
|
|
|
* P7/P8 revisions(prototype): Camera EN
|
|
|
|
* A2+ revisions (production): LDO (DVI, serial, led blocks)
|
|
|
|
*/
|
|
|
|
r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW,
|
|
|
|
"nDVI_PWR_EN");
|
2011-01-12 07:23:29 +07:00
|
|
|
if (r)
|
|
|
|
pr_err("%s: unable to configure nDVI_PWR_EN\n",
|
|
|
|
__func__);
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
|
|
|
|
beagle_config.dvi_pd_gpio = gpio + 2;
|
|
|
|
|
2011-05-03 22:22:09 +07:00
|
|
|
} else {
|
|
|
|
/*
|
|
|
|
* REVISIT: need ehci-omap hooks for external VBUS
|
|
|
|
* power switch and overcurrent detect
|
|
|
|
*/
|
|
|
|
if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC"))
|
|
|
|
pr_err("%s: unable to configure EHCI_nOC\n", __func__);
|
2011-01-12 07:23:29 +07:00
|
|
|
}
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
dvi_panel.power_down_gpio = beagle_config.dvi_pd_gpio;
|
2011-01-12 07:23:29 +07:00
|
|
|
|
2013-03-20 22:44:43 +07:00
|
|
|
/* TWL4030_GPIO_MAX i.e. LED_GPO controls HS USB Port 2 power */
|
|
|
|
phy_data[0].vcc_gpio = gpio + TWL4030_GPIO_MAX;
|
|
|
|
phy_data[0].vcc_polarity = beagle_config.usb_pwr_level;
|
2011-05-03 22:22:09 +07:00
|
|
|
|
2013-03-20 22:44:43 +07:00
|
|
|
usbhs_init_phys(phy_data, ARRAY_SIZE(phy_data));
|
2008-12-11 08:37:17 +07:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static struct twl4030_gpio_platform_data beagle_gpio_data = {
|
|
|
|
.use_leds = true,
|
|
|
|
.pullups = BIT(1),
|
|
|
|
.pulldowns = BIT(2) | BIT(6) | BIT(7) | BIT(8) | BIT(13)
|
|
|
|
| BIT(15) | BIT(16) | BIT(17),
|
|
|
|
.setup = beagle_twl_gpio_setup,
|
|
|
|
};
|
|
|
|
|
2009-05-29 04:04:03 +07:00
|
|
|
/* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
|
|
|
|
static struct regulator_init_data beagle_vmmc1 = {
|
|
|
|
.constraints = {
|
|
|
|
.min_uV = 1850000,
|
|
|
|
.max_uV = 3150000,
|
|
|
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
| REGULATOR_MODE_STANDBY,
|
|
|
|
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
|
| REGULATOR_CHANGE_MODE
|
|
|
|
| REGULATOR_CHANGE_STATUS,
|
|
|
|
},
|
2011-06-07 01:57:07 +07:00
|
|
|
.num_consumer_supplies = ARRAY_SIZE(beagle_vmmc1_supply),
|
|
|
|
.consumer_supplies = beagle_vmmc1_supply,
|
2009-05-29 04:04:03 +07:00
|
|
|
};
|
|
|
|
|
|
|
|
/* VSIM for MMC1 pins DAT4..DAT7 (2 mA, plus card == max 50 mA) */
|
|
|
|
static struct regulator_init_data beagle_vsim = {
|
|
|
|
.constraints = {
|
|
|
|
.min_uV = 1800000,
|
|
|
|
.max_uV = 3000000,
|
|
|
|
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
|
|
|
| REGULATOR_MODE_STANDBY,
|
|
|
|
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
|
|
|
|
| REGULATOR_CHANGE_MODE
|
|
|
|
| REGULATOR_CHANGE_STATUS,
|
|
|
|
},
|
2011-06-07 01:57:07 +07:00
|
|
|
.num_consumer_supplies = ARRAY_SIZE(beagle_vsim_supply),
|
|
|
|
.consumer_supplies = beagle_vsim_supply,
|
2009-05-29 04:04:03 +07:00
|
|
|
};
|
|
|
|
|
2008-12-11 08:37:17 +07:00
|
|
|
static struct twl4030_platform_data beagle_twldata = {
|
|
|
|
/* platform_data for children goes here */
|
|
|
|
.gpio = &beagle_gpio_data,
|
2009-05-29 04:04:03 +07:00
|
|
|
.vmmc1 = &beagle_vmmc1,
|
|
|
|
.vsim = &beagle_vsim,
|
2008-12-11 08:37:17 +07:00
|
|
|
};
|
|
|
|
|
2010-09-24 08:22:48 +07:00
|
|
|
static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
|
|
|
|
{
|
|
|
|
I2C_BOARD_INFO("eeprom", 0x50),
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2008-12-11 08:37:17 +07:00
|
|
|
static int __init omap3_beagle_i2c_init(void)
|
|
|
|
{
|
2011-06-07 14:28:54 +07:00
|
|
|
omap3_pmic_get_config(&beagle_twldata,
|
2011-08-12 10:33:15 +07:00
|
|
|
TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC |
|
|
|
|
TWL_COMMON_PDATA_AUDIO,
|
2011-06-07 15:38:24 +07:00
|
|
|
TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2);
|
|
|
|
|
|
|
|
beagle_twldata.vpll2->constraints.name = "VDVI";
|
|
|
|
|
2011-04-25 05:09:06 +07:00
|
|
|
omap3_pmic_init("twl4030", &beagle_twldata);
|
2009-03-05 01:07:42 +07:00
|
|
|
/* Bus 3 is attached to the DVI port where devices like the pico DLP
|
|
|
|
* projector don't work reliably with 400kHz */
|
2010-09-24 08:22:48 +07:00
|
|
|
omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom));
|
2008-12-11 08:37:17 +07:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
static struct gpio_led gpio_leds[] = {
|
|
|
|
{
|
|
|
|
.name = "beagleboard::usr0",
|
|
|
|
.default_trigger = "heartbeat",
|
|
|
|
.gpio = 150,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
.name = "beagleboard::usr1",
|
|
|
|
.default_trigger = "mmc0",
|
|
|
|
.gpio = 149,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct gpio_led_platform_data gpio_led_info = {
|
|
|
|
.leds = gpio_leds,
|
|
|
|
.num_leds = ARRAY_SIZE(gpio_leds),
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct platform_device leds_gpio = {
|
|
|
|
.name = "leds-gpio",
|
|
|
|
.id = -1,
|
|
|
|
.dev = {
|
|
|
|
.platform_data = &gpio_led_info,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct gpio_keys_button gpio_buttons[] = {
|
|
|
|
{
|
|
|
|
.code = BTN_EXTRA,
|
2011-07-05 17:38:22 +07:00
|
|
|
/* Dynamically assigned depending on board */
|
|
|
|
.gpio = -EINVAL,
|
2008-10-09 21:51:42 +07:00
|
|
|
.desc = "user",
|
|
|
|
.wakeup = 1,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct gpio_keys_platform_data gpio_key_info = {
|
|
|
|
.buttons = gpio_buttons,
|
|
|
|
.nbuttons = ARRAY_SIZE(gpio_buttons),
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct platform_device keys_gpio = {
|
|
|
|
.name = "gpio-keys",
|
|
|
|
.id = -1,
|
|
|
|
.dev = {
|
|
|
|
.platform_data = &gpio_key_info,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2011-08-12 10:33:15 +07:00
|
|
|
static struct platform_device madc_hwmon = {
|
|
|
|
.name = "twl4030_madc_hwmon",
|
|
|
|
.id = -1,
|
|
|
|
};
|
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
static struct platform_device *omap3_beagle_devices[] __initdata = {
|
|
|
|
&leds_gpio,
|
|
|
|
&keys_gpio,
|
2011-08-12 10:33:15 +07:00
|
|
|
&madc_hwmon,
|
2012-11-07 21:25:30 +07:00
|
|
|
&leds_pwm,
|
2008-10-09 21:51:42 +07:00
|
|
|
};
|
|
|
|
|
2013-02-14 15:13:48 +07:00
|
|
|
static struct usbhs_omap_platform_data usbhs_bdata __initdata = {
|
2011-03-01 21:38:16 +07:00
|
|
|
.port_mode[1] = OMAP_EHCI_PORT_MODE_PHY,
|
2009-11-23 01:11:01 +07:00
|
|
|
};
|
|
|
|
|
2009-12-12 07:16:32 +07:00
|
|
|
#ifdef CONFIG_OMAP_MUX
|
|
|
|
static struct omap_board_mux board_mux[] __initdata = {
|
|
|
|
{ .reg_offset = OMAP_MUX_TERMINATOR },
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
2012-10-23 01:08:27 +07:00
|
|
|
static int __init beagle_opp_init(void)
|
2011-01-07 22:41:13 +07:00
|
|
|
{
|
|
|
|
int r = 0;
|
|
|
|
|
2012-10-23 01:08:27 +07:00
|
|
|
if (!machine_is_omap3_beagle())
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
/* Initialize the omap3 opp table if not already created. */
|
|
|
|
r = omap3_opp_init();
|
ARM: OMAP: use consistent error checking
Consistently check errors using the usual method used in the kernel
for much of its history. For instance:
int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t)
{
int div;
div = gpmc_calc_divider(t->sync_clk);
if (div < 0)
return div;
static int gpmc_set_async_mode(int cs, struct gpmc_timings *t)
{
...
return gpmc_cs_set_timings(cs, t);
.....
ret = gpmc_set_async_mode(gpmc_onenand_data->cs, &t);
if (IS_ERR_VALUE(ret))
return ret;
So, gpmc_cs_set_timings() thinks any negative return value is an error,
but where we check that in higher levels, only a limited range are
errors...
There is only _one_ use of IS_ERR_VALUE() in arch/arm which is really
appropriate, and that is in arch/arm/include/asm/syscall.h:
static inline long syscall_get_error(struct task_struct *task,
struct pt_regs *regs)
{
unsigned long error = regs->ARM_r0;
return IS_ERR_VALUE(error) ? error : 0;
}
because this function really does have to differentiate between error
return values and addresses which look like negative numbers (eg, from
mmap()).
So, here's a patch to remove them from OMAP, except for the above.
Acked-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2013-03-14 03:44:21 +07:00
|
|
|
if (r < 0 && (r != -EEXIST)) {
|
2011-01-07 22:41:13 +07:00
|
|
|
pr_err("%s: opp default init failed\n", __func__);
|
2012-10-23 01:08:27 +07:00
|
|
|
return r;
|
2011-01-07 22:41:13 +07:00
|
|
|
}
|
|
|
|
|
2011-07-05 17:38:22 +07:00
|
|
|
/* Custom OPP enabled for all xM versions */
|
|
|
|
if (cpu_is_omap3630()) {
|
2011-07-22 01:43:48 +07:00
|
|
|
struct device *mpu_dev, *iva_dev;
|
2011-01-07 22:41:13 +07:00
|
|
|
|
2012-10-23 01:08:27 +07:00
|
|
|
mpu_dev = get_cpu_device(0);
|
2011-08-16 19:01:23 +07:00
|
|
|
iva_dev = omap_device_get_by_hwmod_name("iva");
|
2011-07-22 01:43:48 +07:00
|
|
|
|
2012-09-21 13:26:37 +07:00
|
|
|
if (IS_ERR(mpu_dev) || IS_ERR(iva_dev)) {
|
2011-01-07 22:41:13 +07:00
|
|
|
pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n",
|
2011-07-22 01:43:48 +07:00
|
|
|
__func__, mpu_dev, iva_dev);
|
2012-10-23 01:08:27 +07:00
|
|
|
return -ENODEV;
|
2011-01-07 22:41:13 +07:00
|
|
|
}
|
|
|
|
/* Enable MPU 1GHz and lower opps */
|
2011-07-22 01:43:48 +07:00
|
|
|
r = opp_enable(mpu_dev, 800000000);
|
2011-01-07 22:41:13 +07:00
|
|
|
/* TODO: MPU 1GHz needs SR and ABB */
|
|
|
|
|
|
|
|
/* Enable IVA 800MHz and lower opps */
|
2011-07-22 01:43:48 +07:00
|
|
|
r |= opp_enable(iva_dev, 660000000);
|
2011-01-07 22:41:13 +07:00
|
|
|
/* TODO: DSP 800MHz needs SR and ABB */
|
|
|
|
if (r) {
|
|
|
|
pr_err("%s: failed to enable higher opp %d\n",
|
|
|
|
__func__, r);
|
|
|
|
/*
|
|
|
|
* Cleanup - disable the higher freqs - we dont care
|
|
|
|
* about the results
|
|
|
|
*/
|
2011-07-22 01:43:48 +07:00
|
|
|
opp_disable(mpu_dev, 800000000);
|
|
|
|
opp_disable(iva_dev, 660000000);
|
2011-01-07 22:41:13 +07:00
|
|
|
}
|
|
|
|
}
|
2012-10-23 01:08:27 +07:00
|
|
|
return 0;
|
2011-01-07 22:41:13 +07:00
|
|
|
}
|
2013-01-12 02:24:18 +07:00
|
|
|
omap_device_initcall(beagle_opp_init);
|
2011-01-07 22:41:13 +07:00
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
static void __init omap3_beagle_init(void)
|
|
|
|
{
|
2009-12-12 07:16:32 +07:00
|
|
|
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
2010-09-24 08:22:47 +07:00
|
|
|
omap3_beagle_init_rev();
|
2012-02-21 00:43:30 +07:00
|
|
|
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
if (gpio_is_valid(beagle_config.mmc1_gpio_wp))
|
2012-02-21 00:43:30 +07:00
|
|
|
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
|
2012-05-10 04:19:15 +07:00
|
|
|
mmc[0].caps = beagle_config.mmc_caps;
|
2012-02-21 00:43:29 +07:00
|
|
|
omap_hsmmc_init(mmc);
|
2012-02-21 00:43:30 +07:00
|
|
|
|
2008-12-11 08:37:17 +07:00
|
|
|
omap3_beagle_i2c_init();
|
2011-07-05 17:38:22 +07:00
|
|
|
|
|
|
|
gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
|
|
|
|
|
2008-10-09 21:51:42 +07:00
|
|
|
platform_add_devices(omap3_beagle_devices,
|
|
|
|
ARRAY_SIZE(omap3_beagle_devices));
|
ARM: OMAP: Fix Beagleboard DVI reset gpio
Commit e813a55eb9c9bc6c8039fb16332cf43402125b30 ("OMAP: board-files:
remove custom PD GPIO handling for DVI output") moved TFP410 chip's
powerdown-gpio handling from the board files to the tfp410 driver. One
gpio_request_one(powerdown-gpio, ...) was mistakenly left unremoved in
the Beagle board file. This causes the tfp410 driver to fail to request
the gpio on Beagle, causing the driver to fail and thus the DVI output
doesn't work.
This patch removes several boot errors from board-omap3beagle.c:
- gpio_request: gpio--22 (DVI reset) status -22
- Unable to get DVI reset GPIO
There is a combination of leftover code and revision confusion.
Additionally, xM support is currently a hack.
For original Beagleboard this removes the double initialization of GPIO
170, properly configures it as an output, and wraps the initialization
in an if block so that xM does not attempt to request it.
For Beagleboard xM it removes reference to GPIO 129 which was part
of rev A1 and A2 designs, but never functioned. It then properly assigns
beagle_dvi_device.reset_gpio in beagle_twl_gpio_setup and removes the
hack of initializing it high. Additionally, it uses
gpio_set_value_cansleep since this GPIO is connected through i2c.
Unfortunately, there is no way to tell the difference between xM A2 and
A3. However, GPIO 129 does not function on rev A1 and A2, and the TWL
GPIO used on A3 and beyond is not used on rev A1 and A2, there are no
problems created by this fix.
Tested on Beagleboard-xM Rev C1 and Beagleboard Rev B4.
Signed-off-by: Russ Dill <Russ.Dill@ti.com>
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
2012-05-10 05:15:03 +07:00
|
|
|
if (gpio_is_valid(beagle_config.dvi_pd_gpio))
|
|
|
|
omap_mux_init_gpio(beagle_config.dvi_pd_gpio, OMAP_PIN_OUTPUT);
|
2011-02-22 16:24:50 +07:00
|
|
|
omap_display_init(&beagle_dss_data);
|
2008-10-09 21:51:42 +07:00
|
|
|
omap_serial_init();
|
2011-08-23 13:57:23 +07:00
|
|
|
omap_sdrc_init(mt46h32m32lf6_sdrc_params,
|
|
|
|
mt46h32m32lf6_sdrc_params);
|
2008-12-11 08:37:17 +07:00
|
|
|
|
2013-02-06 20:28:50 +07:00
|
|
|
usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb");
|
2011-04-27 15:56:12 +07:00
|
|
|
usb_musb_init(NULL);
|
2013-03-20 22:44:43 +07:00
|
|
|
|
2011-03-01 21:38:19 +07:00
|
|
|
usbhs_init(&usbhs_bdata);
|
2013-03-20 22:44:43 +07:00
|
|
|
|
2012-02-29 19:41:56 +07:00
|
|
|
board_nand_init(omap3beagle_nand_partitions,
|
|
|
|
ARRAY_SIZE(omap3beagle_nand_partitions), NAND_CS,
|
|
|
|
NAND_BUSWIDTH_16, NULL);
|
2012-12-05 20:45:23 +07:00
|
|
|
omap_twl4030_audio_init("omap3beagle", NULL);
|
2009-07-25 08:43:25 +07:00
|
|
|
|
2011-04-05 20:40:08 +07:00
|
|
|
/* Ensure msecure is mux'd to be able to set the RTC. */
|
|
|
|
omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH);
|
|
|
|
|
2009-07-25 08:43:25 +07:00
|
|
|
/* Ensure SDRC pins are mux'd for self-refresh */
|
2009-12-12 07:16:32 +07:00
|
|
|
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
|
|
|
|
omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
|
2012-11-07 21:25:30 +07:00
|
|
|
|
|
|
|
pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup));
|
2008-10-09 21:51:42 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
|
|
|
|
/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
|
2011-07-06 09:38:15 +07:00
|
|
|
.atag_offset = 0x100,
|
2010-05-23 16:18:16 +07:00
|
|
|
.reserve = omap_reserve,
|
2011-02-15 06:40:20 +07:00
|
|
|
.map_io = omap3_map_io,
|
2011-10-05 08:26:28 +07:00
|
|
|
.init_early = omap3_init_early,
|
2011-09-27 05:25:22 +07:00
|
|
|
.init_irq = omap3_init_irq,
|
2011-09-06 16:23:45 +07:00
|
|
|
.handle_irq = omap3_intc_handle_irq,
|
2008-10-09 21:51:42 +07:00
|
|
|
.init_machine = omap3_beagle_init,
|
2012-04-26 15:06:50 +07:00
|
|
|
.init_late = omap3_init_late,
|
2012-11-09 02:40:59 +07:00
|
|
|
.init_time = omap3_secure_sync32k_timer_init,
|
2012-10-30 09:56:12 +07:00
|
|
|
.restart = omap3xxx_restart,
|
2008-10-09 21:51:42 +07:00
|
|
|
MACHINE_END
|