[Armadeus-commitlog] armadeus branch, master, updated. armadeus-4.1-357-gb9e9675
Brought to you by:
sszy
|
From: Julien B a. A. <ar...@us...> - 2012-06-08 21:08:11
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via b9e96756cd7e7b24acd1bb409695254622c79dec (commit)
via fe590fd3f4eea2e4e9f99874d7e78302340f0b3f (commit)
from 51f941bd1de615b76b4ce4e59d97c24591a6bc3a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b9e96756cd7e7b24acd1bb409695254622c79dec
Merge: fe590fd 51f941b
Author: Julien Boibessot <jul...@ar...>
Date: Fri Jun 8 23:07:36 2012 +0200
Merge branch 'master' of ssh://armadeus.git.sourceforge.net/gitroot/armadeus/armadeus
commit fe590fd3f4eea2e4e9f99874d7e78302340f0b3f
Author: Julien Boibessot <jul...@ar...>
Date: Fri Jun 8 23:05:40 2012 +0200
[LINUX] Add PPS51 support
-----------------------------------------------------------------------
Summary of changes:
Makefile | 1 +
buildroot/configs/.gitignore | 2 +-
.../configs/{apf51_defconfig => pps51_defconfig} | 26 +-
.../armadeus/pps51/pps51-linux-2.6.38.8.config | 1 +
.../pps51-linux-2.6.38.config} | 35 +-
...madeus-pps51-adding_HX8369_display_driver.patch | 417 ++++++++++++++++++++
.../2.6.38/449-armadeus-add_pps51_baseboard.patch | 379 ++++++++++++++++++
7 files changed, 830 insertions(+), 31 deletions(-)
copy buildroot/configs/{apf51_defconfig => pps51_defconfig} (81%)
create mode 120000 buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.8.config
copy buildroot/target/device/armadeus/{apf51/apf51-linux-3.0.config => pps51/pps51-linux-2.6.38.config} (94%)
create mode 100644 patches/linux/2.6.38/448-armadeus-pps51-adding_HX8369_display_driver.patch
create mode 100644 patches/linux/2.6.38/449-armadeus-add_pps51_baseboard.patch
diff --git a/Makefile b/Makefile
index bb7b6af..d49487e 100644
--- a/Makefile
+++ b/Makefile
@@ -68,6 +68,7 @@ help:
@echo ' apf27_defconfig - get default config for an APF27+Dev kit'
@echo ' pps_defconfig - get default config for an APF27+PPS system'
@echo ' apf51_defconfig - get default config for an APF51+Dev kit'
+ @echo ' pps51_defconfig - get default config for an APF51+PPS51 system'
@echo ''
@echo 'Build:'
@echo ' all - make world '
diff --git a/buildroot/configs/.gitignore b/buildroot/configs/.gitignore
index 40d884f..0f18ac2 100644
--- a/buildroot/configs/.gitignore
+++ b/buildroot/configs/.gitignore
@@ -1,3 +1,3 @@
*_defconfig
!/apf*
-!/pps_defconfig
+!/pps*_defconfig
diff --git a/buildroot/configs/apf51_defconfig b/buildroot/configs/pps51_defconfig
similarity index 81%
copy from buildroot/configs/apf51_defconfig
copy to buildroot/configs/pps51_defconfig
index a214580..18792d5 100644
--- a/buildroot/configs/apf51_defconfig
+++ b/buildroot/configs/pps51_defconfig
@@ -7,6 +7,7 @@ BR2_SOURCEFORGE_MIRROR="switch"
BR2_JLEVEL=1
BR2_CCACHE=y
BR2_STRIP_sstrip=y
+BR2_OPTIMIZE_2=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="2.6.38.8"
BR2_UCLIBC_CONFIG="target/device/armadeus/uClibc-$(BR2_UCLIBC_VERSION_STRING).config"
@@ -15,7 +16,7 @@ BR2_PACKAGE_GDB_HOST=y
BR2_ENABLE_LOCALE_PURGE=y
BR2_ENABLE_LOCALE_WHITELIST="C en_US"
# BR2_SOFT_FLOAT is not set
-BR2_TARGET_OPTIMIZATION="-Os -pipe"
+BR2_TARGET_OPTIMIZATION="-O2 -pipe"
BR2_TOOLCHAIN_BUILDROOT_LARGEFILE=y
BR2_TOOLCHAIN_BUILDROOT_INET_IPV6=y
BR2_TOOLCHAIN_BUILDROOT_INET_RPC=y
@@ -31,7 +32,7 @@ BR2_ROOTFS_SKELETON_CUSTOM_PATH="$(ARMADEUS_PATH)/rootfs/target_skeleton"
BR2_TARGET_GENERIC_GETTY_PORT="ttymxc2"
BR2_ROOTFS_POST_BUILD_SCRIPT="$(ARMADEUS_PATH)/rootfs/post_build.sh"
BR2_TARGET_ARMADEUS=y
-BR2_BOARD_NAME="apf51"
+BR2_BOARD_NAME="pps51"
BR2_CPU_NAME="imx51"
BR2_TARGET_ARMADEUS_SDRAM_SIZE="256"
BR2_PACKAGE_BUSYBOX_CONFIG="$(ARMADEUS_PATH)/busybox-$(BR2_BUSYBOX_VERSION).config"
@@ -39,12 +40,16 @@ BR2_PACKAGE_FPGAREGS=y
BR2_PACKAGE_ARMADEUS_FPGA_FIRMWARE=y
BR2_PACKAGE_ARMADEUS_FPGA_FIRMWARE_APF51_DUAL_UART=y
BR2_PACKAGE_IMXREGS=y
+BR2_PACKAGE_ARMADEUS_TESTSUITE=y
+BR2_PACKAGE_ARMADEUS_PPS_UTILITIES=y
+BR2_PACKAGE_ARMADEUS_PPS_TEST_SCRIPTS=y
BR2_PACKAGE_TFP410CTRL=y
BR2_PACKAGE_ALSA_UTILS=y
BR2_PACKAGE_ALSA_UTILS_AMIXER=y
BR2_PACKAGE_ALSA_UTILS_APLAY=y
BR2_PACKAGE_ALSA_UTILS_SPEAKER_TEST=y
BR2_PACKAGE_STRACE=y
+BR2_PACKAGE_FBTEST=y
BR2_PACKAGE_FBV=y
BR2_PACKAGE_DBUS=y
BR2_PACKAGE_FIRMWARE=y
@@ -71,17 +76,12 @@ BR2_TARGET_ROOTFS_UBIFS=y
BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=135301
BR2_TARGET_ROOTFS_UBI=y
BR2_TARGET_UBOOT=y
-BR2_TARGET_UBOOT_BOARDNAME="$(BR2_BOARD_NAME)"
-BR2_TARGET_UBOOT_CONFIG_HEADER_FILE="$(BR2_BOARD_PATH)/$(BR2_BOARD_NAME)-u-boot-2011.12.h"
-BR2_TARGET_UBOOT_CUSTOM_TARBALL=y
-BR2_TARGET_UBOOT_CUSTOM_TARBALL_LOCATION="ftp://ftp.denx.de/pub/u-boot/u-boot-2011.12.tar.bz2"
-BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="../patches/u-boot/2011.12"
-BR2_TARGET_UBOOT_FORMAT_NAND_BIN=y
-BR2_TARGET_UBOOT_NETWORK=y
-BR2_TARGET_UBOOT_SERVERIP="192.168.0.2"
-BR2_TARGET_UBOOT_IPADDR="192.168.0.10"
-BR2_TARGET_UBOOT_GATEWAY="192.168.0.1"
-BR2_TARGET_UBOOT_ETHADDR=""
+BR2_TARGET_UBOOT_BOARDNAME="apf51"
+BR2_TARGET_U_BOOT_CONFIG_HEADER_FILE="$(ARMADEUS_PATH)/apf51/apf51-u-boot-2010.03.h"
+BR2_TARGET_UBOOT_2010_03=y
+BR2_TARGET_UBOOT_CUSTOM_PATCH_DIR="../patches/u-boot/$(BR2_TARGET_UBOOT_VERSION)/"
+BR2_TARGET_UBOOT_TOOL_ENV=y
+# BR2_TARGET_UBOOT_NETWORK is not set
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="2.6.38.8"
diff --git a/buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.8.config b/buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.8.config
new file mode 120000
index 0000000..873d682
--- /dev/null
+++ b/buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.8.config
@@ -0,0 +1 @@
+pps51-linux-2.6.38.config
\ No newline at end of file
diff --git a/buildroot/target/device/armadeus/apf51/apf51-linux-3.0.config b/buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.config
similarity index 94%
copy from buildroot/target/device/armadeus/apf51/apf51-linux-3.0.config
copy to buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.config
index 21eb398..7cefd7c 100644
--- a/buildroot/target/device/armadeus/apf51/apf51-linux-3.0.config
+++ b/buildroot/target/device/armadeus/pps51/pps51-linux-2.6.38.config
@@ -5,6 +5,7 @@ CONFIG_SYSVIPC=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_EMBEDDED=y
# CONFIG_COMPAT_BRK is not set
CONFIG_SLAB=y
@@ -15,8 +16,9 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_MXC=y
-CONFIG_ARCH_MX51=y
+CONFIG_ARCH_MX5=y
CONFIG_MACH_APF51=y
+CONFIG_MACH_APF51_PPS=y
CONFIG_ARM_THUMBEE=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
@@ -25,6 +27,7 @@ CONFIG_AEABI=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_DEBUG=y
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
@@ -35,9 +38,11 @@ CONFIG_CPU_IDLE=y
CONFIG_VFP=y
CONFIG_NEON=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-CONFIG_PM_RUNTIME=y
+CONFIG_PM=y
CONFIG_PM_DEBUG=y
+CONFIG_PM_VERBOSE=y
CONFIG_APM_EMULATION=y
+CONFIG_PM_RUNTIME=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
@@ -54,10 +59,12 @@ CONFIG_CAN=m
CONFIG_CAN_RAW=m
CONFIG_CAN_BCM=m
CONFIG_CAN_VCAN=m
+CONFIG_CAN_DEV=m
+CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_MCP251X=m
CONFIG_BT=m
-CONFIG_BT_L2CAP=y
-CONFIG_BT_SCO=y
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=m
@@ -74,6 +81,7 @@ CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_FW_LOADER=m
CONFIG_MTD=y
+CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
@@ -96,6 +104,7 @@ CONFIG_NETDEVICES=y
CONFIG_MII=y
CONFIG_SMSC_PHY=y
CONFIG_NET_ETHERNET=y
+CONFIG_FEC=y
# CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set
CONFIG_RTL8187=m
@@ -104,6 +113,8 @@ CONFIG_LIBERTAS_SDIO=m
CONFIG_RT2X00=m
CONFIG_RT73USB=m
CONFIG_ZD1211RW=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_SMSC95XX=m
CONFIG_PPP=m
CONFIG_PPP_ASYNC=m
CONFIG_INPUT_JOYDEV=y
@@ -115,10 +126,10 @@ CONFIG_TOUCHSCREEN_WM831X=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_UINPUT=m
CONFIG_INPUT_WM831X_ON=y
-# CONFIG_LEGACY_PTYS is not set
CONFIG_SERIAL_8250=m
CONFIG_SERIAL_IMX=y
CONFIG_SERIAL_IMX_CONSOLE=y
+# CONFIG_LEGACY_PTYS is not set
# CONFIG_HW_RANDOM is not set
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
@@ -174,18 +185,6 @@ CONFIG_FONT_8x8=y
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_SOUND=m
-# CONFIG_SOUND_OSS_CORE_PRECLAIM is not set
-CONFIG_SND=m
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-# CONFIG_SND_DRIVERS is not set
-# CONFIG_SND_ARM is not set
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_USB is not set
-CONFIG_SND_SOC=m
-CONFIG_SND_IMX_SOC=m
-CONFIG_SND_SOC_APF51_DEV_WM8960=m
CONFIG_USB=y
CONFIG_USB_DEBUG=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
@@ -229,6 +228,7 @@ CONFIG_RTC_CLASS=y
CONFIG_RTC_MXC=y
CONFIG_RTC_DRV_WM831X=y
CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
CONFIG_IIO=m
CONFIG_MCP49x2=m
# CONFIG_MXC_HWEVENT is not set
@@ -266,5 +266,6 @@ CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_850=y
CONFIG_NLS_ISO8859_1=y
CONFIG_DEBUG_FS=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_HW is not set
diff --git a/patches/linux/2.6.38/448-armadeus-pps51-adding_HX8369_display_driver.patch b/patches/linux/2.6.38/448-armadeus-pps51-adding_HX8369_display_driver.patch
new file mode 100644
index 0000000..7bcdc0e
--- /dev/null
+++ b/patches/linux/2.6.38/448-armadeus-pps51-adding_HX8369_display_driver.patch
@@ -0,0 +1,417 @@
+Index: linux-2.6.38.8/drivers/video/display/hx8369.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.38.8/drivers/video/display/hx8369.c 2011-12-15 09:35:04.000000000 +0100
+@@ -0,0 +1,262 @@
++/*
++ * Display Driver for hx8369 controler for AMOLED
++ *
++ * Copyright (c) 2009-2012 Armadeus systems / Author: F. Marteau
++ *
++ * 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/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/mutex.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++
++#include <linux/display.h>
++#include <linux/spi/spi.h>
++
++#include <linux/version.h>
++#include <mach/imxfb.h> /* Backlight machinfo struct is defined here */
++#include <mach/hardware.h>
++
++#include <video/hx8369.h>
++
++#define DRIVER_NAME "hx8369-display"
++#define DRIVER_VERSION "0.3"
++
++/* write value hx8369 display register via SPI */
++void hx8369_write(struct hx8369_display *hx8369_dev, u8 address, u16 data)
++{
++ struct spi_message message;
++ struct spi_transfer x[1];
++ int i;
++ u8 cmd_send;
++ unsigned char buf[64];
++ unsigned char buf_read[64];
++
++ cmd_send = address;
++
++ spi_message_init(&message);
++ memset(x, 0, sizeof x);
++ memset(buf, 0, sizeof(buf));
++ memset(buf_read, 0, sizeof(buf_read));
++
++ buf[0] = 0;
++ for (i = 1; i < 9; i++) {
++ buf[i] = ((cmd_send & 0x80)>>7);
++ cmd_send = cmd_send << 1;
++ }
++ buf[9] = 1;
++
++ cmd_send = data;
++
++ for (i = 10; i < 18; i++) {
++ buf[i] = ((cmd_send & 0x80)>>7);
++ cmd_send = cmd_send << 1;
++ }
++
++ x[0].tx_buf = buf;
++ x[0].len = 18;
++ x[0].rx_buf = buf_read;
++ x[0].speed_hz = 1000000;
++ x[0].bits_per_word = 1;
++ spi_message_add_tail(&x[0], &message);
++
++ spi_sync(hx8369_dev->spi, &message);
++}
++
++u8 hx8369_read(struct hx8369_display *hx8369_dev, u8 address)
++{
++ struct spi_message message;
++ struct spi_transfer x[1];
++ int status, i;
++ u8 cmd_send;
++ unsigned char buf[64];
++ unsigned char buf_read[64];
++ int ret_value=0;
++
++ cmd_send = address;
++
++ spi_message_init(&message);
++ memset(x, 0, sizeof x);
++ memset(buf, 0, sizeof(buf));
++ memset(buf_read, 0, sizeof(buf_read));
++
++ buf[0] = 0;
++ for (i = 1; i < 9; i++) {
++ buf[i] = ((cmd_send & 0x80)>>7);
++ cmd_send = cmd_send << 1;
++ }
++
++ x[0].tx_buf = buf;
++ x[0].len = 17;
++ x[0].rx_buf = buf_read;
++ x[0].speed_hz = 1000000;
++ x[0].bits_per_word = 1;
++ spi_message_add_tail(&x[0], &message);
++
++ status = spi_sync(hx8369_dev->spi, &message);
++ if (status < 0)
++ return status;
++
++ for (i = 0; i < 17 ; i++) {
++ ret_value = ret_value << 1;
++ ret_value = ret_value | (buf_read[i]&0x01);
++ }
++
++ return (u8)ret_value;
++}
++
++static int hx8369_display_get_contrast(struct display_device *dev)
++{
++ struct hx8369_display *hx8369_dev = dev->priv_data;
++
++ return hx8369_dev->gcontrast_value;
++}
++
++static int hx8369_display_set_contrast(struct display_device *dev, unsigned int value)
++{
++ return value;
++}
++
++static int hx8369_display_probe(struct display_device *dev, void *data)
++{
++ return 1;
++}
++
++static int hx8369_display_remove(struct display_device *dev)
++{
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static void hx8369_display_suspend(struct display_device *dev, pm_message_t state)
++{
++}
++
++static void hx8369_display_resume(struct display_device *dev)
++{
++}
++#else
++#define hx8369_display_suspend NULL
++#define hx8369_display_resume NULL
++#endif /* CONFIG_PM */
++
++static struct display_driver hx8369_ops = {
++ .get_contrast = hx8369_display_get_contrast,
++ .set_contrast = hx8369_display_set_contrast,
++ .probe = hx8369_display_probe,
++ .suspend = hx8369_display_suspend,
++ .resume = hx8369_display_resume,
++ .remove = hx8369_display_remove,
++ .max_contrast = 63,
++};
++
++
++static void hx8369_init_sequence(struct hx8369_display *hx8369_dev)
++{
++ /* initial procedure for 24-bit parallel RGB (DE) */
++ hx8369_write(hx8369_dev, HX8369_DISPON, 0);
++ hx8369_write(hx8369_dev, HX8369_SLPOUT, 0);
++}
++
++static int hx8369_spi_probe(struct spi_device *pdev)
++{
++ int err = -EINVAL;
++ struct display_device *disp_dev;
++ struct hx8369_display *hx8369_dev = pdev->dev.platform_data;
++
++ /* fill hx8369 display structure */
++ disp_dev = display_device_register(&hx8369_ops,
++ &pdev->dev,
++ hx8369_dev);
++ if (disp_dev == NULL)
++ goto display_device_error;
++ disp_dev->priv_data = hx8369_dev;
++ hx8369_dev->display_dev = disp_dev;
++ hx8369_dev->spi = pdev;
++
++ /* configure spi */
++ hx8369_dev->spi->mode = SPI_MODE_0;
++ hx8369_dev->spi->bits_per_word = 1;
++ hx8369_dev->spi->dev.power.power_state = PMSG_ON;
++ err = spi_setup(hx8369_dev->spi);
++ if (err < 0)
++ goto spi_error;
++
++ hx8369_init_sequence(hx8369_dev);
++
++ return 0;
++
++spi_error:
++ printk("ERROR: can't setup spi for hx8369\n");
++ display_device_unregister(hx8369_dev->display_dev);
++display_device_error:
++ printk("ERROR: can't register display device\n");
++ return err;
++}
++
++static int hx8369_spi_remove(struct spi_device *pdev)
++{
++ struct hx8369_display *hx8369_dev = pdev->dev.platform_data;
++
++ hx8369_dev->reset_on(1); /* let hx8369 in reset */
++ display_device_unregister(hx8369_dev->display_dev);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int hx8369_spi_suspend(struct spi_device *dev, pm_message_t state)
++{
++ return 0;
++}
++
++static int hx8369_spi_resume(struct spi_device *dev)
++{
++ return 0;
++}
++#else
++#define hx8369_suspend NULL
++#define hx8369_resume NULL
++#endif
++
++static void hx8369_spi_shutdown(struct spi_device *spi)
++{
++
++}
++
++static struct spi_driver hx8369_driver = {
++ .probe = hx8369_spi_probe,
++ .remove = hx8369_spi_remove,
++ .shutdown = hx8369_spi_shutdown,
++ .suspend = hx8369_spi_suspend,
++ .resume = hx8369_spi_resume,
++ .driver = {
++ .name = DRIVER_NAME,
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init hx8369_init(void)
++{
++ return spi_register_driver(&hx8369_driver);
++}
++
++static void __exit hx8369_exit(void)
++{
++ spi_unregister_driver(&hx8369_driver);
++}
++
++module_init(hx8369_init);
++module_exit(hx8369_exit);
++
++MODULE_AUTHOR("Fabien Marteau <fab...@ar...");
++MODULE_DESCRIPTION("HX8369 display Driver");
++MODULE_LICENSE("GPL");
++
+Index: linux-2.6.38.8/drivers/video/display/Kconfig
+===================================================================
+--- linux-2.6.38.8.orig/drivers/video/display/Kconfig 2011-12-08 09:39:26.000000000 +0100
++++ linux-2.6.38.8/drivers/video/display/Kconfig 2011-12-08 09:50:38.000000000 +0100
+@@ -5,6 +5,7 @@
+ menu "Display device support"
+
+ config DISPLAY_SUPPORT
++ default y
+ tristate "Display panel/monitor support"
+ ---help---
+ This framework adds support for low-level control of a display.
+@@ -21,4 +22,12 @@
+ comment "Display hardware drivers"
+ depends on DISPLAY_SUPPORT
+
++config HX8369_DISPLAY
++ tristate "HX8369 display driver"
++ default y
++ depends on DISPLAY_SUPPORT
++ ---help---
++ This driver allows you to control the contrast of
++ HX5116 based AMOLED screen.
++
+ endmenu
+Index: linux-2.6.38.8/drivers/video/display/Makefile
+===================================================================
+--- linux-2.6.38.8.orig/drivers/video/display/Makefile 2011-12-08 09:41:18.000000000 +0100
++++ linux-2.6.38.8/drivers/video/display/Makefile 2011-12-08 09:41:54.000000000 +0100
+@@ -3,4 +3,5 @@
+ display-objs := display-sysfs.o
+
+ obj-$(CONFIG_DISPLAY_SUPPORT) += display.o
++obj-$(CONFIG_HX8369_DISPLAY) += hx8369.o
+
+Index: linux-2.6.38.8/include/video/hx8369.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.38.8/include/video/hx8369.h 2011-12-15 09:35:21.000000000 +0100
+@@ -0,0 +1,110 @@
++/*
++ *
++ * HX8369 Single Chip Driver
++ *
++ * Copyright 2011-2012 Armadeus systems
++ * Authors:
++ * Fabien Marteau <fab...@ar...>
++ * Nicolas Colombain <nic...@ar...>
++ *
++ * http://www.armadeus.com/
++ *
++ * 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.
++ */
++
++#define HX8369_REG(x) (x)
++
++/***********************/
++/* Standards registers */
++/***********************/
++#define HX8369_NOP HX8369_REG(0x00)
++#define HX8369_SWRESET HX8369_REG(0x01)
++#define HX8369_RDNUMPE HX8369_REG(0x05)
++#define HX8369_RDRED HX8369_REG(0x06)
++#define HX8369_RDGREEN HX8369_REG(0x07)
++#define HX8369_RDBLUE HX8369_REG(0x08)
++#define HX8369_RDDPM HX8369_REG(0x0A)
++#define HX8369_RDDMADCTL HX8369_REG(0x0B)
++#define HX8369_RDDCOLMOD HX8369_REG(0x0C)
++#define HX8369_RDDIM HX8369_REG(0x0D)
++#define HX8369_RDDSM HX8369_REG(0x0E)
++#define HX8369_RDDSDR HX8369_REG(0x0F)
++
++#define HX8369_SLPIN HX8369_REG(0x10)
++#define HX8369_SLPOUT HX8369_REG(0x11)
++#define HX8369_PTLON HX8369_REG(0x12)
++#define HX8369_NORON HX8369_REG(0x13)
++#define HX8369_INVOFF HX8369_REG(0x20)
++#define HX8369_INVON HX8369_REG(0x21)
++#define HX8369_GAMSET HX8369_REG(0x26)
++#define HX8369_DISPOFF HX8369_REG(0x28)
++#define HX8369_DISPON HX8369_REG(0x29)
++#define HX8369_CASET HX8369_REG(0x2A)
++#define HX8369_PASET HX8369_REG(0x2B)
++#define HX8369_RAMWR HX8369_REG(0x2C)
++#define HX8369_RGBSET HX8369_REG(0x2D)
++#define HX8369_RAMRD HX8369_REG(0x2E)
++#define HX8369_PLTAR HX8369_REG(0x30)
++
++#define HX8369_VSCRDEF HX8369_REG(0x33)
++#define HX8369_TEOFF HX8369_REG(0x34)
++#define HX8369_TEON HX8369_REG(0x35)
++#define HX8369_MADCTL HX8369_REG(0x36)
++#define HX8369_VSCRSADD HX8369_REG(0x37)
++#define HX8369_IDMOFF HX8369_REG(0x38)
++#define HX8369_IDMON HX8369_REG(0x39)
++#define HX8369_COLMOD HX8369_REG(0x3A)
++#define HX8369_RAMWRCON HX8369_REG(0x3C)
++#define HX8369_RAMRDCON HX8369_REG(0x3E)
++#define HX8369_TESL HX8369_REG(0x44)
++#define HX8369_GETSCAN HX8369_REG(0x45)
++#define HX8369_WRDISBV HX8369_REG(0x51)
++#define HX8369_RDDISBV HX8369_REG(0x52)
++#define HX8369_WRCTRLD HX8369_REG(0x53)
++#define HX8369_RDCTRLD HX8369_REG(0x54)
++#define HX8369_WRCABC HX8369_REG(0x55)
++#define HX8369_RDCABC HX8369_REG(0x56)
++
++#define HX8369_WRCABCMB HX8369_REG(0x5E)
++#define HX8369_RDCABCMB HX8369_REG(0x5F)
++#define HX8369_RDABCSDR HX8369_REG(0x68)
++#define HX8369_RDID1 HX8369_REG(0xDA)
++#define HX8369_RDID2 HX8369_REG(0xDB)
++#define HX8369_RDID3 HX8369_REG(0xDC)
++#define HX8369_READ_DDB_START HX8369_REG(0xA1)
++#define HX8369_READ_DDB_CONTINUE HX8369_REG(0xA8)
++
++#define HX8369_SETOSC HX8369_REG(0xB0)
++#define HX8369_SETPOWE HX8369_REG(0xB1)
++#define HX8369_SETDISP HX8369_REG(0xB2)
++#define HX8369_SETRGBIF HX8369_REG(0xB3)
++#define HX8369_SETCYC HX8369_REG(0xB4)
++#define HX8369_SETVCOM HX8369_REG(0xB6)
++#define HX8369_SETEXTC HX8369_REG(0xB9)
++#define HX8369_SETMIPI HX8369_REG(0xBA)
++#define HX8369_SETOTP HX8369_REG(0xBB)
++#define HX8369_SETDGCLUT HX8369_REG(0xC1)
++#define HX8369_SETID HX8369_REG(0xC3)
++#define HX8369_SETPANEL HX8369_REG(0xCC)
++#define HX8369_SETGIP HX8369_REG(0xD5)
++
++#define HX8369_SETTPSNR HX8369_REX(0xD8)
++#define HX8369_SETGAMMA HX8369_REX(0xE0)
++#define HX8369_SETOTPKEY HX8369_REX(0xE9)
++#define HX8369_GETHXID HX8369_REX(0xF4)
++#define HX8369_SETCNCD_GETCNCD HX8369_REX(0xFD)
++#define HX8369_SET_READ_INDEX HX8369_REX(0xFE)
++#define HX8369_GETSPIREAD HX8369_REX(0xFF)
++
++
++/* platform data to pass configuration from lcd */
++struct hx8369_display {
++ struct display_device *display_dev;
++ struct spi_device *spi; /* spi bus */
++ void (*reset_on)(int); /* function that let hx8369 on reset */
++ int gcontrast_value; /* current contrast value */
++};
++
++
diff --git a/patches/linux/2.6.38/449-armadeus-add_pps51_baseboard.patch b/patches/linux/2.6.38/449-armadeus-add_pps51_baseboard.patch
new file mode 100644
index 0000000..0328dfe
--- /dev/null
+++ b/patches/linux/2.6.38/449-armadeus-add_pps51_baseboard.patch
@@ -0,0 +1,379 @@
+Add APF51_PPS baseboard support.
+
+Signed-off-by: Julien Boibessot <jul...@ar...>
+Signed-off-by: Fabien Marteau <fab...@ar...>
+
+Index: linux-2.6.38.8/arch/arm/mach-mx5/Kconfig
+===================================================================
+--- linux-2.6.38.8.orig/arch/arm/mach-mx5/Kconfig 2011-12-15 10:13:07.000000000 +0100
++++ linux-2.6.38.8/arch/arm/mach-mx5/Kconfig 2011-12-15 10:33:32.000000000 +0100
+@@ -197,6 +197,18 @@
+ This selects the APF51Dev as baseboard and adds board's specific
+ devices.
+
++config MACH_APF51_PPS
++ prompt "Armadeus systems APF51_PPS development board"
++ bool
++ select MACH_APF51_HAS_BASEBOARD
++ select IMX_HAVE_PLATFORM_IMX_IPUV3
++ select IMX_HAVE_PLATFORM_SPI_IMX
++ select IMX_HAVE_PLATFORM_SDHCI_ESDHC_IMX
++ select IMX_HAVE_PLATFORM_IMX_SSI
++ help
++ This selects the APF51_PPS as baseboard and adds board's specific
++ devices.
++
+ config MACH_APF51_PROTO
+ prompt "Armadeus systems APF51Proto development board"
+ bool
+Index: linux-2.6.38.8/arch/arm/mach-mx5/Makefile
+===================================================================
+--- linux-2.6.38.8.orig/arch/arm/mach-mx5/Makefile 2011-12-15 10:13:07.000000000 +0100
++++ linux-2.6.38.8/arch/arm/mach-mx5/Makefile 2011-12-15 10:33:32.000000000 +0100
+@@ -10,6 +10,7 @@
+ obj-$(CONFIG_CPU_FREQ_IMX) += cpu_op-mx51.o
+ obj-$(CONFIG_MACH_APF51) += board-apf51.o
+ obj-$(CONFIG_MACH_APF51_DEV) += apf51dev-baseboard.o
++obj-$(CONFIG_MACH_APF51_PPS) += apf51pps-baseboard.o
+ obj-$(CONFIG_MACH_APF51_PROTO) += apf51proto-baseboard.o
+ obj-$(CONFIG_MACH_MX51_BABBAGE) += board-mx51_babbage.o
+ obj-$(CONFIG_MACH_MX51_3DS) += board-mx51_3ds.o
+Index: linux-2.6.38.8/arch/arm/mach-mx5/apf51pps-baseboard.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.38.8/arch/arm/mach-mx5/apf51pps-baseboard.c 2011-12-15 13:48:19.000000000 +0100
+@@ -0,0 +1,334 @@
++ /*
++ * Support for APF51's PPS baseboard (APF51_PPS)
++ *
++ * Copyright (C) 2011 Armadeus systems <su...@ar...>
++ *
++ * Based on code which is:
++ * Copyright 2009-2010 Freescale Semiconductor, Inc. All Rights Reserved.
++ * Copyright (C) 2009-2010 Amit Kucheria <ami...@ca...>
++ *
++ * The code contained herein is licensed under the GNU General Public
++ * License. You may obtain a copy of the GNU General Public License
++ * Version 2 or later at the following locations:
++ *
++ * http://www.opensource.org/licenses/gpl-license.html
++ * http://www.gnu.org/copyleft/gpl.html
++ */
++
++#include <linux/gpio.h>
++#include <linux/platform_device.h>
++#include <linux/io.h>
++#include <linux/spi/spi.h>
++#include <linux/fb.h>
++#include <linux/mfd/imx-ipu-v3.h>
++#include <linux/delay.h>
++#include <mach/iomux-mx51.h>
++#include <mach/ipu-v3.h>
++#include <mach/i2c.h>
++#include <linux/can/platform/mcp251x.h>
++
++#include <linux/debugfs.h>
++#include <linux/seq_file.h>
++
++#include <video/hx8369.h>
++
++#include "devices-imx51.h"
++#include "devices.h"
++#include "cpu_op-mx51.h"
++
++#define APF51_GPIO_SPECIAL_PAD_CTRL (PAD_CTL_DSE_HIGH | PAD_CTL_PKE | PAD_CTL_SRE_FAST | PAD_CTL_PUE)
++
++#define APF51_SDHCI_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_DSE_MED | \
++ PAD_CTL_PUS_47K_UP | PAD_CTL_PUE | \
++ PAD_CTL_SRE_FAST | PAD_CTL_DVS)
++
++#define APF51_LCD_PAD_CTRL (PAD_CTL_SRE_SLOW | PAD_CTL_DSE_MED)
++
++static iomux_v3_cfg_t pps51_pads[] = {
++ /* SD1 */
++ (_MX51_PAD_SD1_CMD__SD1_CMD | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD1_CLK__SD1_CLK | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD1_DATA0__SD1_DATA0 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD1_DATA1__SD1_DATA1 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD1_DATA2__SD1_DATA2 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD1_DATA3__SD1_DATA3 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_EIM_CS4__GPIO2_29 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++ (_MX51_PAD_GPIO1_1__GPIO1_1 | MUX_PAD_CTRL(PAD_CTL_DSE_HIGH | PAD_CTL_PKE |
++ PAD_CTL_SRE_FAST | PAD_CTL_PUE | PAD_CTL_PUS_100K_DOWN)),
++
++ /* SD2 (WiFi) */
++ (_MX51_PAD_SD2_CMD__SD2_CMD | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD2_CLK__SD2_CLK | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD2_DATA0__SD2_DATA0 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD2_DATA1__SD2_DATA1 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD2_DATA2__SD2_DATA2 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++ (_MX51_PAD_SD2_DATA3__SD2_DATA3 | MUX_PAD_CTRL(APF51_SDHCI_PAD_CTRL)),
++
++ /* SD2 Detect */
++ (_MX51_PAD_AUD3_BB_CK__GPIO4_20 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++
++
++ (_MX51_PAD_CSPI1_SS1__GPIO4_25 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* WIFI_PWRDN# */
++ (_MX51_PAD_CSPI1_RDY__GPIO4_26 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* WIFI_RESET# */
++
++ /* UART3 (DEBUG) */
++ MX51_PAD_UART3_RXD__UART3_RXD,
++ MX51_PAD_UART3_TXD__UART3_TXD,
++ /* UART2 (Bluetooth) */
++ MX51_PAD_UART2_RXD__UART2_RXD,
++ MX51_PAD_UART2_TXD__UART2_TXD,
++ MX51_PAD_EIM_D25__UART2_CTS,
++ MX51_PAD_EIM_D26__UART2_RTS,
++
++ (_MX51_PAD_AUD3_BB_RXD__GPIO4_19 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* BT_RESET# */
++
++ /* UART1 */
++ MX51_PAD_UART1_RXD__UART1_RXD,
++ MX51_PAD_UART1_TXD__UART1_TXD,
++ MX51_PAD_UART1_RTS__UART1_RTS,
++ MX51_PAD_UART1_CTS__UART1_CTS,
++
++ /* eCSPI1 */
++ MX51_PAD_CSPI1_MISO__ECSPI1_MISO,
++ MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI,
++ MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK,
++ (_MX51_PAD_CSPI1_SS0__GPIO4_24 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++ (_MX51_PAD_CSPI1_SS1__GPIO4_25 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++
++ /* eCSPI2 */
++ MX51_PAD_NANDF_RB2__ECSPI2_SCLK,
++ MX51_PAD_NANDF_RB3__ECSPI2_MISO,
++ MX51_PAD_NANDF_D15__ECSPI2_MOSI,
++ (_MX51_PAD_NANDF_D12__GPIO3_28 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* SS1 */
++ (_MX51_PAD_NANDF_D13__GPIO3_27 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* SS2 */
++
++ /* Display */
++ (_MX51_PAD_DISP1_DAT0__DISP1_DAT0 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT1__DISP1_DAT1 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT2__DISP1_DAT2 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT3__DISP1_DAT3 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT4__DISP1_DAT4 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT5__DISP1_DAT5 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT6__DISP1_DAT6 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT7__DISP1_DAT7 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT8__DISP1_DAT8 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT9__DISP1_DAT9 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT10__DISP1_DAT10 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT11__DISP1_DAT11 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT12__DISP1_DAT12 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT13__DISP1_DAT13 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT14__DISP1_DAT14 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT15__DISP1_DAT15 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT16__DISP1_DAT16 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT17__DISP1_DAT17 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT18__DISP1_DAT18 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT19__DISP1_DAT19 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT20__DISP1_DAT20 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT21__DISP1_DAT21 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT22__DISP1_DAT22 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DISP1_DAT23__DISP1_DAT23 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)),
++ (_MX51_PAD_DI1_PIN2__DI1_PIN2 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)), /* HSYNC */
++ (_MX51_PAD_DI1_PIN3__DI1_PIN3 | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)), /* VSYNC */
++ (_MX51_PAD_DI1_D1_CS__DI1_D1_CS | MUX_PAD_CTRL(APF51_LCD_PAD_CTRL)), /* CONTRAST */
++
++ /* HDMI detect */
++ (_MX51_PAD_I2C1_DAT__GPIO4_17 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++
++ /* LEDs */
++ (_MX51_PAD_EIM_EB2__GPIO2_22 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* Red led */
++ (_MX51_PAD_EIM_EB3__GPIO2_23 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)), /* green led */
++
++ /* lan95000 resetn */
++ (_MX51_PAD_AUD3_BB_FS__GPIO4_21 | MUX_PAD_CTRL(APF51_GPIO_SPECIAL_PAD_CTRL)),
++
++};
++
++/* Serial ports */
++static struct imxuart_platform_data pps51_uart_pdata = {
++ .flags = IMXUART_HAVE_RTSCTS,
++};
++
++/* APF51Proto has a LCD connector for a 18 bits 800x480 Chimei TFT LCD */
++static struct fb_videomode pps51_modes[] = {
++ {
++ .name = "tft480800-hx8369",
++ .refresh = 60,
++ .xres = 480,
++ .yres = 800,
++ .pixclock = 30303, /* picoS */
++ .left_margin = 45, .right_margin = 98,
++ .upper_margin = 0, .lower_margin = 21,
++ .hsync_len = 64, .vsync_len = 4,
++ .sync = FB_SYNC_CLK_IDLE_EN,
++ .vmode = FB_VMODE_NONINTERLACED,
++ .flag = 0,
++ },
++};
++
++static struct ipuv3_fb_platform_data pps51_fb0_data = {
++ .interface_pix_fmt = IPU_PIX_FMT_RGB666,
++ .modes = pps51_modes,
++ .num_modes = ARRAY_SIZE(pps51_modes),
++ .display = 0,
++};
++
++static struct imx_ipuv3_platform_data pps51_ipu_data = {
++ .fb_head0_platform_data = &pps51_fb0_data,
++};
++
++/* ECSPI1 */
++#define PPS51_ECSPI1_SS0 IMX_GPIO_NR(4, 24)
++
++static int pps51_spi1_cs[] = {
++ PPS51_ECSPI1_SS0,
++};
++
++static const struct spi_imx_master pps51_spi1_pdata __initconst = {
++ .chipselect = pps51_spi1_cs,
++ .num_chipselect = ARRAY_SIZE(pps51_spi1_cs),
++};
++
++static void p0340_reset_on(int value){
++}
++
++static struct hx8369_display hx8369_display_config = {
++ .gcontrast_value = 32,
++ .reset_on = &p0340_reset_on,
++};
++
++static struct spi_board_info apf51dev_spi1_board_info[] __initdata = {
++ {
++ .modalias = "hx8369-display",
++ .max_speed_hz = 1000,
++ .bus_num = 0,
++ .chip_select = 0,
++ .mode = SPI_MODE_0,
++ .platform_data = &hx8369_display_config,
++ },
++};
++
++/* I2C2 */
++static struct i2c_board_info pps51_i2c2_devices[] __initdata = {
++ {
++ /* EDID */
++ I2C_BOARD_INFO("eeprom", 0x50),
++ },
++};
++
++/* SD card ports */
++#define ESDHC_CARD_DETECT (GPIO_PORTD | 20)
++static struct esdhc_platform_data edshc0_pdata = {
++ .no_sdio_irq = 1, /* Temporary ! (for Wi2Wi) */
++};
++
++static struct esdhc_platform_data edshc1_pdata = {
++ .cd_gpio = ESDHC_CARD_DETECT, /* card detect pin */
++};
++
++static int init_gpio(void)
++{
++#define WIFI_PWRDN (GPIO_PORTD | 25)
++#define WIFI_RESET (GPIO_PORTD | 26)
++#define BT_RESET (GPIO_PORTD | 19)
++#define HDMI_DETECT_GPIO (GPIO_PORTD | 17)
++
++#define RED_LED_GPIO (GPIO_PORTB | 22)
++#define GREEN_LED_GPIO (GPIO_PORTB | 23)
++
++#define LAN9500_RESETN (GPIO_PORTD | 21)
++
++ int ret;
++
++ /* LAN9500 */
++ ret = gpio_request(LAN9500_RESETN, "LAN9500_RESETN");
++ if (ret) {
++ pr_warn("failed to get LAN9500_RESETN GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_output(LAN9500_RESETN, 1);
++ gpio_set_value(LAN9500_RESETN, 1);
++
++
++ /* WIFI */
++ ret = gpio_request(WIFI_PWRDN, "WIFI");
++ if (ret) {
++ pr_warn("failed to get WIFI_PWRDN GPIO: %d\n", ret);
++ return ret;
++ }
++ ret = gpio_request(WIFI_RESET, "WIFI");
++ if (ret) {
++ pr_warn("failed to get WIFI_RESET GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_output(WIFI_PWRDN, 1);
++ udelay(1000);
++ gpio_direction_output(WIFI_RESET, 1);
++
++ /* BT */
++ ret = gpio_request(BT_RESET, "BT");
++ if (ret) {
++ pr_warn("failed to get BT_RESET GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_output(BT_RESET, 1);
++ gpio_set_value(BT_RESET, 1);
++
++ /* LEDs */
++ ret = gpio_request(RED_LED_GPIO, "RED_LED_GPIO");
++ if (ret) {
++ pr_warn("failed to get red LED GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_output(RED_LED_GPIO, 1);
++ gpio_free(RED_LED_GPIO);
++
++ ret = gpio_request(GREEN_LED_GPIO, "GREEN_LED_GPIO");
++ if (ret) {
++ pr_warn("failed to get red LED GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_output(GREEN_LED_GPIO, 1);
++ gpio_free(GREEN_LED_GPIO);
++
++ /* HDMI */
++ ret = gpio_request(HDMI_DETECT_GPIO, "HDMI_DETECT_GPIO");
++ if (ret) {
++ pr_warn("failed to get HDMI detect GPIO: %d\n", ret);
++ return ret;
++ }
++ gpio_direction_input(HDMI_DETECT_GPIO);
++
++ return 0;
++}
++
++void __init apf51_baseboard_init(void)
++{
++#if defined(CONFIG_CPU_FREQ_IMX)
++ get_cpu_op = mx51_get_cpu_op;
++#endif
++
++ mxc_iomux_v3_setup_multiple_pads(pps51_pads,
++ ARRAY_SIZE(pps51_pads));
++
++ imx51_add_imx_uart(1, &pps51_uart_pdata);
++
++ init_gpio();
++
++ /* SD card ports */
++ imx51_add_sdhci_esdhc_imx(0, &edshc0_pdata); /* wi2wi */
++ imx51_add_sdhci_esdhc_imx(1, &edshc1_pdata); /* sdcard*/
++
++ /* Register LCD on spi1 bus */
++ spi_register_board_info(apf51dev_spi1_board_info,
++ ARRAY_SIZE(apf51dev_spi1_board_info));
++ imx51_add_ecspi(0, &pps51_spi1_pdata);
++
++ /* I2C2 already initialized by APF51, so just register devices */
++ i2c_register_board_info(1, pps51_i2c2_devices,
++ ARRAY_SIZE(pps51_i2c2_devices));
++
++ imx51_add_ipuv3(&pps51_ipu_data);
++
++ printk("DEBUG: init debugfs\n");
++
++}
hooks/post-receive
--
armadeus
|