Commit 13e1f044 authored by Steve Chen's avatar Steve Chen Committed by Kevin Hilman

davinci: Add LCD Graphics support for DA830/OMAP-L137 EVM

Add graphics support for the Sharp LCD035Q3DG01 graphical
LCD that's on the User Interface (UI) daughter card of the
DA830/OMAP-L137 EVM.

The LCD shares EMIFA lines with the NAND and NOR devices that
are also on the UI card so those lines are shared via a couple
of muxes.  The muxes are controlled by the 'MUX_MODE' line on
the UI card.  The 'MUX_MODE' line is controlled by pin P6 of
a pcf8574 i2c expander that's at i2c address 0x3f on UI card.
The i2c expander is controlled using the gpio infrastructure
from the board code using the 'setup()' and 'teardown()'
routines.
Signed-off-by: default avatarSteve Chen <schen@mvista.com>
Signed-off-by: default avatarMark A. Greer <mgreer@mvista.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent b9e6342b
...@@ -101,6 +101,27 @@ config MACH_DAVINCI_DA830_EVM ...@@ -101,6 +101,27 @@ config MACH_DAVINCI_DA830_EVM
help help
Say Y here to select the TI DA830/OMAP-L137 Evaluation Module. Say Y here to select the TI DA830/OMAP-L137 Evaluation Module.
config DA830_UI
bool "DA830/OMAP-L137 UI (User Interface) board support"
depends on MACH_DAVINCI_DA830_EVM
help
Say Y here if you have the DA830/OMAP-L137 UI
(User Interface) board installed and you want to
enable the peripherals located on User Interface
board.
choice
prompt "Select DA830/OMAP-L137 UI board peripheral"
depends on DA830_UI
config DA830_UI_LCD
bool "LCD"
help
Say Y here to use the LCD as a framebuffer or simple character
display.
endchoice
config MACH_DAVINCI_DA850_EVM config MACH_DAVINCI_DA850_EVM
bool "TI DA850/OMAP-L138 Reference Platform" bool "TI DA850/OMAP-L138 Reference Platform"
default ARCH_DAVINCI_DA850 default ARCH_DAVINCI_DA850
......
...@@ -13,7 +13,9 @@ ...@@ -13,7 +13,9 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/gpio.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c/pcf857x.h>
#include <linux/i2c/at24.h> #include <linux/i2c/at24.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
...@@ -38,6 +40,31 @@ static struct at24_platform_data da830_evm_i2c_eeprom_info = { ...@@ -38,6 +40,31 @@ static struct at24_platform_data da830_evm_i2c_eeprom_info = {
.context = (void *)0x7f00, .context = (void *)0x7f00,
}; };
static int da830_evm_ui_expander_setup(struct i2c_client *client, int gpio,
unsigned ngpio, void *context)
{
gpio_request(gpio + 6, "MUX_MODE");
#ifdef CONFIG_DA830_UI_LCD
gpio_direction_output(gpio + 6, 0);
#else /* Must be NAND or NOR */
gpio_direction_output(gpio + 6, 1);
#endif
return 0;
}
static int da830_evm_ui_expander_teardown(struct i2c_client *client, int gpio,
unsigned ngpio, void *context)
{
gpio_free(gpio + 6);
return 0;
}
static struct pcf857x_platform_data da830_evm_ui_expander_info = {
.gpio_base = DAVINCI_N_GPIO,
.setup = da830_evm_ui_expander_setup,
.teardown = da830_evm_ui_expander_teardown,
};
static struct i2c_board_info __initdata da830_evm_i2c_devices[] = { static struct i2c_board_info __initdata da830_evm_i2c_devices[] = {
{ {
I2C_BOARD_INFO("24c256", 0x50), I2C_BOARD_INFO("24c256", 0x50),
...@@ -45,7 +72,11 @@ static struct i2c_board_info __initdata da830_evm_i2c_devices[] = { ...@@ -45,7 +72,11 @@ static struct i2c_board_info __initdata da830_evm_i2c_devices[] = {
}, },
{ {
I2C_BOARD_INFO("tlv320aic3x", 0x18), I2C_BOARD_INFO("tlv320aic3x", 0x18),
} },
{
I2C_BOARD_INFO("pcf8574", 0x3f),
.platform_data = &da830_evm_ui_expander_info,
},
}; };
static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = { static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = {
...@@ -186,6 +217,17 @@ static __init void da830_evm_init(void) ...@@ -186,6 +217,17 @@ static __init void da830_evm_init(void)
da8xx_register_mcasp(1, &da830_evm_snd_data); da8xx_register_mcasp(1, &da830_evm_snd_data);
da830_evm_init_mmc(); da830_evm_init_mmc();
#ifdef CONFIG_DA830_UI_LCD
ret = da8xx_pinmux_setup(da830_lcdcntl_pins);
if (ret)
pr_warning("da830_evm_init: lcdcntl mux setup failed: %d\n",
ret);
ret = da8xx_register_lcdc(&sharp_lcd035q3dg01_pdata);
if (ret)
pr_warning("da830_evm_init: lcd setup failed: %d\n", ret);
#endif
} }
#ifdef CONFIG_SERIAL_8250_CONSOLE #ifdef CONFIG_SERIAL_8250_CONSOLE
......
...@@ -411,7 +411,7 @@ static struct davinci_clk da830_clks[] = { ...@@ -411,7 +411,7 @@ static struct davinci_clk da830_clks[] = {
CLK(NULL, "pwm2", &pwm2_clk), CLK(NULL, "pwm2", &pwm2_clk),
CLK("eqep.0", NULL, &eqep0_clk), CLK("eqep.0", NULL, &eqep0_clk),
CLK("eqep.1", NULL, &eqep1_clk), CLK("eqep.1", NULL, &eqep1_clk),
CLK("da830_lcdc", NULL, &lcdc_clk), CLK("da8xx_lcdc.0", NULL, &lcdc_clk),
CLK("davinci-mcasp.0", NULL, &mcasp0_clk), CLK("davinci-mcasp.0", NULL, &mcasp0_clk),
CLK("davinci-mcasp.1", NULL, &mcasp1_clk), CLK("davinci-mcasp.1", NULL, &mcasp1_clk),
CLK("davinci-mcasp.2", NULL, &mcasp2_clk), CLK("davinci-mcasp.2", NULL, &mcasp2_clk),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment