forked from luck/tmp_suning_uos_patched
mach-mx31_3ds: Add support for framebuffer and LCD
Signed-off-by: Alberto Panizzo <alberto@amarulasolutions.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
0ce88b34ea
commit
e42010e0e1
@ -21,6 +21,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/l4f00242t03.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
@ -36,6 +37,8 @@
|
||||
#include <mach/3ds_debugboard.h>
|
||||
#include <mach/ulpi.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/ipu.h>
|
||||
#include <mach/mx3fb.h>
|
||||
|
||||
#include "devices-imx31.h"
|
||||
#include "devices.h"
|
||||
@ -50,6 +53,12 @@ static int mx31_3ds_pins[] = {
|
||||
MX31_PIN_TXD1__TXD1,
|
||||
MX31_PIN_RXD1__RXD1,
|
||||
IOMUX_MODE(MX31_PIN_GPIO1_1, IOMUX_CONFIG_GPIO),
|
||||
/*SPI0*/
|
||||
MX31_PIN_CSPI1_SCLK__SCLK,
|
||||
MX31_PIN_CSPI1_MOSI__MOSI,
|
||||
MX31_PIN_CSPI1_MISO__MISO,
|
||||
MX31_PIN_CSPI1_SPI_RDY__SPI_RDY,
|
||||
MX31_PIN_CSPI1_SS2__SS2, /* CS for LCD */
|
||||
/* SPI 1 */
|
||||
MX31_PIN_CSPI2_SCLK__SCLK,
|
||||
MX31_PIN_CSPI2_MOSI__MOSI,
|
||||
@ -109,6 +118,70 @@ static int mx31_3ds_pins[] = {
|
||||
MX31_PIN_SD1_CMD__SD1_CMD,
|
||||
MX31_PIN_GPIO3_1__GPIO3_1, /* Card detect */
|
||||
MX31_PIN_GPIO3_0__GPIO3_0, /* OE */
|
||||
/* Framebuffer */
|
||||
MX31_PIN_LD0__LD0,
|
||||
MX31_PIN_LD1__LD1,
|
||||
MX31_PIN_LD2__LD2,
|
||||
MX31_PIN_LD3__LD3,
|
||||
MX31_PIN_LD4__LD4,
|
||||
MX31_PIN_LD5__LD5,
|
||||
MX31_PIN_LD6__LD6,
|
||||
MX31_PIN_LD7__LD7,
|
||||
MX31_PIN_LD8__LD8,
|
||||
MX31_PIN_LD9__LD9,
|
||||
MX31_PIN_LD10__LD10,
|
||||
MX31_PIN_LD11__LD11,
|
||||
MX31_PIN_LD12__LD12,
|
||||
MX31_PIN_LD13__LD13,
|
||||
MX31_PIN_LD14__LD14,
|
||||
MX31_PIN_LD15__LD15,
|
||||
MX31_PIN_LD16__LD16,
|
||||
MX31_PIN_LD17__LD17,
|
||||
MX31_PIN_VSYNC3__VSYNC3,
|
||||
MX31_PIN_HSYNC__HSYNC,
|
||||
MX31_PIN_FPSHIFT__FPSHIFT,
|
||||
MX31_PIN_CONTRAST__CONTRAST,
|
||||
};
|
||||
|
||||
/*
|
||||
* FB support
|
||||
*/
|
||||
static const struct fb_videomode fb_modedb[] = {
|
||||
{ /* 480x640 @ 60 Hz */
|
||||
.name = "Epson-VGA",
|
||||
.refresh = 60,
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.pixclock = 41701,
|
||||
.left_margin = 20,
|
||||
.right_margin = 41,
|
||||
.upper_margin = 10,
|
||||
.lower_margin = 5,
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 10,
|
||||
.sync = FB_SYNC_OE_ACT_HIGH | FB_SYNC_CLK_INVERT,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
.flag = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct ipu_platform_data mx3_ipu_data = {
|
||||
.irq_base = MXC_IPU_IRQ_START,
|
||||
};
|
||||
|
||||
static struct mx3fb_platform_data mx3fb_pdata = {
|
||||
.dma_dev = &mx3_ipu.dev,
|
||||
.name = "Epson-VGA",
|
||||
.mode = fb_modedb,
|
||||
.num_modes = ARRAY_SIZE(fb_modedb),
|
||||
};
|
||||
|
||||
/* LCD */
|
||||
static struct l4f00242t03_pdata mx31_3ds_l4f00242t03_pdata = {
|
||||
.reset_gpio = IOMUX_TO_GPIO(MX31_PIN_LCS1),
|
||||
.data_enable_gpio = IOMUX_TO_GPIO(MX31_PIN_SER_RS),
|
||||
.core_supply = "lcd_2v8",
|
||||
.io_supply = "vdd_lcdio",
|
||||
};
|
||||
|
||||
/*
|
||||
@ -232,6 +305,38 @@ static struct regulator_init_data vmmc2_init = {
|
||||
.consumer_supplies = vmmc2_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vmmc1_consumers[] = {
|
||||
REGULATOR_SUPPLY("lcd_2v8", NULL),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vmmc1_init = {
|
||||
.constraints = {
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
.apply_uV = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vmmc1_consumers),
|
||||
.consumer_supplies = vmmc1_consumers,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply vgen_consumers[] = {
|
||||
REGULATOR_SUPPLY("vdd_lcdio", NULL),
|
||||
};
|
||||
|
||||
static struct regulator_init_data vgen_init = {
|
||||
.constraints = {
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.apply_uV = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(vgen_consumers),
|
||||
.consumer_supplies = vgen_consumers,
|
||||
};
|
||||
|
||||
static struct mc13xxx_regulator_init_data mx31_3ds_regulators[] = {
|
||||
{
|
||||
.id = MC13783_REG_PWGT1SPI, /* Power Gate for ARM core. */
|
||||
@ -249,6 +354,12 @@ static struct mc13xxx_regulator_init_data mx31_3ds_regulators[] = {
|
||||
}, {
|
||||
.id = MC13783_REG_VMMC2, /* Power MMC/SD, WiFi/Bluetooth. */
|
||||
.init_data = &vmmc2_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VMMC1, /* Power LCD, CMOS, FM, GPS, Accel. */
|
||||
.init_data = &vmmc1_init,
|
||||
}, {
|
||||
.id = MC13783_REG_VGEN, /* Power LCD */
|
||||
.init_data = &vgen_init,
|
||||
},
|
||||
};
|
||||
|
||||
@ -260,6 +371,15 @@ static struct mc13xxx_platform_data mc13783_pdata __initdata = {
|
||||
};
|
||||
|
||||
/* SPI */
|
||||
static int spi0_internal_chipselect[] = {
|
||||
MXC_SPI_CS(2),
|
||||
};
|
||||
|
||||
static const struct spi_imx_master spi0_pdata __initconst = {
|
||||
.chipselect = spi0_internal_chipselect,
|
||||
.num_chipselect = ARRAY_SIZE(spi0_internal_chipselect),
|
||||
};
|
||||
|
||||
static int spi1_internal_chipselect[] = {
|
||||
MXC_SPI_CS(0),
|
||||
MXC_SPI_CS(2),
|
||||
@ -279,6 +399,12 @@ static struct spi_board_info mx31_3ds_spi_devs[] __initdata = {
|
||||
.platform_data = &mc13783_pdata,
|
||||
.irq = IOMUX_TO_IRQ(MX31_PIN_GPIO1_3),
|
||||
.mode = SPI_CS_HIGH,
|
||||
}, {
|
||||
.modalias = "l4f00242t03",
|
||||
.max_speed_hz = 5000000,
|
||||
.bus_num = 0,
|
||||
.chip_select = 0, /* SS2 */
|
||||
.platform_data = &mx31_3ds_l4f00242t03_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
@ -461,6 +587,10 @@ static void __init mx31_3ds_init(void)
|
||||
imx31_add_imx2_wdt(NULL);
|
||||
imx31_add_imx_i2c0(&mx31_3ds_i2c0_data);
|
||||
imx31_add_mxc_mmc(0, &sdhc1_pdata);
|
||||
|
||||
imx31_add_spi_imx0(&spi0_pdata);
|
||||
mxc_register_device(&mx3_ipu, &mx3_ipu_data);
|
||||
mxc_register_device(&mx3_fb, &mx3fb_pdata);
|
||||
}
|
||||
|
||||
static void __init mx31_3ds_timer_init(void)
|
||||
|
Loading…
Reference in New Issue
Block a user