[PATCH 3/3] archosg9: add display
Vicente Bergas
vicencb at gmail.com
Fri Sep 25 15:41:03 PDT 2015
Signed-off-by: Vicente Bergas <vicencb at gmail.com>
---
arch/arm/boards/archosg9/board.c | 111 ++++++++++++++++++++++++++++---
arch/arm/boards/archosg9/env/init/splash | 5 ++
arch/arm/boards/archosg9/mux.c | 20 +++---
arch/arm/configs/archosg9_defconfig | 7 +-
4 files changed, 123 insertions(+), 20 deletions(-)
create mode 100644 arch/arm/boards/archosg9/env/init/splash
diff --git a/arch/arm/boards/archosg9/board.c b/arch/arm/boards/archosg9/board.c
index 0a3c0b9..f80714e 100644
--- a/arch/arm/boards/archosg9/board.c
+++ b/arch/arm/boards/archosg9/board.c
@@ -11,6 +11,7 @@
*/
#include <common.h>
+#include <clock.h>
#include <init.h>
#include <ns16550.h>
#include <asm/armlinux.h>
@@ -18,6 +19,7 @@
#include <mach/omap4-silicon.h>
#include <mach/omap4-devices.h>
#include <mach/omap4_rom_usb.h>
+#include <mach/omap-fb.h>
#include <linux/sizes.h>
#include <i2c/i2c.h>
#include <gpio.h>
@@ -26,6 +28,19 @@
#include <readkey.h>
#include "archos_features.h"
+#define GPIO_LCD_PWON 38
+#define GPIO_BRIDGE_EN 39
+#define GPIO_LCD_RST 53
+#define GPIO_LCD_STDBY 101
+#define GPIO_LCD_AVDD_EN 12
+#define GPIO_BKL_EN 122
+#define GPIO_BKL_LED 143
+
+#define GPIO_5V_PWRON 36
+#define GPIO_VCC_PWRON 35
+#define GPIO_1V8_PWRON 34
+#define GPIO_GPS_ENABLE 41
+
static int archosg9_console_init(void)
{
barebox_set_model("Archos G9");
@@ -37,8 +52,6 @@ static int archosg9_console_init(void)
, NULL, 0, 0, 0, NULL);
}
if (IS_ENABLED(CONFIG_DRIVER_SERIAL_NS16550)) {
- gpio_direction_output(41, 0); /* gps_disable */
- gpio_direction_output(34, 1); /* 1v8_pwron */
omap44xx_add_uart1();
}
return 0;
@@ -54,7 +67,7 @@ mem_initcall(archosg9_mem_init);
static struct i2c_board_info i2c_devices[] = {
{ I2C_BOARD_INFO("twl6030", 0x48), },
};
-#if defined(CONFIG_KEYBOARD_TWL6030) && defined(CONFIG_KEYBOARD_GPIO)
+
static struct twl6030_pwrbtn_platform_data pwrbtn_data = {
.code = BB_KEY_ENTER
};
@@ -67,17 +80,97 @@ static struct gpio_keys_platform_data gk_data = {
.nbuttons = ARRAY_SIZE(keys),
.fifo_size = ARRAY_SIZE(keys)*sizeof(int)
};
-#endif
+
+static struct omapfb_display const archosg9_displays[] = {
+ {
+ .mode = {
+ .name = "g104x1",
+ .refresh = 60,
+ .xres = 1024,
+ .yres = 768,
+ .pixclock = 96000,
+ .left_margin = 320,
+ .right_margin = 1,
+ .hsync_len = 320,
+ .upper_margin = 38,
+ .lower_margin = 38,
+ .vsync_len = 2,
+ },
+ .config = (
+ OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
+ OMAP_DSS_LCD_IHS | OMAP_DSS_LCD_IPC |
+ OMAP_DSS_LCD_DATALINES_24
+ ),
+ .power_on_delay = 50,
+ .power_off_delay = 100,
+ },
+};
+
+static void archosg9_fb_enable(int e)
+{
+ if (e) {
+ gpio_direction_output(GPIO_LCD_PWON , 1);
+ mdelay(50);
+ gpio_direction_output(GPIO_LCD_RST , 0);
+ gpio_direction_output(GPIO_LCD_AVDD_EN, 0);
+ mdelay(35);
+ gpio_direction_output(GPIO_BRIDGE_EN , 1);
+ mdelay(10);
+ gpio_direction_output(GPIO_LCD_STDBY , 0);
+ gpio_direction_output(GPIO_BKL_EN , 0);
+ } else {
+ gpio_direction_output(GPIO_BKL_EN , 1);
+ gpio_direction_output(GPIO_LCD_STDBY , 1);
+ mdelay(1);
+ gpio_direction_output(GPIO_BRIDGE_EN , 0);
+ gpio_direction_output(GPIO_LCD_AVDD_EN, 1);
+ mdelay(10);
+ gpio_direction_output(GPIO_LCD_PWON , 0);
+ gpio_direction_output(GPIO_LCD_RST , 1);
+ }
+}
+
+static struct omapfb_platform_data archosg9_fb_data = {
+ .displays = archosg9_displays,
+ .num_displays = ARRAY_SIZE(archosg9_displays),
+ .dss_clk_hz = 19200000,
+ .bpp = 32,
+ .enable = archosg9_fb_enable,
+};
+
+static int archosg9_display_init(void)
+{
+ omap_add_display(&archosg9_fb_data);
+
+ gpio_direction_output(GPIO_BKL_EN , 1);
+ gpio_direction_output(GPIO_LCD_RST , 1);
+ gpio_direction_output(GPIO_LCD_PWON , 0);
+ gpio_direction_output(GPIO_BRIDGE_EN , 0);
+ gpio_direction_output(GPIO_LCD_STDBY , 1);
+ gpio_direction_output(GPIO_LCD_AVDD_EN, 1);
+ gpio_direction_output(GPIO_BKL_LED , 0);
+ gpio_direction_output(GPIO_VCC_PWRON , 1);
+
+ return 0;
+}
static int archosg9_devices_init(void){
+ gpio_direction_output(GPIO_GPS_ENABLE, 0);
+ gpio_direction_output(GPIO_1V8_PWRON , 1);
+
i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices));
omap44xx_add_i2c1(NULL);
omap44xx_add_mmc1(NULL);
-#if defined(CONFIG_KEYBOARD_TWL6030) && defined(CONFIG_KEYBOARD_GPIO)
- add_generic_device_res("twl6030_pwrbtn", DEVICE_ID_DYNAMIC, 0, 0,
- &pwrbtn_data);
- add_gpio_keys_device(DEVICE_ID_DYNAMIC, &gk_data);
-#endif
+ if (IS_ENABLED(CONFIG_KEYBOARD_TWL6030) &&
+ IS_ENABLED(CONFIG_KEYBOARD_GPIO)) {
+ add_generic_device_res("twl6030_pwrbtn", DEVICE_ID_DYNAMIC,
+ 0, 0, &pwrbtn_data);
+ add_gpio_keys_device(DEVICE_ID_DYNAMIC, &gk_data);
+ }
+
+ if (IS_ENABLED(CONFIG_DRIVER_VIDEO_OMAP))
+ archosg9_display_init();
+
/*
* This should be:
* armlinux_set_architecture(MACH_TYPE_OMAP4_ARCHOSG9);
diff --git a/arch/arm/boards/archosg9/env/init/splash b/arch/arm/boards/archosg9/env/init/splash
new file mode 100644
index 0000000..4441b90
--- /dev/null
+++ b/arch/arm/boards/archosg9/env/init/splash
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+fb0.mode_name=g104x1
+splash -b0 /mnt/usb/barebox.png
+fb0.enable=1
diff --git a/arch/arm/boards/archosg9/mux.c b/arch/arm/boards/archosg9/mux.c
index 4fab759..e9cb3c4 100644
--- a/arch/arm/boards/archosg9/mux.c
+++ b/arch/arm/boards/archosg9/mux.c
@@ -29,14 +29,14 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ GPMC_AD7 , IEN | PTU | M1 },
{ GPMC_AD8 , IEN | PTD | M3 },
{ GPMC_AD9 , IEN | PTU | M0 },
- { GPMC_AD10 , IEN | PTU | M0 },
- { GPMC_AD11 , IEN | PTU | M0 },
- { GPMC_AD12 , IEN | PTD | M0 },
+ { GPMC_AD10 , IEN | PTU | M3 },
+ { GPMC_AD11 , IEN | PTU | M3 },
+ { GPMC_AD12 , IEN | PTD | M3 },
{ GPMC_AD13 , PTD | M3 },
{ GPMC_AD14 , PTD | M3 },
{ GPMC_AD15 , PTD | M3 },
{ GPMC_A16 , IEN | PTD | M7 },
- { GPMC_A17 , IEN | PTD | M7 },
+ { GPMC_A17 , IEN | PTD | M3 },
{ GPMC_A18 , IEN | PTD | M1 },
{ GPMC_A19 , IEN | PTU | M3 },
{ GPMC_A20 , IEN | PTU | M3 },
@@ -48,7 +48,7 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ GPMC_NCS0 , IEN | PTU | M0 },
{ GPMC_NCS1 , IEN | PTU | M7 },
{ GPMC_NCS2 , IEN | PTU | M7 },
- { GPMC_NCS3 , IEN | PTU | M7 },
+ { GPMC_NCS3 , IEN | PTU | M3 },
{ GPMC_NWP , IEN | PTD | M0 },
{ GPMC_CLK , IEN | PTD | M0 },
{ GPMC_NADV_ALE , IEN | PTD | M0 },
@@ -59,7 +59,7 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ GPMC_WAIT0 , IEN | PTU | M0 },
{ GPMC_WAIT1 , IEN | PTU | M7 },
{ GPMC_WAIT2 , IEN | PTD | M7 },
- { GPMC_NCS4 , IEN | PTD | M7 },
+ { GPMC_NCS4 , IEN | PTD | M3 },
{ GPMC_NCS5 , IEN | PTD | M7 },
{ GPMC_NCS6 , IEN | PTD | M7 },
{ GPMC_NCS7 , IEN | PTD | M7 },
@@ -125,8 +125,8 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ ABE_CLKS , IEN | PTD | M7 },
{ ABE_DMIC_CLK1 , IEN | PTD | M7 },
{ ABE_DMIC_DIN1 , IEN | PTD | M7 },
- { ABE_DMIC_DIN2 , IEN | PTD | M7 },
- { ABE_DMIC_DIN3 , IEN | PTD | M7 },
+ { ABE_DMIC_DIN2 , IEN | PTD | M3 },
+ { ABE_DMIC_DIN3 , IEN | PTD | M3 },
{ UART2_CTS , IEN | PTU | M0 },
{ UART2_RTS , M0 },
{ UART2_RX , IEN | M0 },
@@ -149,7 +149,7 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ MCSPI1_CS3 , IEN | PTU | M7 },
{ UART3_CTS_RCTX , M1 },
{ UART3_RTS_SD , M0 },
- { UART3_RX_IRRX , IEN | PTU | M0 },
+ { UART3_RX_IRRX , IEN | PTU | M3 },
{ UART3_TX_IRTX , M0 },
{ SDMMC5_CLK , PTU | M0 },
{ SDMMC5_CMD , IEN | PTU | M0 },
@@ -203,7 +203,7 @@ static const struct pad_conf_entry core_padconf_array[] = {
{ SYS_BOOT4 , IEN | PTD | M0 },
{ SYS_BOOT5 , IEN | PTD | M0 },
{ DPM_EMU0 , IEN | PTU | M0 },
- { DPM_EMU1 , IEN | PTU | M0 },
+ { DPM_EMU1 , IEN | PTU | M3 },
{ DPM_EMU2 , IEN | PTD | M7 },
{ DPM_EMU3 , M5 },
{ DPM_EMU4 , M5 },
diff --git a/arch/arm/configs/archosg9_defconfig b/arch/arm/configs/archosg9_defconfig
index db80c38..4bafcf9 100644
--- a/arch/arm/configs/archosg9_defconfig
+++ b/arch/arm/configs/archosg9_defconfig
@@ -53,6 +53,7 @@ CONFIG_CMD_EDIT=y
CONFIG_CMD_MENU=y
CONFIG_CMD_MENU_MANAGEMENT=y
CONFIG_CMD_MENUTREE=y
+CONFIG_CMD_SPLASH=y
CONFIG_CMD_READLINE=y
CONFIG_CMD_TIMEOUT=y
CONFIG_CMD_CRC=y
@@ -76,6 +77,10 @@ CONFIG_I2C=y
CONFIG_I2C_OMAP=y
CONFIG_USB_HOST=y
CONFIG_USB_EHCI=y
+CONFIG_VIDEO=y
+CONFIG_DRIVER_VIDEO_OMAP=y
+CONFIG_DRIVER_VIDEO_SIMPLEFB=y
+CONFIG_DRIVER_VIDEO_EDID=y
CONFIG_MCI=y
CONFIG_MCI_STARTUP=y
CONFIG_MCI_OMAP_HSMMC=y
@@ -91,5 +96,5 @@ CONFIG_FS_NFS=y
CONFIG_FS_FAT=y
CONFIG_FS_FAT_WRITE=y
CONFIG_FS_FAT_LFN=y
-CONFIG_ZLIB=y
CONFIG_LZO_DECOMPRESS=y
+CONFIG_PNG=y
--
2.5.3
More information about the barebox
mailing list