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 "IPFire 2.x development tree".
The branch, next has been updated via 983203fa03b187602dc9f3d7e6d2793af0b77133 (commit) via e1279cb36c29193bb2a505014924a4ae21c3e439 (commit) via 841193ead5980056d913346dca5ef5f2412db520 (commit) via 3bf58b324c24be0a43b15a55304958b6e02937fb (commit) via d006af40db7fdc48afe034d316aae045087a7569 (commit) from c59be1252d82439b2c6ea9a08a730dbf35950f3c (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 983203fa03b187602dc9f3d7e6d2793af0b77133 Author: Arne Fitzenreiter arne_f@ipfire.org Date: Sat Feb 15 17:50:00 2014 +0100
u-boot: limit videores to 800x600.
pandaboard has display problems on console with higher resolutions.
commit e1279cb36c29193bb2a505014924a4ae21c3e439 Author: Arne Fitzenreiter arne_f@ipfire.org Date: Sat Feb 15 17:49:17 2014 +0100
kernel: disable cpu-idle and debug_ll on arm-multiarch kernel.
commit 841193ead5980056d913346dca5ef5f2412db520 Merge: 3bf58b3 c59be12 Author: Arne Fitzenreiter arne_f@ipfire.org Date: Sat Feb 15 17:48:35 2014 +0100
Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next
commit 3bf58b324c24be0a43b15a55304958b6e02937fb Merge: d006af4 e3cbe60 Author: Arne Fitzenreiter arne_f@ipfire.org Date: Fri Feb 14 23:41:45 2014 +0100
Merge branch 'next' of ssh://git.ipfire.org/pub/git/ipfire-2.x into next
commit d006af40db7fdc48afe034d316aae045087a7569 Author: Arne Fitzenreiter arne_f@ipfire.org Date: Fri Feb 14 23:41:13 2014 +0100
kernel: add some omap/pandaboard patches.
-----------------------------------------------------------------------
Summary of changes: config/kernel/kernel.config.armv5tel-ipfire-multi | 34 +- config/u-boot/boot.scr | Bin 460 -> 453 bytes config/u-boot/boot.script | 2 +- lfs/linux | 36 +- ...wl-common-Add-default-power-configuration.patch | 88 ++++ ...1-omap3isp-Use-the-common-clock-framework.patch | 444 +++++++++++++++++++++ .../omap/3isp/0002-mt9m032-Fix-PLL-setup.patch | 91 +++++ ...03-mt9m032-Define-MT9M032_READ_MODE1-bits.patch | 55 +++ .../0004-mt9p031-Use-devm_-managed-helpers.patch | 62 +++ .../0005-mt9p031-Add-support-for-regulators.patch | 82 ++++ ...06-mt9p031-Use-the-common-clock-framework.patch | 110 +++++ ...b-add-Toshiba-LTA070B220F-800x480-support.patch | 30 ++ ...ght-Add-TLC59108-backlight-control-driver.patch | 217 ++++++++++ ...003-tlc59108-adjust-for-beagleboard-uLCD7.patch | 124 ++++++ .../omap/beagle/0004-zeroMAP-Open-your-eyes.patch | 31 ++ ...P-Beagle-use-TWL4030-generic-reset-script.patch | 29 ++ .../0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch | 28 ++ ...nsion-add-buddy-param-for-expansionboard-.patch | 63 +++ .../0002-Beagle-expansion-add-zippy.patch | 242 +++++++++++ .../0003-Beagle-expansion-add-zippy2.patch | 86 ++++ .../0004-Beagle-expansion-add-trainer.patch | 55 +++ ...agle-expansion-add-CircuitCo-ulcd-Support.patch | 285 +++++++++++++ .../expansion/0006-Beagle-expansion-add-wifi.patch | 180 +++++++++ .../0007-Beagle-expansion-add-beaglefpga.patch | 117 ++++++ .../0008-Beagle-expansion-add-spidev.patch | 35 ++ ...Beagle-expansion-add-Aptina-li5m03-camera.patch | 217 ++++++++++ ...gle-expansion-add-LSR-COM6L-Adapter-Board.patch | 123 ++++++ ...nsion-LSR-COM6L-Adapter-Board-also-initia.patch | 73 ++++ ...P-Beagle-expansion-extend-spidev-to-uart2.patch | 43 ++ .../panda/0001-panda-fix-wl12xx-regulator.patch | 27 ++ .../0002-ti-st-st-kim-fixing-firmware-path.patch | 36 ++ .../panda/0003-Panda-expansion-add-spidev.patch | 112 ++++++ ...andaES-disable-cpufreq-so-board-will-boot.patch | 38 ++ ...kpoint-Enable-debug-powerdown-only-if-sys.patch | 122 ++++++ ...gulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch | 39 ++ ...lator-twl-Remove-another-unused-variable-.patch | 34 ++ ...lator-twl-Remove-references-to-the-twl403.patch | 28 ++ ...lator-twl-Remove-references-to-32kHz-cloc.patch | 49 +++ .../panda/0011-panda-spidev-setup-pinmux.patch | 50 +++ ...MAP-DSS2-add-bootarg-for-selecting-svideo.patch | 78 ++++ .../sakoman/0002-video-add-timings-for-hd720.patch | 28 ++ ...cache-flush-management-symbols-when-MULTI.patch | 34 ++ 42 files changed, 3624 insertions(+), 33 deletions(-) create mode 100644 src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch create mode 100644 src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch create mode 100644 src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch create mode 100644 src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch create mode 100644 src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch create mode 100644 src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch create mode 100644 src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch create mode 100644 src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch create mode 100644 src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch create mode 100644 src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch create mode 100644 src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch create mode 100644 src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch create mode 100644 src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch create mode 100644 src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch create mode 100644 src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch create mode 100644 src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch create mode 100644 src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch create mode 100644 src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch create mode 100644 src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch create mode 100644 src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch create mode 100644 src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch create mode 100644 src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch create mode 100644 src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch create mode 100644 src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch create mode 100644 src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch create mode 100644 src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch create mode 100644 src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch
Difference in files: diff --git a/config/kernel/kernel.config.armv5tel-ipfire-multi b/config/kernel/kernel.config.armv5tel-ipfire-multi index 128742d..d35e569 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-multi +++ b/config/kernel/kernel.config.armv5tel-ipfire-multi @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 3.10.27-ipfire-multi Kernel Configuration +# Linux/arm 3.10.29-ipfire-multi Kernel Configuration # CONFIG_ARM=y CONFIG_MIGHT_HAVE_PCI=y @@ -649,7 +649,7 @@ CONFIG_GENERIC_CPUFREQ_CPU0=y CONFIG_ARM_IMX6Q_CPUFREQ=m # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set CONFIG_ARM_OMAP2PLUS_CPUFREQ=y -CONFIG_CPU_IDLE=y +# CONFIG_CPU_IDLE is not set CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y CONFIG_CPU_IDLE_GOV_LADDER=y CONFIG_CPU_IDLE_GOV_MENU=y @@ -3631,6 +3631,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_LM3639 is not set # CONFIG_BACKLIGHT_LP855X is not set # CONFIG_BACKLIGHT_PANDORA is not set +# CONFIG_BACKLIGHT_TLC59108 is not set
# # Console display driver support @@ -4926,35 +4927,10 @@ CONFIG_STRICT_DEVMEM=y CONFIG_ARM_UNWIND=y CONFIG_OLD_MCOUNT=y # CONFIG_DEBUG_USER is not set -CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_ZYNQ_UART0 is not set -# CONFIG_DEBUG_ZYNQ_UART1 is not set -# CONFIG_DEBUG_IMX51_UART is not set -# CONFIG_DEBUG_IMX53_UART is not set -# CONFIG_DEBUG_IMX6Q_UART is not set -CONFIG_DEBUG_OMAP2PLUS_UART=y -# CONFIG_DEBUG_VEXPRESS_UART0_DETECT is not set -# CONFIG_DEBUG_VEXPRESS_UART0_CA9 is not set -# CONFIG_DEBUG_VEXPRESS_UART0_RS1 is not set -# CONFIG_DEBUG_VT8500_UART0 is not set -# CONFIG_DEBUG_ICEDCC is not set -# CONFIG_DEBUG_SEMIHOSTING is not set +# CONFIG_DEBUG_LL is not set CONFIG_DEBUG_IMX_UART_PORT=1 -# CONFIG_DEBUG_OMAP2UART1 is not set -# CONFIG_DEBUG_OMAP2UART2 is not set -# CONFIG_DEBUG_OMAP2UART3 is not set -# CONFIG_DEBUG_OMAP3UART3 is not set -CONFIG_DEBUG_OMAP4UART3=y -# CONFIG_DEBUG_OMAP3UART4 is not set -# CONFIG_DEBUG_OMAP4UART4 is not set -# CONFIG_DEBUG_TI81XXUART1 is not set -# CONFIG_DEBUG_TI81XXUART2 is not set -# CONFIG_DEBUG_TI81XXUART3 is not set -# CONFIG_DEBUG_AM33XXUART1 is not set -# CONFIG_DEBUG_ZOOM_UART is not set -CONFIG_DEBUG_LL_INCLUDE="debug/omap2plus.S" +CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" -CONFIG_EARLY_PRINTK=y CONFIG_OC_ETM=y # CONFIG_PID_IN_CONTEXTIDR is not set
diff --git a/config/u-boot/boot.scr b/config/u-boot/boot.scr index 0d36a6b..672b152 100755 Binary files a/config/u-boot/boot.scr and b/config/u-boot/boot.scr differ diff --git a/config/u-boot/boot.script b/config/u-boot/boot.script index 49e6c9c..66d7628 100755 --- a/config/u-boot/boot.script +++ b/config/u-boot/boot.script @@ -1,7 +1,7 @@ fatload mmc 0:1 0x82000000 zImage-ipfire-multi fatload mmc 0:1 0x85000000 uInit-ipfire-multi #fatload mmc 0:1 ${fdtaddr} omap4-${board_name}.dtb -setenv bootargs vram=32M earlyprintk console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro +setenv bootargs video=800x600 console=tty1 rootwait smsc95xx.macaddr=$usbethaddr root=/dev/mmcblk0p3 ro # Pandaboard has serious Problems in dt mode with kernel 3.10.x #bootz 0x82000000 0x85000000 ${fdtaddr} bootz 0x82000000 0x85000000 diff --git a/lfs/linux b/lfs/linux index 2a7eb32..d460708 100644 --- a/lfs/linux +++ b/lfs/linux @@ -163,11 +163,41 @@ endif
ifeq "$(KCFG)" "-multi" cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.27-fs-exec-atomic64-operand-requires-impossible-reload.patch -# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0001-panda-wlan-fix.patch -# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-0002-panda-i2c.patch -# cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-panda-reboot.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10-smsc95xx-add_mac_addr_param.patch
+ # Patchset for Omap (beagle/panda). + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch + # Patchset for Wandboard. cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0001-imx6qdl-wandboard-dts-backport.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/kernel/wandboard/dts/0002-ARM-dts-imx6qdl-wandboard-add-gpio-lines-to-wandboar.patch diff --git a/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch new file mode 100644 index 0000000..d27ad54 --- /dev/null +++ b/src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch @@ -0,0 +1,88 @@ +From 2e908aeebd6804296e7d14a96de6be1e2de38e93 Mon Sep 17 00:00:00 2001 +From: Matthias Brugger matthias.bgg@gmail.com +Date: Wed, 23 Jan 2013 19:50:38 +0100 +Subject: [PATCH 2/2] omap2: twl-common: Add default power configuration + +This patch adds a generic power script configuration. +When rebooting an OMAP3530 at 125 MHz, the reboot hangs. +With the generic power script, TWL4030 will be reset +when a warm reset occures. This way the OMAP3530 does not +hang on reboot. + +Signed-off-by: Matthias Brugger matthias.bgg@gmail.com +--- + arch/arm/mach-omap2/twl-common.c | 38 ++++++++++++++++++++++++++++++++++++++ + arch/arm/mach-omap2/twl-common.h | 1 + + 2 files changed, 39 insertions(+) + +diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c +index e49b40b..f096beb 100644 +--- a/arch/arm/mach-omap2/twl-common.c ++++ b/arch/arm/mach-omap2/twl-common.c +@@ -120,6 +120,41 @@ static struct twl4030_audio_data omap3_audio_pdata = { + .codec = &omap3_codec, + }; + ++static struct twl4030_ins wrst_seq[] __initdata = { ++ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_OFF), 2}, ++ {MSG_SINGULAR(DEV_GRP_P1, 0xf, RES_STATE_WRST), 15}, ++ {MSG_SINGULAR(DEV_GRP_P1, 0x10, RES_STATE_WRST), 15}, ++ {MSG_SINGULAR(DEV_GRP_P1, 0x7, RES_STATE_WRST), 0x60}, ++ {MSG_SINGULAR(DEV_GRP_P1, 0x19, RES_STATE_ACTIVE), 2}, ++ {MSG_SINGULAR(DEV_GRP_NULL, 0x1b, RES_STATE_ACTIVE), 2}, ++}; ++ ++static struct twl4030_script wrst_script __initdata = { ++ .script = wrst_seq, ++ .size = ARRAY_SIZE(wrst_seq), ++ .flags = TWL4030_WRST_SCRIPT, ++}; ++ ++static struct twl4030_script *omap3_power_scripts[] __initdata = { ++ &wrst_script, ++}; ++ ++static struct twl4030_resconfig omap3_rconfig[] = { ++ { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3, .type = -1, ++ .type2 = -1 }, ++ { .resource = RES_VDD1, .devgroup = DEV_GRP_P1, .type = -1, ++ .type2 = -1 }, ++ { .resource = RES_VDD2, .devgroup = DEV_GRP_P1, .type = -1, ++ .type2 = -1 }, ++ { 0, 0}, ++}; ++ ++static struct twl4030_power_data omap3_power_pdata = { ++ .scripts = omap3_power_scripts, ++ .num = ARRAY_SIZE(omap3_power_scripts), ++ .resource_config = omap3_rconfig, ++}; ++ + static struct regulator_consumer_supply omap3_vdda_dac_supplies[] = { + REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"), + }; +@@ -224,6 +259,9 @@ void __init omap3_pmic_get_config(struct twl4030_platform_data *pmic_data, + if (pdata_flags & TWL_COMMON_PDATA_AUDIO && !pmic_data->audio) + pmic_data->audio = &omap3_audio_pdata; + ++ if (pdata_flags & TWL_COMMON_PDATA_POWER && !pmic_data->power) ++ pmic_data->power = &omap3_power_pdata; ++ + /* Common regulator configurations */ + if (regulators_flags & TWL_COMMON_REGULATOR_VDAC && !pmic_data->vdac) + pmic_data->vdac = &omap3_vdac_idata; +diff --git a/arch/arm/mach-omap2/twl-common.h b/arch/arm/mach-omap2/twl-common.h +index dcfbad5..dbeb905 100644 +--- a/arch/arm/mach-omap2/twl-common.h ++++ b/arch/arm/mach-omap2/twl-common.h +@@ -7,6 +7,7 @@ + #define TWL_COMMON_PDATA_BCI (1 << 1) + #define TWL_COMMON_PDATA_MADC (1 << 2) + #define TWL_COMMON_PDATA_AUDIO (1 << 3) ++#define TWL_COMMON_PDATA_POWER (1 << 4) + + /* Common LDO regulators for TWL4030/TWL6030 */ + #define TWL_COMMON_REGULATOR_VDAC (1 << 0) +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch new file mode 100644 index 0000000..a61d5b8 --- /dev/null +++ b/src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch @@ -0,0 +1,444 @@ +From 369b60c157f67a71a6f302ab9843ae2de1805a2a Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Mon, 22 Oct 2012 15:43:00 +0200 +Subject: [PATCH 1/6] omap3isp: Use the common clock framework + +Expose the two ISP external clocks XCLKA and XCLKB as common clocks for +subdev drivers. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +Acked-by: Mike Turquette mturquette@linaro.org +--- + drivers/media/platform/omap3isp/isp.c | 277 ++++++++++++++++++++++++--------- + drivers/media/platform/omap3isp/isp.h | 22 ++- + include/media/omap3isp.h | 10 +- + 3 files changed, 225 insertions(+), 84 deletions(-) + +diff --git a/drivers/media/platform/omap3isp/isp.c b/drivers/media/platform/omap3isp/isp.c +index 6e5ad8e..1d7dbd5 100644 +--- a/drivers/media/platform/omap3isp/isp.c ++++ b/drivers/media/platform/omap3isp/isp.c +@@ -55,6 +55,7 @@ + #include <asm/cacheflush.h> + + #include <linux/clk.h> ++#include <linux/clkdev.h> + #include <linux/delay.h> + #include <linux/device.h> + #include <linux/dma-mapping.h> +@@ -148,6 +149,201 @@ void omap3isp_flush(struct isp_device *isp) + isp_reg_readl(isp, OMAP3_ISP_IOMEM_MAIN, ISP_REVISION); + } + ++/* ----------------------------------------------------------------------------- ++ * XCLK ++ */ ++ ++#define to_isp_xclk(_hw) container_of(_hw, struct isp_xclk, hw) ++ ++static void isp_xclk_update(struct isp_xclk *xclk, u32 divider) ++{ ++ switch (xclk->id) { ++ case ISP_XCLK_A: ++ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, ++ ISPTCTRL_CTRL_DIVA_MASK, ++ divider << ISPTCTRL_CTRL_DIVA_SHIFT); ++ break; ++ case ISP_XCLK_B: ++ isp_reg_clr_set(xclk->isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, ++ ISPTCTRL_CTRL_DIVB_MASK, ++ divider << ISPTCTRL_CTRL_DIVB_SHIFT); ++ break; ++ } ++} ++ ++static int isp_xclk_prepare(struct clk_hw *hw) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ ++ omap3isp_get(xclk->isp); ++ ++ return 0; ++} ++ ++static void isp_xclk_unprepare(struct clk_hw *hw) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ ++ omap3isp_put(xclk->isp); ++} ++ ++static int isp_xclk_enable(struct clk_hw *hw) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ unsigned long flags; ++ ++ spin_lock_irqsave(&xclk->lock, flags); ++ isp_xclk_update(xclk, xclk->divider); ++ xclk->enabled = true; ++ spin_unlock_irqrestore(&xclk->lock, flags); ++ ++ return 0; ++} ++ ++static void isp_xclk_disable(struct clk_hw *hw) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ unsigned long flags; ++ ++ spin_lock_irqsave(&xclk->lock, flags); ++ isp_xclk_update(xclk, 0); ++ xclk->enabled = false; ++ spin_unlock_irqrestore(&xclk->lock, flags); ++} ++ ++static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw, ++ unsigned long parent_rate) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ ++ return parent_rate / xclk->divider; ++} ++ ++static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate) ++{ ++ u32 divider; ++ ++ if (*rate >= parent_rate) { ++ *rate = parent_rate; ++ return ISPTCTRL_CTRL_DIV_BYPASS; ++ } ++ ++ divider = DIV_ROUND_CLOSEST(parent_rate, *rate); ++ if (divider >= ISPTCTRL_CTRL_DIV_BYPASS) ++ divider = ISPTCTRL_CTRL_DIV_BYPASS - 1; ++ ++ *rate = parent_rate / divider; ++ return divider; ++} ++ ++static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate, ++ unsigned long *parent_rate) ++{ ++ isp_xclk_calc_divider(&rate, *parent_rate); ++ return rate; ++} ++ ++static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate, ++ unsigned long parent_rate) ++{ ++ struct isp_xclk *xclk = to_isp_xclk(hw); ++ unsigned long flags; ++ u32 divider; ++ ++ divider = isp_xclk_calc_divider(&rate, parent_rate); ++ ++ spin_lock_irqsave(&xclk->lock, flags); ++ ++ xclk->divider = divider; ++ if (xclk->enabled) ++ isp_xclk_update(xclk, divider); ++ ++ spin_unlock_irqrestore(&xclk->lock, flags); ++ ++ dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n", ++ __func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider); ++ return 0; ++} ++ ++static const struct clk_ops isp_xclk_ops = { ++ .prepare = isp_xclk_prepare, ++ .unprepare = isp_xclk_unprepare, ++ .enable = isp_xclk_enable, ++ .disable = isp_xclk_disable, ++ .recalc_rate = isp_xclk_recalc_rate, ++ .round_rate = isp_xclk_round_rate, ++ .set_rate = isp_xclk_set_rate, ++}; ++ ++static const char *isp_xclk_parent_name = "cam_mclk"; ++ ++static const struct clk_init_data isp_xclk_init_data = { ++ .name = "cam_xclk", ++ .ops = &isp_xclk_ops, ++ .parent_names = &isp_xclk_parent_name, ++ .num_parents = 1, ++}; ++ ++static int isp_xclk_init(struct isp_device *isp) ++{ ++ struct isp_platform_data *pdata = isp->pdata; ++ struct clk_init_data init; ++ unsigned int i; ++ ++ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) { ++ struct isp_xclk *xclk = &isp->xclks[i]; ++ struct clk *clk; ++ ++ xclk->isp = isp; ++ xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B; ++ xclk->divider = 1; ++ spin_lock_init(&xclk->lock); ++ ++ init.name = i == 0 ? "cam_xclka" : "cam_xclkb"; ++ init.ops = &isp_xclk_ops; ++ init.parent_names = &isp_xclk_parent_name; ++ init.num_parents = 1; ++ ++ xclk->hw.init = &init; ++ ++ clk = devm_clk_register(isp->dev, &xclk->hw); ++ if (IS_ERR(clk)) ++ return PTR_ERR(clk); ++ ++ if (pdata->xclks[i].con_id == NULL && ++ pdata->xclks[i].dev_id == NULL) ++ continue; ++ ++ xclk->lookup = kzalloc(sizeof(*xclk->lookup), GFP_KERNEL); ++ if (xclk->lookup == NULL) ++ return -ENOMEM; ++ ++ xclk->lookup->con_id = pdata->xclks[i].con_id; ++ xclk->lookup->dev_id = pdata->xclks[i].dev_id; ++ xclk->lookup->clk = clk; ++ ++ clkdev_add(xclk->lookup); ++ } ++ ++ return 0; ++} ++ ++static void isp_xclk_cleanup(struct isp_device *isp) ++{ ++ unsigned int i; ++ ++ for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) { ++ struct isp_xclk *xclk = &isp->xclks[i]; ++ ++ if (xclk->lookup) ++ clkdev_drop(xclk->lookup); ++ } ++} ++ ++/* ----------------------------------------------------------------------------- ++ * Interrupts ++ */ ++ + /* + * isp_enable_interrupts - Enable ISP interrupts. + * @isp: OMAP3 ISP device +@@ -180,80 +376,6 @@ static void isp_disable_interrupts(struct isp_device *isp) + isp_reg_writel(isp, 0, OMAP3_ISP_IOMEM_MAIN, ISP_IRQ0ENABLE); + } + +-/** +- * isp_set_xclk - Configures the specified cam_xclk to the desired frequency. +- * @isp: OMAP3 ISP device +- * @xclk: Desired frequency of the clock in Hz. 0 = stable low, 1 is stable high +- * @xclksel: XCLK to configure (0 = A, 1 = B). +- * +- * Configures the specified MCLK divisor in the ISP timing control register +- * (TCTRL_CTRL) to generate the desired xclk clock value. +- * +- * Divisor = cam_mclk_hz / xclk +- * +- * Returns the final frequency that is actually being generated +- **/ +-static u32 isp_set_xclk(struct isp_device *isp, u32 xclk, u8 xclksel) +-{ +- u32 divisor; +- u32 currentxclk; +- unsigned long mclk_hz; +- +- if (!omap3isp_get(isp)) +- return 0; +- +- mclk_hz = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]); +- +- if (xclk >= mclk_hz) { +- divisor = ISPTCTRL_CTRL_DIV_BYPASS; +- currentxclk = mclk_hz; +- } else if (xclk >= 2) { +- divisor = mclk_hz / xclk; +- if (divisor >= ISPTCTRL_CTRL_DIV_BYPASS) +- divisor = ISPTCTRL_CTRL_DIV_BYPASS - 1; +- currentxclk = mclk_hz / divisor; +- } else { +- divisor = xclk; +- currentxclk = 0; +- } +- +- switch (xclksel) { +- case ISP_XCLK_A: +- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, +- ISPTCTRL_CTRL_DIVA_MASK, +- divisor << ISPTCTRL_CTRL_DIVA_SHIFT); +- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclka set to %d Hz\n", +- currentxclk); +- break; +- case ISP_XCLK_B: +- isp_reg_clr_set(isp, OMAP3_ISP_IOMEM_MAIN, ISP_TCTRL_CTRL, +- ISPTCTRL_CTRL_DIVB_MASK, +- divisor << ISPTCTRL_CTRL_DIVB_SHIFT); +- dev_dbg(isp->dev, "isp_set_xclk(): cam_xclkb set to %d Hz\n", +- currentxclk); +- break; +- case ISP_XCLK_NONE: +- default: +- omap3isp_put(isp); +- dev_dbg(isp->dev, "ISP_ERR: isp_set_xclk(): Invalid requested " +- "xclk. Must be 0 (A) or 1 (B).\n"); +- return -EINVAL; +- } +- +- /* Do we go from stable whatever to clock? */ +- if (divisor >= 2 && isp->xclk_divisor[xclksel - 1] < 2) +- omap3isp_get(isp); +- /* Stopping the clock. */ +- else if (divisor < 2 && isp->xclk_divisor[xclksel - 1] >= 2) +- omap3isp_put(isp); +- +- isp->xclk_divisor[xclksel - 1] = divisor; +- +- omap3isp_put(isp); +- +- return currentxclk; +-} +- + /* + * isp_core_init - ISP core settings + * @isp: OMAP3 ISP device +@@ -1969,6 +2091,7 @@ static int isp_remove(struct platform_device *pdev) + + isp_unregister_entities(isp); + isp_cleanup_modules(isp); ++ isp_xclk_cleanup(isp); + + __omap3isp_get(isp, false); + iommu_detach_device(isp->domain, &pdev->dev); +@@ -2042,7 +2165,6 @@ static int isp_probe(struct platform_device *pdev) + } + + isp->autoidle = autoidle; +- isp->platform_cb.set_xclk = isp_set_xclk; + + mutex_init(&isp->isp_mutex); + spin_lock_init(&isp->stat_lock); +@@ -2093,6 +2215,10 @@ static int isp_probe(struct platform_device *pdev) + if (ret < 0) + goto error_isp; + ++ ret = isp_xclk_init(isp); ++ if (ret < 0) ++ goto error_isp; ++ + /* Memory resources */ + for (m = 0; m < ARRAY_SIZE(isp_res_maps); m++) + if (isp->revision == isp_res_maps[m].isp_rev) +@@ -2162,6 +2288,7 @@ detach_dev: + free_domain: + iommu_domain_free(isp->domain); + error_isp: ++ isp_xclk_cleanup(isp); + omap3isp_put(isp); + error: + platform_set_drvdata(pdev, NULL); +diff --git a/drivers/media/platform/omap3isp/isp.h b/drivers/media/platform/omap3isp/isp.h +index c77e1f2..cd3eff4 100644 +--- a/drivers/media/platform/omap3isp/isp.h ++++ b/drivers/media/platform/omap3isp/isp.h +@@ -29,6 +29,7 @@ + + #include <media/omap3isp.h> + #include <media/v4l2-device.h> ++#include <linux/clk-provider.h> + #include <linux/device.h> + #include <linux/io.h> + #include <linux/iommu.h> +@@ -125,8 +126,20 @@ struct isp_reg { + u32 val; + }; + +-struct isp_platform_callback { +- u32 (*set_xclk)(struct isp_device *isp, u32 xclk, u8 xclksel); ++enum isp_xclk_id { ++ ISP_XCLK_A, ++ ISP_XCLK_B, ++}; ++ ++struct isp_xclk { ++ struct isp_device *isp; ++ struct clk_hw hw; ++ struct clk_lookup *lookup; ++ enum isp_xclk_id id; ++ ++ spinlock_t lock; /* Protects enabled and divider */ ++ bool enabled; ++ unsigned int divider; + }; + + /* +@@ -149,6 +162,7 @@ struct isp_platform_callback { + * @cam_mclk: Pointer to camera functional clock structure. + * @csi2_fck: Pointer to camera CSI2 complexIO clock structure. + * @l3_ick: Pointer to OMAP3 L3 bus interface clock. ++ * @xclks: External clocks provided by the ISP + * @irq: Currently attached ISP ISR callbacks information structure. + * @isp_af: Pointer to current settings for ISP AutoFocus SCM. + * @isp_hist: Pointer to current settings for ISP Histogram SCM. +@@ -185,12 +199,12 @@ struct isp_device { + int has_context; + int ref_count; + unsigned int autoidle; +- u32 xclk_divisor[2]; /* Two clocks, a and b. */ + #define ISP_CLK_CAM_ICK 0 + #define ISP_CLK_CAM_MCLK 1 + #define ISP_CLK_CSI2_FCK 2 + #define ISP_CLK_L3_ICK 3 + struct clk *clock[4]; ++ struct isp_xclk xclks[2]; + + /* ISP modules */ + struct ispstat isp_af; +@@ -209,8 +223,6 @@ struct isp_device { + unsigned int subclk_resources; + + struct iommu_domain *domain; +- +- struct isp_platform_callback platform_cb; + }; + + #define v4l2_dev_to_isp_device(dev) \ +diff --git a/include/media/omap3isp.h b/include/media/omap3isp.h +index 9584269..c9d06d9 100644 +--- a/include/media/omap3isp.h ++++ b/include/media/omap3isp.h +@@ -29,10 +29,6 @@ + struct i2c_board_info; + struct isp_device; + +-#define ISP_XCLK_NONE 0 +-#define ISP_XCLK_A 1 +-#define ISP_XCLK_B 2 +- + enum isp_interface_type { + ISP_INTERFACE_PARALLEL, + ISP_INTERFACE_CSI2A_PHY2, +@@ -153,7 +149,13 @@ struct isp_v4l2_subdevs_group { + } bus; /* gcc < 4.6.0 chokes on anonymous union initializers */ + }; + ++struct isp_platform_xclk { ++ const char *dev_id; ++ const char *con_id; ++}; ++ + struct isp_platform_data { ++ struct isp_platform_xclk xclks[2]; + struct isp_v4l2_subdevs_group *subdevs; + void (*set_constraints)(struct isp_device *isp, bool enable); + }; +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch new file mode 100644 index 0000000..9d2b19c --- /dev/null +++ b/src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch @@ -0,0 +1,91 @@ +From 7c44c8a989ad01bd7cd02370d4ca4a742db218be Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Tue, 25 Sep 2012 15:46:34 +0200 +Subject: [PATCH 2/6] mt9m032: Fix PLL setup + +The MT9M032 PLL was assumed to be identical to the MT9P031 PLL but +differs significantly. Update the registers definitions and PLL limits +according to the datasheet. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +--- + drivers/media/i2c/mt9m032.c | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c +index f80c1d7e..30d755a 100644 +--- a/drivers/media/i2c/mt9m032.c ++++ b/drivers/media/i2c/mt9m032.c +@@ -87,7 +87,7 @@ + #define MT9M032_RESTART 0x0b + #define MT9M032_RESET 0x0d + #define MT9M032_PLL_CONFIG1 0x11 +-#define MT9M032_PLL_CONFIG1_OUTDIV_MASK 0x3f ++#define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f + #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8 + #define MT9M032_READ_MODE1 0x1e + #define MT9M032_READ_MODE2 0x20 +@@ -106,6 +106,8 @@ + #define MT9M032_GAIN_AMUL_SHIFT 6 + #define MT9M032_GAIN_ANALOG_MASK 0x3f + #define MT9M032_FORMATTER1 0x9e ++#define MT9M032_FORMATTER1_PLL_P1_6 (1 << 8) ++#define MT9M032_FORMATTER1_PARALLEL (1 << 12) + #define MT9M032_FORMATTER2 0x9f + #define MT9M032_FORMATTER2_DOUT_EN 0x1000 + #define MT9M032_FORMATTER2_PIXCLK_EN 0x2000 +@@ -121,8 +123,6 @@ + #define MT9P031_PLL_CONTROL_PWROFF 0x0050 + #define MT9P031_PLL_CONTROL_PWRON 0x0051 + #define MT9P031_PLL_CONTROL_USEPLL 0x0052 +-#define MT9P031_PLL_CONFIG2 0x11 +-#define MT9P031_PLL_CONFIG2_P1_DIV_MASK 0x1f + + struct mt9m032 { + struct v4l2_subdev subdev; +@@ -255,13 +255,14 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) + .n_max = 64, + .m_min = 16, + .m_max = 255, +- .p1_min = 1, +- .p1_max = 128, ++ .p1_min = 6, ++ .p1_max = 7, + }; + + struct i2c_client *client = v4l2_get_subdevdata(&sensor->subdev); + struct mt9m032_platform_data *pdata = sensor->pdata; + struct aptina_pll pll; ++ u16 reg_val; + int ret; + + pll.ext_clock = pdata->ext_clock; +@@ -274,18 +275,19 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) + sensor->pix_clock = pdata->pix_clock; + + ret = mt9m032_write(client, MT9M032_PLL_CONFIG1, +- (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) +- | (pll.p1 - 1)); +- if (!ret) +- ret = mt9m032_write(client, MT9P031_PLL_CONFIG2, pll.n - 1); ++ (pll.m << MT9M032_PLL_CONFIG1_MUL_SHIFT) | ++ ((pll.n - 1) & MT9M032_PLL_CONFIG1_PREDIV_MASK)); + if (!ret) + ret = mt9m032_write(client, MT9P031_PLL_CONTROL, + MT9P031_PLL_CONTROL_PWRON | + MT9P031_PLL_CONTROL_USEPLL); + if (!ret) /* more reserved, Continuous, Master Mode */ + ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006); +- if (!ret) /* Set 14-bit mode, select 7 divider */ +- ret = mt9m032_write(client, MT9M032_FORMATTER1, 0x111e); ++ if (!ret) { ++ reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0) ++ | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */ ++ ret = mt9m032_write(client, MT9M032_FORMATTER1, reg_val); ++ } + + return ret; + } +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch new file mode 100644 index 0000000..c80e876 --- /dev/null +++ b/src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch @@ -0,0 +1,55 @@ +From 1115becbb4875d62abb10f94a9510c81f376606f Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Wed, 26 Sep 2012 10:54:17 +0200 +Subject: [PATCH 3/6] mt9m032: Define MT9M032_READ_MODE1 bits + +Replace hardcoded values with #define's. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +--- + drivers/media/i2c/mt9m032.c | 22 +++++++++++++++++++++- + 1 file changed, 21 insertions(+), 1 deletion(-) + +diff --git a/drivers/media/i2c/mt9m032.c b/drivers/media/i2c/mt9m032.c +index 30d755a..de150d3 100644 +--- a/drivers/media/i2c/mt9m032.c ++++ b/drivers/media/i2c/mt9m032.c +@@ -90,6 +90,24 @@ + #define MT9M032_PLL_CONFIG1_PREDIV_MASK 0x3f + #define MT9M032_PLL_CONFIG1_MUL_SHIFT 8 + #define MT9M032_READ_MODE1 0x1e ++#define MT9M032_READ_MODE1_OUTPUT_BAD_FRAMES (1 << 13) ++#define MT9M032_READ_MODE1_MAINTAIN_FRAME_RATE (1 << 12) ++#define MT9M032_READ_MODE1_XOR_LINE_VALID (1 << 11) ++#define MT9M032_READ_MODE1_CONT_LINE_VALID (1 << 10) ++#define MT9M032_READ_MODE1_INVERT_TRIGGER (1 << 9) ++#define MT9M032_READ_MODE1_SNAPSHOT (1 << 8) ++#define MT9M032_READ_MODE1_GLOBAL_RESET (1 << 7) ++#define MT9M032_READ_MODE1_BULB_EXPOSURE (1 << 6) ++#define MT9M032_READ_MODE1_INVERT_STROBE (1 << 5) ++#define MT9M032_READ_MODE1_STROBE_ENABLE (1 << 4) ++#define MT9M032_READ_MODE1_STROBE_START_TRIG1 (0 << 2) ++#define MT9M032_READ_MODE1_STROBE_START_EXP (1 << 2) ++#define MT9M032_READ_MODE1_STROBE_START_SHUTTER (2 << 2) ++#define MT9M032_READ_MODE1_STROBE_START_TRIG2 (3 << 2) ++#define MT9M032_READ_MODE1_STROBE_END_TRIG1 (0 << 0) ++#define MT9M032_READ_MODE1_STROBE_END_EXP (1 << 0) ++#define MT9M032_READ_MODE1_STROBE_END_SHUTTER (2 << 0) ++#define MT9M032_READ_MODE1_STROBE_END_TRIG2 (3 << 0) + #define MT9M032_READ_MODE2 0x20 + #define MT9M032_READ_MODE2_VFLIP_SHIFT 15 + #define MT9M032_READ_MODE2_HFLIP_SHIFT 14 +@@ -282,7 +300,9 @@ static int mt9m032_setup_pll(struct mt9m032 *sensor) + MT9P031_PLL_CONTROL_PWRON | + MT9P031_PLL_CONTROL_USEPLL); + if (!ret) /* more reserved, Continuous, Master Mode */ +- ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8006); ++ ret = mt9m032_write(client, MT9M032_READ_MODE1, 0x8000 | ++ MT9M032_READ_MODE1_STROBE_START_EXP | ++ MT9M032_READ_MODE1_STROBE_END_SHUTTER); + if (!ret) { + reg_val = (pll.p1 == 6 ? MT9M032_FORMATTER1_PLL_P1_6 : 0) + | MT9M032_FORMATTER1_PARALLEL | 0x001e; /* 14-bit */ +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch new file mode 100644 index 0000000..bcc4360 --- /dev/null +++ b/src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch @@ -0,0 +1,62 @@ +From d3f188f38eaa34acf6375d5d88fe27971aae1170 Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Fri, 21 Dec 2012 20:34:06 +0100 +Subject: [PATCH 4/6] mt9p031: Use devm_* managed helpers + +Replace kzalloc and gpio_request_one by their managed equivalents. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +--- + drivers/media/i2c/mt9p031.c | 13 +++---------- + 1 file changed, 3 insertions(+), 10 deletions(-) + +diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c +index e328332..e0bad59 100644 +--- a/drivers/media/i2c/mt9p031.c ++++ b/drivers/media/i2c/mt9p031.c +@@ -927,7 +927,7 @@ static int mt9p031_probe(struct i2c_client *client, + return -EIO; + } + +- mt9p031 = kzalloc(sizeof(*mt9p031), GFP_KERNEL); ++ mt9p031 = devm_kzalloc(&client->dev, sizeof(*mt9p031), GFP_KERNEL); + if (mt9p031 == NULL) + return -ENOMEM; + +@@ -1001,8 +1001,8 @@ static int mt9p031_probe(struct i2c_client *client, + mt9p031->format.colorspace = V4L2_COLORSPACE_SRGB; + + if (pdata->reset != -1) { +- ret = gpio_request_one(pdata->reset, GPIOF_OUT_INIT_LOW, +- "mt9p031_rst"); ++ ret = devm_gpio_request_one(&client->dev, pdata->reset, ++ GPIOF_OUT_INIT_LOW, "mt9p031_rst"); + if (ret < 0) + goto done; + +@@ -1013,12 +1013,8 @@ static int mt9p031_probe(struct i2c_client *client, + + done: + if (ret < 0) { +- if (mt9p031->reset != -1) +- gpio_free(mt9p031->reset); +- + v4l2_ctrl_handler_free(&mt9p031->ctrls); + media_entity_cleanup(&mt9p031->subdev.entity); +- kfree(mt9p031); + } + + return ret; +@@ -1032,9 +1028,6 @@ static int mt9p031_remove(struct i2c_client *client) + v4l2_ctrl_handler_free(&mt9p031->ctrls); + v4l2_device_unregister_subdev(subdev); + media_entity_cleanup(&subdev->entity); +- if (mt9p031->reset != -1) +- gpio_free(mt9p031->reset); +- kfree(mt9p031); + + return 0; + } +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch new file mode 100644 index 0000000..57c80fd --- /dev/null +++ b/src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch @@ -0,0 +1,82 @@ +From 9ff2bc0c9458f0eecde6d9b52a899fd2bb1dd3a3 Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Tue, 8 May 2012 15:10:36 +0200 +Subject: [PATCH 5/6] mt9p031: Add support for regulators + +Enable the regulators when powering the sensor up, and disable them when +powering it down. + +The regulators are mandatory. Boards that don't allow controlling the +sensor power lines must provide fixed voltage regulators. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +--- + drivers/media/i2c/mt9p031.c | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c +index e0bad59..ecf4492 100644 +--- a/drivers/media/i2c/mt9p031.c ++++ b/drivers/media/i2c/mt9p031.c +@@ -19,6 +19,7 @@ + #include <linux/i2c.h> + #include <linux/log2.h> + #include <linux/pm.h> ++#include <linux/regulator/consumer.h> + #include <linux/slab.h> + #include <linux/videodev2.h> + +@@ -121,6 +122,10 @@ struct mt9p031 { + struct mutex power_lock; /* lock to protect power_count */ + int power_count; + ++ struct regulator *vaa; ++ struct regulator *vdd; ++ struct regulator *vdd_io; ++ + enum mt9p031_model model; + struct aptina_pll pll; + int reset; +@@ -264,6 +269,11 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031) + usleep_range(1000, 2000); + } + ++ /* Bring up the supplies */ ++ regulator_enable(mt9p031->vdd); ++ regulator_enable(mt9p031->vdd_io); ++ regulator_enable(mt9p031->vaa); ++ + /* Emable clock */ + if (mt9p031->pdata->set_xclk) + mt9p031->pdata->set_xclk(&mt9p031->subdev, +@@ -285,6 +295,10 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031) + usleep_range(1000, 2000); + } + ++ regulator_disable(mt9p031->vaa); ++ regulator_disable(mt9p031->vdd_io); ++ regulator_disable(mt9p031->vdd); ++ + if (mt9p031->pdata->set_xclk) + mt9p031->pdata->set_xclk(&mt9p031->subdev, 0); + } +@@ -937,6 +951,16 @@ static int mt9p031_probe(struct i2c_client *client, + mt9p031->model = did->driver_data; + mt9p031->reset = -1; + ++ mt9p031->vaa = devm_regulator_get(&client->dev, "vaa"); ++ mt9p031->vdd = devm_regulator_get(&client->dev, "vdd"); ++ mt9p031->vdd_io = devm_regulator_get(&client->dev, "vdd_io"); ++ ++ if (IS_ERR(mt9p031->vaa) || IS_ERR(mt9p031->vdd) || ++ IS_ERR(mt9p031->vdd_io)) { ++ dev_err(&client->dev, "Unable to get regulators\n"); ++ return -ENODEV; ++ } ++ + v4l2_ctrl_handler_init(&mt9p031->ctrls, ARRAY_SIZE(mt9p031_ctrls) + 6); + + v4l2_ctrl_new_std(&mt9p031->ctrls, &mt9p031_ctrl_ops, +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch new file mode 100644 index 0000000..fc8d583 --- /dev/null +++ b/src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch @@ -0,0 +1,110 @@ +From 6cd62f5ae305142c0490e80caa04f99f00029b68 Mon Sep 17 00:00:00 2001 +From: Laurent Pinchart laurent.pinchart@ideasonboard.com +Date: Fri, 21 Dec 2012 20:11:55 +0100 +Subject: [PATCH 6/6] mt9p031: Use the common clock framework + +Configure the device external clock using the common clock framework +instead of a board code callback function. + +Signed-off-by: Laurent Pinchart laurent.pinchart@ideasonboard.com +Acked-by: Sakari Ailus sakari.ailus@iki.fi +--- + drivers/media/i2c/mt9p031.c | 21 ++++++++++++++------- + include/media/mt9p031.h | 2 -- + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/drivers/media/i2c/mt9p031.c b/drivers/media/i2c/mt9p031.c +index ecf4492..28cf95b 100644 +--- a/drivers/media/i2c/mt9p031.c ++++ b/drivers/media/i2c/mt9p031.c +@@ -12,6 +12,7 @@ + * published by the Free Software Foundation. + */ + ++#include <linux/clk.h> + #include <linux/delay.h> + #include <linux/device.h> + #include <linux/gpio.h> +@@ -122,6 +123,7 @@ struct mt9p031 { + struct mutex power_lock; /* lock to protect power_count */ + int power_count; + ++ struct clk *clk; + struct regulator *vaa; + struct regulator *vdd; + struct regulator *vdd_io; +@@ -200,7 +202,7 @@ static int mt9p031_reset(struct mt9p031 *mt9p031) + 0); + } + +-static int mt9p031_pll_setup(struct mt9p031 *mt9p031) ++static int mt9p031_clk_setup(struct mt9p031 *mt9p031) + { + static const struct aptina_pll_limits limits = { + .ext_clock_min = 6000000, +@@ -221,6 +223,12 @@ static int mt9p031_pll_setup(struct mt9p031 *mt9p031) + struct i2c_client *client = v4l2_get_subdevdata(&mt9p031->subdev); + struct mt9p031_platform_data *pdata = mt9p031->pdata; + ++ mt9p031->clk = devm_clk_get(&client->dev, NULL); ++ if (IS_ERR(mt9p031->clk)) ++ return PTR_ERR(mt9p031->clk); ++ ++ clk_set_rate(mt9p031->clk, pdata->ext_freq); ++ + mt9p031->pll.ext_clock = pdata->ext_freq; + mt9p031->pll.pix_clock = pdata->target_freq; + +@@ -275,9 +283,8 @@ static int mt9p031_power_on(struct mt9p031 *mt9p031) + regulator_enable(mt9p031->vaa); + + /* Emable clock */ +- if (mt9p031->pdata->set_xclk) +- mt9p031->pdata->set_xclk(&mt9p031->subdev, +- mt9p031->pdata->ext_freq); ++ if (mt9p031->clk) ++ clk_prepare_enable(mt9p031->clk); + + /* Now RESET_BAR must be high */ + if (mt9p031->reset != -1) { +@@ -299,8 +306,8 @@ static void mt9p031_power_off(struct mt9p031 *mt9p031) + regulator_disable(mt9p031->vdd_io); + regulator_disable(mt9p031->vdd); + +- if (mt9p031->pdata->set_xclk) +- mt9p031->pdata->set_xclk(&mt9p031->subdev, 0); ++ if (mt9p031->clk) ++ clk_disable_unprepare(mt9p031->clk); + } + + static int __mt9p031_set_power(struct mt9p031 *mt9p031, bool on) +@@ -1033,7 +1040,7 @@ static int mt9p031_probe(struct i2c_client *client, + mt9p031->reset = pdata->reset; + } + +- ret = mt9p031_pll_setup(mt9p031); ++ ret = mt9p031_clk_setup(mt9p031); + + done: + if (ret < 0) { +diff --git a/include/media/mt9p031.h b/include/media/mt9p031.h +index 0c97b19..b1e63f2 100644 +--- a/include/media/mt9p031.h ++++ b/include/media/mt9p031.h +@@ -5,13 +5,11 @@ struct v4l2_subdev; + + /* + * struct mt9p031_platform_data - MT9P031 platform data +- * @set_xclk: Clock frequency set callback + * @reset: Chip reset GPIO (set to -1 if not used) + * @ext_freq: Input clock frequency + * @target_freq: Pixel clock frequency + */ + struct mt9p031_platform_data { +- int (*set_xclk)(struct v4l2_subdev *subdev, int hz); + int reset; + int ext_freq; + int target_freq; +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch new file mode 100644 index 0000000..34d6034 --- /dev/null +++ b/src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch @@ -0,0 +1,30 @@ +From 6ac98647956cbff190954b4cac6bd71fdbb8647b Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Wed, 23 Mar 2011 08:37:54 -0500 +Subject: [PATCH 1/5] meego: modedb add Toshiba LTA070B220F 800x480 support + + from http://wiki.meego.com/ARM/Meego_on_Beagleboard_from_scratch + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/video/modedb.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c +index 5b686de..69ad1ec 100644 +--- a/drivers/video/modedb.c ++++ b/drivers/video/modedb.c +@@ -293,6 +293,10 @@ static const struct fb_videomode modedb[] = { + /* 864x480 @ 60 Hz, 35.15 kHz hsync */ + { NULL, 60, 864, 480, 27777, 1, 1, 1, 1, 0, 0, + 0, FB_VMODE_NONINTERLACED }, ++ ++ /* 800x480 @ 60 Hz, Toshiba LTA070B220F 7 inch LCD */ ++ { NULL, 60, 800, 480, 32787, 48, 80, 33, 31, 32, 2, ++ FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED }, + }; + + #ifdef CONFIG_FB_MODE_HELPERS +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch new file mode 100644 index 0000000..ce4df82 --- /dev/null +++ b/src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch @@ -0,0 +1,217 @@ +From e989473bea15beef8d480b822a619e7b8fca860c Mon Sep 17 00:00:00 2001 +From: "Manjunathappa, Prakash" prakash.pm@ti.com +Date: Mon, 1 Aug 2011 18:25:11 +0530 +Subject: [PATCH 2/5] backlight: Add TLC59108 backlight control driver + +This patch adds support for I2C configurable TLC59108 backlight +control driver. + +Signed-off-by: Manjunathappa, Prakash prakash.pm@ti.com +Signed-off-by: Vaibhav Hiremath hvaibhav@ti.com +--- + drivers/video/backlight/Kconfig | 8 ++ + drivers/video/backlight/Makefile | 1 + + drivers/video/backlight/tlc59108.c | 160 ++++++++++++++++++++++++++++++++++++ + 3 files changed, 169 insertions(+) + create mode 100644 drivers/video/backlight/tlc59108.c + +diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig +index db10d01..04a2275 100644 +--- a/drivers/video/backlight/Kconfig ++++ b/drivers/video/backlight/Kconfig +@@ -418,6 +418,14 @@ config BACKLIGHT_AS3711 + If you have an Austrian Microsystems AS3711 say Y to enable the + backlight driver. + ++config BACKLIGHT_TLC59108 ++ tristate "TLC59108 LCD Backlight Driver" ++ depends on I2C && BACKLIGHT_CLASS_DEVICE ++ default n ++ help ++ If you have an LCD Panel with backlight control via TLC59108, ++ say Y to enable its LCD control driver. ++ + endif # BACKLIGHT_CLASS_DEVICE + + endif # BACKLIGHT_LCD_SUPPORT +diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile +index 96c4d62..3687852 100644 +--- a/drivers/video/backlight/Makefile ++++ b/drivers/video/backlight/Makefile +@@ -41,6 +41,7 @@ obj-$(CONFIG_BACKLIGHT_LP855X) += lp855x_bl.o + obj-$(CONFIG_BACKLIGHT_LP8788) += lp8788_bl.o + obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o + obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o ++obj-$(CONFIG_BACKLIGHT_TLC59108) += tlc59108.o + obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o + obj-$(CONFIG_BACKLIGHT_PANDORA) += pandora_bl.o + obj-$(CONFIG_BACKLIGHT_PCF50633) += pcf50633-backlight.o +diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c +new file mode 100644 +index 0000000..4f4ea34 +--- /dev/null ++++ b/drivers/video/backlight/tlc59108.c +@@ -0,0 +1,160 @@ ++/* ++ * ti81xxhdmi_tlc59108.c ++ * ++ * Copyright (C) 2011 Texas Instruments ++ * Author: Senthil Natarajan ++ * ++ * tlc59108 HDMI Driver ++ * ++ * 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. ++ * ++ * This program is distributed in the hope that it will be useful, but WITHOUT ++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for ++ * more details. ++ * ++ * You should have received a copy of the GNU General Public License along with ++ * this program. If not, see http://www.gnu.org/licenses/. ++ * History: ++ * ++ * Senthil Natarajansenthil.n@ti.com July 2011 I2C driver for tlc59108 ++ * backlight control ++ */ ++ ++#include <linux/i2c.h> ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/backlight.h> ++#include <linux/fb.h> ++ ++#define tlc59108_MODULE_NAME "tlc59108" ++#define TLC59108_MODE1 0x00 ++#define TLC59108_PWM2 0x04 ++#define TLC59108_LEDOUT0 0x0c ++#define TLC59108_LEDOUT1 0x0d ++#define TLC59108_MAX_BRIGHTNESS 0xFF ++ ++struct tlc59108_bl { ++ struct i2c_client *client; ++ struct backlight_device *bl; ++}; ++ ++static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness) ++{ ++ /* Set Mode1 Register */ ++ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); ++ ++ /* Set LEDOUT0 Register */ ++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21); ++ ++ /* Set Backlight Duty Cycle*/ ++ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, ++ brightness & 0xff); ++} ++ ++static int tlc59108_bl_get_brightness(struct backlight_device *dev) ++{ ++ struct backlight_properties *props = &dev->props; ++ ++ return props->brightness; ++} ++ ++static int tlc59108_bl_update_status(struct backlight_device *dev) ++{ ++ struct backlight_properties *props = &dev->props; ++ struct tlc59108_bl *data = dev_get_drvdata(&dev->dev); ++ int brightness = props->brightness; ++ ++ tlc59108_bl_set_backlight(data, brightness); ++ ++ return 0; ++} ++ ++static const struct backlight_ops bl_ops = { ++ .get_brightness = tlc59108_bl_get_brightness, ++ .update_status = tlc59108_bl_update_status, ++}; ++ ++static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) ++{ ++ struct backlight_properties props; ++ struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl), ++ GFP_KERNEL); ++ int ret = 0; ++ ++ if (!data) ++ return -ENOMEM; ++ ++ i2c_set_clientdata(c, data); ++ data->client = c; ++ ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = TLC59108_MAX_BRIGHTNESS; ++ props.type = BACKLIGHT_RAW; ++ data->bl = backlight_device_register("tlc59108-bl", &c->dev, data, ++ &bl_ops, &props); ++ if (IS_ERR(data->bl)) { ++ ret = PTR_ERR(data->bl); ++ goto err_reg; ++ } ++ ++ data->bl->props.brightness = TLC59108_MAX_BRIGHTNESS; ++ ++ backlight_update_status(data->bl); ++ ++ return 0; ++ ++err_reg: ++ data->bl = NULL; ++ kfree(data); ++ return ret; ++} ++ ++static int tlc59108_remove(struct i2c_client *c) ++{ ++ struct tlc59108_bl *data = i2c_get_clientdata(c); ++ ++ backlight_device_unregister(data->bl); ++ data->bl = NULL; ++ ++ kfree(data); ++ ++ return 0; ++} ++ ++/* I2C Device ID table */ ++static const struct i2c_device_id tlc59108_id[] = { ++ { "tlc59108", 0 }, ++ { } ++}; ++MODULE_DEVICE_TABLE(i2c, tlc59108_id); ++ ++/* I2C driver data */ ++static struct i2c_driver tlc59108_driver = { ++ .driver = { ++ .owner = THIS_MODULE, ++ .name = tlc59108_MODULE_NAME, ++ }, ++ .probe = tlc59108_probe, ++ .remove = tlc59108_remove, ++ .id_table = tlc59108_id, ++}; ++ ++static int __init tlc59108_init(void) ++{ ++ return i2c_add_driver(&tlc59108_driver); ++} ++ ++static void __exit tlc59108_exit(void) ++{ ++ i2c_del_driver(&tlc59108_driver); ++} ++ ++module_init(tlc59108_init); ++module_exit(tlc59108_exit); ++ ++MODULE_DESCRIPTION("LCD/Backlight control for TLC59108"); ++MODULE_AUTHOR("Senthil Natarajan senthil.n@ti.com"); ++MODULE_LICENSE("GPL v2"); +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch new file mode 100644 index 0000000..5c9659b --- /dev/null +++ b/src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch @@ -0,0 +1,124 @@ +From 40cbddde06a9f0e1845810b904502f922fc3288f Mon Sep 17 00:00:00 2001 +From: Koen Kooi koen@dominion.thruhere.net +Date: Fri, 27 Apr 2012 21:30:00 +0200 +Subject: [PATCH 3/5] tlc59108: adjust for beagleboard+uLCD7 + +Signed-off-by: Koen Kooi koen@dominion.thruhere.net +--- + drivers/video/backlight/tlc59108.c | 46 ++++++++++++++++++++++++----------- + 1 files changed, 31 insertions(+), 15 deletions(-) + +diff --git a/drivers/video/backlight/tlc59108.c b/drivers/video/backlight/tlc59108.c +index 4f4ea34..40a21e7 100644 +--- a/drivers/video/backlight/tlc59108.c ++++ b/drivers/video/backlight/tlc59108.c +@@ -29,9 +29,16 @@ + #include <linux/backlight.h> + #include <linux/fb.h> + +-#define tlc59108_MODULE_NAME "tlc59108" + #define TLC59108_MODE1 0x00 +-#define TLC59108_PWM2 0x04 ++#define TLC59108_MODE2 0x01 ++#define TLC59108_PWM0 0x02 ++#define TLC59108_PWM1 0x03 ++#define TLC59108_PWM2 0x04 ++#define TLC59108_PWM3 0x05 ++#define TLC59108_PWM4 0x06 ++#define TLC59108_PWM5 0x07 ++#define TLC59108_PWM6 0x08 ++#define TLC59108_PWM7 0x09 + #define TLC59108_LEDOUT0 0x0c + #define TLC59108_LEDOUT1 0x0d + #define TLC59108_MAX_BRIGHTNESS 0xFF +@@ -43,15 +50,9 @@ struct tlc59108_bl { + + static void tlc59108_bl_set_backlight(struct tlc59108_bl *data, int brightness) + { +- /* Set Mode1 Register */ +- i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); +- +- /* Set LEDOUT0 Register */ +- i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x21); +- + /* Set Backlight Duty Cycle*/ + i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, +- brightness & 0xff); ++ 0xff - brightness ); + } + + static int tlc59108_bl_get_brightness(struct backlight_device *dev) +@@ -65,8 +66,18 @@ static int tlc59108_bl_update_status(struct backlight_device *dev) + { + struct backlight_properties *props = &dev->props; + struct tlc59108_bl *data = dev_get_drvdata(&dev->dev); ++ + int brightness = props->brightness; + ++ if (dev->props.state & BL_CORE_FBBLANK) { ++ brightness = 0; ++ /* Set LEDOUT0 Register */ ++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x10); ++ } else { ++ /* Set LEDOUT0 Register */ ++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT0, 0x30); ++ } ++ + tlc59108_bl_set_backlight(data, brightness); + + return 0; +@@ -77,7 +88,7 @@ static const struct backlight_ops bl_ops = { + .update_status = tlc59108_bl_update_status, + }; + +-static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) ++static int __devinit tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) + { + struct backlight_properties props; + struct tlc59108_bl *data = kzalloc(sizeof(struct tlc59108_bl), +@@ -104,6 +115,11 @@ static int tlc59108_probe(struct i2c_client *c, const struct i2c_device_id *id) + + backlight_update_status(data->bl); + ++ i2c_smbus_write_byte_data(data->client, TLC59108_MODE1, 0x00); ++ i2c_smbus_write_byte_data(data->client, TLC59108_PWM2, 0x80); ++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x05); ++ i2c_smbus_write_byte_data(data->client, TLC59108_LEDOUT1, 0x15); ++ + return 0; + + err_reg: +@@ -125,7 +141,7 @@ static int tlc59108_remove(struct i2c_client *c) + } + + /* I2C Device ID table */ +-static const struct i2c_device_id tlc59108_id[] = { ++static struct i2c_device_id tlc59108_id[] = { + { "tlc59108", 0 }, + { } + }; +@@ -134,12 +150,12 @@ MODULE_DEVICE_TABLE(i2c, tlc59108_id); + /* I2C driver data */ + static struct i2c_driver tlc59108_driver = { + .driver = { +- .owner = THIS_MODULE, +- .name = tlc59108_MODULE_NAME, ++ .owner = THIS_MODULE, ++ .name = "tlc59108" + }, ++ .id_table = tlc59108_id, + .probe = tlc59108_probe, + .remove = tlc59108_remove, +- .id_table = tlc59108_id, + }; + + static int __init tlc59108_init(void) +@@ -157,4 +173,4 @@ module_exit(tlc59108_exit); + + MODULE_DESCRIPTION("LCD/Backlight control for TLC59108"); + MODULE_AUTHOR("Senthil Natarajan senthil.n@ti.com"); +-MODULE_LICENSE("GPL v2"); ++MODULE_LICENSE("GPL"); +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch new file mode 100644 index 0000000..d179420 --- /dev/null +++ b/src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch @@ -0,0 +1,31 @@ +From 81ff7627ad0d958a5c156cb7d880af8707e14f47 Mon Sep 17 00:00:00 2001 +From: Alexander Holler holler@ahsoftware.de +Date: Wed, 4 Jul 2012 00:03:04 +0200 +Subject: [PATCH 4/5] zeroMAP: Open your eyes! + +Signed-off-by: Alexander Holler holler@ahsoftware.de +--- + kernel/printk.c | 7 +++++++ + 1 files changed, 7 insertions(+), 0 deletions(-) + +diff --git a/kernel/printk.c b/kernel/printk.c +index 22e070f..3678740 100644 +--- a/kernel/printk.c ++++ b/kernel/printk.c +@@ -1759,6 +1759,13 @@ static int __init console_setup(char *str) + char *s, *options, *brl_options = NULL; + int idx; + ++#ifdef CONFIG_SERIAL_OMAP ++ if (!strncmp(str, "tty0", 4) && '0' <= str[4] && '9' >= str[4]) { ++ str[3] = 'O'; ++ pr_warn("We are opening your eyes, assuming you want to use an OMAP based serial driver and not a zeroMAP based one! ;)\n"); ++ pr_warn("Which means 'tty0%s' was changed to 'ttyO%s' automagically for your pleasure.\n", str+4, str+4); ++ } ++#endif + #ifdef CONFIG_A11Y_BRAILLE_CONSOLE + if (!memcmp(str, "brl,", 4)) { + brl_options = ""; +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch new file mode 100644 index 0000000..ffb5ffb --- /dev/null +++ b/src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch @@ -0,0 +1,29 @@ +From f2ec859cb99e6137d78b457f8a6693e69e3b1f33 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Thu, 24 Jan 2013 09:43:51 -0600 +Subject: [PATCH 5/5] ARM: OMAP: Beagle: use TWL4030 generic reset script + +Enable TWL_COMMON_PDATA_POWER such that OMAP3530 revisions of the +Beagle (Bx/Cx) will not hang on reboot when running at 125 Mhz. + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 5b57885..9a2c80b 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -831,7 +831,7 @@ static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, + TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC | +- TWL_COMMON_PDATA_AUDIO, ++ TWL_COMMON_PDATA_AUDIO | TWL_COMMON_PDATA_POWER, + TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2); + + beagle_twldata.vpll2->constraints.name = "VDVI"; +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch new file mode 100644 index 0000000..56879cb --- /dev/null +++ b/src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch @@ -0,0 +1,28 @@ +From 40d889a09a05765138f3b737becadfe927c9b004 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 19 Mar 2013 13:40:50 -0500 +Subject: [PATCH 6/6] DSS2: use DSI PLL for DPI with OMAP3 + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/video/omap2/dss/dpi.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c +index 757b57f..12ed14f 100644 +--- a/drivers/video/omap2/dss/dpi.c ++++ b/drivers/video/omap2/dss/dpi.c +@@ -58,10 +58,6 @@ static struct platform_device *dpi_get_dsidev(enum omap_channel channel) + */ + switch (omapdss_get_version()) { + case OMAPDSS_VER_OMAP24xx: +- case OMAPDSS_VER_OMAP34xx_ES1: +- case OMAPDSS_VER_OMAP34xx_ES3: +- case OMAPDSS_VER_OMAP3630: +- case OMAPDSS_VER_AM35xx: + return NULL; + + case OMAPDSS_VER_OMAP4430_ES1: +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch new file mode 100644 index 0000000..44a1ae3 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch @@ -0,0 +1,63 @@ +From c070885eaf883884f89a77e2f71def5b447f914b Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:25:27 -0600 +Subject: [PATCH 01/10] Beagle: expansion: add buddy param for expansionboard + names + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index c3558f9..29d549c 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -23,6 +23,7 @@ + #include <linux/pwm.h> + #include <linux/leds_pwm.h> + #include <linux/gpio.h> ++#include <linux/irq.h> + #include <linux/input.h> + #include <linux/gpio_keys.h> + #include <linux/opp.h> +@@ -191,6 +192,8 @@ static void __init omap3_beagle_init_rev(void) + } + } + ++char expansionboard_name[16]; ++ + static struct mtd_partition omap3beagle_nand_partitions[] = { + /* All the partition sizes are listed in terms of NAND block size */ + { +@@ -470,6 +473,18 @@ static struct omap_board_mux board_mux[] __initdata = { + }; + #endif + ++static int __init expansionboard_setup(char *str) ++{ ++ if (!machine_is_omap3_beagle()) ++ return 0; ++ ++ if (!str) ++ return -EINVAL; ++ strncpy(expansionboard_name, str, 16); ++ pr_info("Beagle expansionboard: %s\n", expansionboard_name); ++ return 0; ++} ++ + static int __init beagle_opp_init(void) + { + int r = 0; +@@ -559,6 +574,8 @@ static void __init omap3_beagle_init(void) + pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup)); + } + ++early_param("buddy", expansionboard_setup); ++ + MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") + /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ + .atag_offset = 0x100, +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch new file mode 100644 index 0000000..fff6243 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch @@ -0,0 +1,242 @@ +From e71075202707e044a28604bd929fd6f7a89adeae Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Mon, 21 Jan 2013 11:47:02 -0600 +Subject: [PATCH 02/10] Beagle: expansion: add zippy + +v2: add #include <linux/regulator/fixed.h> +build fix from Pantelis Antoniou panto@antoniou-consulting.com + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 164 +++++++++++++++++++++++++++++-- + 1 file changed, 158 insertions(+), 6 deletions(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 4e6e767..b3685ed 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -37,6 +37,7 @@ + #include <linux/usb/nop-usb-xceiv.h> + + #include <linux/regulator/machine.h> ++#include <linux/regulator/fixed.h> + #include <linux/i2c/twl.h> + + #include <asm/mach-types.h> +@@ -195,6 +196,86 @@ static void __init omap3_beagle_init_rev(void) + + char expansionboard_name[16]; + ++enum { ++ EXPANSION_MMC_NONE = 0, ++ EXPANSION_MMC_ZIPPY, ++ EXPANSION_MMC_WIFI, ++}; ++ ++enum { ++ EXPANSION_I2C_NONE = 0, ++ EXPANSION_I2C_ZIPPY, ++}; ++ ++static struct { ++ int mmc_settings; ++ int i2c_settings; ++} expansion_config = { ++ .mmc_settings = EXPANSION_MMC_NONE, ++ .i2c_settings = EXPANSION_I2C_NONE, ++}; ++ ++//rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper.. ++static struct fixed_voltage_config beagle_vzippy = { ++ .supply_name = "vzippy", ++ .microvolts = 3300000, /* 3.3V */ ++ .startup_delay = 70000, /* 70ms */ ++ .enable_high = 1, ++ .enabled_at_boot = 0, ++ .init_data = &beagle_vmmc2, ++}; ++ ++static struct platform_device omap_zippy_device = { ++ .name = "reg-fixed-voltage", ++ .id = 1, ++ .dev = { ++ .platform_data = &beagle_vzippy, ++ }, ++}; ++ ++#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP 141 ++#define OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD 162 ++ ++#if IS_ENABLED(CONFIG_ENC28J60) ++#include <linux/platform_data/spi-omap2-mcspi.h> ++#include <linux/spi/spi.h> ++ ++#define OMAP3BEAGLE_GPIO_ENC28J60_IRQ 157 ++ ++static struct omap2_mcspi_device_config enc28j60_spi_chip_info = { ++ .turbo_mode = 0, ++}; ++ ++static struct spi_board_info omap3beagle_zippy_spi_board_info[] __initdata = { ++ { ++ .modalias = "enc28j60", ++ .bus_num = 4, ++ .chip_select = 0, ++ .max_speed_hz = 20000000, ++ .controller_data = &enc28j60_spi_chip_info, ++ }, ++}; ++ ++static void __init omap3beagle_enc28j60_init(void) ++{ ++ if ((gpio_request(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, "ENC28J60_IRQ") == 0) && ++ (gpio_direction_input(OMAP3BEAGLE_GPIO_ENC28J60_IRQ) == 0)) { ++ gpio_export(OMAP3BEAGLE_GPIO_ENC28J60_IRQ, 0); ++ omap3beagle_zippy_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_ENC28J60_IRQ); ++ irq_set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING); ++ } else { ++ pr_err("Beagle expansionboard: could not obtain gpio for ENC28J60_IRQ\n"); ++ return; ++ } ++ ++ spi_register_board_info(omap3beagle_zippy_spi_board_info, ++ ARRAY_SIZE(omap3beagle_zippy_spi_board_info)); ++} ++ ++#else ++static inline void __init omap3beagle_enc28j60_init(void) { return; } ++#endif ++ + static struct mtd_partition omap3beagle_nand_partitions[] = { + /* All the partition sizes are listed in terms of NAND block size */ + { +@@ -271,6 +352,23 @@ static struct omap2_hsmmc_info mmc[] = { + {} /* Terminator */ + }; + ++static struct omap2_hsmmc_info mmc_zippy[] = { ++ { ++ .mmc = 1, ++ .caps = MMC_CAP_4_BIT_DATA, ++ .gpio_wp = -EINVAL, ++ .deferred = true, ++ }, ++ { ++ .mmc = 2, ++ .caps = MMC_CAP_4_BIT_DATA, ++ .gpio_wp = OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, ++ .gpio_cd = OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, ++ .transceiver = true, ++ .deferred = true, ++ }, ++ {} /* Terminator */ ++}; + static struct regulator_consumer_supply beagle_vmmc1_supply[] = { + REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), + }; +@@ -301,10 +399,21 @@ static int beagle_twl_gpio_setup(struct device *dev, + { + int r; + +- mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; +- /* gpio + 0 is "mmc0_cd" (input/IRQ) */ +- mmc[0].gpio_cd = gpio + 0; +- omap_hsmmc_late_init(mmc); ++ switch (expansion_config.mmc_settings) { ++ case EXPANSION_MMC_ZIPPY: ++ mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp; ++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ ++ mmc_zippy[0].gpio_cd = gpio + 0; ++ ++ omap_hsmmc_late_init(mmc_zippy); ++ break; ++ default: ++ mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; ++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ ++ mmc[0].gpio_cd = gpio + 0; ++ ++ omap_hsmmc_late_init(mmc); ++ } + + /* + * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active +@@ -396,6 +505,14 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { + }, + }; + ++static struct i2c_board_info __initdata zippy_i2c2_rtc[] = { ++#if defined(CONFIG_RTC_DRV_DS1307) || defined(CONFIG_RTC_DRV_DS1307_MODULE) ++ { ++ I2C_BOARD_INFO("ds1307", 0x68), ++ }, ++#endif ++}; ++ + static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, +@@ -406,6 +523,15 @@ static int __init omap3_beagle_i2c_init(void) + beagle_twldata.vpll2->constraints.name = "VDVI"; + + omap3_pmic_init("twl4030", &beagle_twldata); ++ ++ switch (expansion_config.i2c_settings) { ++ case EXPANSION_I2C_ZIPPY: ++ omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); ++ break; ++ default: ++ omap_register_i2c_bus(2, 400, NULL, 0); ++ } ++ + /* Bus 3 is attached to the DVI port where devices like the pico DLP + * projector don't work reliably with 400kHz */ + omap_register_i2c_bus(3, 100, beagle_i2c_eeprom, ARRAY_SIZE(beagle_i2c_eeprom)); +@@ -548,10 +674,30 @@ static void __init omap3_beagle_init(void) + omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); + omap3_beagle_init_rev(); + ++ if (!strcmp(expansionboard_name, "zippy")) ++ { ++ pr_info("Beagle expansionboard: initializing zippy mmc\n"); ++ platform_device_register(&omap_zippy_device); ++ ++ expansion_config.i2c_settings = EXPANSION_I2C_ZIPPY; ++ expansion_config.mmc_settings = EXPANSION_MMC_ZIPPY; ++ ++ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_WP, OMAP_PIN_INPUT); ++ omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); ++ } ++ + if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) + omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); +- mmc[0].caps = beagle_config.mmc_caps; +- omap_hsmmc_init(mmc); ++ ++ switch (expansion_config.mmc_settings) { ++ case EXPANSION_MMC_ZIPPY: ++ mmc_zippy[0].caps = beagle_config.mmc_caps; ++ omap_hsmmc_init(mmc_zippy); ++ break; ++ default: ++ mmc[0].caps = beagle_config.mmc_caps; ++ omap_hsmmc_init(mmc); ++ } + + omap3_beagle_i2c_init(); + +@@ -566,6 +712,12 @@ static void __init omap3_beagle_init(void) + omap_sdrc_init(mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params); + ++ if (!strcmp(expansionboard_name, "zippy")) ++ { ++ pr_info("Beagle expansionboard: initializing enc28j60\n"); ++ omap3beagle_enc28j60_init(); ++ } ++ + usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); + usb_musb_init(NULL); + +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch new file mode 100644 index 0000000..b569f92 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch @@ -0,0 +1,86 @@ +From 45bed17e65e1a83f753896e250f3458654dcb229 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:32:15 -0600 +Subject: [PATCH 03/10] Beagle: expansion: add zippy2 + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 48 ++++++++++++++++++++++++++++++- + 1 file changed, 47 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index b3685ed..74da505 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -276,6 +276,46 @@ static void __init omap3beagle_enc28j60_init(void) + static inline void __init omap3beagle_enc28j60_init(void) { return; } + #endif + ++#if IS_ENABLED(CONFIG_KS8851) ++#include <linux/platform_data/spi-omap2-mcspi.h> ++#include <linux/spi/spi.h> ++ ++#define OMAP3BEAGLE_GPIO_KS8851_IRQ 157 ++ ++static struct omap2_mcspi_device_config ks8851_spi_chip_info = { ++ .turbo_mode = 0, ++}; ++ ++static struct spi_board_info omap3beagle_zippy2_spi_board_info[] __initdata = { ++ { ++ .modalias = "ks8851", ++ .bus_num = 4, ++ .chip_select = 0, ++ .max_speed_hz = 36000000, ++ .controller_data = &ks8851_spi_chip_info, ++ }, ++}; ++ ++static void __init omap3beagle_ks8851_init(void) ++{ ++ if ((gpio_request(OMAP3BEAGLE_GPIO_KS8851_IRQ, "KS8851_IRQ") == 0) && ++ (gpio_direction_input(OMAP3BEAGLE_GPIO_KS8851_IRQ) == 0)) { ++ gpio_export(OMAP3BEAGLE_GPIO_KS8851_IRQ, 0); ++ omap3beagle_zippy2_spi_board_info[0].irq = gpio_to_irq(OMAP3BEAGLE_GPIO_KS8851_IRQ); ++ irq_set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING); ++ } else { ++ pr_err("Beagle expansionboard: could not obtain gpio for KS8851_IRQ\n"); ++ return; ++ } ++ ++ spi_register_board_info(omap3beagle_zippy2_spi_board_info, ++ ARRAY_SIZE(omap3beagle_zippy2_spi_board_info)); ++} ++ ++#else ++static inline void __init omap3beagle_ks8851_init(void) { return; } ++#endif ++ + static struct mtd_partition omap3beagle_nand_partitions[] = { + /* All the partition sizes are listed in terms of NAND block size */ + { +@@ -674,7 +714,7 @@ static void __init omap3_beagle_init(void) + omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); + omap3_beagle_init_rev(); + +- if (!strcmp(expansionboard_name, "zippy")) ++ if ((!strcmp(expansionboard_name, "zippy")) || (!strcmp(expansionboard_name, "zippy2"))) + { + pr_info("Beagle expansionboard: initializing zippy mmc\n"); + platform_device_register(&omap_zippy_device); +@@ -718,6 +758,12 @@ static void __init omap3_beagle_init(void) + omap3beagle_enc28j60_init(); + } + ++ if (!strcmp(expansionboard_name, "zippy2")) ++ { ++ pr_info("Beagle expansionboard: initializing ks_8851\n"); ++ omap3beagle_ks8851_init(); ++ } ++ + usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); + usb_musb_init(NULL); + +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch new file mode 100644 index 0000000..08ace67 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch @@ -0,0 +1,55 @@ +From 4d9b4e5795e322ed3efed9b8402f604e2e53cc6f Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:33:24 -0600 +Subject: [PATCH 04/10] Beagle: expansion: add trainer + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 74da505..b5ed547 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -764,6 +764,37 @@ static void __init omap3_beagle_init(void) + omap3beagle_ks8851_init(); + } + ++ if (!strcmp(expansionboard_name, "trainer")) ++ { ++ pr_info("Beagle expansionboard: exporting GPIOs 130-141,162 to userspace\n"); ++ gpio_request(130, "sysfs"); ++ gpio_export(130, 1); ++ gpio_request(131, "sysfs"); ++ gpio_export(131, 1); ++ gpio_request(132, "sysfs"); ++ gpio_export(132, 1); ++ gpio_request(133, "sysfs"); ++ gpio_export(133, 1); ++ gpio_request(134, "sysfs"); ++ gpio_export(134, 1); ++ gpio_request(135, "sysfs"); ++ gpio_export(135, 1); ++ gpio_request(136, "sysfs"); ++ gpio_export(136, 1); ++ gpio_request(137, "sysfs"); ++ gpio_export(137, 1); ++ gpio_request(138, "sysfs"); ++ gpio_export(138, 1); ++ gpio_request(139, "sysfs"); ++ gpio_export(139, 1); ++ gpio_request(140, "sysfs"); ++ gpio_export(140, 1); ++ gpio_request(141, "sysfs"); ++ gpio_export(141, 1); ++ gpio_request(162, "sysfs"); ++ gpio_export(162, 1); ++ } ++ + usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); + usb_musb_init(NULL); + +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch new file mode 100644 index 0000000..8b716ee --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch @@ -0,0 +1,285 @@ +From a53e7913a95faefde1ee87a7ea048c04b0850066 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:42:03 -0600 +Subject: [PATCH 05/10] Beagle: expansion: add CircuitCo ulcd Support + +This of a cleanup, squashed both ulcd commits into one: + +====================================================================== + +expansion: add ulcd +Signed-off-by: Robert Nelson robertcnelson@gmail.com + +====================================================================== + +beagleboard: fix uLCD7 support +Signed-off-by: Koen Kooi koen@dominion.thruhere.net + +====================================================================== + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 136 ++++++++++++++++++++++ + drivers/video/omap2/displays/panel-generic-dpi.c | 27 +++++ + 2 files changed, 163 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 0f9b253..b2807c2 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -118,12 +118,16 @@ static struct { + int dvi_pd_gpio; + int usr_button_gpio; + int mmc_caps; ++ char *lcd_driver_name; ++ int lcd_pwren; + } beagle_config = { + .mmc1_gpio_wp = -EINVAL, + .usb_pwr_level = 0, + .dvi_pd_gpio = -EINVAL, + .usr_button_gpio = 4, + .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, ++ .lcd_driver_name = "", ++ .lcd_pwren = 156, + }; + + static struct gpio omap3_beagle_rev_gpios[] __initdata = { +@@ -195,6 +199,7 @@ static void __init omap3_beagle_init_rev(void) + } + + char expansionboard_name[16]; ++char expansionboard2_name[16]; + + enum { + EXPANSION_MMC_NONE = 0, +@@ -205,6 +210,7 @@ enum { + enum { + EXPANSION_I2C_NONE = 0, + EXPANSION_I2C_ZIPPY, ++ EXPANSION_I2C_7ULCD, + }; + + static struct { +@@ -369,9 +375,53 @@ static struct omap_dss_device beagle_tv_device = { + .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO, + }; + ++static int beagle_enable_lcd(struct omap_dss_device *dssdev) ++{ ++ if (gpio_is_valid(beagle_config.lcd_pwren)) { ++ pr_info("%s: Enabling LCD\n", __FUNCTION__); ++ gpio_set_value(beagle_config.lcd_pwren, 0); ++ } else { ++ pr_info("%s: Invalid LCD enable GPIO: %d\n", ++ __FUNCTION__, beagle_config.lcd_pwren); ++ } ++ ++ return 0; ++} ++ ++static void beagle_disable_lcd(struct omap_dss_device *dssdev) ++{ ++ if (gpio_is_valid(beagle_config.lcd_pwren)) { ++ pr_info("%s: Disabling LCD\n", __FUNCTION__); ++ gpio_set_value(beagle_config.lcd_pwren, 1); ++ } else { ++ pr_info("%s: Invalid LCD enable GPIO: %d\n", ++ __FUNCTION__, beagle_config.lcd_pwren); ++ } ++ ++ return; ++} ++ ++static struct panel_generic_dpi_data lcd_panel = { ++ .name = "tfc_s9700rtwv35tr-01b", ++ .platform_enable = beagle_enable_lcd, ++ .platform_disable = beagle_disable_lcd, ++}; ++ ++static struct omap_dss_device beagle_lcd_device = { ++ .type = OMAP_DISPLAY_TYPE_DPI, ++ .name = "lcd", ++ .driver_name = "generic_dpi_panel", ++ .phy.dpi.data_lines = 24, ++ .platform_enable = beagle_enable_lcd, ++ .platform_disable = beagle_disable_lcd, ++ .reset_gpio = -EINVAL, ++ .data = &lcd_panel, ++}; ++ + static struct omap_dss_device *beagle_dss_devices[] = { + &beagle_dvi_device, + &beagle_tv_device, ++ &beagle_lcd_device, + }; + + static struct omap_dss_board_info beagle_dss_data = { +@@ -553,6 +603,53 @@ static struct i2c_board_info __initdata zippy_i2c2_rtc[] = { + #endif + }; + ++#if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) ++/* Touchscreen */ ++#include <linux/i2c/tsc2007.h> ++ ++#define OMAP3BEAGLE_TSC2007_GPIO 157 ++ ++static int omap3beagle_tsc2007_get_pendown_state(void) ++{ ++ return !gpio_get_value(OMAP3BEAGLE_TSC2007_GPIO); ++} ++ ++static struct tsc2007_platform_data tsc2007_info = { ++ .model = 2007, ++ .x_plate_ohms = 180, ++ .get_pendown_state = omap3beagle_tsc2007_get_pendown_state, ++}; ++ ++static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = { ++ { ++ I2C_BOARD_INFO("tlc59108", 0x40), ++ }, ++ { ++ I2C_BOARD_INFO("tsc2007", 0x48), ++ .platform_data = &tsc2007_info, ++ }, ++}; ++ ++static void __init omap3beagle_tsc2007_init(void) ++{ ++ int r; ++ ++ omap_mux_init_gpio(OMAP3BEAGLE_TSC2007_GPIO, OMAP_PIN_INPUT_PULLUP); ++ ++ r = gpio_request_one(OMAP3BEAGLE_TSC2007_GPIO, GPIOF_IN, "tsc2007_pen_down"); ++ if (r < 0) { ++ pr_err("Beagle expansionboard: failed to request GPIO#%d for " ++ "tsc2007 pen down IRQ\n", OMAP3BEAGLE_TSC2007_GPIO); ++ return; ++ } ++ ++ beagle_i2c2_bbtoys_ulcd[0].irq = gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO); ++ irq_set_irq_type(gpio_to_irq(OMAP3BEAGLE_TSC2007_GPIO), IRQ_TYPE_EDGE_FALLING); ++} ++#else ++static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {}; ++#endif ++ + static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, +@@ -565,6 +662,10 @@ static int __init omap3_beagle_i2c_init(void) + omap3_pmic_init("twl4030", &beagle_twldata); + + switch (expansion_config.i2c_settings) { ++ case EXPANSION_I2C_7ULCD: ++ omap_register_i2c_bus(2, 400, beagle_i2c2_bbtoys_ulcd, ++ ARRAY_SIZE(beagle_i2c2_bbtoys_ulcd)); ++ break; + case EXPANSION_I2C_ZIPPY: + omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); + break; +@@ -661,6 +762,18 @@ static int __init expansionboard_setup(char *str) + return 0; + } + ++static int __init expansionboard2_setup(char *str) ++{ ++ if (!machine_is_omap3_beagle()) ++ return 0; ++ ++ if (!str) ++ return -EINVAL; ++ strncpy(expansionboard2_name, str, 16); ++ pr_info("Beagle expansionboard2: %s\n", expansionboard2_name); ++ return 0; ++} ++ + static int __init beagle_opp_init(void) + { + int r = 0; +@@ -726,6 +839,20 @@ static void __init omap3_beagle_init(void) + omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); + } + ++ if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) ++ { ++ int r; ++ expansion_config.i2c_settings = EXPANSION_I2C_7ULCD; ++ ++ /* TODO: set lcd_driver_name by command line or device tree */ ++ beagle_config.lcd_driver_name = "tfc_s9700rtwv35tr-01b", ++ lcd_panel.name = beagle_config.lcd_driver_name; ++ ++ r = gpio_request_one(beagle_config.lcd_pwren, GPIOF_OUT_INIT_LOW, "LCD power"); ++ if (r < 0) ++ pr_err("Beagle expansionboard: Unable to get LCD power enable GPIO\n"); ++ } ++ + if (gpio_is_valid(beagle_config.mmc1_gpio_wp)) + omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); + +@@ -795,6 +922,14 @@ static void __init omap3_beagle_init(void) + gpio_export(162, 1); + } + ++ if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) ++ { ++ #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) ++ pr_info("Beagle expansionboard: initializing touchscreen: tsc2007\n"); ++ omap3beagle_tsc2007_init(); ++ #endif ++ } ++ + usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); + usb_musb_init(NULL); + +@@ -816,6 +951,7 @@ static void __init omap3_beagle_init(void) + } + + early_param("buddy", expansionboard_setup); ++early_param("buddy2", expansionboard2_setup); + + MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") + /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ +diff --git a/drivers/video/omap2/displays/panel-generic-dpi.c b/drivers/video/omap2/displays/panel-generic-dpi.c +index 97363f7..614031f 100644 +--- a/drivers/video/omap2/displays/panel-generic-dpi.c ++++ b/drivers/video/omap2/displays/panel-generic-dpi.c +@@ -515,6 +515,33 @@ static struct panel_config generic_dpi_panels[] = { + }, + .name = "primeview_pd104slf", + }, ++ ++ /* ThreeFiveCorp S9700RTWV35TR-01B */ ++ { ++ { ++ .x_res = 800, ++ .y_res = 480, ++ ++ .pixel_clock = 30000, ++ ++ .hsw = 49, ++ .hfp = 41, ++ .hbp = 40, ++ ++ .vsw = 4, ++ .vfp = 14, ++ .vbp = 29, ++ ++ .vsync_level = OMAPDSS_SIG_ACTIVE_LOW, ++ .hsync_level = OMAPDSS_SIG_ACTIVE_LOW, ++ .data_pclk_edge = OMAPDSS_DRIVE_SIG_RISING_EDGE, ++ .de_level = OMAPDSS_SIG_ACTIVE_HIGH, ++ .sync_pclk_edge = OMAPDSS_DRIVE_SIG_OPPOSITE_EDGES, ++ }, ++ .power_on_delay = 50, ++ .power_off_delay = 100, ++ .name = "tfc_s9700rtwv35tr-01b", ++ }, + }; + + struct panel_drv_data { +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch new file mode 100644 index 0000000..88d48af --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch @@ -0,0 +1,180 @@ +From f78cd93d767cd75969c4661723cfce46071e5b1b Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:48:52 -0600 +Subject: [PATCH 06/10] Beagle: expansion: add wifi + +build fixes from Pantelis Antoniou panto@antoniou-consulting.com + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 119 +++++++++++++++++++++++++++++++ + 1 file changed, 119 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index a8de97e..2322d6c 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -221,6 +221,73 @@ static struct { + .i2c_settings = EXPANSION_I2C_NONE, + }; + ++#if IS_ENABLED(CONFIG_WL12XX) ++#include <linux/regulator/fixed.h> ++#include <linux/ti_wilink_st.h> ++#include <linux/wl12xx.h> ++ ++#define OMAP_BEAGLE_WLAN_EN_GPIO (139) ++#define OMAP_BEAGLE_BT_EN_GPIO (138) ++#define OMAP_BEAGLE_WLAN_IRQ_GPIO (137) ++#define OMAP_BEAGLE_FM_EN_BT_WU (136) ++ ++struct wl12xx_platform_data omap_beagle_wlan_data __initdata = { ++ .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */ ++}; ++ ++static struct ti_st_plat_data wilink_platform_data = { ++ .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO, ++ .dev_name = "/dev/ttyO1", ++ .flow_cntrl = 1, ++ .baud_rate = 3000000, ++ .chip_enable = NULL, ++ .suspend = NULL, ++ .resume = NULL, ++}; ++ ++static struct platform_device wl12xx_device = { ++ .name = "kim", ++ .id = -1, ++ .dev.platform_data = &wilink_platform_data, ++}; ++ ++static struct platform_device btwilink_device = { ++ .name = "btwilink", ++ .id = -1, ++}; ++#endif ++ ++static struct regulator_consumer_supply beagle_vmmc2_supply = ++ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"); ++ ++static struct regulator_init_data beagle_vmmc2 = { ++ .constraints = { ++ .valid_ops_mask = REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vmmc2_supply, ++}; ++ ++#if IS_ENABLED(CONFIG_WL12XX) ++static struct fixed_voltage_config beagle_vwlan = { ++ .supply_name = "vwl1271", ++ .microvolts = 1800000, /* 1.8V */ ++ .gpio = OMAP_BEAGLE_WLAN_EN_GPIO, ++ .startup_delay = 70000, /* 70ms */ ++ .enable_high = 1, ++ .enabled_at_boot = 0, ++ .init_data = &beagle_vmmc2, ++}; ++ ++static struct platform_device omap_vwlan_device = { ++ .name = "reg-fixed-voltage", ++ .id = 1, ++ .dev = { ++ .platform_data = &beagle_vwlan, ++ }, ++}; ++#endif ++ + //rcn-ee: this is just a fake regulator, the zippy hardware provides 3.3/1.8 with jumper.. + static struct fixed_voltage_config beagle_vzippy = { + .supply_name = "vzippy", +@@ -459,6 +526,26 @@ static struct omap2_hsmmc_info mmc_zippy[] = { + }, + {} /* Terminator */ + }; ++ ++static struct omap2_hsmmc_info mmcbbt[] = { ++ { ++ .mmc = 1, ++ .caps = MMC_CAP_4_BIT_DATA, ++ .gpio_wp = -EINVAL, ++ .deferred = true, ++ }, ++ { ++ .name = "wl1271", ++ .mmc = 2, ++ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, ++ .gpio_wp = -EINVAL, ++ .gpio_cd = -EINVAL, ++ .ocr_mask = MMC_VDD_165_195, ++ .nonremovable = true, ++ }, ++ {} /* Terminator */ ++}; ++ + static struct regulator_consumer_supply beagle_vmmc1_supply[] = { + REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), + }; +@@ -490,6 +577,13 @@ static int beagle_twl_gpio_setup(struct device *dev, + int r; + + switch (expansion_config.mmc_settings) { ++ case EXPANSION_MMC_WIFI: ++ mmcbbt[0].gpio_wp = beagle_config.mmc1_gpio_wp; ++ /* gpio + 0 is "mmc0_cd" (input/IRQ) */ ++ mmcbbt[0].gpio_cd = gpio + 0; ++ ++ omap_hsmmc_late_init(mmcbbt); ++ break; + case EXPANSION_MMC_ZIPPY: + mmc_zippy[0].gpio_wp = beagle_config.mmc1_gpio_wp; + /* gpio + 0 is "mmc0_cd" (input/IRQ) */ +@@ -839,6 +933,13 @@ static void __init omap3_beagle_init(void) + omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); + } + ++ if (!strcmp(expansionboard_name, "bbtoys-wifi")) ++ { ++ #if IS_ENABLED(CONFIG_WL12XX) ++ expansion_config.mmc_settings = EXPANSION_MMC_WIFI; ++ #endif ++ } ++ + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) + { + int r; +@@ -857,6 +958,10 @@ static void __init omap3_beagle_init(void) + omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT); + + switch (expansion_config.mmc_settings) { ++ case EXPANSION_MMC_WIFI: ++ mmcbbt[0].caps = beagle_config.mmc_caps; ++ omap_hsmmc_init(mmcbbt); ++ break; + case EXPANSION_MMC_ZIPPY: + mmc_zippy[0].caps = beagle_config.mmc_caps; + omap_hsmmc_init(mmc_zippy); +@@ -922,6 +1027,20 @@ static void __init omap3_beagle_init(void) + gpio_export(162, 1); + } + ++ if (!strcmp(expansionboard_name, "bbtoys-wifi")) ++ { ++ #if IS_ENABLED(CONFIG_WL12XX) ++ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO); ++ if (wl12xx_set_platform_data(&omap_beagle_wlan_data)) ++ pr_err("error setting wl12xx data\n"); ++ pr_info("Beagle expansionboard: registering wl12xx bt platform device\n"); ++ platform_device_register(&wl12xx_device); ++ platform_device_register(&btwilink_device); ++ pr_info("Beagle expansionboard: registering wl12xx wifi platform device\n"); ++ platform_device_register(&omap_vwlan_device); ++ #endif ++ } ++ + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) + { + #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch new file mode 100644 index 0000000..a006c7b --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch @@ -0,0 +1,117 @@ +From 0c361e9db10f9ec3598bf062a605a451857ee06e Mon Sep 17 00:00:00 2001 +From: Bas van der Doorn bas@doornvd.com +Date: Tue, 11 Dec 2012 06:52:22 -0600 +Subject: [PATCH 07/10] Beagle: expansion: add beaglefpga + +Added SPI dev and McBSP 3 mux when FPGA is detected + +Signed-off-by: Bas van der Doorn bas@doornvd.com +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 76 +++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 2322d6c..c257f3c 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -44,6 +44,7 @@ + #include <asm/mach/arch.h> + #include <asm/mach/map.h> + #include <asm/mach/flash.h> ++#include <linux/spi/spi.h> + + #include <video/omapdss.h> + #include <video/omap-panel-data.h> +@@ -916,6 +917,68 @@ static int __init beagle_opp_init(void) + } + omap_device_initcall(beagle_opp_init); + ++static void __init omap3_beagle_config_mcspi3_mux(void) ++{ ++ /* NOTE: Clock pins need to be in input mode */ ++ omap_mux_init_signal("sdmmc2_clk.mcspi3_clk", OMAP_PIN_INPUT); ++ omap_mux_init_signal("sdmmc2_cmd.mcspi3_simo", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("sdmmc2_dat0.mcspi3_somi", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("sdmmc2_dat2.mcspi3_cs1", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("sdmmc2_dat3.mcspi3_cs0", OMAP_PIN_OUTPUT); ++} ++ ++static void __init omap3_beagle_config_mcspi4_mux(void) ++{ ++ /* NOTE: Clock pins need to be in input mode */ ++ omap_mux_init_signal("mcbsp1_clkr.mcspi4_clk", OMAP_PIN_INPUT); ++ omap_mux_init_signal("mcbsp1_dx.mcspi4_simo", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("mcbsp1_dr.mcspi4_somi", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("mcbsp1_fsx.mcspi4_cs0", OMAP_PIN_OUTPUT); ++} ++ ++static void __init omap3_beagle_config_mcbsp3_mux(void) ++{ ++ omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT); ++ omap_mux_init_signal("uart2_cts.mcbsp3_dx", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("uart2_rts.mcbsp3_dr", OMAP_PIN_INPUT); ++ /* NOTE: Clock pins need to be in input mode */ ++ omap_mux_init_signal("uart2_tx.mcbsp3_clkx", OMAP_PIN_INPUT); ++} ++ ++static void __init omap3_beagle_config_fpga_mux(void) ++{ ++ omap3_beagle_config_mcbsp3_mux(); ++ omap3_beagle_config_mcspi3_mux(); ++ omap3_beagle_config_mcspi4_mux(); ++} ++ ++static struct spi_board_info beagle_mcspi_board_info[] = { ++ /* spi 3.0 */ ++ { ++ .modalias = "spidev", ++ .max_speed_hz = 48000000, //48 Mbps ++ .bus_num = 3, ++ .chip_select = 0, ++ .mode = SPI_MODE_1, ++ }, ++ /* spi 3.1 */ ++ { ++ .modalias = "spidev", ++ .max_speed_hz = 48000000, //48 Mbps ++ .bus_num = 3, ++ .chip_select = 1, ++ .mode = SPI_MODE_1, ++ }, ++ /* spi 4.0 */ ++ { ++ .modalias = "spidev", ++ .max_speed_hz = 48000000, //48 Mbps ++ .bus_num = 4, ++ .chip_select = 0, ++ .mode = SPI_MODE_1, ++ }, ++}; ++ + static void __init omap3_beagle_init(void) + { + omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); +@@ -1041,6 +1104,19 @@ static void __init omap3_beagle_init(void) + #endif + } + ++ if (!strcmp(expansionboard_name, "beaglefpga")) ++ { ++ #if IS_ENABLED(CONFIG_SPI_SPIDEV) ++ pr_info("Beagle expansionboard: enabling SPIdev for McSPI3/4 and pin muxing for McBSP3 slave mode\n"); ++ ++ /* FPGA pin settings configure McSPI 3, McSPI 4 and McBSP 3 */ ++ omap3_beagle_config_fpga_mux(); ++ ++ /* register McSPI 3 and McSPI 4 for FPGA programming and control */ ++ spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info)); ++ #endif ++ } ++ + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) + { + #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch b/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch new file mode 100644 index 0000000..23cc525 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch @@ -0,0 +1,35 @@ +From 5258354e6e4d0b55334099868668a166d967c1d2 Mon Sep 17 00:00:00 2001 +From: Russell Hay russell.hay@gmail.com +Date: Tue, 11 Dec 2012 06:53:58 -0600 +Subject: [PATCH 08/10] Beagle: expansion: add spidev + +Signed-off-by: Russell Hay russell.hay@gmail.com +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index c257f3c..3e0313ee 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -1117,6 +1117,16 @@ static void __init omap3_beagle_init(void) + #endif + } + ++ if (!strcmp(expansionboard_name, "spidev")) ++ { ++ #if IS_ENABLED(CONFIG_SPI_SPIDEV) ++ pr_info("Beagle expansionboard: registering spidev\n"); ++ omap3_beagle_config_mcspi3_mux(); ++ omap3_beagle_config_mcspi4_mux(); ++ spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info)); ++ #endif ++ } ++ + if (!strcmp(expansionboard2_name, "bbtoys-ulcd")) + { + #if IS_ENABLED(CONFIG_TOUCHSCREEN_TSC2007) +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch b/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch new file mode 100644 index 0000000..28d2d4a --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch @@ -0,0 +1,217 @@ +From cc6ced0a1cbaea65a507ec3fe543a5b98d760d23 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 06:58:15 -0600 +Subject: [PATCH 09/10] Beagle: expansion: add Aptina li5m03 camera + +Based on: +https://github.com/Aptina/BeagleBoard-xM/blob/master/tools/0266-Adding-MT9P0... + +And on Max Galemin's patch +https://github.com/MaxGalemin/buildroot/blob/master/board/beagleboard/xm/ker... + +And Koen Kooi Previous work's +https://github.com/beagleboard/kernel/blob/beagleboard-3.2/patches/camera/00... + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 142 +++++++++++++++++++++++++++++++ + 1 file changed, 142 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 3e0313ee..4fb5eae 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -201,6 +201,7 @@ static void __init omap3_beagle_init_rev(void) + + char expansionboard_name[16]; + char expansionboard2_name[16]; ++char camera_name[16]; + + enum { + EXPANSION_MMC_NONE = 0, +@@ -555,6 +556,14 @@ static struct regulator_consumer_supply beagle_vsim_supply[] = { + REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.0"), + }; + ++static struct regulator_consumer_supply beagle_vaux3_supply = { ++ .supply = "cam_1v8", ++}; ++ ++static struct regulator_consumer_supply beagle_vaux4_supply = { ++ .supply = "cam_2v8", ++}; ++ + static struct gpio_led gpio_leds[]; + + /* PHY's VCC regulator might be added later, so flag that we need it */ +@@ -677,11 +686,43 @@ static struct regulator_init_data beagle_vsim = { + .consumer_supplies = beagle_vsim_supply, + }; + ++/* VAUX3 for CAM_1V8 */ ++static struct regulator_init_data beagle_vaux3 = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .apply_uV = true, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vaux3_supply, ++}; ++ ++/* VAUX4 for CAM_2V8 */ ++static struct regulator_init_data beagle_vaux4 = { ++ .constraints = { ++ .min_uV = 1800000, ++ .max_uV = 1800000, ++ .apply_uV = true, ++ .valid_modes_mask = REGULATOR_MODE_NORMAL ++ | REGULATOR_MODE_STANDBY, ++ .valid_ops_mask = REGULATOR_CHANGE_MODE ++ | REGULATOR_CHANGE_STATUS, ++ }, ++ .num_consumer_supplies = 1, ++ .consumer_supplies = &beagle_vaux4_supply, ++}; ++ + static struct twl4030_platform_data beagle_twldata = { + /* platform_data for children goes here */ + .gpio = &beagle_gpio_data, + .vmmc1 = &beagle_vmmc1, + .vsim = &beagle_vsim, ++ .vaux3 = &beagle_vaux3, ++ .vaux4 = &beagle_vaux4, + }; + + static struct i2c_board_info __initdata beagle_i2c_eeprom[] = { +@@ -745,6 +786,61 @@ static void __init omap3beagle_tsc2007_init(void) + static struct i2c_board_info __initdata beagle_i2c2_bbtoys_ulcd[] = {}; + #endif + ++#if IS_ENABLED(CONFIG_VIDEO_MT9P031) ++/* needed for: omap3_beagle_late_initcall */ ++#include "devices.h" ++#include <media/omap3isp.h> ++#include <media/mt9p031.h> ++/* needed for: v4l2_dev_to_isp_device */ ++#include "../../../drivers/media/platform/omap3isp/isp.h" ++ ++#define MT9P031_RESET_GPIO 98 ++#define MT9P031_EXT_FREQ 21000000 ++#define MT9P031_TARGET_FREQ 48000000 ++ ++#define MT9P031_I2C_ADDR 0x48 ++#define MT9P031_I2C_BUS 2 ++ ++static struct regulator *reg_1v8, *reg_2v8; ++ ++static struct mt9p031_platform_data beagle_mt9p031_platform_data = { ++ .reset = MT9P031_RESET_GPIO, ++ .ext_freq = MT9P031_EXT_FREQ, ++ .target_freq = MT9P031_TARGET_FREQ, ++}; ++ ++static struct i2c_board_info mt9p031_camera_i2c_device = { ++ I2C_BOARD_INFO("mt9p031", MT9P031_I2C_ADDR), ++ .platform_data = &beagle_mt9p031_platform_data, ++}; ++ ++static struct isp_subdev_i2c_board_info mt9p031_camera_subdevs[] = { ++ { ++ .board_info = &mt9p031_camera_i2c_device, ++ .i2c_adapter_id = MT9P031_I2C_BUS, ++ }, ++ { NULL, 0, }, ++}; ++ ++static struct isp_v4l2_subdevs_group beagle_camera_subdevs[] = { ++ { ++ .subdevs = mt9p031_camera_subdevs, ++ .interface = ISP_INTERFACE_PARALLEL, ++ .bus = { ++ .parallel = { ++ .data_lane_shift = 0, ++ .clk_pol = 1, ++ } ++ }, ++ }, ++ { }, ++}; ++ ++static struct isp_platform_data beagle_isp_platform_data = { ++ .subdevs = beagle_camera_subdevs, ++}; ++#endif ++ + static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, +@@ -869,6 +965,18 @@ static int __init expansionboard2_setup(char *str) + return 0; + } + ++static int __init camera_setup(char *str) ++{ ++ if (!machine_is_omap3_beagle()) ++ return 0; ++ ++ if (!str) ++ return -EINVAL; ++ strncpy(camera_name, str, 16); ++ pr_info("Beagle camera: %s\n", camera_name); ++ return 0; ++} ++ + static int __init beagle_opp_init(void) + { + int r = 0; +@@ -1155,8 +1263,42 @@ static void __init omap3_beagle_init(void) + pwm_add_table(pwm_lookup, ARRAY_SIZE(pwm_lookup)); + } + ++static int __init omap3_beagle_late_initcall(void) ++{ ++ if (!machine_is_omap3_beagle()) ++ return 0; ++ ++ if (!cpu_is_omap3630()) ++ return 0; ++ ++#if IS_ENABLED(CONFIG_VIDEO_MT9P031) ++ if ((!strcmp(camera_name, "lbcm5m1")) || (!strcmp(camera_name, "li5m03"))) ++ { ++ pr_info("Beagle camera: MT9P031 init\n"); ++ ++ reg_1v8 = regulator_get(NULL, "cam_1v8"); ++ if (IS_ERR(reg_1v8)) ++ pr_err("%s: cannot get cam_1v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_1v8); ++ ++ reg_2v8 = regulator_get(NULL, "cam_2v8"); ++ if (IS_ERR(reg_2v8)) ++ pr_err("%s: cannot get cam_2v8 regulator\n", __func__); ++ else ++ regulator_enable(reg_2v8); ++ ++ omap3_init_camera(&beagle_isp_platform_data); ++ } ++#endif ++ return 0; ++} ++ + early_param("buddy", expansionboard_setup); + early_param("buddy2", expansionboard2_setup); ++early_param("camera", camera_setup); ++ ++late_initcall(omap3_beagle_late_initcall); + + MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board") + /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch b/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch new file mode 100644 index 0000000..04a3656 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch @@ -0,0 +1,123 @@ +From f2e2294733d926e627dcda6425f58611b185c7fc Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 11 Dec 2012 07:02:40 -0600 +Subject: [PATCH 10/10] Beagle: expansion: add LSR COM6L Adapter Board + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 60 ++++++++++++++++++++++++++++--- + 1 file changed, 55 insertions(+), 5 deletions(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 0ac1b49..5a7e7b5 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -202,6 +202,7 @@ static void __init omap3_beagle_init_rev(void) + char expansionboard_name[16]; + char expansionboard2_name[16]; + char camera_name[16]; ++char wl12xx_name[16]; + + enum { + EXPANSION_MMC_NONE = 0, +@@ -237,6 +238,10 @@ struct wl12xx_platform_data omap_beagle_wlan_data __initdata = { + .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */ + }; + ++struct wl12xx_platform_data omap_beagle_wlan_data_26mhz __initdata = { ++ .board_ref_clock = WL12XX_REFCLOCK_26, /* 26 MHz */ ++}; ++ + static struct ti_st_plat_data wilink_platform_data = { + .nshutdown_gpio = OMAP_BEAGLE_BT_EN_GPIO, + .dev_name = "/dev/ttyO1", +@@ -987,6 +992,18 @@ static int __init camera_setup(char *str) + return 0; + } + ++static int __init wl12xx_setup(char *str) ++{ ++ if (!machine_is_omap3_beagle()) ++ return 0; ++ ++ if (!str) ++ return -EINVAL; ++ strncpy(wl12xx_name, str, 16); ++ pr_info("Beagle wl12xx clk: %s\n", wl12xx_name); ++ return 0; ++} ++ + static int __init beagle_opp_init(void) + { + int r = 0; +@@ -1114,9 +1131,29 @@ static void __init omap3_beagle_init(void) + omap_mux_init_gpio(OMAP3BEAGLE_GPIO_ZIPPY_MMC_CD, OMAP_PIN_INPUT); + } + +- if (!strcmp(expansionboard_name, "bbtoys-wifi")) ++ if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt"))) + { + #if IS_ENABLED(CONFIG_WL12XX) ++ pr_info("Beagle expansion: wl12xx: setting up gpio pinmux\n"); ++ ++ omap_mux_init_gpio(OMAP_BEAGLE_FM_EN_BT_WU, OMAP_PIN_OUTPUT); ++ omap_mux_init_gpio(OMAP_BEAGLE_BT_EN_GPIO, OMAP_PIN_OUTPUT); ++ omap_mux_init_gpio(OMAP_BEAGLE_WLAN_EN_GPIO, OMAP_PIN_OUTPUT); ++ ++ omap_mux_init_gpio(OMAP_BEAGLE_WLAN_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP); ++ ++ /* WLAN SDIO: MMC2 CLK */ ++ omap_mux_init_signal("sdmmc2_clk.sdmmc2_clk", OMAP_PIN_INPUT_PULLUP); ++ ++ /* WLAN SDIO: MMC2 CMD */ ++ omap_mux_init_signal("sdmmc2_cmd.sdmmc2_cmd", OMAP_PIN_INPUT_PULLUP); ++ ++ /* WLAN SDIO: MMC2 DAT[0-3] */ ++ omap_mux_init_signal("sdmmc2_dat0.sdmmc2_dat0", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("sdmmc2_dat1.sdmmc2_dat1", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("sdmmc2_dat2.sdmmc2_dat2", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP); ++ + expansion_config.mmc_settings = EXPANSION_MMC_WIFI; + #endif + } +@@ -1208,12 +1245,24 @@ static void __init omap3_beagle_init(void) + gpio_export(162, 1); + } + +- if (!strcmp(expansionboard_name, "bbtoys-wifi")) ++ if ((!strcmp(expansionboard_name, "bbtoys-wifi")) || (!strcmp(expansionboard_name, "lsr-com6l-adpt"))) + { + #if IS_ENABLED(CONFIG_WL12XX) +- omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO); +- if (wl12xx_set_platform_data(&omap_beagle_wlan_data)) +- pr_err("error setting wl12xx data\n"); ++ pr_info("Beagle expansionboard: initializing wl12xx platform\n"); ++ ++ if (!strcmp(wl12xx_name, "wl12xx_26mhz")) { ++ pr_info("wl12xx: 26Mhz reference clock (TiWi5)\n"); ++ omap_beagle_wlan_data_26mhz.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO); ++ if (wl12xx_set_platform_data(&omap_beagle_wlan_data_26mhz)) ++ pr_err("error setting wl12xx data\n"); ++ } else { ++ pr_info("wl12xx: 38.4Mhz reference clock (TiWi2/TiWi-BLE)\n"); ++ pr_info("wl12xx: for (TiWi5) support pass kernel [wl12xx_clk=wl12xx_26mhz]\n"); ++ omap_beagle_wlan_data.irq = gpio_to_irq(OMAP_BEAGLE_WLAN_IRQ_GPIO); ++ if (wl12xx_set_platform_data(&omap_beagle_wlan_data)) ++ pr_err("error setting wl12xx data\n"); ++ } ++ + pr_info("Beagle expansionboard: registering wl12xx bt platform device\n"); + platform_device_register(&wl12xx_device); + platform_device_register(&btwilink_device); +@@ -1307,6 +1356,7 @@ static int __init omap3_beagle_late_initcall(void) + early_param("buddy", expansionboard_setup); + early_param("buddy2", expansionboard2_setup); + early_param("camera", camera_setup); ++early_param("wl12xx_clk", wl12xx_setup); + + late_initcall(omap3_beagle_late_initcall); + +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch b/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch new file mode 100644 index 0000000..a8edc77 --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch @@ -0,0 +1,73 @@ +From 89eb49ac0268518799984fa035ac3fea0ae758ec Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Mon, 21 Jan 2013 11:52:20 -0600 +Subject: [PATCH 11/11] Beagle: expansion: LSR COM6L Adapter Board also + initialize the 24c256 eeprom + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 5a7e7b5..6797488 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -39,6 +39,7 @@ + #include <linux/regulator/machine.h> + #include <linux/regulator/fixed.h> + #include <linux/i2c/twl.h> ++#include <linux/i2c/at24.h> + + #include <asm/mach-types.h> + #include <asm/mach/arch.h> +@@ -214,6 +215,7 @@ enum { + EXPANSION_I2C_NONE = 0, + EXPANSION_I2C_ZIPPY, + EXPANSION_I2C_7ULCD, ++ EXPANSION_I2C_COM6L, + }; + + static struct { +@@ -856,6 +858,20 @@ static struct isp_platform_data beagle_isp_platform_data = { + }; + #endif + ++static struct at24_platform_data beagle_at24_eeprom_info = { ++ .byte_len = (256*1024) / 8, ++ .page_size = 64, ++ .flags = AT24_FLAG_ADDR16, ++ .context = (void *)NULL, ++}; ++ ++static struct i2c_board_info __initdata com6l_adpt_eeprom[] = { ++ { ++ I2C_BOARD_INFO("24c256", 0x50), ++ .platform_data = &beagle_at24_eeprom_info, ++ }, ++}; ++ + static int __init omap3_beagle_i2c_init(void) + { + omap3_pmic_get_config(&beagle_twldata, +@@ -875,6 +891,9 @@ static int __init omap3_beagle_i2c_init(void) + case EXPANSION_I2C_ZIPPY: + omap_register_i2c_bus(2, 400, zippy_i2c2_rtc, ARRAY_SIZE(zippy_i2c2_rtc)); + break; ++ case EXPANSION_I2C_COM6L: ++ omap_register_i2c_bus(2, 400, com6l_adpt_eeprom, ARRAY_SIZE(com6l_adpt_eeprom)); ++ break; + default: + omap_register_i2c_bus(2, 400, NULL, 0); + } +@@ -1155,6 +1174,7 @@ static void __init omap3_beagle_init(void) + omap_mux_init_signal("sdmmc2_dat3.sdmmc2_dat3", OMAP_PIN_INPUT_PULLUP); + + expansion_config.mmc_settings = EXPANSION_MMC_WIFI; ++ expansion_config.i2c_settings = EXPANSION_I2C_COM6L; + #endif + } + +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch b/src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch new file mode 100644 index 0000000..2039e4a --- /dev/null +++ b/src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch @@ -0,0 +1,43 @@ +From d78f1a01cc52ebad5d59edad772f2b403bfe67bd Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Wed, 12 Dec 2012 11:34:29 -0600 +Subject: [PATCH 11/11] WIP: Beagle: expansion: extend spidev to uart2 + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap3beagle.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c +index 4fa880a..e4cfd5f 100644 +--- a/arch/arm/mach-omap2/board-omap3beagle.c ++++ b/arch/arm/mach-omap2/board-omap3beagle.c +@@ -1162,6 +1162,16 @@ static void __init omap3_beagle_init(void) + if (gpio_is_valid(beagle_config.dvi_pd_gpio)) + omap_mux_init_gpio(beagle_config.dvi_pd_gpio, OMAP_PIN_OUTPUT); + omap_display_init(&beagle_dss_data); ++ ++ if (!strcmp(expansionboard_name, "spidev")) ++ { ++ pr_info("Beagle expansion: spidev: enable uart2/ttyO1\n"); ++ omap_mux_init_signal("uart2_tx.uart2_tx", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("uart2_rts.uart2_rts", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("uart2_cts.uart2_cts", OMAP_PIN_INPUT); ++ omap_mux_init_signal("mcbsp3_fsx.uart2_rx", OMAP_PIN_INPUT); ++ } ++ + omap_serial_init(); + omap_sdrc_init(mt46h32m32lf6_sdrc_params, + mt46h32m32lf6_sdrc_params); +@@ -1248,7 +1258,7 @@ static void __init omap3_beagle_init(void) + + if (!strcmp(expansionboard_name, "spidev")) + { +- pr_info("Beagle expansionboard: registering spidev\n"); ++ pr_info("Beagle expansionboard: spidev: enabling spi3/spi4\n"); + omap3_beagle_config_mcspi3_mux(); + omap3_beagle_config_mcspi4_mux(); + spi_register_board_info(beagle_mcspi_board_info, ARRAY_SIZE(beagle_mcspi_board_info)); +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch b/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch new file mode 100644 index 0000000..de0e84b --- /dev/null +++ b/src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch @@ -0,0 +1,27 @@ +From a3abd1593e381deb4b1f358a55069988996eeae4 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Tue, 2 Aug 2011 21:55:34 -0500 +Subject: [PATCH 1/2] panda: fix wl12xx regulator + +pulled from: http://elinux.org/Panda_How_to_kernel_3_0_rel + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/twl-common.c | 1 + + 1 files changed, 1 insertions(+), 0 deletions(-) + +diff --git a/arch/arm/mach-omap2/twl-common.c b/arch/arm/mach-omap2/twl-common.c +index e49b40b..0fd1a70 100644 +--- a/arch/arm/mach-omap2/twl-common.c ++++ b/arch/arm/mach-omap2/twl-common.c +@@ -360,6 +360,7 @@ static struct regulator_init_data omap4_vusb_idata = { + static struct regulator_init_data omap4_clk32kg_idata = { + .constraints = { + .valid_ops_mask = REGULATOR_CHANGE_STATUS, ++ .always_on = true, + }, + }; + +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch b/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch new file mode 100644 index 0000000..694bc36 --- /dev/null +++ b/src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch @@ -0,0 +1,36 @@ +From 8de5d11f076ee25182df805ab78e0823ce4dd2be Mon Sep 17 00:00:00 2001 +From: Ricardo Salveti de Araujo ricardo.salveti@linaro.org +Date: Tue, 25 Oct 2011 10:06:39 +0200 +Subject: [PATCH 2/2] ti-st/st-kim: fixing firmware path + +Signed-off-by: Ricardo Salveti de Araujo ricardo.salveti@linaro.org +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/misc/ti-st/st_kim.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c +index 9ff942a..f673464 100644 +--- a/drivers/misc/ti-st/st_kim.c ++++ b/drivers/misc/ti-st/st_kim.c +@@ -244,7 +244,7 @@ static long read_local_version(struct kim_data_s *kim_gdata, char *bts_scr_name) + if (version & 0x8000) + maj_ver |= 0x0008; + +- sprintf(bts_scr_name, "TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver); ++ sprintf(bts_scr_name, "ti-connectivity/TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver); + + /* to be accessed later via sysfs entry */ + kim_gdata->version.full = version; +@@ -287,7 +287,7 @@ static long download_firmware(struct kim_data_s *kim_gdata) + long len = 0; + unsigned char *ptr = NULL; + unsigned char *action_ptr = NULL; +- unsigned char bts_scr_name[30] = { 0 }; /* 30 char long bts scr name? */ ++ unsigned char bts_scr_name[50] = { 0 }; /* 50 char long bts scr name? */ + int wr_room_space; + int cmd_size; + unsigned long timeout; +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch b/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch new file mode 100644 index 0000000..9369852 --- /dev/null +++ b/src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch @@ -0,0 +1,112 @@ +From 3304f2feba4999fc1013911f0cf0d9acc33a0117 Mon Sep 17 00:00:00 2001 +From: Adrien Ferre ferre.adrien@gmail.com +Date: Mon, 25 Mar 2013 12:00:38 -0500 +Subject: [PATCH 3/3] Panda: expansion: add spidev + +I've made a patch to enable spidev on pandaboards using buddy=spidev just like for beagle. + +https://github.com/RobertCNelson/stable-kernel/issues/22 + +Signed-off-by: Adrien Ferre ferre.adrien@gmail.com +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap4panda.c | 43 ++++++++++++++++++++++++++++++++ + 1 file changed, 43 insertions(+) + +diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c +index 1e2c75e..3563f86 100644 +--- a/arch/arm/mach-omap2/board-omap4panda.c ++++ b/arch/arm/mach-omap2/board-omap4panda.c +@@ -22,6 +22,7 @@ + #include <linux/clk.h> + #include <linux/io.h> + #include <linux/leds.h> ++#include <linux/irq.h> + #include <linux/gpio.h> + #include <linux/usb/otg.h> + #include <linux/i2c/twl.h> +@@ -35,6 +36,7 @@ + #include <linux/wl12xx.h> + #include <linux/irqchip/arm-gic.h> + #include <linux/platform_data/omap-abe-twl6040.h> ++#include <linux/spi/spi.h> + + #include <asm/mach-types.h> + #include <asm/mach/arch.h> +@@ -54,6 +56,8 @@ + #define GPIO_WIFI_PMENA 43 + #define GPIO_WIFI_IRQ 53 + ++char expboard_name[16]; ++ + /* wl127x BT, FM, GPS connectivity chip */ + static struct ti_st_plat_data wilink_platform_data = { + .nshutdown_gpio = 46, +@@ -99,6 +103,25 @@ static struct platform_device leds_gpio = { + }, + }; + ++static struct spi_board_info panda_mcspi_board_info[] = { ++ /* spi 1.0 */ ++ { ++ .modalias = "spidev", ++ .max_speed_hz = 48000000, //48 Mbps ++ .bus_num = 1, ++ .chip_select = 0, ++ .mode = SPI_MODE_1, ++ }, ++ /* spi 1.1 */ ++ { ++ .modalias = "spidev", ++ .max_speed_hz = 48000000, //48 Mbps ++ .bus_num = 1, ++ .chip_select = 1, ++ .mode = SPI_MODE_1, ++ }, ++}; ++ + static struct omap_abe_twl6040_data panda_abe_audio_data = { + /* Audio out */ + .has_hs = ABE_TWL6040_LEFT | ABE_TWL6040_RIGHT, +@@ -161,6 +184,18 @@ static struct usbhs_omap_platform_data usbhs_bdata __initdata = { + .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, + }; + ++static int __init expansionboard_setup(char *str) ++{ ++ if (!machine_is_omap4_panda()) ++ return 0; ++ ++ if (!str) ++ return -EINVAL; ++ strncpy(expboard_name, str, 16); ++ pr_info("Panda expansionboard: %s\n", expboard_name); ++ return 0; ++} ++ + static void __init omap4_ehci_init(void) + { + int ret; +@@ -435,11 +470,19 @@ static void __init omap4_panda_init(void) + omap_sdrc_init(NULL, NULL); + omap4_twl6030_hsmmc_init(mmc); + omap4_ehci_init(); ++ if (!strcmp(expboard_name, "spidev")) { ++ #if IS_ENABLED(CONFIG_SPI_SPIDEV) ++ pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n"); ++ spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info)); ++ #endif ++ } + usb_bind_phy("musb-hdrc.2.auto", 0, "omap-usb2.3.auto"); + usb_musb_init(&musb_board_data); + omap4_panda_display_init(); + } + ++early_param("buddy", expansionboard_setup); ++ + MACHINE_START(OMAP4_PANDA, "OMAP4 Panda board") + /* Maintainer: David Anders - Texas Instruments Inc */ + .atag_offset = 0x100, +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch b/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch new file mode 100644 index 0000000..12194e4 --- /dev/null +++ b/src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch @@ -0,0 +1,38 @@ +From 359104632fa556e3c5c78e4016c2585896225716 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Mon, 1 Apr 2013 12:17:50 -0500 +Subject: [PATCH 4/4] HACK: PandaES: disable cpufreq so board will boot + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/cpufreq/omap-cpufreq.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/cpufreq/omap-cpufreq.c b/drivers/cpufreq/omap-cpufreq.c +index 0279d18..0a8ac09 100644 +--- a/drivers/cpufreq/omap-cpufreq.c ++++ b/drivers/cpufreq/omap-cpufreq.c +@@ -31,6 +31,8 @@ + #include <asm/smp_plat.h> + #include <asm/cpu.h> + ++#include "../../arch/arm/mach-omap2/soc.h" ++ + /* OPP tolerance in percentage */ + #define OPP_TOLERANCE 4 + +@@ -246,6 +248,11 @@ static struct cpufreq_driver omap_driver = { + + static int omap_cpufreq_probe(struct platform_device *pdev) + { ++ if (cpu_is_omap446x()) { ++ pr_err("%s: unsupported Silicon?\n", __func__); ++ return -EINVAL; ++ } ++ + mpu_dev = get_cpu_device(0); + if (!mpu_dev) { + pr_warning("%s: unable to get the mpu device\n", __func__); +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch b/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch new file mode 100644 index 0000000..fa64934 --- /dev/null +++ b/src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch @@ -0,0 +1,122 @@ +From 76c1d8cdfa0967b04ca8168a77bb101d4ea71150 Mon Sep 17 00:00:00 2001 +From: Santosh Shilimkar santosh.shilimkar@ti.com +Date: Mon, 18 Mar 2013 06:51:30 +0000 +Subject: [PATCH 6/6] ARM: hw_breakpoint: Enable debug powerdown only if + system supports 'has_ossr' + +On Friday 15 March 2013 10:30 AM, Will Deacon wrote: +> On Thu, Mar 14, 2013 at 01:08:00PM +0530, Santosh Shilimkar wrote: +>> Will, +> +> Hi guys, +> +> I'm out of the office at the moment and have really terrible connectivity, +> so I can't do too much until next week. However, I don't think adding the +> has_ossr check is the right fix for this problem. +> +>> On Wednesday 13 March 2013 05:59 PM, Lokesh Vutla wrote: +>>> Hi Dietmar, +>>> On Wednesday 13 March 2013 05:35 PM, Dietmar Eggemann wrote: +>>>> On 13/03/13 06:52, Lokesh Vutla wrote: +>>>>> Commit {9a6eb31 ARM: hw_breakpoint: Debug powerdown support for +>>>>> self-hosted +>>>>> debug} introduces debug powerdown support for self-hosted debug. +>>>>> While merging the patch 'has_ossr' check was removed which +>>>>> was needed for hardwares which doesn't support self-hosted debug. +>>>>> Pandaboard (A9) is one such hardware and Dietmar's orginial +>>>>> patch did mention this issue. +>>>>> Without that check on Panda with CPUIDLE enabled, a flood of +>>>>> below messages thrown. +>>>>> +>>>>> [ 3.597930] hw-breakpoint: CPU 0 failed to disable vector catch +>>>>> [ 3.597991] hw-breakpoint: CPU 1 failed to disable vector catch +> +> Ok, so this means that we've taken an undefined instruction exception while +> trying to reset the debug registers on the PM_EXIT path. Now, the code there +> deals with CPUs that don't have the save/restore registers just fine, so +> that shouldn't have anything to do with this problem, particularly if the +> bit that is tripping us up is related to clearing vector catch. +> +Agree. + +> Furthermore, I was under the impression that hw_breakpoint did actually +> work on panda, which implies that a cold boot *does* manage to reset the +> registers (can you please confirm this by looking in your dmesg during +> boot?). In that case, it seems as though a PM cycle is powering down a +> bunch of debug logic that was powered up during boot, and then we trip over +> because we can't access the register bank. +> +Actually it seems to be without PM. Thanks to analysis from Lokesh, the issue +can be seen even with just suspend or cpu hotplug. So cold boot as such is +fine. + +> The proper solution to this problem requires us to establish exactly what is +> turning off the debug registers, and then having an OMAP PM notifier to +> enable it again. Assuming this has always been the case, I expect hardware +> debug across PM fails silently with older kernels. +> +This has been always the case it seems with CPU power cycle. +After the CPU is power cycled, 'DBGAUTHSTATUS' reads '0xaa' rather +than '0xaf' which means 'DBGEN = 0' and hence code fails to enable +monitor mode. This happens on both secure and GP devices and it can not +be patched since the secure code is ROM'ed. We didn't notice so far +because hw_breakpoint support was not default enabled on OMAP till the +multi-platform build. + +>> I was also wondering whether we should just warn once rather +>> than continuous warnings in the notifier. Patch is end of the +>> email. +> +> Could do, but I'd like to see a fix for the real issue before we simply hide +> the warnings :) +> +Agree here too. As evident above, the feature won't work on OMAP4 +devices with PM and hence some solution is needed. + +What you think of below ? + +>From d74b4264f6a5967b0f7ada96aad77ab0ac30dbed Mon Sep 17 00:00:00 2001 +From: Santosh Shilimkar santosh.shilimkar@ti.com +Date: Mon, 18 Mar 2013 11:59:04 +0530 +Subject: [PATCH] ARM: hw_breakpoints: Check for CPU debug availability before + enabling it + +CPU debug features like hardware break, watchpoints can be used only when +the debug mode is enabled and available for non-secure mode. + +Hence check 'DBGAUTHSTATUS.DBGEN' before proceeding to enable the +features. + +Thanks to Will for pointers and Lokesh for the analysis of the issue on +OMAP4 where after a CPU power cycle, debug mode gets disabled. + +Cc: Will Deacon Will.Deacon@arm.com + +Tested-by: Lokesh Vutla lokeshvutla@ti.com +Signed-off-by: Santosh Shilimkar santosh.shilimkar@ti.com +--- + arch/arm/kernel/hw_breakpoint.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/arch/arm/kernel/hw_breakpoint.c b/arch/arm/kernel/hw_breakpoint.c +index 96093b7..683a7cf 100644 +--- a/arch/arm/kernel/hw_breakpoint.c ++++ b/arch/arm/kernel/hw_breakpoint.c +@@ -930,6 +930,14 @@ static void reset_ctrl_regs(void *unused) + int i, raw_num_brps, err = 0, cpu = smp_processor_id(); + u32 val; + ++ /* Check if we have access to CPU debug features */ ++ ARM_DBG_READ(c7, c14, 6, val); ++ if ((val & 0x1) == 0) { ++ pr_warn_once("CPU %d debug is unavailable\n", cpu); ++ cpumask_or(&debug_err_mask, &debug_err_mask, cpumask_of(cpu)); ++ return; ++ } ++ + /* + * v7 debug contains save and restore registers so that debug state + * can be maintained across low-power modes without leaving the debug +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch b/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch new file mode 100644 index 0000000..0799d83 --- /dev/null +++ b/src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch @@ -0,0 +1,39 @@ +From 42d8b74383b670412107c943efd2fec46aa04158 Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Sat, 1 Jun 2013 16:32:46 -0500 +Subject: [PATCH 07/10] Revert "regulator: twl: Remove TWL6030_FIXED_RESOURCE" + +This reverts commit d1924519fe1dada0cfd9a228bf2ff1ea15840c84. + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/regulator/twl-regulator.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c +index fb6e67d..7ce7edf 100644 +--- a/drivers/regulator/twl-regulator.c ++++ b/drivers/regulator/twl-regulator.c +@@ -933,6 +933,19 @@ static const struct twlreg_info TWLFIXED_INFO_##label = { \ + }, \ + } + ++#define TWL6030_FIXED_RESOURCE(label, offset, turnon_delay) \ ++static struct twlreg_info TWLRES_INFO_##label = { \ ++ .base = offset, \ ++ .desc = { \ ++ .name = #label, \ ++ .id = TWL6030_REG_##label, \ ++ .ops = &twl6030_fixed_resource, \ ++ .type = REGULATOR_VOLTAGE, \ ++ .owner = THIS_MODULE, \ ++ .enable_time = turnon_delay, \ ++ }, \ ++ } ++ + #define TWL6025_ADJUSTABLE_SMPS(label, offset) \ + static const struct twlreg_info TWLSMPS_INFO_##label = { \ + .base = offset, \ +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch b/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch new file mode 100644 index 0000000..4abbd05 --- /dev/null +++ b/src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch @@ -0,0 +1,34 @@ +From 48e4598f1b8e9dd486d551b76c5f5021d0dc946d Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Sat, 1 Jun 2013 16:32:48 -0500 +Subject: [PATCH 08/10] Revert "regulator: twl: Remove another unused variable + warning" + +This reverts commit 029dd3cefa46ecdd879f9b4e2df3bdf4371cc22c. + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/regulator/twl-regulator.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c +index 7ce7edf..124a2f2 100644 +--- a/drivers/regulator/twl-regulator.c ++++ b/drivers/regulator/twl-regulator.c +@@ -633,6 +633,13 @@ static struct regulator_ops twl6030fixed_ops = { + .get_status = twl6030reg_get_status, + }; + ++static struct regulator_ops twl6030_fixed_resource = { ++ .enable = twl6030reg_enable, ++ .disable = twl6030reg_disable, ++ .is_enabled = twl6030reg_is_enabled, ++ .get_status = twl6030reg_get_status, ++}; ++ + /* + * SMPS status and control + */ +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch b/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch new file mode 100644 index 0000000..27bc6ea --- /dev/null +++ b/src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch @@ -0,0 +1,28 @@ +From 76cc643690032d9789bbd17c9a3542cae4b0603e Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Sat, 1 Jun 2013 16:32:51 -0500 +Subject: [PATCH 09/10] Revert "regulator: twl: Remove references to the + twl4030 regulator" + +This reverts commit e76ab829cc2d8b6350a3f01fffb208df4d7d8c1b. + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/regulator/twl-regulator.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c +index 124a2f2..5a18317 100644 +--- a/drivers/regulator/twl-regulator.c ++++ b/drivers/regulator/twl-regulator.c +@@ -1021,6 +1021,7 @@ TWL6030_FIXED_LDO(VDAC, 0x64, 1800, 0); + TWL6030_FIXED_LDO(VUSB, 0x70, 3300, 0); + TWL6030_FIXED_LDO(V1V8, 0x16, 1800, 0); + TWL6030_FIXED_LDO(V2V1, 0x1c, 2100, 0); ++TWL6030_FIXED_RESOURCE(CLK32KG, 0x8C, 0); + TWL6025_ADJUSTABLE_SMPS(SMPS3, 0x34); + TWL6025_ADJUSTABLE_SMPS(SMPS4, 0x10); + TWL6025_ADJUSTABLE_SMPS(VIO, 0x16); +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch b/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch new file mode 100644 index 0000000..ad18b29 --- /dev/null +++ b/src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch @@ -0,0 +1,49 @@ +From ffdb3fad79cf70dcc943764f075215d6525435be Mon Sep 17 00:00:00 2001 +From: Robert Nelson robertcnelson@gmail.com +Date: Sat, 1 Jun 2013 16:32:54 -0500 +Subject: [PATCH 10/10] Revert "regulator: twl: Remove references to 32kHz + clock from DT bindings" + +This reverts commit 0e8e5c34cf1a8beaaf0a6a05c053592693bf8cb4. + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + Documentation/devicetree/bindings/regulator/twl-regulator.txt | 1 + + drivers/regulator/twl-regulator.c | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/Documentation/devicetree/bindings/regulator/twl-regulator.txt b/Documentation/devicetree/bindings/regulator/twl-regulator.txt +index 658749b..0c3395d 100644 +--- a/Documentation/devicetree/bindings/regulator/twl-regulator.txt ++++ b/Documentation/devicetree/bindings/regulator/twl-regulator.txt +@@ -15,6 +15,7 @@ For twl6030 regulators/LDOs + - "ti,twl6030-vusb" for VUSB LDO + - "ti,twl6030-v1v8" for V1V8 LDO + - "ti,twl6030-v2v1" for V2V1 LDO ++ - "ti,twl6030-clk32kg" for CLK32KG RESOURCE + - "ti,twl6030-vdd1" for VDD1 SMPS + - "ti,twl6030-vdd2" for VDD2 SMPS + - "ti,twl6030-vdd3" for VDD3 SMPS +diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c +index 5a18317..40f27bb 100644 +--- a/drivers/regulator/twl-regulator.c ++++ b/drivers/regulator/twl-regulator.c +@@ -1054,6 +1054,7 @@ static u8 twl_get_smps_mult(void) + #define TWL6030_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6030, label) + #define TWL6025_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWL6025, label) + #define TWLFIXED_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLFIXED, label) ++#define TWLRES_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLRES, label) + #define TWLSMPS_OF_MATCH(comp, label) TWL_OF_MATCH(comp, TWLSMPS, label) + + static const struct of_device_id twl_of_match[] = { +@@ -1101,6 +1102,7 @@ static const struct of_device_id twl_of_match[] = { + TWLFIXED_OF_MATCH("ti,twl6030-vusb", VUSB), + TWLFIXED_OF_MATCH("ti,twl6030-v1v8", V1V8), + TWLFIXED_OF_MATCH("ti,twl6030-v2v1", V2V1), ++ TWLRES_OF_MATCH("ti,twl6030-clk32kg", CLK32KG), + TWLSMPS_OF_MATCH("ti,twl6025-smps3", SMPS3), + TWLSMPS_OF_MATCH("ti,twl6025-smps4", SMPS4), + TWLSMPS_OF_MATCH("ti,twl6025-vio", VIO), +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch b/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch new file mode 100644 index 0000000..da9fcda --- /dev/null +++ b/src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch @@ -0,0 +1,50 @@ +From 9f5066a898b77f2fe2b1f0946bb6afebe3d08f6d Mon Sep 17 00:00:00 2001 +From: Yann yann.wanwanscappel@free.fr +Date: Sat, 8 Jun 2013 13:06:37 -0500 +Subject: [PATCH 7/7] panda: spidev: setup pinmux + +It works fine on my board, I've been able to perform data transfers using the spidev_test program provided in kernel documentation +(shortcut between SIMO and SOMI to perform an hardware loopback). I also checked that CS0 and CS1 and CLK are properly driven using my scope. + +The clock is strangely configured as input, but it is also the case for omap3 beagle board, so I guess this is fine. + +Signed-off-by: Yann yann.wanwanscappel@free.fr +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + arch/arm/mach-omap2/board-omap4panda.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c +index 3563f86..10bb576 100644 +--- a/arch/arm/mach-omap2/board-omap4panda.c ++++ b/arch/arm/mach-omap2/board-omap4panda.c +@@ -103,6 +103,16 @@ static struct platform_device leds_gpio = { + }, + }; + ++static void __init omap4_panda_config_mcspi1_mux(void) ++{ ++ /* NOTE: Clock pins need to be in input mode */ ++ omap_mux_init_signal("mcspi1_clk", OMAP_PIN_INPUT); ++ omap_mux_init_signal("mcspi1_simo", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("mcspi1_somi", OMAP_PIN_INPUT_PULLUP); ++ omap_mux_init_signal("mcspi1_cs0", OMAP_PIN_OUTPUT); ++ omap_mux_init_signal("mcspi1_cs1", OMAP_PIN_OUTPUT); ++} ++ + static struct spi_board_info panda_mcspi_board_info[] = { + /* spi 1.0 */ + { +@@ -472,7 +482,8 @@ static void __init omap4_panda_init(void) + omap4_ehci_init(); + if (!strcmp(expboard_name, "spidev")) { + #if IS_ENABLED(CONFIG_SPI_SPIDEV) +- pr_info("Panda expansionboard: spidev: enabling spi3/spi4\n"); ++ pr_info("Panda expansionboard: spidev: enabling spi1.0 and spi1.1\n"); ++ omap4_panda_config_mcspi1_mux(); + spi_register_board_info(panda_mcspi_board_info, ARRAY_SIZE(panda_mcspi_board_info)); + #endif + } +-- +1.7.10.4 + diff --git a/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch b/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch new file mode 100644 index 0000000..8e8a08e --- /dev/null +++ b/src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch @@ -0,0 +1,78 @@ +From 6bce72b21600d9f52ae60d5bf80d00152eb75b50 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman steve@sakoman.com +Date: Tue, 19 Jan 2010 21:19:15 -0800 +Subject: [PATCH 1/2] OMAP: DSS2: add bootarg for selecting svideo + + OMAP: DSS2: add bootarg for selecting svideo or composite for tv output + also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/video/omap2/dss/venc.c | 22 ++++++++++++++++++++++ + drivers/video/omap2/omapfb/omapfb-main.c | 10 +++++++++- + 2 files changed, 31 insertions(+), 1 deletions(-) + +diff --git a/drivers/video/omap2/dss/venc.c b/drivers/video/omap2/dss/venc.c +index 56efa3b..d46f7f8 100644 +--- a/drivers/video/omap2/dss/venc.c ++++ b/drivers/video/omap2/dss/venc.c +@@ -86,6 +86,11 @@ + #define VENC_OUTPUT_TEST 0xC8 + #define VENC_DAC_B__DAC_C 0xC8 + ++static char *tv_connection; ++ ++module_param_named(tvcable, tv_connection, charp, 0); ++MODULE_PARM_DESC(tvcable, "TV connection type (svideo, composite)"); ++ + struct venc_config { + u32 f_control; + u32 vidout_ctrl; +@@ -465,6 +470,23 @@ static int venc_power_on(struct omap_dss_device *dssdev) + if (r) + goto err2; + ++ /* Allow the TV output to be overriden */ ++ if (tv_connection) { ++ if (strcmp(tv_connection, "svideo") == 0) { ++ printk(KERN_INFO ++ "omapdss: tv output is svideo.\n"); ++ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO; ++ } else if (strcmp(tv_connection, "composite") == 0) { ++ printk(KERN_INFO ++ "omapdss: tv output is composite.\n"); ++ dssdev->phy.venc.type = OMAP_DSS_VENC_TYPE_COMPOSITE; ++ } else { ++ printk(KERN_INFO ++ "omapdss: unsupported output type'%s'.\n", ++ tv_connection); ++ } ++ } ++ + return 0; + + err2: +diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c +index bc225e4..34d6679 100644 +--- a/drivers/video/omap2/omapfb/omapfb-main.c ++++ b/drivers/video/omap2/omapfb/omapfb-main.c +@@ -2032,7 +2032,15 @@ static int omapfb_mode_to_timings(const char *mode_str, + int r; + + #ifdef CONFIG_OMAP2_DSS_VENC +- if (strcmp(mode_str, "pal") == 0) { ++ if (strcmp(mode_str, "pal-16") == 0) { ++ *timings = omap_dss_pal_timings; ++ *bpp = 16; ++ return 0; ++ } else if (strcmp(mode_str, "ntsc-16") == 0) { ++ *timings = omap_dss_ntsc_timings; ++ *bpp = 16; ++ return 0; ++ } else if (strcmp(mode_str, "pal") == 0) { + *timings = omap_dss_pal_timings; + *bpp = 24; + return 0; +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch b/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch new file mode 100644 index 0000000..1b936f5 --- /dev/null +++ b/src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch @@ -0,0 +1,28 @@ +From 747de06d5cc69b2407684ba0455fff5c1d6af797 Mon Sep 17 00:00:00 2001 +From: Steve Sakoman steve@sakoman.com +Date: Sat, 19 Dec 2009 06:52:43 -0800 +Subject: [PATCH 2/2] video: add timings for hd720 + +Signed-off-by: Robert Nelson robertcnelson@gmail.com +--- + drivers/video/modedb.c | 4 ++++ + 1 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c +index a9a907c..5b686de 100644 +--- a/drivers/video/modedb.c ++++ b/drivers/video/modedb.c +@@ -103,6 +103,10 @@ static const struct fb_videomode modedb[] = { + { NULL, 70, 1024, 768, 13333, 144, 24, 29, 3, 136, 6, 0, + FB_VMODE_NONINTERLACED }, + ++ /* 1280x720 @ 60 Hz, 45 kHz hsync, CEA 681-E Format 4 */ ++ { "hd720", 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5, 0, ++ FB_VMODE_NONINTERLACED }, ++ + /* 1280x1024 @ 87 Hz interlaced, 51 kHz hsync */ + { NULL, 87, 1280, 1024, 12500, 56, 16, 128, 1, 216, 12, 0, + FB_VMODE_INTERLACED }, +-- +1.7.7.6 + diff --git a/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch b/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch new file mode 100644 index 0000000..1ca1e70 --- /dev/null +++ b/src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch @@ -0,0 +1,34 @@ +From 29885f2f3d700341d322274db6ad085e601c0994 Mon Sep 17 00:00:00 2001 +From: Pantelis Antoniou panto@antoniou-consulting.com +Date: Fri, 4 Jan 2013 00:32:33 +0200 +Subject: [PATCH 3/3] arm: Export cache flush management symbols when + !MULTI_CACHE + +When compiling a kernel without CONFIG_MULTI_CACHE enabled the +dma access functions end up not being exported. Fix it. + +Signed-off-by: Pantelis Antoniou panto@antoniou-consulting.com +--- + arch/arm/kernel/setup.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c +index da1d1aa..dcb678c 100644 +--- a/arch/arm/kernel/setup.c ++++ b/arch/arm/kernel/setup.c +@@ -923,3 +923,12 @@ const struct seq_operations cpuinfo_op = { + .stop = c_stop, + .show = c_show + }; ++ ++/* export the cache management functions */ ++#ifndef MULTI_CACHE ++ ++EXPORT_SYMBOL(__glue(_CACHE,_dma_map_area)); ++EXPORT_SYMBOL(__glue(_CACHE,_dma_unmap_area)); ++EXPORT_SYMBOL(__glue(_CACHE,_dma_flush_range)); ++ ++#endif +-- +1.7.10.4 +
hooks/post-receive -- IPFire 2.x development tree