]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/commitdiff
Merge remote-tracking branch 'alfh/feature_htmlcleanup' into next
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Feb 2014 15:33:38 +0000 (16:33 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 17 Feb 2014 15:33:38 +0000 (16:33 +0100)
Conflicts:
html/cgi-bin/logs.cgi/firewalllogip.dat
html/cgi-bin/logs.cgi/firewalllogport.dat
html/cgi-bin/media.cgi

77 files changed:
config/cfgroot/graphs.pl
config/kernel/kernel.config.armv5tel-ipfire-multi
config/kernel/kernel.config.i586-ipfire
config/kernel/kernel.config.i586-ipfire-pae
config/rootfiles/common/i586/linux
config/rootfiles/packages/linux-pae
config/rootfiles/packages/perl-PDF-Create [deleted file]
config/u-boot/boot.scr
config/u-boot/boot.script
html/cgi-bin/atm-status.cgi
html/cgi-bin/country.cgi
html/cgi-bin/index.cgi
html/cgi-bin/logs.cgi/firewalllog.dat
html/cgi-bin/logs.cgi/firewalllogip.dat
html/cgi-bin/logs.cgi/firewalllogport.dat
html/cgi-bin/media.cgi
html/cgi-bin/ovpnmain.cgi
html/cgi-bin/qos.cgi
langs/de/cgi-bin/de.pl
langs/en/cgi-bin/en.pl
lfs/fireinfo
lfs/glibc
lfs/linux
lfs/nginx
lfs/perl-PDF-Create [deleted file]
make.sh
src/initscripts/init.d/leds
src/patches/fireinfo-0001-Exclude-some-more-invalid-patterns.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh886968.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh905575.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh905874.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh916986.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh928318.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh947882.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh952422.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh966775.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh966778.patch [new file with mode: 0644]
src/patches/glibc/glibc-rh970090.patch [new file with mode: 0644]
src/patches/kernel/omap/0002-omap2-twl-common-Add-default-power-configuration.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0001-omap3isp-Use-the-common-clock-framework.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0002-mt9m032-Fix-PLL-setup.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0003-mt9m032-Define-MT9M032_READ_MODE1-bits.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0004-mt9p031-Use-devm_-managed-helpers.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0005-mt9p031-Add-support-for-regulators.patch [new file with mode: 0644]
src/patches/kernel/omap/3isp/0006-mt9p031-Use-the-common-clock-framework.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0001-meego-modedb-add-Toshiba-LTA070B220F-800x480-support.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0002-backlight-Add-TLC59108-backlight-control-driver.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0003-tlc59108-adjust-for-beagleboard-uLCD7.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0004-zeroMAP-Open-your-eyes.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0005-ARM-OMAP-Beagle-use-TWL4030-generic-reset-script.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/0006-DSS2-use-DSI-PLL-for-DPI-with-OMAP3.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0001-Beagle-expansion-add-buddy-param-for-expansionboard-.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0002-Beagle-expansion-add-zippy.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0003-Beagle-expansion-add-zippy2.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0004-Beagle-expansion-add-trainer.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0005-Beagle-expansion-add-CircuitCo-ulcd-Support.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0006-Beagle-expansion-add-wifi.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0007-Beagle-expansion-add-beaglefpga.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0008-Beagle-expansion-add-spidev.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0009-Beagle-expansion-add-Aptina-li5m03-camera.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0010-Beagle-expansion-add-LSR-COM6L-Adapter-Board.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0011-Beagle-expansion-LSR-COM6L-Adapter-Board-also-initia.patch [new file with mode: 0644]
src/patches/kernel/omap/beagle/expansion/0011-WIP-Beagle-expansion-extend-spidev-to-uart2.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0001-panda-fix-wl12xx-regulator.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0002-ti-st-st-kim-fixing-firmware-path.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0003-Panda-expansion-add-spidev.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0004-HACK-PandaES-disable-cpufreq-so-board-will-boot.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0006-ARM-hw_breakpoint-Enable-debug-powerdown-only-if-sys.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0007-Revert-regulator-twl-Remove-TWL6030_FIXED_RESOURCE.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0008-Revert-regulator-twl-Remove-another-unused-variable-.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0009-Revert-regulator-twl-Remove-references-to-the-twl403.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0010-Revert-regulator-twl-Remove-references-to-32kHz-cloc.patch [new file with mode: 0644]
src/patches/kernel/omap/panda/0011-panda-spidev-setup-pinmux.patch [new file with mode: 0644]
src/patches/kernel/omap/sakoman/0001-OMAP-DSS2-add-bootarg-for-selecting-svideo.patch [new file with mode: 0644]
src/patches/kernel/omap/sakoman/0002-video-add-timings-for-hd720.patch [new file with mode: 0644]
src/patches/kernel/omap/sgx/0001-arm-Export-cache-flush-management-symbols-when-MULTI.patch [new file with mode: 0644]
src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch [new file with mode: 0644]

index a0df5c07d93188cd0b1ed3eeaffce5dade3a32c8..5a45ec964608cbce5a606c4a8883cd4231fb439d 100644 (file)
@@ -990,9 +990,9 @@ sub updateqosgraph {
                                push(@command, "DEF:$classline[1]=$mainsettings{'RRDLOG'}/class_$qossettings{'CLASSPRFX'}-$classline[1]_$qossettings{'DEV'}.rrd:bytes:AVERAGE");
 
                                if ($count eq "1") {
-                                       push(@command, "AREA:$classline[1]$color:Klasse $classline[1] -".sprintf("%15s",$classline[8]));
+                                       push(@command, "AREA:$classline[1]$color:$Lang::tr{'Class'} $classline[1] -".sprintf("%15s",$classline[8]));
                                } else {
-                                       push(@command, "STACK:$classline[1]$color:Klasse $classline[1] -".sprintf("%15s",$classline[8]));
+                                       push(@command, "STACK:$classline[1]$color:$Lang::tr{'Class'} $classline[1] -".sprintf("%15s",$classline[8]));
 
                                }
 
index 128742d4681bac3ce80a55103f5516b0f636d871..d35e569d8808b2a8deef25c6321dda545ed41fca 100644 (file)
@@ -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
 
index 6628c64272e676da3b2015b20b2d77e3a3ff396c..8ac3bd24626e05510e52184d90e13e8eb343977f 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.30 Kernel Configuration
+# Linux/x86 3.10.30-ipfire Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -1524,6 +1524,7 @@ CONFIG_SCSI_HPTIOP=m
 CONFIG_SCSI_BUSLOGIC=m
 # CONFIG_SCSI_FLASHPOINT is not set
 CONFIG_VMWARE_PVSCSI=m
+CONFIG_HYPERV_STORAGE=m
 CONFIG_LIBFC=m
 CONFIG_LIBFCOE=m
 CONFIG_FCOE=m
@@ -2298,6 +2299,7 @@ CONFIG_MWIFIEX_USB=m
 #
 # CONFIG_WAN is not set
 CONFIG_VMXNET3=m
+CONFIG_HYPERV_NET=m
 CONFIG_ISDN=y
 CONFIG_ISDN_I4L=m
 CONFIG_ISDN_PPP=y
@@ -3891,6 +3893,7 @@ CONFIG_FB_UDL=m
 # CONFIG_FB_MB862XX is not set
 # CONFIG_FB_BROADSHEET is not set
 # CONFIG_FB_AUO_K190X is not set
+CONFIG_FB_HYPERV=m
 # CONFIG_EXYNOS_VIDEO is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=m
@@ -4198,6 +4201,7 @@ CONFIG_HID_SPEEDLINK=m
 # CONFIG_HID_STEELSERIES is not set
 CONFIG_HID_SUNPLUS=m
 # CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_HYPERV_MOUSE is not set
 # CONFIG_HID_SMARTJOYPLUS is not set
 CONFIG_HID_TIVO=m
 CONFIG_HID_TOPSEED=m
@@ -4475,17 +4479,18 @@ CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_LM3530=m
 CONFIG_LEDS_LM3533=m
 CONFIG_LEDS_LM3642=m
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
 CONFIG_LEDS_LP3944=m
 CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
 CONFIG_LEDS_CLEVO_MAIL=m
-# CONFIG_LEDS_PCA955X is not set
+CONFIG_LEDS_PCA955X=m
 CONFIG_LEDS_PCA9633=m
-# CONFIG_LEDS_BD2802 is not set
+CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
 CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_DELL_NETBOOKS=m
@@ -4653,7 +4658,9 @@ CONFIG_VIRTIO_MMIO=m
 #
 # Microsoft Hyper-V guest support
 #
-# CONFIG_HYPERV is not set
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
 CONFIG_STAGING=y
 CONFIG_ET131X=m
 CONFIG_SLICOSS=m
index fc619b804e15cb28496f03ae487b8071a43bffad..44b521369da0c5e487c6c8f412ac2d3a4f358a58 100644 (file)
@@ -1,6 +1,6 @@
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 3.10.11-ipfire Kernel Configuration
+# Linux/x86 3.10.30-ipfire Kernel Configuration
 #
 # CONFIG_64BIT is not set
 CONFIG_X86_32=y
@@ -1105,7 +1105,7 @@ CONFIG_L2TP_V3=y
 CONFIG_L2TP_IP=m
 CONFIG_L2TP_ETH=m
 CONFIG_STP=y
-CONFIG_GARP=y
+CONFIG_GARP=m
 CONFIG_BRIDGE=y
 CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
@@ -1537,6 +1537,7 @@ CONFIG_SCSI_HPTIOP=m
 CONFIG_SCSI_BUSLOGIC=m
 # CONFIG_SCSI_FLASHPOINT is not set
 CONFIG_VMWARE_PVSCSI=m
+CONFIG_HYPERV_STORAGE=m
 CONFIG_LIBFC=m
 CONFIG_LIBFCOE=m
 CONFIG_FCOE=m
@@ -1728,6 +1729,7 @@ CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
 # CONFIG_BCACHE_EDEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
 CONFIG_DM_BUFIO=m
@@ -2313,6 +2315,7 @@ CONFIG_MWIFIEX_USB=m
 CONFIG_XEN_NETDEV_FRONTEND=m
 CONFIG_XEN_NETDEV_BACKEND=m
 CONFIG_VMXNET3=m
+CONFIG_HYPERV_NET=m
 CONFIG_ISDN=y
 CONFIG_ISDN_I4L=m
 CONFIG_ISDN_PPP=y
@@ -3910,6 +3913,7 @@ CONFIG_XEN_FBDEV_FRONTEND=m
 # CONFIG_FB_MB862XX is not set
 # CONFIG_FB_BROADSHEET is not set
 # CONFIG_FB_AUO_K190X is not set
+CONFIG_FB_HYPERV=m
 # CONFIG_EXYNOS_VIDEO is not set
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 CONFIG_LCD_CLASS_DEVICE=m
@@ -4216,6 +4220,7 @@ CONFIG_HID_SPEEDLINK=m
 # CONFIG_HID_STEELSERIES is not set
 CONFIG_HID_SUNPLUS=m
 # CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_HYPERV_MOUSE is not set
 # CONFIG_HID_SMARTJOYPLUS is not set
 CONFIG_HID_TIVO=m
 CONFIG_HID_TOPSEED=m
@@ -4493,17 +4498,18 @@ CONFIG_LEDS_CLASS=y
 CONFIG_LEDS_LM3530=m
 CONFIG_LEDS_LM3533=m
 CONFIG_LEDS_LM3642=m
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
 CONFIG_LEDS_LP3944=m
 CONFIG_LEDS_LP55XX_COMMON=m
 CONFIG_LEDS_LP5521=m
 CONFIG_LEDS_LP5523=m
 CONFIG_LEDS_LP5562=m
 CONFIG_LEDS_CLEVO_MAIL=m
-# CONFIG_LEDS_PCA955X is not set
+CONFIG_LEDS_PCA955X=m
 CONFIG_LEDS_PCA9633=m
-# CONFIG_LEDS_BD2802 is not set
+CONFIG_LEDS_BD2802=m
 CONFIG_LEDS_INTEL_SS4200=m
 CONFIG_LEDS_LT3593=m
 CONFIG_LEDS_DELL_NETBOOKS=m
@@ -4643,7 +4649,6 @@ CONFIG_DMA_ACPI=y
 #
 # DMA Clients
 #
-CONFIG_NET_DMA=y
 CONFIG_ASYNC_TX_DMA=y
 # CONFIG_DMATEST is not set
 CONFIG_DCA=m
@@ -4672,7 +4677,9 @@ CONFIG_VIRTIO_MMIO=m
 #
 # Microsoft Hyper-V guest support
 #
-# CONFIG_HYPERV is not set
+CONFIG_HYPERV=m
+CONFIG_HYPERV_UTILS=m
+CONFIG_HYPERV_BALLOON=m
 
 #
 # Xen driver support
index d6625169c1712f060142f6cecfdfcf14f6432ba4..3ec81ec952ed6568590ff8315b29c5854144c989 100644 (file)
@@ -281,6 +281,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/firmware/edd.ko
 #lib/modules/KVER-ipfire/kernel/drivers/firmware/iscsi_ibft.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpio
+#lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-cs5535.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-ich.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-sch.ko
 #lib/modules/KVER-ipfire/kernel/drivers/gpio/gpio-ts5500.ko
@@ -367,6 +368,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/hsi/clients
 #lib/modules/KVER-ipfire/kernel/drivers/hsi/clients/hsi_char.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hsi/hsi.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_balloon.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_utils.ko
+#lib/modules/KVER-ipfire/kernel/drivers/hv/hv_vmbus.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/abituguru.ko
 #lib/modules/KVER-ipfire/kernel/drivers/hwmon/abituguru3.ko
@@ -619,8 +624,10 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/isdn/mISDN/mISDN_dsp.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds
 #lib/modules/KVER-ipfire/kernel/drivers/leds/dell-led.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-bd2802.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-blinkm.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-clevo-mail.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-gpio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm3530.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm3533.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lm355x.ko
@@ -632,6 +639,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lp55xx-common.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ot200.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9532.ko
+#lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca955x.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-pca9633.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-ss4200.ko
 #lib/modules/KVER-ipfire/kernel/drivers/leds/leds-tca6507.ko
@@ -1505,6 +1514,8 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/wiznet/w5300.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/xircom
 #lib/modules/KVER-ipfire/kernel/drivers/net/ethernet/xircom/xirc2ps_cs.ko
+#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv
+#lib/modules/KVER-ipfire/kernel/drivers/net/hyperv/hv_netvsc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/ifb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/imq.ko
 #lib/modules/KVER-ipfire/kernel/drivers/net/macvlan.ko
@@ -1867,7 +1878,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/gdth.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/hpsa.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/hptiop.ko
-#lib/modules/KVER-ipfire/kernel/drivers/scsi/imm.ko
+#lib/modules/KVER-ipfire/kernel/drivers/scsi/hv_storvsc.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/in2000.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/initio.ko
 #lib/modules/KVER-ipfire/kernel/drivers/scsi/ipr.ko
@@ -2118,6 +2129,7 @@ lib/modules/KVER-ipfire
 #lib/modules/KVER-ipfire/kernel/drivers/video/geode/gxfb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/geode/lxfb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/hgafb.ko
+#lib/modules/KVER-ipfire/kernel/drivers/video/hyperv_fb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/i740fb.ko
 #lib/modules/KVER-ipfire/kernel/drivers/video/kyro
 #lib/modules/KVER-ipfire/kernel/drivers/video/kyro/kyrofb.ko
index a7eaf4000a68854b2b360f97c6ccf5ecd1d3ee43..00677aa02dddf803cd1a27c642fff4ba800ffb46 100644 (file)
@@ -364,6 +364,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/clients
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/clients/hsi_char.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hsi/hsi.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_balloon.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_utils.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/hv/hv_vmbus.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/abituguru.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/hwmon/abituguru3.ko
@@ -616,8 +620,10 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/isdn/mISDN/mISDN_dsp.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/dell-led.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-bd2802.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-blinkm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-clevo-mail.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-gpio.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm3530.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm3533.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lm355x.ko
@@ -629,6 +635,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lp55xx-common.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-lt3593.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ot200.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9532.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca955x.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-pca9633.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-ss4200.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/leds/leds-tca6507.ko
@@ -1502,6 +1510,8 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/wiznet/w5300.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/xircom
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ethernet/xircom/xirc2ps_cs.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv
+#lib/modules/KVER-ipfire-pae/kernel/drivers/net/hyperv/hv_netvsc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/ifb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/imq.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/net/macvlan.ko
@@ -1868,6 +1878,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/gdth.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hpsa.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hptiop.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/hv_storvsc.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/imm.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/in2000.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/scsi/initio.ko
@@ -2119,6 +2130,7 @@ lib/modules/KVER-ipfire-pae
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/geode/gxfb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/geode/lxfb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/hgafb.ko
+#lib/modules/KVER-ipfire-pae/kernel/drivers/video/hyperv_fb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/i740fb.ko
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/kyro
 #lib/modules/KVER-ipfire-pae/kernel/drivers/video/kyro/kyrofb.ko
diff --git a/config/rootfiles/packages/perl-PDF-Create b/config/rootfiles/packages/perl-PDF-Create
deleted file mode 100644 (file)
index f3b57aa..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#usr/lib/perl5/site_perl/5.12.3/PDF
-#usr/lib/perl5/site_perl/5.12.3/PDF/Create
-usr/lib/perl5/site_perl/5.12.3/PDF/Create.pm
-usr/lib/perl5/site_perl/5.12.3/PDF/Create/Outline.pm
-usr/lib/perl5/site_perl/5.12.3/PDF/Create/Page.pm
-#usr/lib/perl5/site_perl/5.12.3/PDF/Image
-usr/lib/perl5/site_perl/5.12.3/PDF/Image/GIF.pm
-usr/lib/perl5/site_perl/5.12.3/PDF/Image/JPEG.pm
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/PDF
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/PDF/Create
-#usr/lib/perl5/site_perl/5.12.3/MACHINE-linux-thread-multi/auto/PDF/Create/.packlist
-#usr/share/man/man3/PDF::Create.3
index 0d36a6baa1fdb98c5557ce57eca0bf6647510d2d..672b15277a2196c387b4804da9f994d564cd25eb 100755 (executable)
Binary files a/config/u-boot/boot.scr and b/config/u-boot/boot.scr differ
index 49e6c9c50937d298b5cdf3138c14d2bb8c311e97..66d76282fc0d6175c279099252d9676dad9398a1 100755 (executable)
@@ -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
index 5c0fa8be9482bd20159a04bfd6b70e1ed710d4cb..c2a9914f77de993e2bd282e7bbf0a42e953f1ec3 100644 (file)
@@ -46,6 +46,27 @@ foreach (@modems){
        my $lines=0;
        print "<center><table>";
        my $modem=$_;
+       my @pfile = `grep . /sys/class/atm/$modem/parameters/* 2>/dev/null`;
+       foreach (@pfile){
+               chomp($_);
+               my $param= `echo $_ | cut -d'/' -f7 | cut -d':' -f1`;
+               my $value= `cat /sys/class/atm/$modem/parameters/$param`;
+               chomp($param);
+               chomp($value);
+               if (!($param =~"uevent") 
+                 && !($param =~"resource")
+                 && !($param eq "")
+               ) {
+                               
+                       $lines++;
+                       if ($lines % 2){
+                               print "<tr bgcolor='$color{'color22'}'>";
+                       }else{
+                               print "<tr bgcolor='$color{'color20'}'>";
+                       }
+                       print "<td align='left'>$param</td><td align='left'>$value</td> ";              
+               }
+       }
        my @pfile = `grep . /sys/class/atm/$modem/device/* 2>/dev/null`;
        foreach (@pfile){
                chomp($_);
@@ -58,6 +79,8 @@ foreach (@modems){
                  && !($param =~"bInterface")
                  && !($param =~"bAlternateSetting")
                  && !($param =~"bNumEndpoints")
+                 && !($param =~"config matches")
+                 && !($param =~"resource")
                  && !($param eq "")
                ) {
                                
index 476a680f41b0233051ddbe540a17b4513b1cea6b..db6c07496d6e6d8169c855d8be1d0d3dfa804358 100644 (file)
@@ -43,11 +43,11 @@ require "${General::swroot}/header.pl";
 print "<TABLE WIDTH='100%' border='0' class='tbl'>";
 print "<tr><th width='5%'><b>Flag</b></th>";
 print "<th width='5%'><b>Code</b></th>";
-print "<th width='40%'><b>Country</b></th>";
+print "<th width='40%'><b>$Lang::tr{'country'}</b></th>";
 print "<th><b>&nbsp;</b></th>";
 print "<th width='5%'><b>Flag</b></th>";
 print "<th width='5%'><b>Code</b></th>";
-print "<th width='40%'><b>Country</b></th></tr>";
+print "<th width='40%'><b>$Lang::tr{'country'}</b></th></tr>";
 
 @flaglist = <$flagdir/*>;
 
index a497607f174d0fad9352afc8bd7b731a5127d77e..14eceac00fc2140d738e9fdbb968da20508a6bd8 100644 (file)
@@ -177,7 +177,7 @@ END
        my $HOSTNAME = (gethostbyaddr(pack("C4", split(/\./, $ipaddr)), 2))[0];
        if ( "$HOSTNAME" ne "" ) {
                print <<END;
-       <tr><td><b>Hostname:</b><td align='center'>$HOSTNAME</td><td></td>
+       <tr><td><b>$Lang::tr{'hostname'}:</b><td align='center'>$HOSTNAME</td><td></td>
 END
        }
 
@@ -187,7 +187,7 @@ END
                chomp($GATEWAY);
                close TMP;
                print <<END;
-       <tr><td><b>Gateway:</b><td align='center'>$GATEWAY</td><td></td></tr>
+       <tr><td><b>$Lang::tr{'gateway'}:</b><td align='center'>$GATEWAY</td><td></td></tr>
 END
        }
        #Read DNS server 1
index 73e62eab07a37ec869e9b8711c7f6ca591af83eb..8bb4900638b7b1ce431c99c18d568c65f159aa84 100644 (file)
@@ -285,7 +285,8 @@ END
 &Header::openbox('100%', 'left', $Lang::tr{'log'});
 print "<p><b>$Lang::tr{'firewall hits'} $date: $lines</b></p>";
 
-$start = $lines - ${Header::viewsize} if ($start >= $lines - ${Header::viewsize});
+my $lastPageIndex = $lines - ${Header::viewsize};
+$start = $lastPageIndex if ($start >= $lastPageIndex);
 $start = 0 if ($start < 0);
 
 my $prev;
@@ -297,7 +298,7 @@ my $prev;
     }
                                     
 my $next;
-    if ($start == $lines - ${Header::viewsize}) {
+    if ($start == $lastPageIndex) {
         $next = -1;
     } else {
         $next = $start + ${Header::viewsize};
@@ -316,7 +317,7 @@ print <<END
         <th align='center' class='boldbase'><b>$Lang::tr{'proto'}</b></th>
         <th align='center' class='boldbase'><b>$Lang::tr{'source'}<br/>$Lang::tr{'destination'}</b></th>
         <th align='center' class='boldbase'><b>$Lang::tr{'src port'}<br />$Lang::tr{'dst port'}</b></th>
-        <th align='center' class='boldbase'><b>Flag</b></th>
+        <th align='center' class='boldbase'><b>$Lang::tr{'country'}</b></th>
         <th align='center' class='boldbase'><b>$Lang::tr{'mac address'}</b></th>
 </tr>
 END
@@ -402,16 +403,18 @@ END
 
 print "<td align='center' width='50%'>";
 if ($prev != -1) {
+        print "<a href='/cgi-bin/logs.cgi/firewalllog.dat?0,$cgiparams{'MONTH'},$cgiparams{'DAY'}'>$Lang::tr{'first'}</a> "; 
         print "<a href='/cgi-bin/logs.cgi/firewalllog.dat?$prev,$cgiparams{'MONTH'},$cgiparams{'DAY'}'>$Lang::tr{'older'}</a>"; }
 else {
-        print "$Lang::tr{'older'}"; }
+        print "$Lang::tr{'first'} $Lang::tr{'older'}"; }
 print "</td>\n";
 
 print "<td align='center' width='50%'>";
 if ($next >= 0) {
-        print "<a href='/cgi-bin/logs.cgi/firewalllog.dat?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'}'>$Lang::tr{'newer'}</a>"; }
+        print "<a href='/cgi-bin/logs.cgi/firewalllog.dat?$next,$cgiparams{'MONTH'},$cgiparams{'DAY'}'>$Lang::tr{'newer'}</a> ";
+        print "<a href='/cgi-bin/logs.cgi/firewalllog.dat?$lastPageIndex,$cgiparams{'MONTH'},$cgiparams{'DAY'}'>$Lang::tr{'last'}</a>"; }      
 else {
-        print "$Lang::tr{'newer'}"; }
+        print "$Lang::tr{'newer'} $Lang::tr{'last'} "; }
 print "</td>\n";
 
 print <<END
index d24dd983fdb22518c974988fcda5a0fbe9254071..f671ab855f5237b7711e66d926ec0f4f45628216 100644 (file)
@@ -406,10 +406,10 @@ print <<END
 <table width='100%' class='tbl'>
 <tr>
 <th width='10%' align='center' class='boldbase'></th>
-<th width='30%' align='center' class='boldbase'><b>IP</b></th>
-<th width='10%' align='center' class='boldbase'><b>Flag</b></th>
+<th width='30%' align='center' class='boldbase'><b>$Lang::tr{'ip address'}</b></th>
+<th width='10%' align='center' class='boldbase'><b>$Lang::tr{'country'}</b></th>
 <th width='10%' align='center' class='boldbase'><b>Count</b></th>
-<th width='30%' align='center' class='boldbase'><b>Percent</b></th>
+<th width='30%' align='center' class='boldbase'><b>$Lang::tr{'percentage'}</b></th>
 </tr>
 END
 ;
index a13414654a72d78337e8b38ce5a738e5d6b0aedc..ba106016fd3b788889bc1863a8cc54a870e4e400 100644 (file)
@@ -409,9 +409,9 @@ print <<END
 <table width='100%' CLASS='tbl'>
 <tr>
 <th width='10%' align='center' class='boldbase'></th>
-<th width='33%' align='center' class='boldbase'><b>Port</b></th>
-<th width='33%' align='center' class='boldbase'><b>Count</b></th>
-<th width='33%' align='center' class='boldbase'><b>Percent</b></th>
+<th width='33%' align='center' class='boldbase'><b>$Lang::tr{'port'}</b></th>
+<th width='33%' align='center' class='boldbase'><b>count</b></th>
+<th width='33%' align='center' class='boldbase'><b>$Lang::tr{'percentage'}</b></th>
 </tr>
 END
 ;
index 700b563e07e9850e0719d4b76f188d4a742420df..7e8e32eeae848a96e0def3f7b00159287c8fda69 100644 (file)
@@ -152,7 +152,7 @@ END
 
        for(my $i = 1; $i <= $#iostat1; $i++){
                if ( $i eq '1' ){
-                       print "<tr><td align='center' class='boldbase'><b>Device</b></td><td align='center' class='boldbase'><b>MB read</b></td><td align='center' class='boldbase'><b>MB writen</b></td></tr>";
+                       print "<tr><td align='center' class='boldbase'><b>$Lang::tr{'device'}</b></td><td align='center' class='boldbase'><b>MB read</b></td><td align='center' class='boldbase'><b>MB writen</b></td></tr>";
                }else{
                        print "<tr><td align='center'>$iostat1[$i]</td><td align='center'>$iostat2[$i]</td><td align='center'>$iostat3[$i]</td></tr>";
                }
@@ -206,7 +206,7 @@ sub diskbox {
 
                if ( $status[1]=~/standby/){
                        my $ftime = localtime((stat("/var/run/hddshutdown-$disk"))[9]);
-                       print"<b>Disk $disk status:<font color='#FF0000'>".$status[1]."</font></b> (since $ftime)";
+                       print"<b>Disk $disk status:<font color='#FF0000'>".$status[1]."</font></b> ($Lang::tr{'since'} $ftime)";
                }else{
                        print"<b>Disk $disk status:<font color='#00FF00'>".$status[1]."</font></b>";
                }
index 3967ff83ae1a972e362f0709cbf01ad1abb41049..1ff2bf98af07a05ad3df1b7da5fcd060ee6b4f6c 100644 (file)
@@ -2350,12 +2350,12 @@ print <<END;
        <tr>
          <td class='base'>fragment <br></td>
          <td><input type='TEXT' name='FRAGMENT' value='$cgiparams{'FRAGMENT'}' size='10' /></td>
-        <td>Default: <span class="base">1300</span></td>
+        <td>$Lang::tr{'openvpn default'}: <span class="base">1300</span></td>
       </tr>
        <tr>
          <td class='base'>mssfix</td>
          <td><input type='checkbox' name='MSSFIX' $checked{'MSSFIX'}{'on'} /></td>
-         <td>Default: on</td>
+         <td>$Lang::tr{'openvpn default'}: on</td>
          </tr>
 
        <tr>
@@ -2787,7 +2787,7 @@ if ( -s "${General::swroot}/ovpn/settings") {
                <td class='base'>$Lang::tr{'net to net vpn'} (Upload Client Package)</td></tr>
          <tr><td>&nbsp;</td><td class='base'><input type='file' name='FH' size='30'></td></tr>
          <tr><td>&nbsp;</td><td>Import Connection Name <img src='/blob.gif' /></td></tr>
-    <tr><td>&nbsp;</td><td class='base'><input type='text' name='n2nname' size='30'>Default : Client Packagename</td></tr>
+    <tr><td>&nbsp;</td><td class='base'><input type='text' name='n2nname' size='30'>$Lang::tr{'openvpn default'}: Client Packagename</td></tr>
          <tr><td colspan='3'><hr /></td></tr>
     <tr><td align='right' colspan='3'><input type='submit' name='ACTION' value='$Lang::tr{'add'}' /></td></tr>
          <tr><td class='base' colspan='3' align='left'><img src='/blob.gif' alt='*' />&nbsp;$Lang::tr{'this field may be blank'}</td></tr>
index b0b6006ab4e7d092491ae978ecae896fc75e3e6d..8b96731dd1a0a46787d7da74a867e4e21823ed75 100644 (file)
@@ -796,7 +796,7 @@ sub changedefclasses {
                <form method='post' action='$ENV{'SCRIPT_NAME'}'>
                <table width='66%'>
                <tr><td width='100%' colspan='3'>$Lang::tr{'no filter pass'}
-               <tr><td width='33%' align='right'>Download:<td width='33%' align='left'><select name='DEFCLASS_INC'>
+               <tr><td width='33%' align='right'>$Lang::tr{'download'}:<td width='33%' align='left'><select name='DEFCLASS_INC'>
 END
 ;
                for ( $c = 200 ; $c <= 220 ; $c++ )
@@ -807,7 +807,7 @@ END
                }
                print <<END
                </select><td width='33%' align='center'>&nbsp;
-               <tr><td width='33%' align='right'>Upload:<td width='33%' align='left'><select name='DEFCLASS_OUT'>
+               <tr><td width='33%' align='right'>$Lang::tr{'upload'}:<td width='33%' align='left'><select name='DEFCLASS_OUT'>
 END
 ;
                for ( $c = 100 ; $c <= 120 ; $c++ )
index 10ffed3b64426061caeda2c5c31ef3f9560e869d..71971e53824152de4cd002e6180a53dfae3a26b8 100644 (file)
 'firewall rules' => 'Firewallregeln',
 'firewallhits' => 'Firewalltreffer',
 'firmware' => 'Firmware',
+'first' => 'Erste',
 'firmware upload' => 'Hochladen der Firmware/Treiber',
 'fixed ip lease added' => 'Feste IP-Zuordnung hinzugefügt',
 'fixed ip lease modified' => 'Feste IP-Zuordnung geändert',
 'lan' => 'LAN',
 'lang' => 'de',
 'languagepurpose' => 'Wählen Sie eine Sprache, in der IPFire angezeigt werden soll:',
+'last' => 'Letzte',
 'last activity' => 'Letzte Aktivität',
 'lateprompting' => 'Late prompting',
 'lease expires' => 'Zuordnung verfällt',
index 653edc4743df5468dff54ac6ddaa5033d2d8e6cb..a5e43884249078def7c5a37798060ad4e7126669 100644 (file)
 'firewallhits' => 'firewallhits',
 'firmware' => 'Firmware',
 'firmware upload' => 'Upload Firmware/Drivers',
+'first' => 'First',
 'fixed ip lease added' => 'Fixed IP lease added',
 'fixed ip lease modified' => 'Fixed IP lease modified',
 'fixed ip lease removed' => 'Fixed IP lease removed',
 'lan' => 'LAN',
 'lang' => 'en',
 'languagepurpose' => 'Select the language you wish IPFire to display in:',
+'last' => 'Last',
 'last activity' => 'Last Activity',
 'lateprompting' => 'Lateprompting',
 'lease expires' => 'Lease expires',
index f71437fb036fc65f3fa49533104d3cbdcf676b8f..f1ee58a13c64488ff7099cbcff74b30bdecc4669 100644 (file)
@@ -71,6 +71,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/fireinfo-0001-Exclude-some-more-invalid-patterns.patch
+
        cd $(DIR_APP) && [ -x "configure" ] || sh ./autogen.sh
        cd $(DIR_APP) && ./configure --prefix=/usr
        cd $(DIR_APP) && make $(MAKETUNING)
index 9acbb111bbfa6c4d58a784e8138a51d318bcbbec..dcbffc254260d798a852224844f6d26adfe04fa8 100644 (file)
--- a/lfs/glibc
+++ b/lfs/glibc
@@ -258,6 +258,16 @@ endif
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh970992.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh989558.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh989558-2.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh886968.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh905575.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh905874.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh916986.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh928318.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh947882.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh952422.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966775.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh966778.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc/glibc-rh970090.patch
 
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-resolv-stack_chk_fail.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/glibc-remove-ctors-dtors-output-sections.patch
index 6aaa60e78079f8a89a6c2092c5b4fb16bdd1b544..d4607085dfca39e3809845dd2749410af9ca9006 100644 (file)
--- a/lfs/linux
+++ b/lfs/linux
@@ -147,6 +147,9 @@ endif
        # Add LED trigger
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.9-ledtrig-netdev-1.patch
 
+       # cs5535audio spams syslog if no ac97 was present (geos router)
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch
+
        # Fix uevent PHYSDEVDRIVER
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2.33_ipg-fix-driver-name.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-2.6.32.27_mcs7830-fix-driver-name.patch
@@ -160,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
index e4e80abd662d308759f9c7b8ed420ab9b62b0aac..b640dcc5e2eff18c9f1512d06f1aac6c90ccc08d 100644 (file)
--- a/lfs/nginx
+++ b/lfs/nginx
@@ -32,7 +32,7 @@ DL_FROM    = $(URL_IPFIRE)
 DIR_APP    = $(DIR_SRC)/$(THISAPP)
 TARGET     = $(DIR_INFO)/$(THISAPP)
 PROG      = nginx
-PAK_VER           = 2
+PAK_VER           = 3
 
 ###############################################################################
 # Top-level Rules
@@ -75,7 +75,6 @@ $(subst %,%_MD5,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && tar xvf $(DIR_SRC)/cache/nginx_tcp_proxy_module.tar.bz2 -C $(DIR_APP)  
        cd $(DIR_APP) && ./configure \
                --prefix=/usr/share/nginx/ \
                --conf-path=/etc/nginx/nginx.conf \
@@ -97,6 +96,5 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && make install
        mkdir -p /var/log/nginx /var/spool/nginx
        cp /usr/src/config/nginx/nginx /etc/init.d/
-#      chown http:http /var/log/nginx
        @rm -rf $(DIR_APP)
        @$(POSTBUILD)
diff --git a/lfs/perl-PDF-Create b/lfs/perl-PDF-Create
deleted file mode 100644 (file)
index 208feb2..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-###############################################################################
-#                                                                             #
-# IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2011  IPFire Team  <info@ipfire.org>                          #
-#                                                                             #
-# This program is free software: you can redistribute it and/or modify        #
-# it under the terms of the GNU General Public License as published by        #
-# the Free Software Foundation, either version 3 of the License, or           #
-# (at your option) any later version.                                         #
-#                                                                             #
-# 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/>.       #
-#                                                                             #
-###############################################################################
-
-###############################################################################
-# Definitions
-###############################################################################
-
-include Config
-
-VER        = 1.08
-
-THISAPP    = PDF-Create-$(VER)
-DL_FILE    = $(THISAPP).tar.gz
-DL_FROM    = $(URL_IPFIRE)
-DIR_APP    = $(DIR_SRC)/$(THISAPP)
-TARGET     = $(DIR_INFO)/$(THISAPP)
-PROG       = perl-PDF-Create
-PAK_VER    = 1
-
-DEPS       = ""
-
-###############################################################################
-# Top-level Rules
-###############################################################################
-
-objects = $(DL_FILE)
-
-$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-
-$(DL_FILE)_MD5 = abb86ba75690529b8ae4c3388541a244
-
-install : $(TARGET)
-
-check : $(patsubst %,$(DIR_CHK)/%,$(objects))
-
-download :$(patsubst %,$(DIR_DL)/%,$(objects))
-
-md5 : $(subst %,%_MD5,$(objects))
-
-dist:
-       @$(PAK)
-
-###############################################################################
-# Downloading, checking, md5sum
-###############################################################################
-
-$(patsubst %,$(DIR_CHK)/%,$(objects)) :
-       @$(CHECK)
-
-$(patsubst %,$(DIR_DL)/%,$(objects)) :
-       @$(LOAD)
-
-$(subst %,%_MD5,$(objects)) :
-       @$(MD5)
-
-###############################################################################
-# Installation Details
-###############################################################################
-
-$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
-       @$(PREBUILD)
-       @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
-       cd $(DIR_APP) && perl Makefile.PL
-       cd $(DIR_APP) && make $(MAKETUNING)
-       cd $(DIR_APP) && make install
-       @rm -rf $(DIR_APP)
-       @$(POSTBUILD)
diff --git a/make.sh b/make.sh
index 5d787a00392723e6cc34e554baf4d548ce2230d2..fc1d9c8fb02788804faa61abf80a7e5b980fdc93 100755 (executable)
--- a/make.sh
+++ b/make.sh
@@ -17,7 +17,7 @@
 # along with IPFire; if not, write to the Free Software                    #
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA #
 #                                                                          #
-# Copyright (C) 2007-2013 IPFire Team <info@ipfire.org>.                   #
+# Copyright (C) 2007-2014 IPFire Team <info@ipfire.org>.                   #
 #                                                                          #
 ############################################################################
 #
@@ -25,7 +25,7 @@
 NAME="IPFire"                                                  # Software name
 SNAME="ipfire"                                                 # Short name
 VERSION="2.15"                                                 # Version number
-CORE="76-beta1"                                                        # Core Level (Filename)
+CORE="76-beta2"                                                        # Core Level (Filename)
 PAKFIRE_CORE="76"                                              # Core Level (PAKFIRE)
 GIT_BRANCH=`git rev-parse --abbrev-ref HEAD`                   # Git Branch
 SLOGAN="www.ipfire.org"                                                # Software slogan
@@ -718,7 +718,6 @@ buildipfire() {
   ipfiremake perl-DBD-mysql
   ipfiremake perl-DBD-SQLite
   ipfiremake perl-File-ReadBackwards
-  ipfiremake perl-PDF-Create
   ipfiremake cacti
   ipfiremake icecc
   ipfiremake openvmtools
index 3bd27a473ed740caee448a1c466e3351be4e61d0..52ef2705d9385d0b75eb2ced4667765833f48d7c 100644 (file)
@@ -50,6 +50,14 @@ disable_led_trigger ()
        fi
 }
 
+# enable LED
+enable_led ()
+{
+       if [ -d "/sys/class/leds/$1" ]; then
+               echo "1" >        /sys/class/leds/$1/brightness
+       fi
+}
+
 case "${1}" in
        start)
                # Alix LED start
@@ -57,6 +65,11 @@ case "${1}" in
                setup_netdev_trigger alix:2 ${RED_DEV} rx
                setup_netdev_trigger alix:3 ${RED_DEV} tx
 
+               # Geos LED start
+               setup_heartbeat_trigger geos:1
+               setup_netdev_trigger geos:2 ${RED_DEV} rx
+               setup_netdev_trigger geos:3 ${RED_DEV} tx
+
                # Dreamplug
                setup_netdev_trigger dreamplug:green:wlan ${GREEN_DEV} tx rx
                setup_netdev_trigger dreamplug:blue:wlanap ${BLUE_DEV} tx rx
@@ -80,9 +93,16 @@ case "${1}" in
        stop)
                # Alix LED stop
                disable_led_trigger alix:1
+               enable_led alix:1
                disable_led_trigger alix:2
                disable_led_trigger alix:3
 
+               # Geos LED stop
+               disable_led_trigger geos:1
+               enable_led geos:1
+               disable_led_trigger geos:2
+               disable_led_trigger geos:3
+
                # Dreamplug
                disable_led_trigger dreamplug:green:wlan
                disable_led_trigger dreamplug:blue:wlanap
diff --git a/src/patches/fireinfo-0001-Exclude-some-more-invalid-patterns.patch b/src/patches/fireinfo-0001-Exclude-some-more-invalid-patterns.patch
new file mode 100644 (file)
index 0000000..fd1c525
--- /dev/null
@@ -0,0 +1,55 @@
+From 220ffe76a48c72171d7724f7f602a2fdd8bbca6a Mon Sep 17 00:00:00 2001
+From: Michael Tremer <michael.tremer@ipfire.org>
+Date: Sat, 15 Feb 2014 18:37:54 +0100
+Subject: [PATCH] Exclude some more invalid patterns.
+
+---
+ src/fireinfo/system.py | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+diff --git a/src/fireinfo/system.py b/src/fireinfo/system.py
+index 40ff7b0..c875f96 100644
+--- a/src/fireinfo/system.py
++++ b/src/fireinfo/system.py
+@@ -44,12 +44,17 @@ INVALID_ID_STRINGS = (
+       "Chassis", "chassis",
+       "Not Applicable",
+       "None", "empty",
++      "XXXXX",
+       "01010101-0101-0101-0101-010101010101",
+       "00020003-0004-0005-0006-000700080009",
+       "03000200-0400-0500-0006-000700080009",
+       "0000000", "00000000",
+ )
++INVALID_ID_STRINGS_EXACT_MATCH = (
++      "NA",
++)
++
+ class Singleton(type):
+       def __init__(cls, name, bases, dict):
+               super(Singleton, cls).__init__(name, bases, dict)
+@@ -234,12 +239,18 @@ class System(object):
+                       if id is None:
+                               continue
+-                      for i in INVALID_ID_STRINGS:
+-                              if i in id:
++                      for i in INVALID_ID_STRINGS_EXACT_MATCH:
++                              if id == i:
+                                       id = None
+                                       break
+                       if id:
++                              for i in INVALID_ID_STRINGS:
++                                      if i in id:
++                                              id = None
++                                              break
++
++                      if id:
+                               _ids.append(id)
+               ids = _ids
+-- 
+1.8.3.1
+
diff --git a/src/patches/glibc/glibc-rh886968.patch b/src/patches/glibc/glibc-rh886968.patch
new file mode 100644 (file)
index 0000000..4872a91
--- /dev/null
@@ -0,0 +1,33 @@
+diff -Nrup a/elf/dl-load.c b/elf/dl-load.c
+--- a/elf/dl-load.c    2013-01-10 08:57:20.098898830 -0500
++++ b/elf/dl-load.c    2013-01-10 12:04:48.155962895 -0500
+@@ -819,7 +819,7 @@ lose (int code, int fd, const char *name
+     {
+       r->r_state = RT_CONSISTENT;
+       _dl_debug_state ();
+-      LIBC_PROBE (rtld_map_complete, 2, nsid, r);
++      LIBC_PROBE (rtld_map_complete, 3, nsid, r, NULL);
+     }
+   _dl_signal_error (code, name, NULL, msg);
+diff -Nrup a/elf/dl-open.c b/elf/dl-open.c
+--- a/elf/dl-open.c    2013-01-10 08:57:19.917897417 -0500
++++ b/elf/dl-open.c    2013-01-10 12:06:04.644775710 -0500
+@@ -298,7 +298,7 @@ dl_open_worker (void *a)
+   struct r_debug *r = _dl_debug_initialize (0, args->nsid);
+   r->r_state = RT_CONSISTENT;
+   _dl_debug_state ();
+-  LIBC_PROBE (rtld_map_complete, 2, args->nsid, r);
++  LIBC_PROBE (rtld_map_complete, 3, args->nsid, r, new);
+   /* Only do lazy relocation if `LD_BIND_NOW' is not set.  */
+   int reloc_mode = mode & __RTLD_AUDIT;
+@@ -472,7 +472,7 @@ TLS generation counter wrapped!  Please 
+   /* Notify the debugger all new objects have been relocated.  */
+   if (relocation_in_progress)
+-    LIBC_PROBE (rtld_reloc_complete, 2, args->nsid, r);
++    LIBC_PROBE (rtld_reloc_complete, 3, args->nsid, r, new);
+   /* Run the initializer functions of new objects.  */
+   _dl_init (new, args->argc, args->argv, args->env);
diff --git a/src/patches/glibc/glibc-rh905575.patch b/src/patches/glibc/glibc-rh905575.patch
new file mode 100644 (file)
index 0000000..70baa89
--- /dev/null
@@ -0,0 +1,72 @@
+diff -rup a/sysdeps/ieee754/dbl-64/slowexp.c b/sysdeps/ieee754/dbl-64/slowexp.c
+--- a/sysdeps/ieee754/dbl-64/slowexp.c 2012-01-01 05:16:32.000000000 -0700
++++ b/sysdeps/ieee754/dbl-64/slowexp.c 2012-03-13 11:57:51.225330782 -0600
+@@ -31,6 +31,8 @@
+ #include "mpa.h"
+ #include "math_private.h"
++#include <stap-probe.h>
++
+ void __mpexp(mp_no *x, mp_no *y, int p);
+ /*Converting from double precision to Multi-precision and calculating  e^x */
+@@ -61,12 +63,21 @@ __slowexp(double x) {
+   __sub(&mpy,&mpcor,&mpz,p);
+   __mp_dbl(&mpw, &w, p);
+   __mp_dbl(&mpz, &z, p);
+-  if (w == z) return w;
++  if (w == z) {
++    /* Track how often we get to the slow exp code plus
++       its input/output values.  */
++    LIBC_PROBE (slowexp_p6, 2, &x, &w);
++    return w;
++  }
+   else  {                   /* if calculating is not exactly   */
+     p = 32;
+     __dbl_mp(x,&mpx,p);
+     __mpexp(&mpx, &mpy, p);
+     __mp_dbl(&mpy, &res, p);
++ 
++    /* Track how often we get to the uber-slow exp code plus
++       its input/output values.  */
++    LIBC_PROBE (slowexp_p32, 2, &x, &res);
+     return res;
+   }
+ }
+diff -rup a/sysdeps/ieee754/dbl-64/slowpow.c b/sysdeps/ieee754/dbl-64/slowpow.c
+--- a/sysdeps/ieee754/dbl-64/slowpow.c 2012-01-01 05:16:32.000000000 -0700
++++ b/sysdeps/ieee754/dbl-64/slowpow.c 2012-03-13 11:57:59.865284437 -0600
+@@ -35,6 +35,8 @@
+ #include "mpa.h"
+ #include "math_private.h"
++#include <stap-probe.h>
++
+ void __mpexp(mp_no *x, mp_no *y, int p);
+ void __mplog(mp_no *x, mp_no *y, int p);
+ double ulog(double);
+@@ -66,7 +68,12 @@ __slowpow(double x, double y, double z)
+   __mp_dbl(&mpr, &res, p);
+   __sub(&mpp,&eps,&mpr1,p);   /*  pp -eps =r1 */
+   __mp_dbl(&mpr1, &res1, p);  /*  converting into double precision */
+-  if (res == res1) return res;
++  if (res == res1) {
++    /* Track how often we get to the slow pow code plus
++       its input/output values.  */
++    LIBC_PROBE (slowpow_p10, 4, &x, &y, &z, &res);
++    return res;
++  }
+   p = 32;     /* if we get here result wasn't calculated exactly, continue */
+   __dbl_mp(x,&mpx,p);                          /* for more exact calculation */
+@@ -76,5 +83,10 @@ __slowpow(double x, double y, double z)
+   __mul(&mpy,&mpz,&mpw,p);  /* y*z =w    */
+   __mpexp(&mpw, &mpp, p);   /* e^w=pp    */
+   __mp_dbl(&mpp, &res, p);  /* converting into double precision */
++
++  /* Track how often we get to the uber-slow pow code plus
++     its input/output values.  */
++    LIBC_PROBE (slowpow_p32, 4, &x, &y, &z, &res);
++
+   return res;
+ }
diff --git a/src/patches/glibc/glibc-rh905874.patch b/src/patches/glibc/glibc-rh905874.patch
new file mode 100644 (file)
index 0000000..1d9ea10
--- /dev/null
@@ -0,0 +1,174 @@
+#
+# Backported from upstream.
+#
+# - Add en_US.UTF-8 as pre-requisite for regression test:
+#
+# commit 62c4a69dc2aea24776cbf0e951d41709a7408cc6
+# Author: Joseph Myers <joseph@codesourcery.com>
+# Date:   Thu Nov 1 00:22:04 2012 +0000
+#
+#    Build en_US.UTF-8 locale for testing.
+#
+# - Fix buffer overrun:
+#
+# commit a445af0bc722d620afed7683cd320c0e4c7c6059
+# Author: Andreas Schwab <schwab@suse.de>
+# Date:   Tue Jan 29 14:45:15 2013 +0100
+#
+#    Fix buffer overrun in regexp matcher
+#
+# ChangeLog/
+# 2013-02-12  Andreas Schwab  <schwab@suse.de>
+# 
+#      [BZ #15078]
+#      * posix/regexec.c (extend_buffers): Add parameter min_len.
+#      (check_matching): Pass minimum needed length.
+#      (clean_state_log_if_needed): Likewise.
+#      (get_subexp): Likewise.
+#      * posix/Makefile (tests): Add bug-regex34.
+#      (bug-regex34-ENV): Define.
+#      * posix/bug-regex34.c: New file.
+#
+diff -urN glibc-2.12-2-gc4ccff1.orig/localedata/Makefile glibc-2.12-2-gc4ccff1/localedata/Makefile
+--- glibc-2.12-2-gc4ccff1.orig/localedata/Makefile     2013-07-24 20:40:37.364888120 -0400
++++ glibc-2.12-2-gc4ccff1/localedata/Makefile  2013-07-24 20:59:54.713289753 -0400
+@@ -133,7 +133,7 @@
+ ifeq (no,$(cross-compiling))
+ # We have to generate locales
+ LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ANSI_X3.4-1968 \
+-         en_US.ISO-8859-1 ja_JP.EUC-JP da_DK.ISO-8859-1 \
++         en_US.ISO-8859-1 en_US.UTF-8 ja_JP.EUC-JP da_DK.ISO-8859-1 \
+          hr_HR.ISO-8859-2 sv_SE.ISO-8859-1 ja_JP.SJIS fr_FR.ISO-8859-1 \
+          vi_VN.TCVN5712-1 nb_NO.ISO-8859-1 nn_NO.ISO-8859-1 \
+          tr_TR.UTF-8 cs_CZ.UTF-8 zh_TW.EUC-TW fa_IR.UTF-8 fr_FR.UTF-8 \
+diff -urN glibc-2.12-2-gc4ccff1.orig/posix/bug-regex34.c glibc-2.12-2-gc4ccff1/posix/bug-regex34.c
+--- glibc-2.12-2-gc4ccff1.orig/posix/bug-regex34.c     1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.12-2-gc4ccff1/posix/bug-regex34.c  2013-07-24 20:59:54.713289753 -0400
+@@ -0,0 +1,46 @@
++/* Test re_search with multi-byte characters in UTF-8.
++   Copyright (C) 2013 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library 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
++   Lesser General Public License for more details.
++
++   You should have received a copy of the GNU Lesser General Public
++   License along with the GNU C Library; if not, see
++   <http://www.gnu.org/licenses/>.  */
++
++#define _GNU_SOURCE 1
++#include <stdio.h>
++#include <string.h>
++#include <locale.h>
++#include <regex.h>
++
++static int
++do_test (void)
++{
++  struct re_pattern_buffer r;
++  /* á€€á€»á€½á€”်ုပ်x */
++  const char *s = "\xe1\x80\x80\xe1\x80\xbb\xe1\x80\xbd\xe1\x80\x94\xe1\x80\xba\xe1\x80\xaf\xe1\x80\x95\xe1\x80\xbax";
++
++  if (setlocale (LC_ALL, "en_US.UTF-8") == NULL)
++    {
++      puts ("setlocale failed");
++      return 1;
++    }
++  memset (&r, 0, sizeof (r));
++
++  re_compile_pattern ("[^x]x", 5, &r);
++  /* This was triggering a buffer overflow.  */
++  re_search (&r, s, strlen (s), 0, strlen (s), 0);
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -urN glibc-2.12-2-gc4ccff1.orig/posix/Makefile glibc-2.12-2-gc4ccff1/posix/Makefile
+--- glibc-2.12-2-gc4ccff1.orig/posix/Makefile  2013-07-24 20:40:37.399888098 -0400
++++ glibc-2.12-2-gc4ccff1/posix/Makefile       2013-07-24 21:00:43.267265979 -0400
+@@ -94,7 +94,7 @@
+                  tst-rfc3484-3 \
+                  tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \
+                  bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
+-                 bug-getopt5
++                 bug-getopt5 bug-regex34
+ xtests                := bug-ga2
+ ifeq (yes,$(build-shared))
+ test-srcs     := globtest
+@@ -199,6 +199,7 @@
+ bug-regex25-ENV = LOCPATH=$(common-objpfx)localedata
+ bug-regex26-ENV = LOCPATH=$(common-objpfx)localedata
+ bug-regex30-ENV = LOCPATH=$(common-objpfx)localedata
++bug-regex34-ENV = LOCPATH=$(common-objpfx)localedata
+ tst-rxspencer-ARGS = --utf8 rxspencer/tests
+ tst-rxspencer-ENV = LOCPATH=$(common-objpfx)localedata
+ tst-pcre-ARGS = PCRE.tests
+diff -urN glibc-2.12-2-gc4ccff1.orig/posix/regexec.c glibc-2.12-2-gc4ccff1/posix/regexec.c
+--- glibc-2.12-2-gc4ccff1.orig/posix/regexec.c 2013-07-24 20:40:37.396888100 -0400
++++ glibc-2.12-2-gc4ccff1/posix/regexec.c      2013-07-24 21:02:53.005156187 -0400
+@@ -198,7 +198,7 @@
+ static int check_node_accept (const re_match_context_t *mctx,
+                             const re_token_t *node, int idx)
+      internal_function;
+-static reg_errcode_t extend_buffers (re_match_context_t *mctx)
++static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len)
+      internal_function;
\f
+ /* Entry point for POSIX code.  */
+@@ -1160,7 +1160,7 @@
+         || (BE (next_char_idx >= mctx->input.valid_len, 0)
+             && mctx->input.valid_len < mctx->input.len))
+       {
+-        err = extend_buffers (mctx);
++        err = extend_buffers (mctx, next_char_idx + 1);
+         if (BE (err != REG_NOERROR, 0))
+           {
+             assert (err == REG_ESPACE);
+@@ -1737,7 +1737,7 @@
+         && mctx->input.valid_len < mctx->input.len))
+     {
+       reg_errcode_t err;
+-      err = extend_buffers (mctx);
++      err = extend_buffers (mctx, next_state_log_idx + 1);
+       if (BE (err != REG_NOERROR, 0))
+       return err;
+     }
+@@ -2791,7 +2791,7 @@
+                 if (bkref_str_off >= mctx->input.len)
+                   break;
+-                err = extend_buffers (mctx);
++                err = extend_buffers (mctx, bkref_str_off + 1);
+                 if (BE (err != REG_NOERROR, 0))
+                   return err;
+@@ -4099,7 +4099,7 @@
+ static reg_errcode_t
+ internal_function __attribute_warn_unused_result__
+-extend_buffers (re_match_context_t *mctx)
++extend_buffers (re_match_context_t *mctx, int min_len)
+ {
+   reg_errcode_t ret;
+   re_string_t *pstr = &mctx->input;
+@@ -4108,8 +4108,10 @@
+   if (BE (INT_MAX / 2 / sizeof (re_dfastate_t *) <= pstr->bufs_len, 0))
+     return REG_ESPACE;
+-  /* Double the lengthes of the buffers.  */
+-  ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2);
++  /* Double the lengthes of the buffers, but allocate at least MIN_LEN.  */
++  ret = re_string_realloc_buffers (pstr,
++                                 MAX (min_len,
++                                      MIN (pstr->len, pstr->bufs_len * 2)));
+   if (BE (ret != REG_NOERROR, 0))
+     return ret;
diff --git a/src/patches/glibc/glibc-rh916986.patch b/src/patches/glibc/glibc-rh916986.patch
new file mode 100644 (file)
index 0000000..9bed61f
--- /dev/null
@@ -0,0 +1,123 @@
+commit cf7c9078a5acdbb435498ace92cd81009637a971
+Author: Ulrich Drepper <drepper@redhat.com>
+Date:   Fri Nov 19 09:35:39 2010 -0500
+
+    Define MAP_HUGETLB.
+
+       * sysdeps/unix/sysv/linux/i386/bits/mman.h: Define MAP_HUGETLB.
+       * sysdeps/unix/sysv/linux/x86_64/bits/mman.h: Likewise.
+
+commit dd62fda6cc83b3afa150a4be7d273ab118bf9825
+Author: Anton Blanchard <anton@samba.org>
+Date:   Tue Mar 27 18:37:16 2012 -0700
+
+    Define MAP_STACK and MAP_HUGETLB on powerpc, s390, sh and sparc.
+    
+        * sysdeps/unix/sysv/linux/powerpc/bits/mman.h: Define MAP_STACK and
+        MAP_HUGETLB.
+        * sysdeps/unix/sysv/linux/s390/bits/mman.h: Likewise.
+        * sysdeps/unix/sysv/linux/sh/bits/mman.h: Likewise.
+        * sysdeps/unix/sysv/linux/sparc/bits/mman.h: Likewise.
+
+commit 7e4fc5890e07549e5ad98b4244e3e0ed5c709e6a
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:   Mon Apr 16 22:44:23 2012 -0400
+
+    ia64: add MAP_{STACK,HUGETLB} to bits/mman.h
+
+    Just adding new bit flags that newer kernels define.
+
+    Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+       * sysdeps/unix/sysv/linux/ia64/bits/mman.h (MAP_STACK): Define.
+       (MAP_HUGETLB): Likewise.
+
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/powerpc/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/powerpc/bits/mman.h     2013-07-23 04:01:42.440052942 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/powerpc/bits/mman.h  2013-07-23 22:26:42.317789260 -0300
+@@ -65,6 +65,8 @@
+ # define MAP_NORESERVE        0x00040         /* Don't check for reservations.  */
+ # define MAP_POPULATE 0x08000         /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
++# define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/s390/bits/mman.h        2013-07-23 04:01:42.447052393 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/s390/bits/mman.h     2013-07-23 22:26:42.335787833 -0300
+@@ -64,6 +64,8 @@
+ # define MAP_NORESERVE        0x04000         /* Don't check for reservations.  */
+ # define MAP_POPULATE 0x08000         /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
++# define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sh/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sh/bits/mman.h  2010-05-04 08:27:23.000000000 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sh/bits/mman.h       2013-07-23 22:26:42.336787753 -0300
+@@ -64,6 +64,8 @@
+ # define MAP_NORESERVE        0x4000          /* Don't check for reservations.  */
+ # define MAP_POPULATE 0x8000          /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
++# define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/sparc/bits/mman.h       2010-05-04 08:27:23.000000000 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/sparc/bits/mman.h    2013-07-23 22:26:42.337787674 -0300
+@@ -66,6 +66,8 @@
+ # define _MAP_NEW     0x80000000      /* Binary compatibility with SunOS.  */
+ # define MAP_POPULATE 0x8000          /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
++# define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/i386/bits/mman.h        2013-07-23 04:01:42.406055607 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/i386/bits/mman.h     2013-07-23 22:32:37.407630135 -0300
+@@ -64,6 +64,7 @@
+ # define MAP_POPULATE 0x08000         /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
+ # define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/x86_64/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/x86_64/bits/mman.h      2013-07-23 04:01:42.493048788 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/x86_64/bits/mman.h   2013-07-23 22:32:37.433628073 -0300
+@@ -65,6 +65,7 @@
+ # define MAP_POPULATE 0x08000         /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK 0x10000         /* Do not block on IO.  */
+ # define MAP_STACK    0x20000         /* Allocation is for a stack.  */
++# define MAP_HUGETLB  0x40000         /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
+Index: glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/bits/mman.h
+===================================================================
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/unix/sysv/linux/ia64/bits/mman.h        2010-05-04 08:27:23.000000000 -0300
++++ glibc-2.12-2-gc4ccff1/sysdeps/unix/sysv/linux/ia64/bits/mman.h     2013-07-23 22:37:28.643530951 -0300
+@@ -65,6 +65,8 @@
+ # define MAP_NORESERVE          0x04000       /* Don't check for reservations.  */
+ # define MAP_POPULATE   0x08000       /* Populate (prefault) pagetables.  */
+ # define MAP_NONBLOCK   0x10000       /* Do not block on IO.  */
++# define MAP_STACK      0x20000       /* Allocation is for a stack.  */
++# define MAP_HUGETLB    0x40000       /* Create huge page mapping.  */
+ #endif
+ /* Flags to `msync'.  */
diff --git a/src/patches/glibc/glibc-rh928318.patch b/src/patches/glibc/glibc-rh928318.patch
new file mode 100644 (file)
index 0000000..36aa19a
--- /dev/null
@@ -0,0 +1,31 @@
+diff --git a/resolv/res_init.c b/resolv/res_init.c
+index 40dbe7d..202569d 100644
+--- a/resolv/res_init.c
++++ b/resolv/res_init.c
+@@ -176,13 +176,6 @@ __res_vinit(res_state statp, int preinit) {
+               statp->id = res_randomid();
+       }
+-#ifdef USELOOPBACK
+-      statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
+-#else
+-      statp->nsaddr.sin_addr.s_addr = INADDR_ANY;
+-#endif
+-      statp->nsaddr.sin_family = AF_INET;
+-      statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
+       statp->nscount = 0;
+       statp->ndots = 1;
+       statp->pfcode = 0;
+@@ -433,6 +426,12 @@ __res_vinit(res_state statp, int preinit) {
+ #endif
+           (void) fclose(fp);
+       }
++      if (__builtin_expect(statp->nscount == 0, 0)) {
++          statp->nsaddr.sin_addr = inet_makeaddr(IN_LOOPBACKNET, 1);
++          statp->nsaddr.sin_family = AF_INET;
++          statp->nsaddr.sin_port = htons(NAMESERVER_PORT);
++          statp->nscount = 1;
++      }
+       if (statp->defdname[0] == 0 &&
+           __gethostname(buf, sizeof(statp->defdname) - 1) == 0 &&
+           (cp = strchr(buf, '.')) != NULL)
diff --git a/src/patches/glibc/glibc-rh947882.patch b/src/patches/glibc/glibc-rh947882.patch
new file mode 100644 (file)
index 0000000..6d10982
--- /dev/null
@@ -0,0 +1,63 @@
+#
+# Backport from upstream:
+#
+# From 1cef1b19089528db11f221e938f60b9b048945d7 Mon Sep 17 00:00:00 2001
+# From: Andreas Schwab <schwab@suse.de>
+# Date: Thu, 21 Mar 2013 15:50:27 +0100
+# Subject: [PATCH] Fix stack overflow in getaddrinfo with many results
+#
+# ---
+# ChangeLog                   |    6 ++++++
+# NEWS                        |    5 ++++-
+# sysdeps/posix/getaddrinfo.c |   23 +++++++++++++++++++++--
+# 3 files changed, 31 insertions(+), 3 deletions(-)
+#
+# 2013-04-03  Andreas Schwab  <schwab@suse.de>
+#
+#      [BZ #15330]
+#      * sysdeps/posix/getaddrinfo.c (getaddrinfo): Allocate results and
+#      order arrays from heap if bigger than alloca cutoff.
+#
+diff -urN glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c
+--- glibc-2.12-2-gc4ccff1.orig/sysdeps/posix/getaddrinfo.c     2013-07-24 20:40:37.601887975 -0400
++++ glibc-2.12-2-gc4ccff1/sysdeps/posix/getaddrinfo.c  2013-07-24 20:54:32.722447705 -0400
+@@ -2386,11 +2386,27 @@
+       __typeof (once) old_once = once;
+       __libc_once (once, gaiconf_init);
+       /* Sort results according to RFC 3484.  */
+-      struct sort_result results[nresults];
+-      size_t order[nresults];
++      struct sort_result *results;
++      size_t *order;
+       struct addrinfo *q;
+       struct addrinfo *last = NULL;
+       char *canonname = NULL;
++      bool malloc_results;
++
++      malloc_results
++      = !__libc_use_alloca (nresults * (sizeof (*results) + sizeof (*order)));
++      if (malloc_results)
++      {
++        results = malloc (nresults * (sizeof (*results) + sizeof (*order)));
++        if (results == NULL)
++          {
++            free (in6ai);
++            return EAI_MEMORY;
++          }
++      }
++      else
++      results = alloca (nresults * (sizeof (*results) + sizeof (*order)));
++      order = (size_t *) (results + nresults);
+       /* If we have information about deprecated and temporary addresses
+        sort the array now.  */
+@@ -2557,6 +2573,9 @@
+       /* Fill in the canonical name into the new first entry.  */
+       p->ai_canonname = canonname;
++
++      if (malloc_results)
++      free (results);
+     }
+   free (in6ai);
diff --git a/src/patches/glibc/glibc-rh952422.patch b/src/patches/glibc/glibc-rh952422.patch
new file mode 100644 (file)
index 0000000..c73bf52
--- /dev/null
@@ -0,0 +1,127 @@
+diff --git a/sysdeps/unix/sysv/linux/getsysstats.c b/sysdeps/unix/sysv/linux/getsysstats.c
+index af454b6..249bd19 100644
+--- a/sysdeps/unix/sysv/linux/getsysstats.c
++++ b/sysdeps/unix/sysv/linux/getsysstats.c
+@@ -35,6 +34,7 @@
+ #include <atomic.h>
+ #include <not-cancel.h>
++#include <kernel-features.h>
+ /* How we can determine the number of available processors depends on
+@@ -49,8 +49,6 @@
+    But not all systems have support for the /proc filesystem.  If it
+    is not available we simply return 1 since there is no way.  */
+-#include <not-cancel.h>
+-
+ /* Other architectures use different formats for /proc/cpuinfo.  This
+    provides a hook for alternative parsers.  */
+@@ -128,6 +126,15 @@ next_line (int fd, char *const buffer, char **cp, char **re,
+ int
+ __get_nprocs ()
+ {
++  static int cached_result;
++  static time_t timestamp;
++
++  time_t now = time (NULL);
++  time_t prev = timestamp;
++  atomic_read_barrier ();
++  if (now == prev)
++    return cached_result;
++
+   /* XXX Here will come a test for the new system call.  */
+   const size_t buffer_size = __libc_use_alloca (8192) ? 8192 : 512;
+@@ -135,20 +142,65 @@ __get_nprocs ()
+   char *buffer_end = buffer + buffer_size;
+   char *cp = buffer_end;
+   char *re = buffer_end;
+-  int result = 1;
+ #ifdef O_CLOEXEC
+   const int flags = O_RDONLY | O_CLOEXEC;
+ #else
+   const int flags = O_RDONLY;
+ #endif
++  int fd = open_not_cancel_2 ("/sys/devices/system/cpu/online", flags);
++  char *l;
++  int result = 0;
++  if (fd != -1)
++    {
++      l = next_line (fd, buffer, &cp, &re, buffer_end);
++      if (l != NULL)
++      do
++        {
++          char *endp;
++          unsigned long int n = strtoul (l, &endp, 10);
++          if (l == endp)
++            {
++              result = 0;
++              break;
++            }
++
++          unsigned long int m = n;
++          if (*endp == '-')
++            {
++              l = endp + 1;
++              m = strtoul (l, &endp, 10);
++              if (l == endp)
++                {
++                  result = 0;
++                  break;
++                }
++            }
++
++          result += m - n + 1;
++
++          l = endp;
++          while (l < re && isspace (*l))
++            ++l;
++        }
++      while (l < re);
++
++      close_not_cancel_no_status (fd);
++
++      if (result > 0)
++      goto out;
++    }
++
++  cp = buffer_end;
++  re = buffer_end;
++  result = 1;
++
+   /* The /proc/stat format is more uniform, use it by default.  */
+-  int fd = open_not_cancel_2 ("/proc/stat", flags);
++  fd = open_not_cancel_2 ("/proc/stat", flags);
+   if (fd != -1)
+     {
+       result = 0;
+-      char *l;
+       while ((l = next_line (fd, buffer, &cp, &re, buffer_end)) != NULL)
+       /* The current format of /proc/stat has all the cpu* entries
+          at the front.  We assume here that stays this way.  */
+@@ -169,6 +221,11 @@ __get_nprocs ()
+       }
+     }
++ out:
++  cached_result = result;
++  atomic_write_barrier ();
++  timestamp = now;
++
+   return result;
+ }
+ weak_alias (__get_nprocs, get_nprocs)
+@@ -236,7 +293,7 @@ phys_pages_info (const char *format)
+   long int result = -1;
+   /* If we haven't found an appropriate entry return 1.  */
+-  FILE *fp = fopen ("/proc/meminfo", "rc");
++  FILE *fp = fopen ("/proc/meminfo", "rce");
+   if (fp != NULL)
+     {
+       /* No threads use this stream.  */
diff --git a/src/patches/glibc/glibc-rh966775.patch b/src/patches/glibc/glibc-rh966775.patch
new file mode 100644 (file)
index 0000000..32a0f21
--- /dev/null
@@ -0,0 +1,177 @@
+diff -pruN glibc-2.12-2-gc4ccff1/math/math_private.h glibc-2.12-2-gc4ccff1.new/math/math_private.h
+--- glibc-2.12-2-gc4ccff1/math/math_private.h  2013-06-07 08:35:52.785442441 -0400
++++ glibc-2.12-2-gc4ccff1.new/math/math_private.h      2013-06-07 08:29:35.621042340 -0400
+@@ -394,4 +394,31 @@ extern void __docos (double __x, double 
+ #define libc_feupdateenvf(e) (void) feupdateenv (e)
+ #define libc_feupdateenvl(e) (void) feupdateenv (e)
++/* Save and set the rounding mode.  The use of fenv_t to store the old mode
++   allows a target-specific version of this function to avoid converting the
++   rounding mode from the fpu format.  By default we have no choice but to
++   manipulate the entire env.  */
++
++#ifndef libc_feholdsetround
++# define libc_feholdsetround(e, r, c)  libc_feholdexcept_setround(e, r)
++#endif
++#ifndef libc_feholdsetroundf
++# define libc_feholdsetroundf(e, r, c) libc_feholdexcept_setroundf(e, r)
++#endif
++#ifndef libc_feholdsetroundl
++# define libc_feholdsetroundl(e, r, c) libc_feholdexcept_setroundl(e, r)
++#endif
++
++/* ... and the reverse.  */
++
++#ifndef libc_feresetround
++# define libc_feresetround(e, c)  libc_feupdateenv(e)
++#endif
++#ifndef libc_feresetroundf
++# define libc_feresetroundf(e, c) libc_feupdateenvf(e)
++#endif
++#ifndef libc_feresetroundl
++# define libc_feresetroundl(e, c) libc_feupdateenvl(e)
++#endif
++
+ #endif /* _MATH_PRIVATE_H_ */
+diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_exp.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_exp.c
+--- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_exp.c       2013-06-07 08:35:52.785442441 -0400
++++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_exp.c   2013-06-07 08:30:21.976222459 -0400
+@@ -57,7 +57,8 @@ double __ieee754_exp(double x) {
+   fenv_t env;
+   double retval;
+-  libc_feholdexcept_setround (&env, FE_TONEAREST);
++  int changed;
++  libc_feholdsetround (&env, FE_TONEAREST, changed);
+   junk1.x = x;
+   m = junk1.i[HIGH_HALF];
+@@ -152,7 +153,7 @@ double __ieee754_exp(double x) {
+     else { retval = __slowexp(x); goto ret; }
+   }
+  ret:
+-  libc_feupdateenv (&env);
++  libc_feresetround (&env, changed);
+   return retval;
+ }
+diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_pow.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_pow.c
+--- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/e_pow.c       2013-06-07 08:35:52.785442441 -0400
++++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/e_pow.c   2013-06-07 08:31:00.294939087 -0400
+@@ -83,7 +83,8 @@ double __ieee754_pow(double x, double y)
+     fenv_t env;
+     double retval;
+-    libc_feholdexcept_setround (&env, FE_TONEAREST);
++    int changed;
++    libc_feholdsetround (&env, FE_TONEAREST, changed);
+     z = log1(x,&aa,&error);                                 /* x^y  =e^(y log (X)) */
+     t = y*134217729.0;
+@@ -100,7 +101,7 @@ double __ieee754_pow(double x, double y)
+     t = __exp1(a1,a2,1.9e16*error);     /* return -10 or 0 if wasn't computed exactly */
+     retval = (t>0)?t:power1(x,y);
+-    libc_feupdateenv (&env);
++    libc_feresetround (&env, changed);
+     return retval;
+   }
+diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_sin.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_sin.c
+--- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_sin.c       2013-06-07 08:35:52.786442462 -0400
++++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_sin.c   2013-06-07 08:32:08.254822633 -0400
+@@ -101,7 +101,8 @@ double __sin(double x){
+       fenv_t env;
+       double retval = 0;
+-      libc_feholdexcept_setround (&env, FE_TONEAREST);
++      int changed;
++      libc_feholdsetround (&env, FE_TONEAREST, changed);
+       u.x = x;
+       m = u.i[HIGH_HALF];
+@@ -355,7 +356,7 @@ double __sin(double x){
+       }
+  ret:
+-      libc_feupdateenv (&env);
++      libc_feresetround (&env, changed);
+       return retval;
+ }
+@@ -374,7 +375,8 @@ double __cos(double x)
+   fenv_t env;
+   double retval = 0;
+-  libc_feholdexcept_setround (&env, FE_TONEAREST);
++  int changed;
++  libc_feholdsetround (&env, FE_TONEAREST, changed);
+   u.x = x;
+   m = u.i[HIGH_HALF];
+@@ -623,7 +625,7 @@ double __cos(double x)
+   }
+  ret:
+-  libc_feupdateenv (&env);
++  libc_feresetround (&env, changed);
+   return retval;
+ }
+diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_tan.c glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_tan.c
+--- glibc-2.12-2-gc4ccff1/sysdeps/ieee754/dbl-64/s_tan.c       2013-06-07 08:35:52.786442462 -0400
++++ glibc-2.12-2-gc4ccff1.new/sysdeps/ieee754/dbl-64/s_tan.c   2013-06-07 08:32:39.736162619 -0400
+@@ -66,7 +66,8 @@ double tan(double x) {
+   int __branred(double, double *, double *);
+   int __mpranred(double, mp_no *, int);
+-  libc_feholdexcept_setround (&env, FE_TONEAREST);
++  int changed;
++  libc_feholdsetround (&env, FE_TONEAREST, changed);
+   /* x=+-INF, x=NaN */
+   num.d = x;  ux = num.i[HIGH_HALF];
+@@ -495,7 +496,7 @@ double tan(double x) {
+   goto ret;
+  ret:
+-  libc_feupdateenv (&env);
++  libc_feresetround (&env, changed);
+   return retval;
+ }
+diff -pruN glibc-2.12-2-gc4ccff1/sysdeps/x86_64/fpu/math_private.h glibc-2.12-2-gc4ccff1.new/sysdeps/x86_64/fpu/math_private.h
+--- glibc-2.12-2-gc4ccff1/sysdeps/x86_64/fpu/math_private.h    2013-06-07 08:35:52.787442488 -0400
++++ glibc-2.12-2-gc4ccff1.new/sysdeps/x86_64/fpu/math_private.h        2013-06-07 08:34:35.370109759 -0400
+@@ -139,3 +139,31 @@ do {                                                              \
+ #undef libc_feupdateenvf
+ #define libc_feupdateenvf(e) libc_feupdateenv (e)
+ // #define libc_feupdateenvl(e) (void) feupdateenv (e)
++
++#undef libc_feholdsetround
++#define libc_feholdsetround(e, r, c) \
++({ \
++  unsigned int mxcsr, new_mxcsr; \
++  asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
++  new_mxcsr = (mxcsr & ~0x6000) | ((r) << 3); \
++  if (__builtin_expect (new_mxcsr != mxcsr, 0)) \
++    { \
++      (e)->__mxcsr = mxcsr; \
++      asm volatile ("ldmxcsr %0" : : "m" (*&new_mxcsr)); \
++      c = 1; \
++    } \
++  else \
++    c = 0; \
++})
++
++#undef libc_feresetround
++#define libc_feresetround(e, c) \
++({ \
++  if (__builtin_expect (c, 0)) \
++    { \
++      unsigned int mxcsr; \
++      asm ("stmxcsr %0" : "=m" (*&mxcsr)); \
++      mxcsr = (mxcsr & ~0x6000) | ((e)->__mxcsr & 0x6000); \
++      asm volatile ("ldmxcsr %0" : : "m" (*&mxcsr)); \
++    } \
++})
diff --git a/src/patches/glibc/glibc-rh966778.patch b/src/patches/glibc/glibc-rh966778.patch
new file mode 100644 (file)
index 0000000..d8fd3fa
--- /dev/null
@@ -0,0 +1,54 @@
+commit 3056dcdb783a177158a5617657d1a33f872358d6
+Author: Ulrich Drepper <drepper@redhat.com>
+Date:   Mon Nov 22 11:11:24 2010 -0500
+
+    Fix multiple nss_compat initgroups() bugs
+    
+    Compat initgroups() is completely broken; the code will always set
+    skip_initgroups_dyn to true, so initgroups() will never be actually
+    called, but due to the nature of the code, setgrent() won't be called
+    either - thus, subsequent invocations of initgroups() will not return
+    the NIS group list anymore.
+    
+    This is a simple patch that makes sure skip_initgroups_dyn is set only
+    in case initgroups is not available; it also attempts to handle the
+    unavailability of other NSS interfaces better.
+    
+    Conflicts:
+    
+       ChangeLog
+
+diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c
+index 07a3b92..de8d95c 100644
+--- a/nis/nss_compat/compat-initgroups.c
++++ b/nis/nss_compat/compat-initgroups.c
+@@ -474,18 +474,21 @@ internal_getgrent_r (ent_t *ent, char *buffer, size_t buflen, const char *user,
+         /* If the selected module does not support getgrent_r or
+            initgroups_dyn, abort. We cannot find the needed group
+            entries.  */
+-        if (nss_getgrent_r == NULL && nss_initgroups_dyn == NULL)
++        if (nss_initgroups_dyn == NULL || nss_getgrgid_r == NULL)
++          {
++            if (nss_setgrent != NULL)
++              {
++                nss_setgrent (1);
++                ent->need_endgrent = true;
++              }
++            ent->skip_initgroups_dyn = true;
++          }
++
++        if (ent->skip_initgroups_dyn && nss_getgrent_r == NULL)
+           return NSS_STATUS_UNAVAIL;
+         ent->files = false;
+-        if (nss_initgroups_dyn == NULL && nss_setgrent != NULL)
+-          {
+-            nss_setgrent (1);
+-            ent->need_endgrent = true;
+-          }
+-        ent->skip_initgroups_dyn = true;
+-
+         return getgrent_next_nss (ent, buffer, buflen, user, group,
+                                   start, size, groupsp, limit, errnop);
+       }
diff --git a/src/patches/glibc/glibc-rh970090.patch b/src/patches/glibc/glibc-rh970090.patch
new file mode 100644 (file)
index 0000000..6010624
--- /dev/null
@@ -0,0 +1,24 @@
+diff -pruN glibc-2.18/nscd/aicache.c glibc-2.18.new/nscd/aicache.c
+--- glibc-2.18/nscd/aicache.c  2013-08-11 04:22:55.000000000 +0530
++++ glibc-2.18.new/nscd/aicache.c      2013-08-26 11:10:25.843470413 +0530
+@@ -25,6 +25,7 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/mman.h>
++#include <resolv/res_hconf.h>
+ #include "dbg_log.h"
+ #include "nscd.h"
+@@ -100,8 +101,11 @@ addhstaiX (struct database_dyn *db, int
+     no_more = __nss_database_lookup ("hosts", NULL,
+                                    "dns [!UNAVAIL=return] files", &nip);
++  /* Initialize configurations.  */
++  if (__builtin_expect (!_res_hconf.initialized, 0))
++    _res_hconf_init ();
+   if (__res_maybe_init (&_res, 0) == -1)
+-          no_more = 1;
++    no_more = 1;
+   /* If we are looking for both IPv4 and IPv6 address we don't want
+      the lookup functions to automatically promote IPv4 addresses to
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 (file)
index 0000000..d27ad54
--- /dev/null
@@ -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 (file)
index 0000000..a61d5b8
--- /dev/null
@@ -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 (file)
index 0000000..9d2b19c
--- /dev/null
@@ -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 (file)
index 0000000..c80e876
--- /dev/null
@@ -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 (file)
index 0000000..bcc4360
--- /dev/null
@@ -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 (file)
index 0000000..57c80fd
--- /dev/null
@@ -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 (file)
index 0000000..fc8d583
--- /dev/null
@@ -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 (file)
index 0000000..34d6034
--- /dev/null
@@ -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 (file)
index 0000000..ce4df82
--- /dev/null
@@ -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 Natarajan<senthil.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 (file)
index 0000000..5c9659b
--- /dev/null
@@ -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 (file)
index 0000000..d179420
--- /dev/null
@@ -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 (file)
index 0000000..ffb5ffb
--- /dev/null
@@ -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 (file)
index 0000000..56879cb
--- /dev/null
@@ -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 (file)
index 0000000..44a1ae3
--- /dev/null
@@ -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 (file)
index 0000000..fff6243
--- /dev/null
@@ -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 (file)
index 0000000..b569f92
--- /dev/null
@@ -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 (file)
index 0000000..08ace67
--- /dev/null
@@ -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 (file)
index 0000000..8b716ee
--- /dev/null
@@ -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 (file)
index 0000000..88d48af
--- /dev/null
@@ -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 (file)
index 0000000..a006c7b
--- /dev/null
@@ -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 (file)
index 0000000..23cc525
--- /dev/null
@@ -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 (file)
index 0000000..28d2d4a
--- /dev/null
@@ -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-MT9P031-Support-files.patch
+
+And on Max Galemin's patch
+https://github.com/MaxGalemin/buildroot/blob/master/board/beagleboard/xm/kernel-patches/linux-0003-Add-support-for-MT9P031-Aptina-image-sensor-driver.patch
+
+And Koen Kooi Previous work's
+https://github.com/beagleboard/kernel/blob/beagleboard-3.2/patches/camera/0003-beagleboard-fix-i2c2-init.patch
+
+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 (file)
index 0000000..04a3656
--- /dev/null
@@ -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 (file)
index 0000000..a8edc77
--- /dev/null
@@ -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 (file)
index 0000000..2039e4a
--- /dev/null
@@ -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 (file)
index 0000000..de0e84b
--- /dev/null
@@ -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 (file)
index 0000000..694bc36
--- /dev/null
@@ -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 (file)
index 0000000..9369852
--- /dev/null
@@ -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 (file)
index 0000000..12194e4
--- /dev/null
@@ -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 (file)
index 0000000..fa64934
--- /dev/null
@@ -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 (file)
index 0000000..0799d83
--- /dev/null
@@ -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 (file)
index 0000000..4abbd05
--- /dev/null
@@ -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 (file)
index 0000000..27bc6ea
--- /dev/null
@@ -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 (file)
index 0000000..ad18b29
--- /dev/null
@@ -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 (file)
index 0000000..da9fcda
--- /dev/null
@@ -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 (file)
index 0000000..8e8a08e
--- /dev/null
@@ -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 (file)
index 0000000..1b936f5
--- /dev/null
@@ -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 (file)
index 0000000..1ca1e70
--- /dev/null
@@ -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
+
diff --git a/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch b/src/patches/linux-3.10.30_cs5535audio_fix_logspam_on_geos.patch
new file mode 100644 (file)
index 0000000..490a34d
--- /dev/null
@@ -0,0 +1,27 @@
+diff -Naur linux-3.10.30.org/sound/pci/cs5535audio/cs5535audio.c linux-3.10.30/sound/pci/cs5535audio/cs5535audio.c
+--- linux-3.10.30.org/sound/pci/cs5535audio/cs5535audio.c      2014-02-13 22:48:15.000000000 +0100
++++ linux-3.10.30/sound/pci/cs5535audio/cs5535audio.c  2014-02-15 12:45:49.545688703 +0100
+@@ -83,8 +83,8 @@
+                       break;
+               udelay(1);
+       } while (--timeout);
+-      if (!timeout)
+-              snd_printk(KERN_ERR "Failure writing to cs5535 codec\n");
++//    if (!timeout)
++//            snd_printk(KERN_ERR "Failure writing to cs5535 codec\n");
+ }
+ static unsigned short snd_cs5535audio_codec_read(struct cs5535audio *cs5535au,
+@@ -108,9 +108,9 @@
+                       break;
+               udelay(1);
+       } while (--timeout);
+-      if (!timeout)
+-              snd_printk(KERN_ERR "Failure reading codec reg 0x%x,"
+-                                      "Last value=0x%x\n", reg, val);
++//    if (!timeout)
++//            snd_printk(KERN_ERR "Failure reading codec reg 0x%x,"
++//                                    "Last value=0x%x\n", reg, val);
+       return (unsigned short) val;
+ }