BSP: rename beagleboard to TI
authorKoen Kooi <koen@dominion.thruhere.net>
Sun, 2 Jan 2011 15:45:43 +0000 (16:45 +0100)
committerKoen Kooi <koen@dominion.thruhere.net>
Sun, 2 Jan 2011 15:45:43 +0000 (16:45 +0100)
linux-omap 2.6.37rc: sync with OE

256 files changed:
conf/layer.conf [new file with mode: 0644]
conf/machine/beagleboard.conf [new file with mode: 0644]
recipes-bsp/linux/files/configs/.empty [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/logo_linux_clut224.ppm [new file with mode: 0644]
recipes-bsp/linux/linux-omap-2.6.37rc/omap3-touchbook/defconfig [new symlink]
recipes-bsp/linux/linux-omap-2.6.37rc/omap3evm/defconfig [new symlink]
recipes-bsp/linux/linux-omap-2.6.37rc/overo/defconfig [new symlink]
recipes-bsp/linux/linux-omap-2.6.37rc/usrp-e1xx/defconfig [new symlink]
recipes-bsp/linux/linux-omap-psp-2.6.32/0001-BeagleBoard-Adjust-USER-button-pin-for-xM.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0001-Revert-omap3-beagle-Fix-compile-time-errors.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0002-board-omap3touchbook-make-it-build-against-TI-linux-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0003-ARM-OMAP-add-support-for-TCT-Zippy-to-Beagle-board-f.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0004-ARM-OMAP-Make-beagle-u-boot-partition-writable.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0005-board-omap3-beagle-add-DSS2-support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0006-board-omap3beagle-prepare-for-DM3730-based-Beagleboa.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0007-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0008-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0009-ARM-OMAP-beagleboard-initialize-ds1307-and-eeprom-on.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0010-ARM-OMAP-update-beagleboard-defconfig.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0011-ASoC-enable-audio-capture-by-default-for-twl4030.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0012-MTD-NAND-omap2-proper-fix-for-subpage-read-ECC-error.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0013-OMAP3630-DSS2-Enable-Pre-Multiplied-Alpha-Support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0014-DSS2-add-bootarg-for-selecting-svideo-or-composite-f.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0015-ISP-add-some-more-from-Leopard-imaging-patch.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0016-ARM-OMAP-Overo-Add-support-for-second-ethernet-port.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0017-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0018-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0019-drivers-mfd-add-twl4030-madc-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0020-ARM-OMAP-Add-missing-twl4030-madc-header-file.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0021-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0022-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0023-netdev-rt73usb-add-vendor-device-ID-for-Ceiva-Wirele.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0024-mmc-don-t-display-single-block-read-console-messages.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0025-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0026-board-overo-add-PM-code-and-sync-with-http-www.sakom.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0027-twl4030-madc-adjust-for-twl4030-twl-api-changes.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0028-OMAP-DSS2-Re-add-support-for-Samsung-lte430wq-f0c-pa.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0029-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0030-Fix-for-bus-width-which-improves-SD-card-s-peformanc.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0031-ARM-VFP-add-support-to-sync-the-VFP-state-of-the-cur.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0032-ARM-VFP-preserve-the-HW-context-when-calling-signal-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0033-Switch-SGX-clocks-to-200MHz-on-DM37xx-OMAP36xx.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0034-modedb.c-add-proper-720p60-mode.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0035-RTC-add-support-for-backup-battery-recharge.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0036-ARM-Add-prompt-for-CONFIG_ALIGNMENT_TRAP.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0037-ARM-Print-warning-on-alignment-trap-in-kernel-mode.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0038-ARM-Expose-some-CPU-control-registers-via-sysfs.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0039-ARM-Add-option-to-allow-userspace-PLE-access.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0040-ARM-Add-option-to-allow-userspace-access-to-performa.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0041-ARM-Expose-some-PMON-registers-through-sysfs.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0042-musb-allow-host-io-without-gadget-module.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0043-MTD-silence-ecc-errors-on-mtdblock0.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0044-ARM-OMAP-beagle-every-known-beagle-except-revB-uses-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0045-ARM-OMAP-beagle-add-support-for-beagleFPGA-expansion.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0046-attemp-to-fix-serial-console-corruption-during-cpuid.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0047-clock34xx-only-try-to-idle-IVA-subsys-when-CONFIG_PM.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/0048-HACK-try-to-poweron-stuff-on-xM-rev-A.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/am3517-evm/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/am37x-evm/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/beagleboard/configs/cpuidle [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/beagleboard/configs/cpuidle-gether [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/beagleboard/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/beagleboard/logo_linux_clut224.ppm [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0001-mt9t111-first-stab-at-merging-sensor-driver-based-on.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0002-mt9t111-Fix-all-checkpatch-errors.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0003-mt9t111-Pass-v4l2_int_device-data.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0004-omap3beagle-Add-camera-support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0005-TEMP-omap3beagle-camera-Add-defconfig.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0006-omap3beagle-camera-Add-support-for-regulators.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0007-TEMP-omap3beagle-cam-Enable-OMAP_MUX.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0008-omap3beagle-camera-Fix-null-pointer-dereference.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0009-Revert-TEMP-omap3beagle-cam-Enable-OMAP_MUX.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0010-omap3beagle-camera-Change-arch-late_initcall.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0011-omap3beagle-camera-Move-i2c-registration-to-the-main.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0012-ARM-OMAP3-make-camera-code-build-if-MT9T111-is-built.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0013-DEBUG-omap3beagle-camera-Force-mode0-in-cam_xclka.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0014-OMAP3-CLOCK-Add-capability-to-change-rate-of-dpll4_m.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0015-Revert-DEBUG-omap3beagle-camera-Force-mode0-in-cam_x.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0016-omap3beagle-camera-Fix-wrong-XCLKA-selection.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0017-omap3isp-set-CAM_MCLK-to-172.8-MHz-allows-exact-9.6-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0018-Fix-Moved-MCLK-setting-to-the-board-file.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0019-omap3isp-core-Do-smarter-MCLK-setting.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0020-omap3beagle-camera-set-mclk-for-mt9t111.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0021-mt9t111-Fix-max-supported-xclk.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0022-omap3beagle-camera-Clarify-regulators-names.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0023-omap3beagle-camera-Fix-powerup-sequence.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0024-omap3beagle-camera-Change-vaux4-to-1.8v.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0025-omap3beagle-camera-Rename-regulators-to-match-actual.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0026-omap3beagle-camera-Complement-remainig-sensor-hw-con.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0027-mt9t111-Fix-detect-function-retval-and-cleanup-print.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0028-omap3beagle-camera-Set-padconf-settings-in-cam-init.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0029-omap3beagle-camera-only-register-camera-driver-for-3.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0030-WIP-mt9t111-Work-in-progress-for-camera-enablement.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0031-BeagleXM-Cam-Add-support-for-MT9V113-VGA-Sensor.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0032-MT9V113-Fixed-sensor-nitialization-issues.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0033-mt9v113-Fix-wrong-active-widths.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0034-omap3isp-Fix-Wrong-check-on-non-interlaced-sensor-on.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0035-omap3isp-Fix-bad-YUV_BT-checks-in-datapath_config.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0036-omap3isp-Set-vd_pol-to-0-by-default-on-all-cases.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0037-omap3isp-ccdc-Set-datalines-to-10-for-YUV_SYNC.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0038-omap3beagle-camera-Fix-parallel-i-f-settings.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0039-omap3beagle-camera-Clean-up-Remove-unneccessary-code.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0040-mt9v113-Clean-Up-Remove-unneccessary-code-printf.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0041-MT9V113-Min-Max-clk-input-changed-as-per-the-spec.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0042-omap3beagle-camera-Further-clode-cleanup.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0043-mt9v113-Settings-from-Aptima-used-to-increase-FPS.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0044-mt9v113-AE-param-tuned-to-get-28-30FPS.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0045-omap3beagle-camera-Cleanup-of-boardfile.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0046-omap3beagle-camera-Cleanup-regulator-usage.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0047-omap3beagle-camera-Bring-back-mt9t111-support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0048-REMOVE-v4l2-Delete-MT9T111-sensor-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0049-V4L-DVB-13670-soc-camera-Add-mt9t112-camera-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0050-soc-camera-mt9t112-modify-exiting-conditions-from-st.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0051-mt9t112-Migrate-from-soc_camera-to-v4l2-int-device.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0052-mt9t112-Add-more-info-to-public-header.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0053-mt9t112-Fix-null-pointer-kernel-bug.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0054-DEBUG-omap3beagle-Add-MT9T112-to-defconfig.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0055-omap3beagle-camera-Change-MT9T111-references-to-new-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0056-omap34xxcam-Fix-multi-pixel-format-negotiation.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0057-SQUASH-omap3beagle-camera-Bring-back-mt9t111-support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0058-mt9t112-Do-init_camera-every-powerup.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0059-omap3beagle-camera-Switch-flag-for-no-sensor-ISP.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0060-mt9t112-Add-back-3MP-basesize.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0061-mt9t112-Prepare-for-24MHz-EXTCLK-and-30-fps.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0062-omap3beagle-camera-Prepare-24MHz-xclk-for-mt9t112.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0063-mt9t112-Correct-register-settings-for-mt9t111-sensor.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0064-mt9t112-Remove-smart-size-selection.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0065-rtl8192su-remove-bogus-Kconfig-depend-on-PCI-and-add.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0066-mt9t112-Add-Context-selection-to-configuration.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0067-mt9t112-Disable-JPEG-in-Context-B.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0068-mt9t112-Make-context-B-stream-unlimited-frames.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0069-mt9t112-Fix-pll-p-dividers-abstraction.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0070-mt9t112-Adjust-50-60Hz-flickering-settings.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0071-mt9t112-Trigger-autofocus-at-the-end-of-context-swit.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0072-omap3beagle-camera-Fix-dual-sensor-registration.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0073-mt9v113-Fix-State-variable-handling.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0074-Move-sensor-rest-to-after-applying-power.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/cam/0075-omap3beagle-Add-camera-bootarg.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/dm37x-evm/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0001-ARM-OMAP-add-spi-platform-devices.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0002-MMA7455L-accelerometer-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0003-bq27x00_battery-remove-error-message-output.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0004-bq27x00_battery-add-charged-gpio.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0005-adf7846-add-more-debugging.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0006-ads7846-read-max-mix-x-y-from-pdata.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0007-ads7846-add-settling-delay-to-pdata.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0008-DSS2-OMAPFB-Translate-X-Y-coordinates-for-the-video-.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0009-DSS2-Fix-scaling-checks-when-rotation-is-90-or-270-d.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0010-add-touchbook-hid-driver.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0011-Make-backlight-controls-accessible-to-users.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0012-ads7846-don-t-error-out-when-there-s-no-pendown-gpio.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0013-ASoC-add-driver-for-omap3-touchbook.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0014-backlight-add-PWM-support.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0015-Forward-port-TWL4030-BCI-driver-from-2.6.29-to-2.6.3.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0016-ARM-OMAP-omap3-touchbook-update-boardfile.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/0017-ARM-OMAP-add-800MHz-OPP-and-remove-125MHz-one.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3-touchbook/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/omap3evm/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/overo/defconfig [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp-2.6.32/porches.patch [new file with mode: 0644]
recipes-bsp/linux/linux-omap-psp_2.6.32.bb [new file with mode: 0644]
recipes-bsp/linux/linux-omap.inc [new file with mode: 0644]
recipes-bsp/linux/linux-omap3.inc [new file with mode: 0644]
recipes-bsp/linux/linux-omap_2.6.37rc.bb [new file with mode: 0644]
recipes-bsp/linux/linux.inc [new file with mode: 0644]
recipes-bsp/linux/multi-kernel.inc [new file with mode: 0644]
recipes-bsp/u-boot/u-boot.inc [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0001-BeagleBoard-move-ramdisk-parameters.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0001-OMAP-mmc-add-support-for-second-and-third-mmc-chan.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0001-OMAP3-Beagle-enable-support-for-second-and-third-m.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0001-OMAP3-enable-i2c-bus-switching-for-Beagle-and-Overo.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0002-OMAP3-add-board-revision-detection-for-Overo.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0003-OMAP3-update-Beagle-revision-detection-to-recognize-.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0004-OMAP3-Set-VAUX2-to-1.8V-for-EHCI-PHY-on-Beagle-Rev-C.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0005-OMAP3-add-entry-for-rev-3.1.2-check-and-display-max-.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0006-OMAP3-add-mpurate-boot-arg-for-overo-and-beagle.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0007-OMAP3-detect-expansion-board-type-version-using-eepr.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0008-OMAP3-Overo-enable-config-eeprom-to-set-u-boot-env-v.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0009-OMAP3-Overo-enable-input-on-MMC1_CLK-and-MMC3_CLK-pi.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0010-OMAP3-Overo-set-CONFIG_SYS_I2C_SPEED-to-400Khz.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0011-OMAP3-trim-excessively-long-delays-in-i2c-driver.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0012-OMAP3-Overo-allow-expansion-boards-with-any-vendor-I.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0013-OMAP3-Overo-change-address-of-expansion-eeprom-to-0x.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0014-OMAP3-board.c-don-t-attempt-to-set-up-second-RAM-ban.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0015-OMAP3-mem.c-enhance-the-RAM-test.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0016-env_nand.c-fail-gracefully-if-no-nand-is-present.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0017-OMAP3-add-definitions-to-support-sysinfo-cpu-and-cpu.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0018-OMAP3-sys_info-update-cpu-detection-for-36XX-37XX.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0019-OMAP3-clocks-update-clock-setup-for-36XX-37XX.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0020-OMAP3-beagle-add-support-for-Beagle-xM.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0021-OMAP3-Beagle-Overo-remove-omapfb.debug-y-from-defaul.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0022-OMAP3-beagle-implement-expansionboard-detection-base.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0023-beagleboard-display-message-about-I2C-errors-being-e.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0024-beagleboard-fix-TCT-expansionboard-IDs.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0025-Add-DSS-driver-for-OMAP3.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0026-Enable-DSS-driver-for-Beagle.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0027-beagleboardXM-don-t-set-mpurate-on-xM-in-bootargs.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0028-OMAP3-fix-and-clean-up-L2-cache-enable-disable-funct.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0029-OMAP3-convert-setup_auxcr-to-pure-asm.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0030-OMAP3-apply-Cortex-A8-errata-workarounds-only-on-aff.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0031-OMAP3-beagle-add-more-expansionboards-based-on-http-.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0032-OMAP3-beagle-set-mpurate-to-600-for-revB-and-revC1-3.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0033-OMAP3-beagle-prettify-expansionboard-message-a-bit.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0034-OMAP3-beagle-add-pinmux-for-Tincantools-Trainer-expa.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0035-OMAP3-Beagle-set-mpurate-to-1000-for-xM.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0036-OMAP3-Beagle-decrease-bootdelay-to-3-use-VGA-for-def.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0037-OMAP3-beagle-pass-expansionboard-name-in-bootargs.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0038-Added-configurations-for-xM-Rev-A-board.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0038-BeagleBoard-Added-LED-driver.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0039-Add-led-command.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0039-OMAP3-beagle-setenv-beaglerev-for-AxBx-Cx-xMA-for-be.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0041-BeagleBoard-Enabled-LEDs.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0042-BeagleBoard-New-command-for-status-of-USER-button.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0043-BeagleBoard-Add-CONFIG_SYS_MEMTEST_SCRATCH.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0044-Beagleboard-Adjust-boot.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0045-BeagleBoard-Enable-pullups-on-i2c2.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/0046-BeagleBoard-Add-camera-to-default-bootargs.patch [new file with mode: 0644]
recipes-bsp/u-boot/u-boot/fw_env.config [new file with mode: 0644]
recipes-bsp/u-boot/u-boot_git.bb [new file with mode: 0644]
recipes-bsp/x-load/signgp.bb [new file with mode: 0644]
recipes-bsp/x-load/signgp/signGP.c [new file with mode: 0644]
recipes-bsp/x-load/x-load-git/bb8547fcbc54ecc7a75f9ad45a31042a04d8a2ce.patch [new file with mode: 0644]
recipes-bsp/x-load/x-load-git/name.patch [new file with mode: 0644]
recipes-bsp/x-load/x-load-git/xm-mem.patch [new file with mode: 0644]
recipes-bsp/x-load/x-load.inc [new file with mode: 0644]
recipes-bsp/x-load/x-load_git.bb [new file with mode: 0644]

diff --git a/conf/layer.conf b/conf/layer.conf
new file mode 100644 (file)
index 0000000..a507cbc
--- /dev/null
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, prepend to BBPATH
+BBPATH := "${LAYERDIR}:${BBPATH}"
+
+# We have a recipes directory, add to BBFILES
+BBFILES := "${BBFILES} ${LAYERDIR}/recipes*/*/*.bb \
+       ${LAYERDIR}/recipes*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "beagle-bsp"
+BBFILE_PATTERN_beagle-bsp := "^${LAYERDIR}/"
+BBFILE_PRIORITY_beagle-bsp = "10"
diff --git a/conf/machine/beagleboard.conf b/conf/machine/beagleboard.conf
new file mode 100644 (file)
index 0000000..ce48019
--- /dev/null
@@ -0,0 +1,44 @@
+#@TYPE: Machine
+#@NAME: Beagleboard machine
+#@DESCRIPTION: Machine configuration for the http://beagleboard.org/ board 
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+           xf86-input-evdev \
+           xf86-input-mouse \
+           xf86-video-omapfb \
+           xf86-input-keyboard"
+
+# Only has DVI connector for external screen
+GUI_MACHINE_CLASS = "bigscreen"
+
+require conf/machine/include/omap3.inc
+
+PREFERRED_PROVIDER_virtual/kernel = "linux-omap-psp"
+
+IMAGE_FSTYPES += "tar.bz2 ubi"
+EXTRA_IMAGECMD_jffs2 = "-lnp "
+
+# Guesswork
+SERIAL_CONSOLE = "115200 ttyS2"
+
+UBOOT_MACHINE = "omap3_beagle_config"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit:    2048
+# UBI: logical eraseblock size:    129024 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 1996 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 129024 -c 1996"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit:    2048
+# UBI: physical eraseblock size:   131072 bytes (128 KiB)
+# UBI: sub-page size:              512
+UBINIZE_ARGS = "-m 2048 -p 128KiB -s 512"
+
+# and sdio
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat alsa"
diff --git a/recipes-bsp/linux/files/configs/.empty b/recipes-bsp/linux/files/configs/.empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0001-ARM-OMAP-Power-on-EHCI-serial-camera-and-DVI-on-beag.patch
new file mode 100644 (file)
index 0000000..ff2a1ce
--- /dev/null
@@ -0,0 +1,55 @@
+From 71b7d633e566195b065e09e97164bec046ca7b6d Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Thu, 7 Oct 2010 09:25:45 +0200
+Subject: [PATCH 01/29] ARM: OMAP: Power on EHCI, serial, camera and DVI on beagleboard-xM
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   26 ++++++++++++++++++++++++--
+ 1 files changed, 24 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 6c12760..6e8a1b9 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -297,13 +297,35 @@ static int beagle_twl_gpio_setup(struct device *dev,
+       gpio_request(gpio + 1, "EHCI_nOC");
+       gpio_direction_input(gpio + 1);
+-      /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */
++      /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
++       * high / others active low) */
+       gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR");
+-      gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
++      if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
++              gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1);
++      else
++              gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0);
++
++      /* DVI reset GPIO is different between revisions */
++      if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM)
++              beagle_dvi_device.reset_gpio = 129;
++      else
++              beagle_dvi_device.reset_gpio = 170;
++
++       /* Power on DVI, Serial and PWR led */
++      if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
++              gpio_request(gpio + 1, "nDVI_PWR_EN");
++              gpio_direction_output(gpio + 1, 0);
++      }
+       /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
+       gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
++      /* Power on camera interface on P7/P8 or DVI on A2 and beyond */
++      if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) {
++              gpio_request(gpio + 2, "CAM_EN");
++              gpio_direction_output(gpio + 2, 1);
++      }
++
+       return 0;
+ }
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0002-omap-Beagle-detect-new-xM-revision-B.patch
new file mode 100644 (file)
index 0000000..93a792a
--- /dev/null
@@ -0,0 +1,43 @@
+From 60e119550f5a782c512c19d86a08313ae2ffa876 Mon Sep 17 00:00:00 2001
+From: Robert Nelson <robertcnelson@gmail.com>
+Date: Tue, 9 Nov 2010 08:34:55 -0600
+Subject: [PATCH 02/29] omap: Beagle: detect new xM revision B
+
+The xM B uses a DM3730 ES1.1 over the ES1.0 on xM A's, no other board changes.
+
+Signed-off-by: Robert Nelson <robertcnelson@gmail.com>
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 6e8a1b9..be8c4ec 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -58,7 +58,8 @@
+  *    AXBX    = GPIO173, GPIO172, GPIO171: 1 1 1
+  *    C1_3    = GPIO173, GPIO172, GPIO171: 1 1 0
+  *    C4      = GPIO173, GPIO172, GPIO171: 1 0 1
+- *    XM      = GPIO173, GPIO172, GPIO171: 0 0 0
++ *    XMA     = GPIO173, GPIO172, GPIO171: 0 0 0
++ *    XMB     = GPIO173, GPIO172, GPIO171: 0 0 1
+  */
+ enum {
+       OMAP3BEAGLE_BOARD_UNKN = 0,
+@@ -117,7 +118,11 @@ static void __init omap3_beagle_init_rev(void)
+               omap3_beagle_version = OMAP3BEAGLE_BOARD_C4;
+               break;
+       case 0:
+-              printk(KERN_INFO "OMAP3 Beagle Rev: xM\n");
++              printk(KERN_INFO "OMAP3 Beagle Rev: xM A\n");
++              omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
++              break;
++      case 1:
++              printk(KERN_INFO "OMAP3 Beagle Rev: xM B\n");
+               omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
+               break;
+       default:
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0003-ARM-OMAP-beagleboard-Add-infrastructure-to-do-fixups.patch
new file mode 100644 (file)
index 0000000..e56e8dc
--- /dev/null
@@ -0,0 +1,219 @@
+From 72657e1ec88da91b772c7158c4c987b29d274ece Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Wed, 6 Oct 2010 10:19:34 +0200
+Subject: [PATCH 03/29] ARM: OMAP: beagleboard: Add infrastructure to do fixups based on expansionboard name passed by u-boot
+
+Add support for Tincantools Zippy and Zippy2 expansionboards as well
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |  142 ++++++++++++++++++++++++++++++-
+ 1 files changed, 139 insertions(+), 3 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index be8c4ec..495be15 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -21,6 +21,7 @@
+ #include <linux/io.h>
+ #include <linux/leds.h>
+ #include <linux/gpio.h>
++#include <linux/irq.h>
+ #include <linux/input.h>
+ #include <linux/gpio_keys.h>
+@@ -143,6 +144,92 @@ fail0:
+       return;
+ }
++char expansionboard_name[16];
++
++#if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
++
++#include <plat/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,
++      .single_channel = 1,    /* 0: slave, 1: master */
++};
++
++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 = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_ENC28J60_IRQ);
++              set_irq_type(omap3beagle_zippy_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++      } else {
++              printk(KERN_ERR "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
++
++#if defined(CONFIG_KS8851) || defined(CONFIG_KS8851_MODULE)
++
++#include <plat/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,
++      .single_channel = 1,    /* 0: slave, 1: master */
++};
++
++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        = OMAP_GPIO_IRQ(OMAP3BEAGLE_GPIO_KS8851_IRQ);
++              set_irq_type(omap3beagle_zippy2_spi_board_info[0].irq, IRQ_TYPE_EDGE_FALLING);
++      } else {
++              printk(KERN_ERR "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 */
+       {
+@@ -262,6 +349,12 @@ static struct omap2_hsmmc_info mmc[] = {
+               .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
+               .gpio_wp        = 29,
+       },
++      {
++              .mmc            = 2,
++              .caps       = MMC_CAP_4_BIT_DATA,
++              .transceiver    = true,
++              .ocr_mask       = 0x00100000,   /* 3.3V */
++      },
+       {}      /* Terminator */
+ };
+@@ -431,7 +524,7 @@ static struct twl4030_platform_data beagle_twldata = {
+       .vpll2          = &beagle_vpll2,
+ };
+-static struct i2c_board_info __initdata beagle_i2c_boardinfo[] = {
++static struct i2c_board_info __initdata beagle_i2c1_boardinfo[] = {
+       {
+               I2C_BOARD_INFO("twl4030", 0x48),
+               .flags = I2C_CLIENT_WAKE,
+@@ -446,10 +539,24 @@ static struct i2c_board_info __initdata beagle_i2c_eeprom[] = {
+        },
+ };
++#if defined(CONFIG_RTC_DRV_DS1307) || \
++      defined(CONFIG_RTC_DRV_DS1307_MODULE)
++
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {
++      {
++              I2C_BOARD_INFO("ds1307", 0x68),
++      },
++};
++#else
++static struct i2c_board_info __initdata beagle_i2c2_boardinfo[] = {};
++#endif
++
+ static int __init omap3_beagle_i2c_init(void)
+ {
+-      omap_register_i2c_bus(1, 2600, beagle_i2c_boardinfo,
+-                      ARRAY_SIZE(beagle_i2c_boardinfo));
++      omap_register_i2c_bus(1, 2600, beagle_i2c1_boardinfo,
++                      ARRAY_SIZE(beagle_i2c1_boardinfo));
++      omap_register_i2c_bus(2, 400,  beagle_i2c2_boardinfo,
++                      ARRAY_SIZE(beagle_i2c2_boardinfo));
+       /* 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));
+@@ -583,6 +690,15 @@ static struct omap_musb_board_data musb_board_data = {
+       .power                  = 100,
+ };
++static int __init expansionboard_setup(char *str)
++{
++      if (!str)
++              return -EINVAL;
++      strncpy(expansionboard_name, str, 16);
++      printk(KERN_INFO "Beagle expansionboard: %s\n", expansionboard_name);
++      return 0;
++}
++
+ static void __init omap3_beagle_init(void)
+ {
+       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+@@ -597,6 +713,24 @@ static void __init omap3_beagle_init(void)
+       /* REVISIT leave DVI powered down until it's needed ... */
+       gpio_direction_output(170, true);
++      if(!strcmp(expansionboard_name, "zippy")) 
++      {
++              printk(KERN_INFO "Beagle expansionboard: initializing enc28j60\n");
++              omap3beagle_enc28j60_init();
++              printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++              mmc[1].gpio_wp = 141;
++              mmc[1].gpio_cd = 162;
++      }
++      
++      if(!strcmp(expansionboard_name, "zippy2")) 
++      {
++              printk(KERN_INFO "Beagle expansionboard: initializing ks_8851\n");
++              omap3beagle_ks8851_init();
++              printk(KERN_INFO "Beagle expansionboard: assigning GPIO 141 and 162 to MMC1\n");
++              mmc[1].gpio_wp = 141;
++              mmc[1].gpio_cd = 162;
++      }
++
+       usb_musb_init(&musb_board_data);
+       usb_ehci_init(&ehci_pdata);
+       omap3beagle_flash_init();
+@@ -608,6 +742,8 @@ static void __init omap3_beagle_init(void)
+       beagle_display_init();
+ }
++early_param("buddy", expansionboard_setup);
++
+ MACHINE_START(OMAP3_BEAGLE, "OMAP3 Beagle Board")
+       /* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */
+       .boot_params    = 0x80000100,
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0004-ARM-OMAP-beagleboard-pre-export-GPIOs-to-userspace-w.patch
new file mode 100644 (file)
index 0000000..c4b6f4c
--- /dev/null
@@ -0,0 +1,57 @@
+From 6f80e6f5205a429951244e690952f192b78d15a8 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Sun, 5 Dec 2010 13:25:00 +0100
+Subject: [PATCH 04/29] ARM: OMAP: beagleboard: pre-export GPIOs to userspace when using a Tincantools trainerboard
+
+This really needs a for loop, patches welcome
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   31 +++++++++++++++++++++++++++++++
+ 1 files changed, 31 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 495be15..34f2132 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -731,6 +731,37 @@ static void __init omap3_beagle_init(void)
+               mmc[1].gpio_cd = 162;
+       }
++      if(!strcmp(expansionboard_name, "trainer"))
++      {
++              printk(KERN_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_musb_init(&musb_board_data);
+       usb_ehci_init(&ehci_pdata);
+       omap3beagle_flash_init();
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0005-modedb.c-add-proper-720p60-mode.patch
new file mode 100644 (file)
index 0000000..dae9671
--- /dev/null
@@ -0,0 +1,28 @@
+From ea2b3d705162f8a1622e60da27b2b5b31ad3abe7 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Mon, 8 Mar 2010 14:38:31 +0100
+Subject: [PATCH 05/29] modedb.c: add proper 720p60 mode
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ 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 de450c1..1cd8153 100644
+--- a/drivers/video/modedb.c
++++ b/drivers/video/modedb.c
+@@ -46,6 +46,10 @@ static const struct fb_videomode modedb[] = {
+       NULL, 60, 640, 480, 39721, 40, 24, 32, 11, 96, 2,
+       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
++    }, {
+       /* 800x600 @ 56 Hz, 35.15 kHz hsync */
+       NULL, 56, 800, 600, 27777, 128, 24, 22, 1, 72, 2,
+       0, FB_VMODE_NONINTERLACED
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0006-mmc-don-t-display-single-block-read-console-messages.patch
new file mode 100644 (file)
index 0000000..0a2f0a1
--- /dev/null
@@ -0,0 +1,28 @@
+From 2036f80d16c1df22b00953f4d2e2457eef00a82d Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Mon, 4 Jan 2010 19:20:25 -0800
+Subject: [PATCH 06/29] mmc: don't display single block read console messages
+
+mmc: don't display single block read console messages
+---
+ drivers/mmc/card/block.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
+index 217f820..b0b68cc 100644
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
+@@ -434,8 +434,8 @@ static int mmc_blk_issue_rw_rq(struct mmc_queue *mq, struct request *req)
+               if (brq.cmd.error || brq.data.error || brq.stop.error) {
+                       if (brq.data.blocks > 1 && rq_data_dir(req) == READ) {
+                               /* Redo read one sector at a time */
+-                              printk(KERN_WARNING "%s: retrying using single "
+-                                     "block read\n", req->rq_disk->disk_name);
++                              /* printk(KERN_WARNING "%s: retrying using single "
++                                     "block read\n", req->rq_disk->disk_name); */
+                               disable_multi = 1;
+                               continue;
+                       }
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0007-MTD-silence-ecc-errors-on-mtdblock0.patch
new file mode 100644 (file)
index 0000000..04de4e7
--- /dev/null
@@ -0,0 +1,63 @@
+From 793eb265af99817165bc03ae96adaaf6e4860dca Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Mon, 26 Apr 2010 11:17:26 -0700
+Subject: [PATCH 07/29] MTD: silence ecc errors on mtdblock0
+
+mtdblock0 is the x-load partition, which uses hw ecc
+this confuses linux, which uses sw ecc
+this patch silences ecc error messages when linux peeks into mtdblock0
+* not for upstream submission *
+---
+ block/blk-core.c            |    7 ++++---
+ drivers/mtd/nand/nand_ecc.c |    2 +-
+ fs/buffer.c                 |    3 ++-
+ 3 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/block/blk-core.c b/block/blk-core.c
+index 4ce953f..1ef9a01 100644
+--- a/block/blk-core.c
++++ b/block/blk-core.c
+@@ -2028,9 +2028,10 @@ bool blk_update_request(struct request *req, int error, unsigned int nr_bytes)
+       if (error && req->cmd_type == REQ_TYPE_FS &&
+           !(req->cmd_flags & REQ_QUIET)) {
+-              printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n",
+-                              req->rq_disk ? req->rq_disk->disk_name : "?",
+-                              (unsigned long long)blk_rq_pos(req));
++              if (req->rq_disk && (strcmp(req->rq_disk->disk_name, "mtdblock0") != 0))
++                              printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n",
++                                      req->rq_disk ? req->rq_disk->disk_name : "?",
++                                      (unsigned long long)blk_rq_pos(req));
+       }
+       blk_account_io_completion(req, nr_bytes);
+diff --git a/drivers/mtd/nand/nand_ecc.c b/drivers/mtd/nand/nand_ecc.c
+index 271b8e7..5924ba7 100644
+--- a/drivers/mtd/nand/nand_ecc.c
++++ b/drivers/mtd/nand/nand_ecc.c
+@@ -507,7 +507,7 @@ int __nand_correct_data(unsigned char *buf,
+       if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1)
+               return 1;       /* error in ecc data; no action needed */
+-      printk(KERN_ERR "uncorrectable error : ");
++//    printk(KERN_ERR "uncorrectable error : ");
+       return -1;
+ }
+ EXPORT_SYMBOL(__nand_correct_data);
+diff --git a/fs/buffer.c b/fs/buffer.c
+index 5930e38..06a00d5 100644
+--- a/fs/buffer.c
++++ b/fs/buffer.c
+@@ -114,7 +114,8 @@ static int quiet_error(struct buffer_head *bh)
+ static void buffer_io_error(struct buffer_head *bh)
+ {
+       char b[BDEVNAME_SIZE];
+-      printk(KERN_ERR "Buffer I/O error on device %s, logical block %Lu\n",
++      if (strcmp(bdevname(bh->b_bdev, b), "mtdblock0") != 0)
++              printk(KERN_ERR "Buffer I/O error on device %s, logical block %Lu\n",
+                       bdevname(bh->b_bdev, b),
+                       (unsigned long long)bh->b_blocknr);
+ }
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0008-Miracle-patch.patch
new file mode 100644 (file)
index 0000000..b76eb27
--- /dev/null
@@ -0,0 +1,504 @@
+From 31949867bace7945acd3ec10c822e6988613aed7 Mon Sep 17 00:00:00 2001
+From: Mike Galbraith <efault@gmx.de>
+Date: Fri, 19 Nov 2010 12:52:42 +0100
+Subject: [PATCH 08/29] Miracle patch
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+On Sun, 2010-11-14 at 16:26 -0800, Linus Torvalds wrote:
+> On Sun, Nov 14, 2010 at 4:15 PM, Linus Torvalds
+> <torvalds@linux-foundation.org> wrote:
+> >
+> > THAT is why I think it's so silly to try to be so strict and walk over
+> > all processes while holding a couple of spinlocks.
+>
+> Btw, let me say that I think the patch is great even with that thing
+> in. It looks clean, the thing I'm complaining about is not a big deal,
+> and it seems to perform very much as advertized. The difference with
+> autogroup scheduling is very noticeable with a simple "make -j64"
+> kernel compile.
+>
+> So I really don't think it's a big deal. The sysctl handler isn't even
+> complicated. But boy does it hurt my eyes to see a spinlock held
+> around a "do_each_thread()". And I do get the feeling that the
+> simplest way to fix it would be to just remove the code entirely, and
+> just say that "enabling/disabling may be delayed for old processes
+> with existing autogroups".
+
+Which is what I just did. If the oddball case isn't a big deal, the
+patch shrinks, which is a good thing. I just wanted to cover all bases.
+
+Patchlet with handler whacked:
+
+A recurring complaint from CFS users is that parallel kbuild has a negative
+impact on desktop interactivity.  This patch implements an idea from Linus,
+to automatically create task groups.  This patch only implements Linus' per
+tty task group suggestion, and only for fair class tasks, but leaves the way
+open for enhancement.
+
+Implementation: each task's signal struct contains an inherited pointer to a
+refcounted autogroup struct containing a task group pointer, the default for
+all tasks pointing to the init_task_group.  When a task calls __proc_set_tty(),
+the process wide reference to the default group is dropped, a new task group is
+created, and the process is moved into the new task group.  Children thereafter
+inherit this task group, and increase it's refcount.  On exit, a reference to the
+current task group is dropped when the last reference to each signal struct is
+dropped.  The task group is destroyed when the last signal struct referencing
+it is freed.   At runqueue selection time, IFF a task has no cgroup assignment,
+it's current autogroup is used.
+
+The feature is enabled from boot by default if CONFIG_SCHED_AUTOGROUP is
+selected, but can be disabled via the boot option noautogroup, and can be
+also be turned on/off on the fly via..
+   echo [01] > /proc/sys/kernel/sched_autogroup_enabled.
+..which will automatically move tasks to/from the root task group.
+
+Some numbers.
+
+A 100% hog overhead measurement proggy pinned to the same CPU as a make -j10
+
+About measurement proggy:
+  pert/sec = perturbations/sec
+  min/max/avg = scheduler service latencies in usecs
+  sum/s = time accrued by the competition per sample period (1 sec here)
+  overhead = %CPU received by the competition per sample period
+
+pert/s:       31 >40475.37us:        3 min:  0.37 max:48103.60 avg:29573.74 sum/s:916786us overhead:90.24%
+pert/s:       23 >41237.70us:       12 min:  0.36 max:56010.39 avg:40187.01 sum/s:924301us overhead:91.99%
+pert/s:       24 >42150.22us:       12 min:  8.86 max:61265.91 avg:39459.91 sum/s:947038us overhead:92.20%
+pert/s:       26 >42344.91us:       11 min:  3.83 max:52029.60 avg:36164.70 sum/s:940282us overhead:91.12%
+pert/s:       24 >44262.90us:       14 min:  5.05 max:82735.15 avg:40314.33 sum/s:967544us overhead:92.22%
+
+Same load with this patch applied.
+
+pert/s:      229 >5484.43us:       41 min:  0.15 max:12069.42 avg:2193.81 sum/s:502382us overhead:50.24%
+pert/s:      222 >5652.28us:       43 min:  0.46 max:12077.31 avg:2248.56 sum/s:499181us overhead:49.92%
+pert/s:      211 >5809.38us:       43 min:  0.16 max:12064.78 avg:2381.70 sum/s:502538us overhead:50.25%
+pert/s:      223 >6147.92us:       43 min:  0.15 max:16107.46 avg:2282.17 sum/s:508925us overhead:50.49%
+pert/s:      218 >6252.64us:       43 min:  0.16 max:12066.13 avg:2324.11 sum/s:506656us overhead:50.27%
+
+Average service latency is an order of magnitude better with autogroup.
+(Imagine that pert were Xorg or whatnot instead)
+
+Using Mathieu Desnoyers' wakeup-latency testcase:
+
+With taskset -c 3 make -j 10 running..
+
+taskset -c 3 ./wakeup-latency& sleep 30;killall wakeup-latency
+
+without:
+maximum latency: 42963.2 µs
+average latency: 9077.0 µs
+missed timer events: 0
+
+with:
+maximum latency: 4160.7 µs
+average latency: 149.4 µs
+missed timer events: 0
+
+Signed-off-by: Mike Galbraith <efault@gmx.de>
+---
+ Documentation/kernel-parameters.txt |    2 +
+ drivers/tty/tty_io.c                |    1 +
+ include/linux/sched.h               |   19 +++++
+ init/Kconfig                        |   12 +++
+ kernel/fork.c                       |    5 +-
+ kernel/sched.c                      |   25 ++++--
+ kernel/sched_autogroup.c            |  140 +++++++++++++++++++++++++++++++++++
+ kernel/sched_autogroup.h            |   18 +++++
+ kernel/sysctl.c                     |   11 +++
+ 9 files changed, 224 insertions(+), 9 deletions(-)
+ create mode 100644 kernel/sched_autogroup.c
+ create mode 100644 kernel/sched_autogroup.h
+
+diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
+index 8b61c93..9408728 100644
+--- a/Documentation/kernel-parameters.txt
++++ b/Documentation/kernel-parameters.txt
+@@ -1622,6 +1622,8 @@ and is between 256 and 4096 characters. It is defined in the file
+       noapic          [SMP,APIC] Tells the kernel to not make use of any
+                       IOAPICs that may be present in the system.
++      noautogroup     Disable scheduler automatic task group creation.
++
+       nobats          [PPC] Do not use BATs for mapping kernel lowmem
+                       on "Classic" PPC cores.
+diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
+index 35480dd..1849f4a 100644
+--- a/drivers/tty/tty_io.c
++++ b/drivers/tty/tty_io.c
+@@ -3169,6 +3169,7 @@ static void __proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
+       put_pid(tsk->signal->tty_old_pgrp);
+       tsk->signal->tty = tty_kref_get(tty);
+       tsk->signal->tty_old_pgrp = NULL;
++      sched_autogroup_create_attach(tsk);
+ }
+ static void proc_set_tty(struct task_struct *tsk, struct tty_struct *tty)
+diff --git a/include/linux/sched.h b/include/linux/sched.h
+index 2238745..3a775e3 100644
+--- a/include/linux/sched.h
++++ b/include/linux/sched.h
+@@ -509,6 +509,8 @@ struct thread_group_cputimer {
+       spinlock_t lock;
+ };
++struct autogroup;
++
+ /*
+  * NOTE! "signal_struct" does not have it's own
+  * locking, because a shared signal_struct always
+@@ -576,6 +578,9 @@ struct signal_struct {
+       struct tty_struct *tty; /* NULL if no tty */
++#ifdef CONFIG_SCHED_AUTOGROUP
++      struct autogroup *autogroup;
++#endif
+       /*
+        * Cumulative resource counters for dead threads in the group,
+        * and for reaped dead child processes forked by this group.
+@@ -1931,6 +1936,20 @@ int sched_rt_handler(struct ctl_table *table, int write,
+ extern unsigned int sysctl_sched_compat_yield;
++#ifdef CONFIG_SCHED_AUTOGROUP
++extern unsigned int sysctl_sched_autogroup_enabled;
++
++extern void sched_autogroup_create_attach(struct task_struct *p);
++extern void sched_autogroup_detach(struct task_struct *p);
++extern void sched_autogroup_fork(struct signal_struct *sig);
++extern void sched_autogroup_exit(struct signal_struct *sig);
++#else
++static inline void sched_autogroup_create_attach(struct task_struct *p) { }
++static inline void sched_autogroup_detach(struct task_struct *p) { }
++static inline void sched_autogroup_fork(struct signal_struct *sig) { }
++static inline void sched_autogroup_exit(struct signal_struct *sig) { }
++#endif
++
+ #ifdef CONFIG_RT_MUTEXES
+ extern int rt_mutex_getprio(struct task_struct *p);
+ extern void rt_mutex_setprio(struct task_struct *p, int prio);
+diff --git a/init/Kconfig b/init/Kconfig
+index c972899..a4985d9 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -741,6 +741,18 @@ config NET_NS
+ endif # NAMESPACES
++config SCHED_AUTOGROUP
++      bool "Automatic process group scheduling"
++      select CGROUPS
++      select CGROUP_SCHED
++      select FAIR_GROUP_SCHED
++      help
++        This option optimizes the scheduler for common desktop workloads by
++        automatically creating and populating task groups.  This separation
++        of workloads isolates aggressive CPU burners (like build jobs) from
++        desktop applications.  Task group autogeneration is currently based
++        upon task tty association.
++
+ config MM_OWNER
+       bool
+diff --git a/kernel/fork.c b/kernel/fork.c
+index 5447dc7..70ea75f 100644
+--- a/kernel/fork.c
++++ b/kernel/fork.c
+@@ -174,8 +174,10 @@ static inline void free_signal_struct(struct signal_struct *sig)
+ static inline void put_signal_struct(struct signal_struct *sig)
+ {
+-      if (atomic_dec_and_test(&sig->sigcnt))
++      if (atomic_dec_and_test(&sig->sigcnt)) {
++              sched_autogroup_exit(sig);
+               free_signal_struct(sig);
++      }
+ }
+ void __put_task_struct(struct task_struct *tsk)
+@@ -905,6 +907,7 @@ static int copy_signal(unsigned long clone_flags, struct task_struct *tsk)
+       posix_cpu_timers_init_group(sig);
+       tty_audit_fork(sig);
++      sched_autogroup_fork(sig);
+       sig->oom_adj = current->signal->oom_adj;
+       sig->oom_score_adj = current->signal->oom_score_adj;
+diff --git a/kernel/sched.c b/kernel/sched.c
+index 297d1a0..53ff9a1 100644
+--- a/kernel/sched.c
++++ b/kernel/sched.c
+@@ -78,6 +78,7 @@
+ #include "sched_cpupri.h"
+ #include "workqueue_sched.h"
++#include "sched_autogroup.h"
+ #define CREATE_TRACE_POINTS
+ #include <trace/events/sched.h>
+@@ -605,11 +606,14 @@ static inline int cpu_of(struct rq *rq)
+  */
+ static inline struct task_group *task_group(struct task_struct *p)
+ {
++      struct task_group *tg;
+       struct cgroup_subsys_state *css;
+       css = task_subsys_state_check(p, cpu_cgroup_subsys_id,
+                       lockdep_is_held(&task_rq(p)->lock));
+-      return container_of(css, struct task_group, css);
++      tg = container_of(css, struct task_group, css);
++
++      return autogroup_task_group(p, tg);
+ }
+ /* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */
+@@ -2063,6 +2067,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
+ #include "sched_idletask.c"
+ #include "sched_fair.c"
+ #include "sched_rt.c"
++#include "sched_autogroup.c"
+ #include "sched_stoptask.c"
+ #ifdef CONFIG_SCHED_DEBUG
+ # include "sched_debug.c"
+@@ -8164,7 +8169,7 @@ void __init sched_init(void)
+ #ifdef CONFIG_CGROUP_SCHED
+       list_add(&init_task_group.list, &task_groups);
+       INIT_LIST_HEAD(&init_task_group.children);
+-
++      autogroup_init(&init_task);
+ #endif /* CONFIG_CGROUP_SCHED */
+ #if defined CONFIG_FAIR_GROUP_SCHED && defined CONFIG_SMP
+@@ -8694,15 +8699,11 @@ void sched_destroy_group(struct task_group *tg)
+ /* change task's runqueue when it moves between groups.
+  *    The caller of this function should have put the task in its new group
+  *    by now. This function just updates tsk->se.cfs_rq and tsk->se.parent to
+- *    reflect its new group.
++ *    reflect its new group.  Called with the runqueue lock held.
+  */
+-void sched_move_task(struct task_struct *tsk)
++void __sched_move_task(struct task_struct *tsk, struct rq *rq)
+ {
+       int on_rq, running;
+-      unsigned long flags;
+-      struct rq *rq;
+-
+-      rq = task_rq_lock(tsk, &flags);
+       running = task_current(rq, tsk);
+       on_rq = tsk->se.on_rq;
+@@ -8723,7 +8724,15 @@ void sched_move_task(struct task_struct *tsk)
+               tsk->sched_class->set_curr_task(rq);
+       if (on_rq)
+               enqueue_task(rq, tsk, 0);
++}
++void sched_move_task(struct task_struct *tsk)
++{
++      struct rq *rq;
++      unsigned long flags;
++
++      rq = task_rq_lock(tsk, &flags);
++      __sched_move_task(tsk, rq);
+       task_rq_unlock(rq, &flags);
+ }
+ #endif /* CONFIG_CGROUP_SCHED */
+diff --git a/kernel/sched_autogroup.c b/kernel/sched_autogroup.c
+new file mode 100644
+index 0000000..62f1d0e
+--- /dev/null
++++ b/kernel/sched_autogroup.c
+@@ -0,0 +1,140 @@
++#ifdef CONFIG_SCHED_AUTOGROUP
++
++unsigned int __read_mostly sysctl_sched_autogroup_enabled = 1;
++
++struct autogroup {
++      struct kref             kref;
++      struct task_group       *tg;
++};
++
++static struct autogroup autogroup_default;
++
++static void autogroup_init(struct task_struct *init_task)
++{
++      autogroup_default.tg = &init_task_group;
++      kref_init(&autogroup_default.kref);
++      init_task->signal->autogroup = &autogroup_default;
++}
++
++static inline void autogroup_destroy(struct kref *kref)
++{
++      struct autogroup *ag = container_of(kref, struct autogroup, kref);
++      struct task_group *tg = ag->tg;
++
++      kfree(ag);
++      sched_destroy_group(tg);
++}
++
++static inline void autogroup_kref_put(struct autogroup *ag)
++{
++      kref_put(&ag->kref, autogroup_destroy);
++}
++
++static inline struct autogroup *autogroup_kref_get(struct autogroup *ag)
++{
++      kref_get(&ag->kref);
++      return ag;
++}
++
++static inline struct autogroup *autogroup_create(void)
++{
++      struct autogroup *ag = kmalloc(sizeof(*ag), GFP_KERNEL);
++
++      if (!ag)
++              goto out_fail;
++
++      ag->tg = sched_create_group(&init_task_group);
++      kref_init(&ag->kref);
++
++      if (!(IS_ERR(ag->tg)))
++              return ag;
++
++out_fail:
++      if (ag) {
++              kfree(ag);
++              WARN_ON(1);
++      } else
++              WARN_ON(1);
++
++      return autogroup_kref_get(&autogroup_default);
++}
++
++static inline struct task_group *
++autogroup_task_group(struct task_struct *p, struct task_group *tg)
++{
++      int enabled = ACCESS_ONCE(sysctl_sched_autogroup_enabled);
++
++      enabled &= (tg == &root_task_group);
++      enabled &= (p->sched_class == &fair_sched_class);
++      enabled &= (!(p->flags & PF_EXITING));
++
++      if (enabled)
++              return p->signal->autogroup->tg;
++
++      return tg;
++}
++
++static void
++autogroup_move_group(struct task_struct *p, struct autogroup *ag)
++{
++      struct autogroup *prev;
++      struct task_struct *t;
++      struct rq *rq;
++      unsigned long flags;
++
++      rq = task_rq_lock(p, &flags);
++      prev = p->signal->autogroup;
++      if (prev == ag) {
++              task_rq_unlock(rq, &flags);
++              return;
++      }
++
++      p->signal->autogroup = autogroup_kref_get(ag);
++      __sched_move_task(p, rq);
++      task_rq_unlock(rq, &flags);
++
++      rcu_read_lock();
++      list_for_each_entry_rcu(t, &p->thread_group, thread_group) {
++              sched_move_task(t);
++      }
++      rcu_read_unlock();
++
++      autogroup_kref_put(prev);
++}
++
++void sched_autogroup_create_attach(struct task_struct *p)
++{
++      struct autogroup *ag = autogroup_create();
++
++      autogroup_move_group(p, ag);
++      /* drop extra refrence added by autogroup_create() */
++      autogroup_kref_put(ag);
++}
++EXPORT_SYMBOL(sched_autogroup_create_attach);
++
++/* currently has no users */
++void sched_autogroup_detach(struct task_struct *p)
++{
++      autogroup_move_group(p, &autogroup_default);
++}
++EXPORT_SYMBOL(sched_autogroup_detach);
++
++void sched_autogroup_fork(struct signal_struct *sig)
++{
++      sig->autogroup = autogroup_kref_get(current->signal->autogroup);
++}
++
++void sched_autogroup_exit(struct signal_struct *sig)
++{
++      autogroup_kref_put(sig->autogroup);
++}
++
++static int __init setup_autogroup(char *str)
++{
++      sysctl_sched_autogroup_enabled = 0;
++
++      return 1;
++}
++
++__setup("noautogroup", setup_autogroup);
++#endif
+diff --git a/kernel/sched_autogroup.h b/kernel/sched_autogroup.h
+new file mode 100644
+index 0000000..6048f5d
+--- /dev/null
++++ b/kernel/sched_autogroup.h
+@@ -0,0 +1,18 @@
++#ifdef CONFIG_SCHED_AUTOGROUP
++
++static void __sched_move_task(struct task_struct *tsk, struct rq *rq);
++
++static inline struct task_group *
++autogroup_task_group(struct task_struct *p, struct task_group *tg);
++
++#else /* !CONFIG_SCHED_AUTOGROUP */
++
++static inline void autogroup_init(struct task_struct *init_task) {  }
++
++static inline struct task_group *
++autogroup_task_group(struct task_struct *p, struct task_group *tg)
++{
++      return tg;
++}
++
++#endif /* CONFIG_SCHED_AUTOGROUP */
+diff --git a/kernel/sysctl.c b/kernel/sysctl.c
+index 5abfa15..b162f65 100644
+--- a/kernel/sysctl.c
++++ b/kernel/sysctl.c
+@@ -382,6 +382,17 @@ static struct ctl_table kern_table[] = {
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec,
+       },
++#ifdef CONFIG_SCHED_AUTOGROUP
++      {
++              .procname       = "sched_autogroup_enabled",
++              .data           = &sysctl_sched_autogroup_enabled,
++              .maxlen         = sizeof(unsigned int),
++              .mode           = 0644,
++              .proc_handler   = proc_dointvec,
++              .extra1         = &zero,
++              .extra2         = &one,
++      },
++#endif
+ #ifdef CONFIG_PROVE_LOCKING
+       {
+               .procname       = "prove_locking",
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0009-ARM-OMAP-add-omap_rev_-macros.patch
new file mode 100644 (file)
index 0000000..1c5d8df
--- /dev/null
@@ -0,0 +1,81 @@
+From 1beed5ee3301a9756c8cd2672d487c568c562e81 Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Tue, 23 Nov 2010 11:40:20 +0100
+Subject: [PATCH 09/29] ARM: OMAP: add omap_rev_* macros
+
+This is just to make the SGX modules build that depend on omap_rev_lt_3_0
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/plat-omap/include/plat/cpu.h |   55 +++++++++++++++++++++++++++++++++
+ 1 files changed, 55 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/cpu.h b/arch/arm/plat-omap/include/plat/cpu.h
+index 3fd8b40..1a8c347 100644
+--- a/arch/arm/plat-omap/include/plat/cpu.h
++++ b/arch/arm/plat-omap/include/plat/cpu.h
+@@ -394,6 +394,61 @@ IS_OMAP_TYPE(3517, 0x3517)
+ #define OMAP4430_REV_ES2_0    0x44301044
+ /*
++ * Silicon revisions
++ */
++#define OMAP_ES_1_0           0x00
++#define OMAP_ES_2_0           0x10
++#define OMAP_ES_2_1           0x20
++#define OMAP_ES_3_0           0x30
++#define OMAP_ES_3_1           0x40
++
++#define OMAP_REV_MASK         0x0000ff00
++#define OMAP_REV_BITS         ((omap_rev() & OMAP_REV_MASK) >> 8)
++
++#define OMAP_REV_IS(revid)                                    \
++static inline u8 omap_rev_is_ ##revid (void)                  \
++{                                                             \
++      return (OMAP_REV_BITS == OMAP_ES_ ##revid) ? 1 : 0;     \
++}
++
++#define OMAP_REV_LT(revid)                                    \
++static inline u8 omap_rev_lt_ ##revid (void)                  \
++{                                                             \
++      return (OMAP_REV_BITS < OMAP_ES_ ##revid) ? 1 : 0;      \
++}
++
++#define OMAP_REV_LE(revid)                                    \
++static inline u8 omap_rev_le_ ##revid (void)                  \
++{                                                             \
++      return (OMAP_REV_BITS <= OMAP_ES_ ##revid) ? 1 : 0;     \
++}
++
++#define OMAP_REV_GT(revid)                                    \
++static inline u8 omap_rev_gt_ ##revid (void)                  \
++{                                                             \
++      return (OMAP_REV_BITS > OMAP_ES_ ##revid) ? 1 : 0;      \
++}
++
++#define OMAP_REV_GE(revid)                                    \
++static inline u8 omap_rev_ge_ ##revid (void)                  \
++{                                                             \
++      return (OMAP_REV_BITS >= OMAP_ES_ ##revid) ? 1 : 0;     \
++}
++
++#define OMAP_REV_FUNCTIONS(revid)     \
++      OMAP_REV_IS(revid)              \
++      OMAP_REV_LT(revid)              \
++      OMAP_REV_LE(revid)              \
++      OMAP_REV_GT(revid)              \
++      OMAP_REV_GE(revid)
++
++OMAP_REV_FUNCTIONS(1_0)
++OMAP_REV_FUNCTIONS(2_0)
++OMAP_REV_FUNCTIONS(2_1)
++OMAP_REV_FUNCTIONS(3_0)
++OMAP_REV_FUNCTIONS(3_1)
++
++/*
+  * omap_chip bits
+  *
+  * CHIP_IS_OMAP{2420,2430,3430} indicate that a particular structure is
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0010-OMAP-DSS2-enable-hsclk-in-dsi_pll_init-for-OMAP36XX.patch
new file mode 100644 (file)
index 0000000..d292e2f
--- /dev/null
@@ -0,0 +1,31 @@
+From f051874f829ed2e2462c0e64c28e28bd6f942f2d Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Mon, 10 May 2010 20:44:09 -0700
+Subject: [PATCH 10/29] OMAP: DSS2: enable hsclk in dsi_pll_init for OMAP36XX
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ drivers/video/omap2/dss/dpi.c |    7 ++++++-
+ 1 files changed, 6 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dpi.c b/drivers/video/omap2/dss/dpi.c
+index 960e977..23047b6 100644
+--- a/drivers/video/omap2/dss/dpi.c
++++ b/drivers/video/omap2/dss/dpi.c
+@@ -177,7 +177,12 @@ int omapdss_dpi_display_enable(struct omap_dss_device *dssdev)
+ #ifdef CONFIG_OMAP2_DSS_USE_DSI_PLL
+       dss_clk_enable(DSS_CLK_FCK2);
+-      r = dsi_pll_init(dssdev, 0, 1);
++
++      if (cpu_is_omap3630())
++              r = dsi_pll_init(dssdev, 1, 1);
++      else
++              r = dsi_pll_init(dssdev, 0, 1);
++
+       if (r)
+               goto err3;
+ #endif
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0011-omap3-beagleboard-add-WIP-support-for-beagleboardtoy.patch
new file mode 100644 (file)
index 0000000..c800003
--- /dev/null
@@ -0,0 +1,102 @@
+From 18333339fe5e104c2ddfb2688989a15df0e0f94c Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@beagleboard.org>
+Date: Mon, 20 Dec 2010 11:57:56 +0100
+Subject: [PATCH 11/29] omap3: beagleboard: add WIP support for beagleboardtoys WL12xx board
+
+Based on a patch by Luciano Coelho <luciano.coelho@nokia.com>
+
+Signed-off-by: Koen Kooi <koen@beagleboard.org>
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |   68 +++++++++++++++++++++++++++++++
+ 1 files changed, 68 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 34f2132..073276b 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -146,6 +146,67 @@ fail0:
+ char expansionboard_name[16];
++#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE)
++#include <linux/regulator/fixed.h>
++#include <linux/wl12xx.h>
++
++#define OMAP_BEAGLE_WLAN_EN_GPIO    (139)
++#define OMAP_BEAGLE_WLAN_IRQ_GPIO   (137)
++
++struct wl12xx_platform_data omap_beagle_wlan_data __initdata = {
++      .irq = OMAP_GPIO_IRQ(OMAP_BEAGLE_WLAN_IRQ_GPIO),
++      .board_ref_clock = 2, /* 38.4 MHz */
++};
++
++ static struct omap2_hsmmc_info mmcbbt[] = {
++      {
++              .mmc            = 1,
++              .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
++              .gpio_wp        = 29,
++      },
++      {
++              .name           = "wl1271",
++              .mmc            = 2,
++              .caps           = MMC_CAP_4_BIT_DATA,
++              .gpio_wp        = -EINVAL,
++              .gpio_cd        = -EINVAL,
++              .nonremovable   = true,
++      },
++      {}      /* Terminator */
++ };
++
++static struct regulator_consumer_supply beagle_vmmc2_supply = {
++      .supply         = "vmmc",
++      .dev_name       = "mmci-omap-hs.1",
++};
++
++static struct regulator_init_data beagle_vmmc2 = {
++      .constraints = {
++              .valid_ops_mask = REGULATOR_CHANGE_STATUS,
++      },
++      .num_consumer_supplies = 1,
++      .consumer_supplies = &beagle_vmmc2_supply,
++};
++
++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
++
+ #if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE)
+ #include <plat/mcspi.h>
+@@ -382,7 +443,14 @@ static int beagle_twl_gpio_setup(struct device *dev,
+       }
+       /* gpio + 0 is "mmc0_cd" (input/IRQ) */
+       mmc[0].gpio_cd = gpio + 0;
++#if defined(CONFIG_WL1271) || defined(CONFIG_WL1271_MODULE)
++      if(!strcmp(expansionboard_name, "fixme-beagletoy")) 
++              omap2_hsmmc_init(mmcbbt);
++      else
++              omap2_hsmmc_init(mmc);
++#else
+       omap2_hsmmc_init(mmc);
++#endif
+       /* link regulators to MMC adapters */
+       beagle_vmmc1_supply.dev = mmc[0].dev;
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0012-drivers-net-smsc911x-return-ENODEV-if-device-is-not-.patch
new file mode 100644 (file)
index 0000000..1bb4dda
--- /dev/null
@@ -0,0 +1,29 @@
+From 43b87f69e82217aff2a966559bdf28dcfedc2c8e Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 15:17:44 -0800
+Subject: [PATCH 12/29] drivers: net: smsc911x: return ENODEV if device is not found
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ drivers/net/smsc911x.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/smsc911x.c b/drivers/net/smsc911x.c
+index 64bfdae..ba2a00e 100644
+--- a/drivers/net/smsc911x.c
++++ b/drivers/net/smsc911x.c
+@@ -2019,8 +2019,10 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
+       }
+       retval = smsc911x_init(dev);
+-      if (retval < 0)
++      if (retval < 0) {
++              retval = -ENODEV;
+               goto out_unmap_io_3;
++      }
+       /* configure irq polarity and type before connecting isr */
+       if (pdata->config.irq_polarity == SMSC911X_IRQ_POLARITY_ACTIVE_HIGH)
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0013-drivers-input-touchscreen-ads7846-return-ENODEV-if-d.patch
new file mode 100644 (file)
index 0000000..efefda5
--- /dev/null
@@ -0,0 +1,47 @@
+From 43b7984021e30a9aa9b97c2cf9a9ceb806372709 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <sakoman@gmail.com>
+Date: Tue, 15 Dec 2009 15:24:10 -0800
+Subject: [PATCH 13/29] drivers: input: touchscreen: ads7846: return ENODEV if device is not found
+
+Signed-off-by: Steve Sakoman <sakoman@gmail.com>
+---
+ drivers/input/touchscreen/ads7846.c |   13 ++++++++++---
+ 1 files changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c
+index 14ea54b..c775e38 100644
+--- a/drivers/input/touchscreen/ads7846.c
++++ b/drivers/input/touchscreen/ads7846.c
+@@ -1325,11 +1325,18 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+        * the touchscreen, in case it's not connected.
+        */
+       if (ts->model == 7845)
+-              ads7845_read12_ser(&spi->dev, PWRDOWN);
++              err = ads7845_read12_ser(&spi->dev, PWRDOWN);
+       else
+-              (void) ads7846_read12_ser(&spi->dev,
++              err = ads7846_read12_ser(&spi->dev,
+                               READ_12BIT_SER(vaux) | ADS_PD10_ALL_ON);
++      /* if sample is all 0's or all 1's then there is no device on spi */
++      if ( (err == 0x000) || (err == 0xfff)) {
++              dev_info(&spi->dev, "no device detected, test read result was 0x%08X\n", err);
++              err = -ENODEV;
++              goto err_free_irq;
++      }
++
+       err = sysfs_create_group(&spi->dev.kobj, &ads784x_attr_group);
+       if (err)
+               goto err_remove_hwmon;
+@@ -1353,7 +1360,7 @@ static int __devinit ads7846_probe(struct spi_device *spi)
+  err_put_regulator:
+       regulator_put(ts->reg);
+  err_free_gpio:
+-      if (ts->gpio_pendown != -1)
++      if (!ts->get_pendown_state && ts->gpio_pendown != -1)
+               gpio_free(ts->gpio_pendown);
+  err_cleanup_filter:
+       if (ts->filter_cleanup)
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0014-ASoC-enable-audio-capture-by-default-for-twl4030.patch
new file mode 100644 (file)
index 0000000..4ef7dd4
--- /dev/null
@@ -0,0 +1,27 @@
+From ebb70888ec3601534601d7524212fbefa24d679e Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 12:45:20 -0800
+Subject: [PATCH 14/29] ASoC: enable audio capture by default for twl4030
+
+---
+ sound/soc/codecs/twl4030.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
+index cbebec6..430cd10 100644
+--- a/sound/soc/codecs/twl4030.c
++++ b/sound/soc/codecs/twl4030.c
+@@ -56,8 +56,8 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
+       0x00, /* REG_OPTION             (0x2)   */
+       0x00, /* REG_UNKNOWN            (0x3)   */
+       0x00, /* REG_MICBIAS_CTL        (0x4)   */
+-      0x00, /* REG_ANAMICL            (0x5)   */
+-      0x00, /* REG_ANAMICR            (0x6)   */
++      0x34, /* REG_ANAMICL            (0x5)   */
++      0x14, /* REG_ANAMICR            (0x6)   */
+       0x00, /* REG_AVADC_CTL          (0x7)   */
+       0x00, /* REG_ADCMICSEL          (0x8)   */
+       0x00, /* REG_DIGMIXING          (0x9)   */
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0015-MFD-enable-madc-clock.patch
new file mode 100644 (file)
index 0000000..725881c
--- /dev/null
@@ -0,0 +1,51 @@
+From 0bedf8e81896a69ba77e9066ad9545412fd53cf8 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Sat, 23 Jan 2010 06:26:54 -0800
+Subject: [PATCH 15/29] MFD: enable madc clock
+
+---
+ drivers/mfd/twl-core.c  |    8 ++++++++
+ include/linux/i2c/twl.h |    1 +
+ 2 files changed, 9 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/mfd/twl-core.c b/drivers/mfd/twl-core.c
+index 35275ba..5aa7358 100644
+--- a/drivers/mfd/twl-core.c
++++ b/drivers/mfd/twl-core.c
+@@ -208,6 +208,11 @@
+ /* Few power values */
+ #define R_CFG_BOOT                    0x05
++#define R_GPBR1                               0x0C
++
++/* MADC clock values for R_GPBR1 */
++#define MADC_HFCLK_EN                 0x80
++#define DEFAULT_MADC_CLK_EN           0x10
+ /* some fields in R_CFG_BOOT */
+ #define HFCLK_FREQ_19p2_MHZ           (1 << 0)
+@@ -929,6 +934,9 @@ static void clocks_init(struct device *dev,
+       e |= unprotect_pm_master();
+       /* effect->MADC+USB ck en */
++      if (twl_has_madc())
++              e |= twl_i2c_write_u8(TWL_MODULE_INTBR,
++                              MADC_HFCLK_EN | DEFAULT_MADC_CLK_EN, R_GPBR1);
+       e |= twl_i2c_write_u8(TWL_MODULE_PM_MASTER, ctrl, R_CFG_BOOT);
+       e |= protect_pm_master();
+diff --git a/include/linux/i2c/twl.h b/include/linux/i2c/twl.h
+index c760991..cfdfdd3 100644
+--- a/include/linux/i2c/twl.h
++++ b/include/linux/i2c/twl.h
+@@ -74,6 +74,7 @@
+ #define TWL_MODULE_USB                TWL4030_MODULE_USB
+ #define TWL_MODULE_AUDIO_VOICE        TWL4030_MODULE_AUDIO_VOICE
++#define TWL_MODULE_INTBR      TWL4030_MODULE_INTBR
+ #define TWL_MODULE_PIH                TWL4030_MODULE_PIH
+ #define TWL_MODULE_MADC               TWL4030_MODULE_MADC
+ #define TWL_MODULE_MAIN_CHARGE        TWL4030_MODULE_MAIN_CHARGE
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0016-MFD-add-twl4030-madc-driver.patch
new file mode 100644 (file)
index 0000000..ae25ba3
--- /dev/null
@@ -0,0 +1,740 @@
+From ea45cc880d407e9747dafa0efe5ab17ffb5e42d5 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 14:19:34 -0800
+Subject: [PATCH 16/29] MFD: add twl4030 madc driver
+
+---
+ drivers/mfd/Kconfig              |   21 ++
+ drivers/mfd/Makefile             |    1 +
+ drivers/mfd/twl4030-madc.c       |  537 ++++++++++++++++++++++++++++++++++++++
+ include/linux/i2c/twl4030-madc.h |  130 +++++++++
+ 4 files changed, 689 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/mfd/twl4030-madc.c
+ create mode 100644 include/linux/i2c/twl4030-madc.h
+
+diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
+index 3a1493b..26ca160 100644
+--- a/drivers/mfd/Kconfig
++++ b/drivers/mfd/Kconfig
+@@ -186,6 +186,27 @@ config TWL4030_CODEC
+       select MFD_CORE
+       default n
++config TWL4030_MADC
++      tristate "TWL4030 MADC Driver"
++      depends on TWL4030_CORE
++      help
++        The TWL4030 Monitoring ADC driver enables the host
++        processor to monitor analog signals using analog-to-digital
++        conversions on the input source. TWL4030 MADC provides the
++        following features:
++         - Single 10-bit ADC with successive approximation register (SAR) conversion;
++         - Analog multiplexer for 16 inputs;
++         - Seven (of the 16) inputs are freely available;
++         - Battery voltage monitoring;
++         - Concurrent conversion request management;
++         - Interrupt signal to Primary Interrupt Handler;
++         - Averaging feature;
++         - Selective enable/disable of the averaging feature.
++
++        Say 'y' here to statically link this module into the kernel or 'm'
++        to build it as a dinamically loadable module. The module will be
++        called twl4030-madc.ko
++
+ config TWL6030_PWM
+       tristate "TWL6030 PWM (Pulse Width Modulator) Support"
+       depends on TWL4030_CORE
+diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
+index f54b365..8c4ccb2 100644
+--- a/drivers/mfd/Makefile
++++ b/drivers/mfd/Makefile
+@@ -39,6 +39,7 @@ obj-$(CONFIG_MENELAUS)               += menelaus.o
+ obj-$(CONFIG_TWL4030_CORE)    += twl-core.o twl4030-irq.o twl6030-irq.o
+ obj-$(CONFIG_TWL4030_POWER)    += twl4030-power.o
+ obj-$(CONFIG_TWL4030_CODEC)   += twl4030-codec.o
++obj-$(CONFIG_TWL4030_MADC)    += twl4030-madc.o
+ obj-$(CONFIG_TWL6030_PWM)     += twl6030-pwm.o
+ obj-$(CONFIG_MFD_MC13XXX)     += mc13xxx-core.o
+diff --git a/drivers/mfd/twl4030-madc.c b/drivers/mfd/twl4030-madc.c
+new file mode 100644
+index 0000000..4adf880
+--- /dev/null
++++ b/drivers/mfd/twl4030-madc.c
+@@ -0,0 +1,537 @@
++/*
++ * TWL4030 MADC module driver
++ *
++ * Copyright (C) 2008 Nokia Corporation
++ * Mikko Ylinen <mikko.k.ylinen@nokia.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * 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, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ *
++ */
++
++#include <linux/delay.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/miscdevice.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++#include <linux/i2c/twl.h>
++#include <linux/i2c/twl4030-madc.h>
++
++#include <asm/uaccess.h>
++
++#define TWL4030_MADC_PFX      "twl4030-madc: "
++
++struct twl4030_madc_data {
++      struct device           *dev;
++      struct mutex            lock;
++      struct work_struct      ws;
++      struct twl4030_madc_request     requests[TWL4030_MADC_NUM_METHODS];
++      int imr;
++      int isr;
++};
++
++static struct twl4030_madc_data *the_madc;
++
++static
++const struct twl4030_madc_conversion_method twl4030_conversion_methods[] = {
++      [TWL4030_MADC_RT] = {
++              .sel    = TWL4030_MADC_RTSELECT_LSB,
++              .avg    = TWL4030_MADC_RTAVERAGE_LSB,
++              .rbase  = TWL4030_MADC_RTCH0_LSB,
++      },
++      [TWL4030_MADC_SW1] = {
++              .sel    = TWL4030_MADC_SW1SELECT_LSB,
++              .avg    = TWL4030_MADC_SW1AVERAGE_LSB,
++              .rbase  = TWL4030_MADC_GPCH0_LSB,
++              .ctrl   = TWL4030_MADC_CTRL_SW1,
++      },
++      [TWL4030_MADC_SW2] = {
++              .sel    = TWL4030_MADC_SW2SELECT_LSB,
++              .avg    = TWL4030_MADC_SW2AVERAGE_LSB,
++              .rbase  = TWL4030_MADC_GPCH0_LSB,
++              .ctrl   = TWL4030_MADC_CTRL_SW2,
++      },
++};
++
++static int twl4030_madc_read(struct twl4030_madc_data *madc, u8 reg)
++{
++      int ret;
++      u8 val;
++
++      ret = twl_i2c_read_u8(TWL4030_MODULE_MADC, &val, reg);
++      if (ret) {
++              dev_dbg(madc->dev, "unable to read register 0x%X\n", reg);
++              return ret;
++      }
++
++      return val;
++}
++
++static void twl4030_madc_write(struct twl4030_madc_data *madc, u8 reg, u8 val)
++{
++      int ret;
++
++      ret = twl_i2c_write_u8(TWL4030_MODULE_MADC, val, reg);
++      if (ret)
++              dev_err(madc->dev, "unable to write register 0x%X\n", reg);
++}
++
++static int twl4030_madc_channel_raw_read(struct twl4030_madc_data *madc, u8 reg)
++{
++      u8 msb, lsb;
++
++      /* For each ADC channel, we have MSB and LSB register pair. MSB address
++       * is always LSB address+1. reg parameter is the addr of LSB register */
++      msb = twl4030_madc_read(madc, reg + 1);
++      lsb = twl4030_madc_read(madc, reg);
++
++      return (int)(((msb << 8) | lsb) >> 6);
++}
++
++static int twl4030_madc_read_channels(struct twl4030_madc_data *madc,
++              u8 reg_base, u16 channels, int *buf)
++{
++      int count = 0;
++      u8 reg, i;
++
++      if (unlikely(!buf))
++              return 0;
++
++      for (i = 0; i < TWL4030_MADC_MAX_CHANNELS; i++) {
++              if (channels & (1<<i)) {
++                      reg = reg_base + 2*i;
++                      buf[i] = twl4030_madc_channel_raw_read(madc, reg);
++                      count++;
++              }
++      }
++      return count;
++}
++
++static void twl4030_madc_enable_irq(struct twl4030_madc_data *madc, int id)
++{
++      u8 val;
++
++      val = twl4030_madc_read(madc, madc->imr);
++      val &= ~(1 << id);
++      twl4030_madc_write(madc, madc->imr, val);
++}
++
++static void twl4030_madc_disable_irq(struct twl4030_madc_data *madc, int id)
++{
++      u8 val;
++
++      val = twl4030_madc_read(madc, madc->imr);
++      val |= (1 << id);
++      twl4030_madc_write(madc, madc->imr, val);
++}
++
++static irqreturn_t twl4030_madc_irq_handler(int irq, void *_madc)
++{
++      struct twl4030_madc_data *madc = _madc;
++      u8 isr_val, imr_val;
++      int i;
++
++#ifdef CONFIG_LOCKDEP
++      /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which
++       * we don't want and can't tolerate.  Although it might be
++       * friendlier not to borrow this thread context...
++       */
++      local_irq_enable();
++#endif
++
++      /* Use COR to ack interrupts since we have no shared IRQs in ISRx */
++      isr_val = twl4030_madc_read(madc, madc->isr);
++      imr_val = twl4030_madc_read(madc, madc->imr);
++
++      isr_val &= ~imr_val;
++
++      for (i = 0; i < TWL4030_MADC_NUM_METHODS; i++) {
++
++              if (!(isr_val & (1<<i)))
++                      continue;
++
++              twl4030_madc_disable_irq(madc, i);
++              madc->requests[i].result_pending = 1;
++      }
++
++      schedule_work(&madc->ws);
++
++      return IRQ_HANDLED;
++}
++
++static void twl4030_madc_work(struct work_struct *ws)
++{
++      const struct twl4030_madc_conversion_method *method;
++      struct twl4030_madc_data *madc;
++      struct twl4030_madc_request *r;
++      int len, i;
++
++      madc = container_of(ws, struct twl4030_madc_data, ws);
++      mutex_lock(&madc->lock);
++
++      for (i = 0; i < TWL4030_MADC_NUM_METHODS; i++) {
++
++              r = &madc->requests[i];
++
++              /* No pending results for this method, move to next one */
++              if (!r->result_pending)
++                      continue;
++
++              method = &twl4030_conversion_methods[r->method];
++
++              /* Read results */
++              len = twl4030_madc_read_channels(madc, method->rbase,
++                                               r->channels, r->rbuf);
++
++              /* Return results to caller */
++              if (r->func_cb != NULL) {
++                      r->func_cb(len, r->channels, r->rbuf);
++                      r->func_cb = NULL;
++              }
++
++              /* Free request */
++              r->result_pending = 0;
++              r->active         = 0;
++      }
++
++      mutex_unlock(&madc->lock);
++}
++
++static int twl4030_madc_set_irq(struct twl4030_madc_data *madc,
++              struct twl4030_madc_request *req)
++{
++      struct twl4030_madc_request *p;
++
++      p = &madc->requests[req->method];
++
++      memcpy(p, req, sizeof *req);
++
++      twl4030_madc_enable_irq(madc, req->method);
++
++      return 0;
++}
++
++static inline void twl4030_madc_start_conversion(struct twl4030_madc_data *madc,
++              int conv_method)
++{
++      const struct twl4030_madc_conversion_method *method;
++
++      method = &twl4030_conversion_methods[conv_method];
++
++      switch (conv_method) {
++      case TWL4030_MADC_SW1:
++      case TWL4030_MADC_SW2:
++              twl4030_madc_write(madc, method->ctrl, TWL4030_MADC_SW_START);
++              break;
++      case TWL4030_MADC_RT:
++      default:
++              break;
++      }
++}
++
++static int twl4030_madc_wait_conversion_ready(
++              struct twl4030_madc_data *madc,
++              unsigned int timeout_ms, u8 status_reg)
++{
++      unsigned long timeout;
++
++      timeout = jiffies + msecs_to_jiffies(timeout_ms);
++      do {
++              u8 reg;
++
++              reg = twl4030_madc_read(madc, status_reg);
++              if (!(reg & TWL4030_MADC_BUSY) && (reg & TWL4030_MADC_EOC_SW))
++                      return 0;
++      } while (!time_after(jiffies, timeout));
++
++      return -EAGAIN;
++}
++
++int twl4030_madc_conversion(struct twl4030_madc_request *req)
++{
++      const struct twl4030_madc_conversion_method *method;
++      u8 ch_msb, ch_lsb;
++      int ret;
++
++      if (unlikely(!req))
++              return -EINVAL;
++
++      mutex_lock(&the_madc->lock);
++
++      /* Do we have a conversion request ongoing */
++      if (the_madc->requests[req->method].active) {
++              ret = -EBUSY;
++              goto out;
++      }
++
++      ch_msb = (req->channels >> 8) & 0xff;
++      ch_lsb = req->channels & 0xff;
++
++      method = &twl4030_conversion_methods[req->method];
++
++      /* Select channels to be converted */
++      twl4030_madc_write(the_madc, method->sel + 1, ch_msb);
++      twl4030_madc_write(the_madc, method->sel, ch_lsb);
++
++      /* Select averaging for all channels if do_avg is set */
++      if (req->do_avg) {
++              twl4030_madc_write(the_madc, method->avg + 1, ch_msb);
++              twl4030_madc_write(the_madc, method->avg, ch_lsb);
++      }
++
++      if ((req->type == TWL4030_MADC_IRQ_ONESHOT) && (req->func_cb != NULL)) {
++              twl4030_madc_set_irq(the_madc, req);
++              twl4030_madc_start_conversion(the_madc, req->method);
++              the_madc->requests[req->method].active = 1;
++              ret = 0;
++              goto out;
++      }
++
++      /* With RT method we should not be here anymore */
++      if (req->method == TWL4030_MADC_RT) {
++              ret = -EINVAL;
++              goto out;
++      }
++
++      twl4030_madc_start_conversion(the_madc, req->method);
++      the_madc->requests[req->method].active = 1;
++
++      /* Wait until conversion is ready (ctrl register returns EOC) */
++      ret = twl4030_madc_wait_conversion_ready(the_madc, 5, method->ctrl);
++      if (ret) {
++              dev_dbg(the_madc->dev, "conversion timeout!\n");
++              the_madc->requests[req->method].active = 0;
++              goto out;
++      }
++
++      ret = twl4030_madc_read_channels(the_madc, method->rbase, req->channels,
++                                       req->rbuf);
++
++      the_madc->requests[req->method].active = 0;
++
++out:
++      mutex_unlock(&the_madc->lock);
++
++      return ret;
++}
++EXPORT_SYMBOL(twl4030_madc_conversion);
++
++static int twl4030_madc_set_current_generator(struct twl4030_madc_data *madc,
++              int chan, int on)
++{
++      int ret;
++      u8 regval;
++
++      /* Current generator is only available for ADCIN0 and ADCIN1. NB:
++       * ADCIN1 current generator only works when AC or VBUS is present */
++      if (chan > 1)
++              return EINVAL;
++
++      ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE,
++                                &regval, TWL4030_BCI_BCICTL1);
++      if (on)
++              regval |= (chan) ? TWL4030_BCI_ITHEN : TWL4030_BCI_TYPEN;
++      else
++              regval &= (chan) ? ~TWL4030_BCI_ITHEN : ~TWL4030_BCI_TYPEN;
++      ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE,
++                                 regval, TWL4030_BCI_BCICTL1);
++
++      return ret;
++}
++
++static int twl4030_madc_set_power(struct twl4030_madc_data *madc, int on)
++{
++      u8 regval;
++
++      regval = twl4030_madc_read(madc, TWL4030_MADC_CTRL1);
++      if (on)
++              regval |= TWL4030_MADC_MADCON;
++      else
++              regval &= ~TWL4030_MADC_MADCON;
++      twl4030_madc_write(madc, TWL4030_MADC_CTRL1, regval);
++
++      return 0;
++}
++
++static long twl4030_madc_ioctl(struct file *filp, unsigned int cmd,
++                             unsigned long arg)
++{
++      struct twl4030_madc_user_parms par;
++      int val, ret;
++
++      ret = copy_from_user(&par, (void __user *) arg, sizeof(par));
++      if (ret) {
++              dev_dbg(the_madc->dev, "copy_from_user: %d\n", ret);
++              return -EACCES;
++      }
++
++      switch (cmd) {
++      case TWL4030_MADC_IOCX_ADC_RAW_READ: {
++              struct twl4030_madc_request req;
++              if (par.channel >= TWL4030_MADC_MAX_CHANNELS)
++                      return -EINVAL;
++
++              req.channels = (1 << par.channel);
++              req.do_avg      = par.average;
++              req.method      = TWL4030_MADC_SW1;
++              req.func_cb     = NULL;
++
++              val = twl4030_madc_conversion(&req);
++              if (val <= 0) {
++                      par.status = -1;
++              } else {
++                      par.status = 0;
++                      par.result = (u16)req.rbuf[par.channel];
++              }
++              break;
++                                           }
++      default:
++              return -EINVAL;
++      }
++
++      ret = copy_to_user((void __user *) arg, &par, sizeof(par));
++      if (ret) {
++              dev_dbg(the_madc->dev, "copy_to_user: %d\n", ret);
++              return -EACCES;
++      }
++
++      return 0;
++}
++
++static struct file_operations twl4030_madc_fileops = {
++      .owner = THIS_MODULE,
++      .unlocked_ioctl = twl4030_madc_ioctl
++};
++
++static struct miscdevice twl4030_madc_device = {
++      .minor = MISC_DYNAMIC_MINOR,
++      .name = "twl4030-madc",
++      .fops = &twl4030_madc_fileops
++};
++
++static int __init twl4030_madc_probe(struct platform_device *pdev)
++{
++      struct twl4030_madc_data *madc;
++      struct twl4030_madc_platform_data *pdata = pdev->dev.platform_data;
++      int ret;
++      u8 regval;
++
++      madc = kzalloc(sizeof *madc, GFP_KERNEL);
++      if (!madc)
++              return -ENOMEM;
++
++      if (!pdata) {
++              dev_dbg(&pdev->dev, "platform_data not available\n");
++              ret = -EINVAL;
++              goto err_pdata;
++      }
++
++      madc->imr = (pdata->irq_line == 1) ? TWL4030_MADC_IMR1 : TWL4030_MADC_IMR2;
++      madc->isr = (pdata->irq_line == 1) ? TWL4030_MADC_ISR1 : TWL4030_MADC_ISR2;
++
++      ret = misc_register(&twl4030_madc_device);
++      if (ret) {
++              dev_dbg(&pdev->dev, "could not register misc_device\n");
++              goto err_misc;
++      }
++      twl4030_madc_set_power(madc, 1);
++      twl4030_madc_set_current_generator(madc, 0, 1);
++
++      /* Enable ADCIN3 through 6 */
++      ret = twl_i2c_read_u8(TWL4030_MODULE_USB,
++                                &regval, TWL4030_USB_CARKIT_ANA_CTRL);
++
++      regval |= TWL4030_USB_SEL_MADC_MCPC;
++
++      ret = twl_i2c_write_u8(TWL4030_MODULE_USB,
++                              regval, TWL4030_USB_CARKIT_ANA_CTRL);
++
++
++      ret = twl_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE,
++                                &regval, TWL4030_BCI_BCICTL1);
++
++      regval |= TWL4030_BCI_MESBAT;
++
++      ret = twl_i2c_write_u8(TWL4030_MODULE_MAIN_CHARGE,
++                                 regval, TWL4030_BCI_BCICTL1);
++
++      ret = request_irq(platform_get_irq(pdev, 0), twl4030_madc_irq_handler,
++                        0, "twl4030_madc", madc);
++      if (ret) {
++              dev_dbg(&pdev->dev, "could not request irq\n");
++              goto err_irq;
++      }
++
++      platform_set_drvdata(pdev, madc);
++      mutex_init(&madc->lock);
++      INIT_WORK(&madc->ws, twl4030_madc_work);
++
++      the_madc = madc;
++
++      return 0;
++
++err_irq:
++      misc_deregister(&twl4030_madc_device);
++
++err_misc:
++err_pdata:
++      kfree(madc);
++
++      return ret;
++}
++
++static int __exit twl4030_madc_remove(struct platform_device *pdev)
++{
++      struct twl4030_madc_data *madc = platform_get_drvdata(pdev);
++
++      twl4030_madc_set_power(madc, 0);
++      twl4030_madc_set_current_generator(madc, 0, 0);
++      free_irq(platform_get_irq(pdev, 0), madc);
++      cancel_work_sync(&madc->ws);
++      misc_deregister(&twl4030_madc_device);
++
++      return 0;
++}
++
++static struct platform_driver twl4030_madc_driver = {
++      .probe          = twl4030_madc_probe,
++      .remove         = __exit_p(twl4030_madc_remove),
++      .driver         = {
++              .name   = "twl4030_madc",
++              .owner  = THIS_MODULE,
++      },
++};
++
++static int __init twl4030_madc_init(void)
++{
++      return platform_driver_register(&twl4030_madc_driver);
++}
++module_init(twl4030_madc_init);
++
++static void __exit twl4030_madc_exit(void)
++{
++      platform_driver_unregister(&twl4030_madc_driver);
++}
++module_exit(twl4030_madc_exit);
++
++MODULE_ALIAS("platform:twl4030-madc");
++MODULE_AUTHOR("Nokia Corporation");
++MODULE_DESCRIPTION("twl4030 ADC driver");
++MODULE_LICENSE("GPL");
++
+diff --git a/include/linux/i2c/twl4030-madc.h b/include/linux/i2c/twl4030-madc.h
+new file mode 100644
+index 0000000..341a665
+--- /dev/null
++++ b/include/linux/i2c/twl4030-madc.h
+@@ -0,0 +1,130 @@
++/*
++ * include/linux/i2c/twl4030-madc.h
++ *
++ * TWL4030 MADC module driver header
++ *
++ * Copyright (C) 2008 Nokia Corporation
++ * Mikko Ylinen <mikko.k.ylinen@nokia.com>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * 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, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ * 02110-1301 USA
++ *
++ */
++
++#ifndef _TWL4030_MADC_H
++#define _TWL4030_MADC_H
++
++struct twl4030_madc_conversion_method {
++      u8 sel;
++      u8 avg;
++      u8 rbase;
++      u8 ctrl;
++};
++
++#define TWL4030_MADC_MAX_CHANNELS 16
++
++struct twl4030_madc_request {
++      u16 channels;
++      u16 do_avg;
++      u16 method;
++      u16 type;
++      int active;
++      int result_pending;
++      int rbuf[TWL4030_MADC_MAX_CHANNELS];
++      void (*func_cb)(int len, int channels, int *buf);
++};
++
++enum conversion_methods {
++      TWL4030_MADC_RT,
++      TWL4030_MADC_SW1,
++      TWL4030_MADC_SW2,
++      TWL4030_MADC_NUM_METHODS
++};
++
++enum sample_type {
++      TWL4030_MADC_WAIT,
++      TWL4030_MADC_IRQ_ONESHOT,
++      TWL4030_MADC_IRQ_REARM
++};
++
++#define TWL4030_MADC_CTRL1            0x00
++#define TWL4030_MADC_CTRL2            0x01
++
++#define TWL4030_MADC_RTSELECT_LSB     0x02
++#define TWL4030_MADC_SW1SELECT_LSB    0x06
++#define TWL4030_MADC_SW2SELECT_LSB    0x0A
++
++#define TWL4030_MADC_RTAVERAGE_LSB    0x04
++#define TWL4030_MADC_SW1AVERAGE_LSB   0x08
++#define TWL4030_MADC_SW2AVERAGE_LSB   0x0C
++
++#define TWL4030_MADC_CTRL_SW1         0x12
++#define TWL4030_MADC_CTRL_SW2         0x13
++
++#define TWL4030_MADC_RTCH0_LSB                0x17
++#define TWL4030_MADC_GPCH0_LSB                0x37
++
++#define TWL4030_MADC_MADCON           (1<<0)  /* MADC power on */
++#define TWL4030_MADC_BUSY             (1<<0)  /* MADC busy */
++#define TWL4030_MADC_EOC_SW           (1<<1)  /* MADC conversion completion */
++#define TWL4030_MADC_SW_START         (1<<5)  /* MADC SWx start conversion */
++
++#define       TWL4030_MADC_ADCIN0             (1<<0)
++#define       TWL4030_MADC_ADCIN1             (1<<1)
++#define       TWL4030_MADC_ADCIN2             (1<<2)
++#define       TWL4030_MADC_ADCIN3             (1<<3)
++#define       TWL4030_MADC_ADCIN4             (1<<4)
++#define       TWL4030_MADC_ADCIN5             (1<<5)
++#define       TWL4030_MADC_ADCIN6             (1<<6)
++#define       TWL4030_MADC_ADCIN7             (1<<7)
++#define       TWL4030_MADC_ADCIN8             (1<<8)
++#define       TWL4030_MADC_ADCIN9             (1<<9)
++#define       TWL4030_MADC_ADCIN10            (1<<10)
++#define       TWL4030_MADC_ADCIN11            (1<<11)
++#define       TWL4030_MADC_ADCIN12            (1<<12)
++#define       TWL4030_MADC_ADCIN13            (1<<13)
++#define       TWL4030_MADC_ADCIN14            (1<<14)
++#define       TWL4030_MADC_ADCIN15            (1<<15)
++
++/* Fixed channels */
++#define TWL4030_MADC_BTEMP            TWL4030_MADC_ADCIN1
++#define TWL4030_MADC_VBUS             TWL4030_MADC_ADCIN8
++#define TWL4030_MADC_VBKB             TWL4030_MADC_ADCIN9
++#define       TWL4030_MADC_ICHG               TWL4030_MADC_ADCIN10
++#define TWL4030_MADC_VCHG             TWL4030_MADC_ADCIN11
++#define       TWL4030_MADC_VBAT               TWL4030_MADC_ADCIN12
++
++/* BCI related - XXX To be moved elsewhere */
++#define TWL4030_BCI_BCICTL1           0x23
++#define       TWL4030_BCI_MESBAT              (1<<1)
++#define       TWL4030_BCI_TYPEN               (1<<4)
++#define       TWL4030_BCI_ITHEN               (1<<3)
++
++/* USB related - XXX To be moved elsewhere */
++#define TWL4030_USB_CARKIT_ANA_CTRL           0xBB
++#define TWL4030_USB_SEL_MADC_MCPC             (1<<3)
++
++#define TWL4030_MADC_IOC_MAGIC '`'
++#define TWL4030_MADC_IOCX_ADC_RAW_READ                _IO(TWL4030_MADC_IOC_MAGIC, 0)
++
++struct twl4030_madc_user_parms {
++      int channel;
++      int average;
++      int status;
++      u16 result;
++};
++
++int twl4030_madc_conversion(struct twl4030_madc_request *conv);
++
++#endif
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0017-ARM-OMAP-Add-twl4030-madc-support-to-Overo.patch
new file mode 100644 (file)
index 0000000..19eec18
--- /dev/null
@@ -0,0 +1,32 @@
+From 3bc70a68d2cfd1d41995bb7f33f2e4005542f62b Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 14:27:15 -0800
+Subject: [PATCH 17/29] ARM: OMAP: Add twl4030 madc support to Overo
+
+---
+ arch/arm/mach-omap2/board-overo.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index cb26e5d..17f066a 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -369,10 +369,15 @@ static struct twl4030_codec_data overo_codec_data = {
+ /* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
++static struct twl4030_madc_platform_data overo_madc_data = {
++      .irq_line       = 1,
++};
++
+ static struct twl4030_platform_data overo_twldata = {
+       .irq_base       = TWL4030_IRQ_BASE,
+       .irq_end        = TWL4030_IRQ_END,
+       .gpio           = &overo_gpio_data,
++      .madc           = &overo_madc_data,
+       .usb            = &overo_usb_data,
+       .codec          = &overo_codec_data,
+       .vmmc1          = &overo_vmmc1,
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0018-ARM-OMAP-Add-twl4030-madc-support-to-Beagle.patch
new file mode 100644 (file)
index 0000000..aeb4146
--- /dev/null
@@ -0,0 +1,35 @@
+From afa4132d5e29ed90154fec8cd97f891c86ce748c Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 14:32:36 -0800
+Subject: [PATCH 18/29] ARM: OMAP: Add twl4030 madc support to Beagle
+
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 073276b..781844c 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -578,6 +578,10 @@ static struct twl4030_codec_data beagle_codec_data = {
+       .audio = &beagle_audio_data,
+ };
++static struct twl4030_madc_platform_data beagle_madc_data = {
++      .irq_line       = 1,
++};
++
+ static struct twl4030_platform_data beagle_twldata = {
+       .irq_base       = TWL4030_IRQ_BASE,
+       .irq_end        = TWL4030_IRQ_END,
+@@ -586,6 +590,7 @@ static struct twl4030_platform_data beagle_twldata = {
+       .usb            = &beagle_usb_data,
+       .gpio           = &beagle_gpio_data,
+       .codec          = &beagle_codec_data,
++      .madc           = &beagle_madc_data,
+       .vmmc1          = &beagle_vmmc1,
+       .vsim           = &beagle_vsim,
+       .vdac           = &beagle_vdac,
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0019-OMAP-DSS2-Add-support-for-Samsung-LTE430WQ-F0C-panel.patch
new file mode 100644 (file)
index 0000000..8607d71
--- /dev/null
@@ -0,0 +1,173 @@
+From e6b15754a20c0306fb20d061358da67b5dd218cd Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Tue, 23 Feb 2010 14:40:27 -0800
+Subject: [PATCH 19/29] OMAP: DSS2: Add support for Samsung LTE430WQ-F0C panel
+
+---
+ .../omap2/displays/panel-samsung-lte430wq-f0c.c    |  154 ++++++++++++++++++++
+ 1 files changed, 154 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c
+
+diff --git a/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c b/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c
+new file mode 100644
+index 0000000..6a29f9c
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-samsung-lte430wq-f0c.c
+@@ -0,0 +1,154 @@
++/*
++ * LCD panel driver for Samsung LTE430WQ-F0C
++ *
++ * Author: Steve Sakoman <steve@sakoman.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ *
++ * 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/>.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++
++#include <plat/display.h>
++
++static struct omap_video_timings samsung_lte_timings = {
++      .x_res = 480,
++      .y_res = 272,
++
++      .pixel_clock    = 9200,
++
++      .hsw            = 41,
++      .hfp            = 8,
++      .hbp            = 45-41,
++
++      .vsw            = 10,
++      .vfp            = 4,
++      .vbp            = 12-10,
++};
++
++static int samsung_lte_panel_power_on(struct omap_dss_device *dssdev)
++{
++      int r;
++
++      if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
++              return 0;
++
++      r = omapdss_dpi_display_enable(dssdev);
++      if (r)
++              goto err0;
++
++      if (dssdev->platform_enable) {
++              r = dssdev->platform_enable(dssdev);
++              if (r)
++                      goto err1;
++      }
++
++      return 0;
++err1:
++      omapdss_dpi_display_disable(dssdev);
++err0:
++      return r;
++}
++
++static void samsung_lte_panel_power_off(struct omap_dss_device *dssdev)
++{
++      if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
++              return;
++
++      if (dssdev->platform_disable)
++              dssdev->platform_disable(dssdev);
++
++      omapdss_dpi_display_disable(dssdev);
++}
++
++static int samsung_lte_panel_probe(struct omap_dss_device *dssdev)
++{
++      dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++              OMAP_DSS_LCD_IHS;
++      dssdev->panel.timings = samsung_lte_timings;
++
++      return 0;
++}
++
++static void samsung_lte_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int samsung_lte_panel_enable(struct omap_dss_device *dssdev)
++{
++      int r = 0;
++
++      r = samsung_lte_panel_power_on(dssdev);
++      if (r)
++              return r;
++
++      dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
++
++      return 0;
++}
++
++static void samsung_lte_panel_disable(struct omap_dss_device *dssdev)
++{
++      samsung_lte_panel_power_off(dssdev);
++
++      dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
++}
++
++static int samsung_lte_panel_suspend(struct omap_dss_device *dssdev)
++{
++      samsung_lte_panel_disable(dssdev);
++      dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
++      return 0;
++}
++
++static int samsung_lte_panel_resume(struct omap_dss_device *dssdev)
++{
++      int r;
++
++      r = samsung_lte_panel_enable(dssdev);
++      if (r)
++              return r;
++
++      dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
++
++      return 0;
++}
++
++static struct omap_dss_driver samsung_lte_driver = {
++      .probe          = samsung_lte_panel_probe,
++      .remove         = samsung_lte_panel_remove,
++
++      .enable         = samsung_lte_panel_enable,
++      .disable        = samsung_lte_panel_disable,
++      .suspend        = samsung_lte_panel_suspend,
++      .resume         = samsung_lte_panel_resume,
++
++      .driver         = {
++              .name   = "samsung_lte_panel",
++              .owner  = THIS_MODULE,
++      },
++};
++
++static int __init samsung_lte_panel_drv_init(void)
++{
++      return omap_dss_register_driver(&samsung_lte_driver);
++}
++
++static void __exit samsung_lte_panel_drv_exit(void)
++{
++      omap_dss_unregister_driver(&samsung_lte_driver);
++}
++
++module_init(samsung_lte_panel_drv_init);
++module_exit(samsung_lte_panel_drv_exit);
++MODULE_LICENSE("GPL");
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0020-OMAP-DSS2-Add-support-for-LG-Philips-LB035Q02-panel.patch
new file mode 100644 (file)
index 0000000..ad148d0
--- /dev/null
@@ -0,0 +1,299 @@
+From 6861df53ce9212b348fba806f5a86404c1de8a95 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 17 Dec 2009 15:05:30 -0800
+Subject: [PATCH 20/29] OMAP: DSS2: Add support for LG Philips LB035Q02 panel
+
+---
+ drivers/video/omap2/displays/Kconfig               |   12 +
+ drivers/video/omap2/displays/Makefile              |    2 +
+ .../omap2/displays/panel-lgphilips-lb035q02.c      |  244 ++++++++++++++++++++
+ 3 files changed, 258 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index 12327bb..48e872f 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -7,6 +7,18 @@ config PANEL_GENERIC
+         Generic panel driver.
+         Used for DVI output for Beagle and OMAP3 SDP.
++config PANEL_LGPHILIPS_LB035Q02
++      tristate "LG.Philips LB035Q02 LCD Panel"
++      depends on OMAP2_DSS
++      help
++        LCD Panel used on Overo Palo35
++
++config PANEL_SAMSUNG_LTE430WQ_F0C
++        tristate "Samsung LTE430WQ-F0C LCD Panel"
++        depends on OMAP2_DSS
++        help
++          LCD Panel used on Overo Palo43
++
+ config PANEL_SHARP_LS037V7DW01
+         tristate "Sharp LS037V7DW01 LCD Panel"
+         depends on OMAP2_DSS
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index aa38609..2fb1a57 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -1,4 +1,6 @@
+ obj-$(CONFIG_PANEL_GENERIC) += panel-generic.o
++obj-$(CONFIG_PANEL_LGPHILIPS_LB035Q02) += panel-lgphilips-lb035q02.o
++obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
+ obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+ obj-$(CONFIG_PANEL_SHARP_LQ043T1DG01) += panel-sharp-lq043t1dg01.o
+diff --git a/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+new file mode 100644
+index 0000000..4ad709d
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+@@ -0,0 +1,244 @@
++/*
++ * LCD panel driver for LG.Philips LB035Q02
++ *
++ * Author: Steve Sakoman <steve@sakoman.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ *
++ * 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/>.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++#include <linux/spi/spi.h>
++
++#include <plat/display.h>
++
++static struct spi_device      *spidev;
++
++static struct omap_video_timings lb035q02_timings = {
++      .x_res = 320,
++      .y_res = 240,
++
++      .pixel_clock    = 6500,
++
++      .hsw            = 2,
++      .hfp            = 20,
++      .hbp            = 68,
++
++      .vsw            = 2,
++      .vfp            = 4,
++      .vbp            = 18,
++};
++
++static int lb035q02_write_reg(u8 reg, u16 val)
++{
++      struct spi_message msg;
++      struct spi_transfer index_xfer = {
++              .len            = 3,
++              .cs_change      = 1,
++      };
++      struct spi_transfer value_xfer = {
++              .len            = 3,
++      };
++      u8      buffer[16];
++
++      spi_message_init(&msg);
++
++      /* register index */
++      buffer[0] = 0x70;
++      buffer[1] = 0x00;
++      buffer[2] = reg & 0x7f;
++      index_xfer.tx_buf = buffer;
++      spi_message_add_tail(&index_xfer, &msg);
++
++      /* register value */
++      buffer[4] = 0x72;
++      buffer[5] = val >> 8;
++      buffer[6] = val;
++      value_xfer.tx_buf = buffer + 4;
++      spi_message_add_tail(&value_xfer, &msg);
++
++      return spi_sync(spidev, &msg);
++}
++
++static int lb035q02_panel_power_on(struct omap_dss_device *dssdev)
++{
++      int r;
++
++      if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE)
++              return 0;
++
++      r = omapdss_dpi_display_enable(dssdev);
++      if (r)
++              goto err0;
++
++      if (dssdev->platform_enable) {
++              r = dssdev->platform_enable(dssdev);
++              if (r)
++                      goto err1;
++      }
++
++      /* Panel init sequence from page 28 of the spec */
++      lb035q02_write_reg(0x01, 0x6300);
++      lb035q02_write_reg(0x02, 0x0200);
++      lb035q02_write_reg(0x03, 0x0177);
++      lb035q02_write_reg(0x04, 0x04c7);
++      lb035q02_write_reg(0x05, 0xffc0);
++      lb035q02_write_reg(0x06, 0xe806);
++      lb035q02_write_reg(0x0a, 0x4008);
++      lb035q02_write_reg(0x0b, 0x0000);
++      lb035q02_write_reg(0x0d, 0x0030);
++      lb035q02_write_reg(0x0e, 0x2800);
++      lb035q02_write_reg(0x0f, 0x0000);
++      lb035q02_write_reg(0x16, 0x9f80);
++      lb035q02_write_reg(0x17, 0x0a0f);
++      lb035q02_write_reg(0x1e, 0x00c1);
++      lb035q02_write_reg(0x30, 0x0300);
++      lb035q02_write_reg(0x31, 0x0007);
++      lb035q02_write_reg(0x32, 0x0000);
++      lb035q02_write_reg(0x33, 0x0000);
++      lb035q02_write_reg(0x34, 0x0707);
++      lb035q02_write_reg(0x35, 0x0004);
++      lb035q02_write_reg(0x36, 0x0302);
++      lb035q02_write_reg(0x37, 0x0202);
++      lb035q02_write_reg(0x3a, 0x0a0d);
++      lb035q02_write_reg(0x3b, 0x0806);
++
++      return 0;
++err1:
++      omapdss_dpi_display_disable(dssdev);
++err0:
++      return r;
++}
++
++static void lb035q02_panel_power_off(struct omap_dss_device *dssdev)
++{
++      if (dssdev->state != OMAP_DSS_DISPLAY_ACTIVE)
++              return;
++
++      if (dssdev->platform_disable)
++              dssdev->platform_disable(dssdev);
++
++      omapdss_dpi_display_disable(dssdev);
++}
++
++static int lb035q02_panel_probe(struct omap_dss_device *dssdev)
++{
++      dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++              OMAP_DSS_LCD_IHS;
++      dssdev->panel.timings = lb035q02_timings;
++
++      return 0;
++}
++
++static void lb035q02_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int lb035q02_panel_enable(struct omap_dss_device *dssdev)
++{
++      int r = 0;
++
++      r = lb035q02_panel_power_on(dssdev);
++      if (r)
++              return r;
++
++      dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
++
++      return 0;
++}
++
++static void lb035q02_panel_disable(struct omap_dss_device *dssdev)
++{
++      lb035q02_panel_power_off(dssdev);
++
++      dssdev->state = OMAP_DSS_DISPLAY_DISABLED;
++}
++
++static int lb035q02_panel_suspend(struct omap_dss_device *dssdev)
++{
++      lb035q02_panel_disable(dssdev);
++      dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED;
++      return 0;
++}
++
++static int lb035q02_panel_resume(struct omap_dss_device *dssdev)
++{
++      int r;
++
++      r = lb035q02_panel_power_on(dssdev);
++      if (r)
++              return r;
++
++      dssdev->state = OMAP_DSS_DISPLAY_ACTIVE;
++
++      return 0;
++}
++
++static struct omap_dss_driver lb035q02_driver = {
++      .probe          = lb035q02_panel_probe,
++      .remove         = lb035q02_panel_remove,
++
++      .enable         = lb035q02_panel_enable,
++      .disable        = lb035q02_panel_disable,
++      .suspend        = lb035q02_panel_suspend,
++      .resume         = lb035q02_panel_resume,
++
++      .driver         = {
++              .name   = "lgphilips_lb035q02_panel",
++              .owner  = THIS_MODULE,
++      },
++};
++
++static int __devinit lb035q02_panel_spi_probe(struct spi_device *spi)
++{
++      spidev = spi;
++      return 0;
++}
++
++static int __devexit lb035q02_panel_spi_remove(struct spi_device *spi)
++{
++      return 0;
++}
++
++static struct spi_driver lb035q02_spi_driver = {
++      .driver         = {
++              .name   = "lgphilips_lb035q02_panel-spi",
++              .owner  = THIS_MODULE,
++      },
++      .probe          = lb035q02_panel_spi_probe,
++      .remove         = __devexit_p (lb035q02_panel_spi_remove),
++};
++
++static int __init lb035q02_panel_drv_init(void)
++{
++      int r;
++      r = spi_register_driver(&lb035q02_spi_driver);
++      if (r != 0)
++              pr_err("lgphilips_lb035q02: Unable to register SPI driver: %d\n", r);
++
++      r = omap_dss_register_driver(&lb035q02_driver);
++      if (r != 0)
++              pr_err("lgphilips_lb035q02: Unable to register panel driver: %d\n", r);
++
++      return r;
++}
++
++static void __exit lb035q02_panel_drv_exit(void)
++{
++      spi_unregister_driver(&lb035q02_spi_driver);
++      omap_dss_unregister_driver(&lb035q02_driver);
++}
++
++module_init(lb035q02_panel_drv_init);
++module_exit(lb035q02_panel_drv_exit);
++MODULE_LICENSE("GPL");
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0021-OMAP-DSS2-add-bootarg-for-selecting-svideo-or-compos.patch
new file mode 100644 (file)
index 0000000..86e9c40
--- /dev/null
@@ -0,0 +1,75 @@
+From 9e206307dbd65d557a57563c086af5089e52b2c8 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Tue, 19 Jan 2010 21:19:15 -0800
+Subject: [PATCH 21/29] OMAP: DSS2: add bootarg for selecting svideo or composite for tv output
+
+also add pal-16 and ntsc-16 omapfb.mode settings for 16bpp
+---
+ 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 eff3505..e1f4aab 100644
+--- a/drivers/video/omap2/dss/venc.c
++++ b/drivers/video/omap2/dss/venc.c
+@@ -87,6 +87,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;
+@@ -459,6 +464,23 @@ static int venc_panel_probe(struct omap_dss_device *dssdev)
+ {
+       dssdev->panel.timings = omap_dss_pal_timings;
++      /* 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;
+ }
+diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
+index 6a704f1..7ee833f 100644
+--- a/drivers/video/omap2/omapfb/omapfb-main.c
++++ b/drivers/video/omap2/omapfb/omapfb-main.c
+@@ -2036,7 +2036,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.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0022-ARM-OMAP2-mmc-twl4030-move-clock-input-selection-pri.patch
new file mode 100644 (file)
index 0000000..ffa0a0e
--- /dev/null
@@ -0,0 +1,39 @@
+From 3924e990868742c19e5cd3e84191a01b55249079 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Sun, 24 Jan 2010 09:33:56 -0800
+Subject: [PATCH 22/29] ARM: OMAP2: mmc-twl4030: move clock input selection prior to vcc test
+
+otherwise it is not executed on systems that use non-twl regulators
+---
+ arch/arm/mach-omap2/hsmmc.c |   14 ++++++--------
+ 1 files changed, 6 insertions(+), 8 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/hsmmc.c b/arch/arm/mach-omap2/hsmmc.c
+index 34272e4..a74631d 100644
+--- a/arch/arm/mach-omap2/hsmmc.c
++++ b/arch/arm/mach-omap2/hsmmc.c
+@@ -186,15 +186,13 @@ static void hsmmc23_before_set_reg(struct device *dev, int slot,
+       if (mmc->slots[0].remux)
+               mmc->slots[0].remux(dev, slot, power_on);
+-      if (power_on) {
+-              /* Only MMC2 supports a CLKIN */
+-              if (mmc->slots[0].internal_clock) {
+-                      u32 reg;
++      /* Only MMC2 supports a CLKIN */
++      if (mmc->slots[0].internal_clock) {
++              u32 reg;
+-                      reg = omap_ctrl_readl(control_devconf1_offset);
+-                      reg |= OMAP2_MMCSDIO2ADPCLKISEL;
+-                      omap_ctrl_writel(reg, control_devconf1_offset);
+-              }
++              reg = omap_ctrl_readl(control_devconf1_offset);
++              reg |= OMAP2_MMCSDIO2ADPCLKISEL;
++              omap_ctrl_writel(reg, control_devconf1_offset);
+       }
+ }
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0023-RTC-add-support-for-backup-battery-recharge.patch
new file mode 100644 (file)
index 0000000..a815311
--- /dev/null
@@ -0,0 +1,55 @@
+From ade216c2689a2dae645ca95fa443ee8eacfafb67 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Thu, 4 Feb 2010 12:26:22 -0800
+Subject: [PATCH 23/29] RTC: add support for backup battery recharge
+
+---
+ drivers/rtc/rtc-twl.c |   25 +++++++++++++++++++++++++
+ 1 files changed, 25 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/rtc/rtc-twl.c b/drivers/rtc/rtc-twl.c
+index ed1b868..33a8598 100644
+--- a/drivers/rtc/rtc-twl.c
++++ b/drivers/rtc/rtc-twl.c
+@@ -30,6 +30,23 @@
+ #include <linux/i2c/twl.h>
++/*
++ * PM_RECEIVER block register offsets (use TWL4030_MODULE_PM_RECEIVER)
++ */
++#define REG_BB_CFG    0x12
++
++/* PM_RECEIVER  BB_CFG bitfields */
++#define BIT_PM_RECEIVER_BB_CFG_BBCHEN           0x10
++#define BIT_PM_RECEIVER_BB_CFG_BBSEL            0x0C
++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_2V5        0x00
++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V0        0x04
++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1        0x08
++#define BIT_PM_RECEIVER_BB_CFG_BBSEL_3v2        0x0c
++#define BIT_PM_RECEIVER_BB_CFG_BBISEL           0x03
++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA      0x00
++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_150UA     0x01
++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_500UA     0x02
++#define BIT_PM_RECEIVER_BB_CFG_BBISEL_1MA       0x03
+ /*
+  * RTC block register offsets (use TWL_MODULE_RTC)
+@@ -508,6 +525,14 @@ static int __devinit twl_rtc_probe(struct platform_device *pdev)
+       if (ret < 0)
+               goto out2;
++      /* enable backup battery charging */
++      /* use a conservative 25uA @ 3.1V */
++      ret = twl_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
++              BIT_PM_RECEIVER_BB_CFG_BBCHEN |
++              BIT_PM_RECEIVER_BB_CFG_BBSEL_3V1 |
++              BIT_PM_RECEIVER_BB_CFG_BBISEL_25UA,
++              REG_BB_CFG);
++
+       return ret;
+ out2:
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0024-ARM-OMAP-automatically-set-musb-mode-in-platform-dat.patch
new file mode 100644 (file)
index 0000000..bd7b068
--- /dev/null
@@ -0,0 +1,49 @@
+From 6a2f14bdd390695f5d88fb8ea18df8f80bddfc9d Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Wed, 24 Feb 2010 10:37:22 -0800
+Subject: [PATCH 24/29] ARM: OMAP: automatically set musb mode in platform data based on CONFIG options
+
+---
+ arch/arm/mach-omap2/board-omap3beagle.c |    6 ++++++
+ arch/arm/mach-omap2/board-overo.c       |    6 ++++++
+ 2 files changed, 12 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
+index 781844c..006dc26 100644
+--- a/arch/arm/mach-omap2/board-omap3beagle.c
++++ b/arch/arm/mach-omap2/board-omap3beagle.c
+@@ -759,7 +759,13 @@ static struct omap_board_mux board_mux[] __initdata = {
+ static struct omap_musb_board_data musb_board_data = {
+       .interface_type         = MUSB_INTERFACE_ULPI,
++#if defined(CONFIG_USB_MUSB_OTG)
+       .mode                   = MUSB_OTG,
++#elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
++      .mode                   = MUSB_PERIPHERAL,
++#else
++      .mode                   = MUSB_HOST,
++#endif
+       .power                  = 100,
+ };
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index 17f066a..b28a9d5 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -447,7 +447,13 @@ static struct omap_board_mux board_mux[] __initdata = {
+ static struct omap_musb_board_data musb_board_data = {
+       .interface_type         = MUSB_INTERFACE_ULPI,
++#if defined(CONFIG_USB_MUSB_OTG)
+       .mode                   = MUSB_OTG,
++#elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
++      .mode                   = MUSB_PERIPHERAL,
++#else
++      .mode                   = MUSB_HOST,
++#endif
+       .power                  = 100,
+ };
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0025-OMAP-DSS2-check-for-both-cpu-type-and-revision-rathe.patch
new file mode 100644 (file)
index 0000000..1261c5b
--- /dev/null
@@ -0,0 +1,34 @@
+From 6e383eb63993e011b6bdec84e3eb001e6b9e00a1 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Mon, 10 May 2010 13:59:14 -0700
+Subject: [PATCH 25/29] OMAP: DSS2: check for both cpu type and revision, rather than just revision
+
+---
+ drivers/video/omap2/dss/dispc.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c
+index fa40fa5..133916a 100644
+--- a/drivers/video/omap2/dss/dispc.c
++++ b/drivers/video/omap2/dss/dispc.c
+@@ -2101,7 +2101,7 @@ void dispc_set_parallel_interface_mode(enum omap_parallel_interface_mode mode)
+ static bool _dispc_lcd_timings_ok(int hsw, int hfp, int hbp,
+               int vsw, int vfp, int vbp)
+ {
+-      if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) {
++      if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) {
+               if (hsw < 1 || hsw > 64 ||
+                               hfp < 1 || hfp > 256 ||
+                               hbp < 1 || hbp > 256 ||
+@@ -2134,7 +2134,7 @@ static void _dispc_set_lcd_timings(int hsw, int hfp, int hbp,
+ {
+       u32 timing_h, timing_v;
+-      if (cpu_is_omap24xx() || omap_rev() < OMAP3430_REV_ES3_0) {
++      if (cpu_is_omap24xx() || (cpu_is_omap34xx() && omap_rev_lt_3_0())) {
+               timing_h = FLD_VAL(hsw-1, 5, 0) | FLD_VAL(hfp-1, 15, 8) |
+                       FLD_VAL(hbp-1, 27, 20);
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0026-OMAP-DSS2-Add-DSS2-support-for-Overo.patch
new file mode 100644 (file)
index 0000000..b31165c
--- /dev/null
@@ -0,0 +1,355 @@
+From 66db8210263893e9ffd4478c36a3a1a89bdaff37 Mon Sep 17 00:00:00 2001
+From: Steve Sakoman <steve@sakoman.com>
+Date: Fri, 18 Dec 2009 06:39:24 -0800
+Subject: [PATCH 26/29] OMAP: DSS2: Add DSS2 support for Overo
+
+---
+ arch/arm/mach-omap2/board-overo.c |  238 +++++++++++++++++++++++++++++++------
+ 1 files changed, 204 insertions(+), 34 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index b28a9d5..8a44c17 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -28,6 +28,7 @@
+ #include <linux/platform_device.h>
+ #include <linux/i2c/twl.h>
+ #include <linux/regulator/machine.h>
++#include <linux/spi/spi.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/nand.h>
+@@ -41,10 +42,13 @@
+ #include <plat/board.h>
+ #include <plat/common.h>
++#include <plat/display.h>
+ #include <mach/gpio.h>
+ #include <plat/gpmc.h>
+ #include <mach/hardware.h>
+ #include <plat/nand.h>
++#include <plat/mcspi.h>
++#include <plat/mux.h>
+ #include <plat/usb.h>
+ #include "mux.h"
+@@ -68,8 +72,6 @@
+ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
+       defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
+-#include <plat/mcspi.h>
+-#include <linux/spi/spi.h>
+ #include <linux/spi/ads7846.h>
+ static struct omap2_mcspi_device_config ads7846_mcspi_config = {
+@@ -94,18 +96,6 @@ static struct ads7846_platform_data ads7846_config = {
+       .keep_vref_on           = 1,
+ };
+-static struct spi_board_info overo_spi_board_info[] __initdata = {
+-      {
+-              .modalias               = "ads7846",
+-              .bus_num                = 1,
+-              .chip_select            = 0,
+-              .max_speed_hz           = 1500000,
+-              .controller_data        = &ads7846_mcspi_config,
+-              .irq                    = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN),
+-              .platform_data          = &ads7846_config,
+-      }
+-};
+-
+ static void __init overo_ads7846_init(void)
+ {
+       if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
+@@ -115,9 +105,6 @@ static void __init overo_ads7846_init(void)
+               printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n");
+               return;
+       }
+-
+-      spi_register_board_info(overo_spi_board_info,
+-                      ARRAY_SIZE(overo_spi_board_info));
+ }
+ #else
+@@ -233,6 +220,139 @@ static inline void __init overo_init_smsc911x(void)
+ static inline void __init overo_init_smsc911x(void) { return; }
+ #endif
++/* DSS */
++static int lcd_enabled;
++static int dvi_enabled;
++
++#define OVERO_GPIO_LCD_EN 144
++#define OVERO_GPIO_LCD_BL 145
++
++static void __init overo_display_init(void)
++{
++      if ((gpio_request(OVERO_GPIO_LCD_EN, "OVERO_GPIO_LCD_EN") == 0) &&
++          (gpio_direction_output(OVERO_GPIO_LCD_EN, 1) == 0))
++              gpio_export(OVERO_GPIO_LCD_EN, 0);
++      else
++              printk(KERN_ERR "could not obtain gpio for "
++                                      "OVERO_GPIO_LCD_EN\n");
++
++      if ((gpio_request(OVERO_GPIO_LCD_BL, "OVERO_GPIO_LCD_BL") == 0) &&
++          (gpio_direction_output(OVERO_GPIO_LCD_BL, 1) == 0))
++              gpio_export(OVERO_GPIO_LCD_BL, 0);
++      else
++              printk(KERN_ERR "could not obtain gpio for "
++                                      "OVERO_GPIO_LCD_BL\n");
++}
++
++static int overo_panel_enable_dvi(struct omap_dss_device *dssdev)
++{
++      if (lcd_enabled) {
++              printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++              return -EINVAL;
++      }
++      dvi_enabled = 1;
++
++      return 0;
++}
++
++static void overo_panel_disable_dvi(struct omap_dss_device *dssdev)
++{
++      dvi_enabled = 0;
++}
++
++static struct omap_dss_device overo_dvi_device = {
++      .type                   = OMAP_DISPLAY_TYPE_DPI,
++      .name                   = "dvi",
++      .driver_name            = "generic_panel",
++      .phy.dpi.data_lines     = 24,
++      .platform_enable        = overo_panel_enable_dvi,
++      .platform_disable       = overo_panel_disable_dvi,
++};
++
++static struct omap_dss_device overo_tv_device = {
++      .name = "tv",
++      .driver_name = "venc",
++      .type = OMAP_DISPLAY_TYPE_VENC,
++      .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
++};
++
++static int overo_panel_enable_lcd(struct omap_dss_device *dssdev)
++{
++      if (dvi_enabled) {
++              printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++              return -EINVAL;
++      }
++
++      gpio_set_value(OVERO_GPIO_LCD_EN, 1);
++      gpio_set_value(OVERO_GPIO_LCD_BL, 1);
++      lcd_enabled = 1;
++      return 0;
++}
++
++static void overo_panel_disable_lcd(struct omap_dss_device *dssdev)
++{
++      gpio_set_value(OVERO_GPIO_LCD_EN, 0);
++      gpio_set_value(OVERO_GPIO_LCD_BL, 0);
++      lcd_enabled = 0;
++}
++
++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
++      defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
++static struct omap_dss_device overo_lcd35_device = {
++      .type                   = OMAP_DISPLAY_TYPE_DPI,
++      .name                   = "lcd35",
++      .driver_name            = "lgphilips_lb035q02_panel",
++      .phy.dpi.data_lines     = 24,
++      .platform_enable        = overo_panel_enable_lcd,
++      .platform_disable       = overo_panel_disable_lcd,
++};
++#endif
++
++#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \
++      defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE)
++static struct omap_dss_device overo_lcd43_device = {
++      .type                   = OMAP_DISPLAY_TYPE_DPI,
++      .name                   = "lcd43",
++      .driver_name            = "samsung_lte_panel",
++      .phy.dpi.data_lines     = 24,
++      .platform_enable        = overo_panel_enable_lcd,
++      .platform_disable       = overo_panel_disable_lcd,
++};
++#endif
++
++static struct omap_dss_device *overo_dss_devices[] = {
++      &overo_dvi_device,
++      &overo_tv_device,
++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
++      defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
++      &overo_lcd35_device,
++#endif
++#if defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) || \
++      defined(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C_MODULE)
++      &overo_lcd43_device,
++#endif
++};
++
++static struct omap_dss_board_info overo_dss_data = {
++      .num_devices    = ARRAY_SIZE(overo_dss_devices),
++      .devices        = overo_dss_devices,
++      .default_device = &overo_dvi_device,
++};
++
++static struct platform_device overo_dss_device = {
++      .name          = "omapdss",
++      .id            = -1,
++      .dev            = {
++              .platform_data = &overo_dss_data,
++      },
++};
++
++static struct regulator_consumer_supply overo_vdda_dac_supply =
++      REGULATOR_SUPPLY("vdda_dac", "omapdss");
++
++static struct regulator_consumer_supply overo_vdds_dsi_supply =
++      REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++
+ static struct mtd_partition overo_nand_partitions[] = {
+       {
+               .name           = "xloader",
+@@ -358,6 +478,37 @@ static struct regulator_init_data overo_vmmc1 = {
+       .consumer_supplies      = &overo_vmmc1_supply,
+ };
++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
++static struct regulator_init_data overo_vdac = {
++      .constraints = {
++              .min_uV                 = 1800000,
++              .max_uV                 = 1800000,
++              .valid_modes_mask       = REGULATOR_MODE_NORMAL
++                                      | REGULATOR_MODE_STANDBY,
++              .valid_ops_mask         = REGULATOR_CHANGE_MODE
++                                      | REGULATOR_CHANGE_STATUS,
++      },
++      .num_consumer_supplies  = 1,
++      .consumer_supplies      = &overo_vdda_dac_supply,
++};
++
++/* VPLL2 for digital video outputs */
++static struct regulator_init_data overo_vpll2 = {
++      .constraints = {
++              .name                   = "VDVI",
++              .min_uV                 = 1800000,
++              .max_uV                 = 1800000,
++              .valid_modes_mask       = REGULATOR_MODE_NORMAL
++                                      | REGULATOR_MODE_STANDBY,
++              .valid_ops_mask         = REGULATOR_CHANGE_MODE
++                                      | REGULATOR_CHANGE_STATUS,
++      },
++      .num_consumer_supplies  = 1,
++      .consumer_supplies      = &overo_vdds_dsi_supply,
++};
++
++/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
++
+ static struct twl4030_codec_audio_data overo_audio_data = {
+       .audio_mclk = 26000000,
+ };
+@@ -367,8 +518,6 @@ static struct twl4030_codec_data overo_codec_data = {
+       .audio = &overo_audio_data,
+ };
+-/* mmc2 (WLAN) and Bluetooth don't use twl4030 regulators */
+-
+ static struct twl4030_madc_platform_data overo_madc_data = {
+       .irq_line       = 1,
+ };
+@@ -381,6 +530,8 @@ static struct twl4030_platform_data overo_twldata = {
+       .usb            = &overo_usb_data,
+       .codec          = &overo_codec_data,
+       .vmmc1          = &overo_vmmc1,
++      .vdac           = &overo_vdac,
++      .vpll2          = &overo_vpll2,
+ };
+ static struct i2c_board_info __initdata overo_i2c_boardinfo[] = {
+@@ -401,23 +552,41 @@ static int __init overo_i2c_init(void)
+       return 0;
+ }
+-static struct platform_device overo_lcd_device = {
+-      .name           = "overo_lcd",
+-      .id             = -1,
+-};
+-
+-static struct omap_lcd_config overo_lcd_config __initdata = {
+-      .ctrl_name      = "internal",
++static struct spi_board_info overo_spi_board_info[] __initdata = {
++#if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
++      defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
++      {
++              .modalias               = "ads7846",
++              .bus_num                = 1,
++              .chip_select            = 0,
++              .max_speed_hz           = 1500000,
++              .controller_data        = &ads7846_mcspi_config,
++              .irq                    = OMAP_GPIO_IRQ(OVERO_GPIO_PENDOWN),
++              .platform_data          = &ads7846_config,
++      },
++#endif
++#if defined(CONFIG_PANEL_LGPHILIPS_LB035Q02) || \
++      defined(CONFIG_PANEL_LGPHILIPS_LB035Q02_MODULE)
++      {
++              .modalias               = "lgphilips_lb035q02_panel-spi",
++              .bus_num                = 1,
++              .chip_select            = 1,
++              .max_speed_hz           = 500000,
++              .mode                   = SPI_MODE_3,
++      },
++#endif
+ };
+-static struct omap_board_config_kernel overo_config[] __initdata = {
+-      { OMAP_TAG_LCD,         &overo_lcd_config },
+-};
++static int __init overo_spi_init(void)
++{
++      overo_ads7846_init();
++      spi_register_board_info(overo_spi_board_info,
++                      ARRAY_SIZE(overo_spi_board_info));
++      return 0;
++}
+ static void __init overo_init_irq(void)
+ {
+-      omap_board_config = overo_config;
+-      omap_board_config_size = ARRAY_SIZE(overo_config);
+       omap2_init_common_infrastructure();
+       omap2_init_common_devices(mt46h32m32lf6_sdrc_params,
+                                 mt46h32m32lf6_sdrc_params);
+@@ -425,7 +594,7 @@ static void __init overo_init_irq(void)
+ }
+ static struct platform_device *overo_devices[] __initdata = {
+-      &overo_lcd_device,
++      &overo_dss_device,
+ };
+ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
+@@ -466,8 +635,9 @@ static void __init overo_init(void)
+       overo_flash_init();
+       usb_musb_init(&musb_board_data);
+       usb_ehci_init(&ehci_pdata);
+-      overo_ads7846_init();
++      overo_spi_init();
+       overo_init_smsc911x();
++      overo_display_init();
+       /* Ensure SDRC pins are mux'd for self-refresh */
+       omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
+@@ -510,7 +680,7 @@ static void __init overo_init(void)
+                                       "OVERO_GPIO_USBH_CPEN\n");
+ }
+-MACHINE_START(OVERO, "Gumstix Overo")
++MACHINE_START(OVERO, "Gumstsix Overo")
+       .boot_params    = 0x80000100,
+       .map_io         = omap3_map_io,
+       .reserve        = omap_reserve,
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0027-Add-defines-to-set-config-options-in-GPMC-per-CS-con.patch
new file mode 100644 (file)
index 0000000..6e9d3c0
--- /dev/null
@@ -0,0 +1,80 @@
+From 98d0c3ce9209fe34699ec99aa90efab39fe05c36 Mon Sep 17 00:00:00 2001
+From: Philip Balister <balister@nomad.(none)>
+Date: Wed, 17 Feb 2010 14:51:39 -0800
+Subject: [PATCH 27/29] Add defines to set config options in GPMC per CS control registers.
+
+---
+ arch/arm/plat-omap/include/plat/gpmc.h |   36 ++++++++++++++++++++++++++++++++
+ 1 files changed, 36 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/include/plat/gpmc.h b/arch/arm/plat-omap/include/plat/gpmc.h
+index 85ded59..1a6c748 100644
+--- a/arch/arm/plat-omap/include/plat/gpmc.h
++++ b/arch/arm/plat-omap/include/plat/gpmc.h
+@@ -46,6 +46,11 @@
+ #define GPMC_ECC_WRITE                1 /* Reset Hardware ECC for write */
+ #define GPMC_ECC_READSYN      2 /* Reset before syndrom is read back */
++#define GPMC_CONFIG           0x50
++#define GPMC_STATUS           0x54
++#define GPMC_CS0_BASE         0x60
++#define GPMC_CS_SIZE          0x30
++
+ #define GPMC_CONFIG1_WRAPBURST_SUPP     (1 << 31)
+ #define GPMC_CONFIG1_READMULTIPLE_SUPP  (1 << 30)
+ #define GPMC_CONFIG1_READTYPE_ASYNC     (0 << 29)
+@@ -63,6 +68,7 @@
+ #define GPMC_CONFIG1_DEVICESIZE_16      GPMC_CONFIG1_DEVICESIZE(1)
+ #define GPMC_CONFIG1_DEVICETYPE(val)    ((val & 3) << 10)
+ #define GPMC_CONFIG1_DEVICETYPE_NOR     GPMC_CONFIG1_DEVICETYPE(0)
++#define GPMC_CONFIG1_DEVICETYPE_NAND    GPMC_CONFIG1_DEVICETYPE(2)
+ #define GPMC_CONFIG1_MUXADDDATA         (1 << 9)
+ #define GPMC_CONFIG1_TIME_PARA_GRAN     (1 << 4)
+ #define GPMC_CONFIG1_FCLK_DIV(val)      (val & 3)
+@@ -79,6 +85,35 @@
+ #define GPMC_PREFETCH_STATUS_FIFO_CNT(val)    ((val >> 24) & 0x7F)
+ #define GPMC_PREFETCH_STATUS_COUNT(val)       (val & 0x00003fff)
++#define GPMC_CONFIG2_CSWROFFTIME(val) ((val & 31) << 16)
++#define GPMC_CONFIG2_CSRDOFFTIME(val) ((val & 31) << 8)
++#define GPMC_CONFIG2_CSEXTRADELAY     (1 << 7)
++#define GPMC_CONFIG2_CSONTIME(val)    (val & 15)
++
++#define GPMC_CONFIG3_ADVWROFFTIME(val)        ((val & 31) << 16)
++#define GPMC_CONFIG3_ADVRDOFFTIME(val)        ((val & 31) << 8)
++#define GPMC_CONFIG3_ADVEXTRADELAY    (1 << 7)
++#define GPMC_CONFIG3_ADVONTIME(val)   (val & 15)
++
++#define GPMC_CONFIG4_WEOFFTIME(val)   ((val & 31) << 24)
++#define GPMC_CONFIG4_WEEXTRADELAY     (1 << 23)
++#define GPMC_CONFIG4_WEONTIME(val)    ((val & 15) << 16)
++#define GPMC_CONFIG4_OEOFFTIME(val)   ((val & 31) << 8)
++#define GPMC_CONFIG4_OEEXTRADELAY     (1 << 7)
++#define GPMC_CONFIG4_OEONTIME(val)    (val & 15)
++
++#define GPMC_CONFIG5_PAGEBURSTACCESSTIME(val) ((val & 15) << 24)
++#define GPMC_CONFIG5_RDACCESSTIME(val)        ((val & 31) << 16)
++#define GPMC_CONFIG5_WRCYCLETIME(val) ((val & 31) << 8)
++#define GPMC_CONFIG5_RDCYCLETIME(val) (val & 31)
++
++#define GPMC_CONFIG6_WRACCESSTIME(val)        ((val & 31) << 24)
++#define GPMC_CONFIG6_WRDATAONADMUXBUS(val)    ((val & 15) << 16)
++#define GPMC_CONFIG6_CYCLE2CYCLEDELAY(val)    ((val & 15) << 8)
++#define GPMC_CONFIG6_CYCLE2CYCLESAMECSEN      (1 << 7)
++#define GPMC_CONFIG6_CYCLE2CYCLEDIFFCSEN      (1 << 6)
++#define GPMC_CONFIG6_BUSTURNAROUND(val)       (val & 15)
++
+ /*
+  * Note that all values in this struct are in nanoseconds except sync_clk
+  * (which is in picoseconds), while the register values are in gpmc_fck cycles.
+@@ -133,6 +168,7 @@ extern int gpmc_cs_reserved(int cs);
+ extern int gpmc_prefetch_enable(int cs, int dma_mode,
+                                       unsigned int u32_count, int is_write);
+ extern int gpmc_prefetch_reset(int cs);
++extern int gpmc_prefetch_status(void);
+ extern void omap3_gpmc_save_context(void);
+ extern void omap3_gpmc_restore_context(void);
+ extern void gpmc_init(void);
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0028-Add-functions-to-dma.c-to-set-address-and-length-for.patch
new file mode 100644 (file)
index 0000000..0ae578d
--- /dev/null
@@ -0,0 +1,83 @@
+From 5469329878e4bdb38fe39fc95676d9b752b1528f Mon Sep 17 00:00:00 2001
+From: Philip Balister <philip@opensdr.com>
+Date: Thu, 22 Apr 2010 19:41:58 -0700
+Subject: [PATCH 28/29] Add functions to dma.c to set address and length for src and dest.
+
+---
+ arch/arm/plat-omap/dma.c              |   30 ++++++++++++++++++++++++++++++
+ arch/arm/plat-omap/include/plat/dma.h |    4 ++++
+ 2 files changed, 34 insertions(+), 0 deletions(-)
+
+diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
+index c4b2b47..f28f756 100644
+--- a/arch/arm/plat-omap/dma.c
++++ b/arch/arm/plat-omap/dma.c
+@@ -471,6 +471,21 @@ void omap_set_dma_src_burst_mode(int lch, enum omap_dma_burst_mode burst_mode)
+ }
+ EXPORT_SYMBOL(omap_set_dma_src_burst_mode);
++void omap_set_dma_src_addr_size(int lch, unsigned int addr, int elem_count)
++{
++
++      if (cpu_class_is_omap1()) {
++              p->dma_write(addr >> 16, CSSA, lch);
++              //p->dma_write((u16)addr, CSSA_L, lch);
++      }
++
++      if (cpu_class_is_omap2())
++              p->dma_write(addr, CSSA, lch);
++
++      p->dma_write(elem_count, CEN, lch);
++}
++EXPORT_SYMBOL_GPL(omap_set_dma_src_addr_size);
++
+ /* Note that dest_port is only for OMAP1 */
+ void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode,
+                             unsigned long dest_start,
+@@ -561,6 +576,21 @@ void omap_set_dma_dest_burst_mode(int lch, enum omap_dma_burst_mode burst_mode)
+ }
+ EXPORT_SYMBOL(omap_set_dma_dest_burst_mode);
++void omap_set_dma_dest_addr_size(int lch, unsigned int addr, int elem_count)
++{
++
++      if (cpu_class_is_omap1()) {
++              p->dma_write(addr >> 16, CDSA, lch);
++              //p->dma_write((u16)addr, CDSA_L, lch);
++      }
++
++      if (cpu_class_is_omap2())
++              p->dma_write(addr, CDSA, lch);
++
++      p->dma_write(elem_count, CEN, lch);
++}
++EXPORT_SYMBOL_GPL(omap_set_dma_dest_addr_size);
++
+ static inline void omap_enable_channel_irq(int lch)
+ {
+       u32 status;
+diff --git a/arch/arm/plat-omap/include/plat/dma.h b/arch/arm/plat-omap/include/plat/dma.h
+index d1c916f..1e7243e 100644
+--- a/arch/arm/plat-omap/include/plat/dma.h
++++ b/arch/arm/plat-omap/include/plat/dma.h
+@@ -462,6 +462,8 @@ extern void omap_set_dma_src_index(int lch, int eidx, int fidx);
+ extern void omap_set_dma_src_data_pack(int lch, int enable);
+ extern void omap_set_dma_src_burst_mode(int lch,
+                                       enum omap_dma_burst_mode burst_mode);
++extern void omap_set_dma_src_addr_size(int lch, unsigned int addr,
++                              int elem_count);
+ extern void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode,
+                                    unsigned long dest_start,
+@@ -470,6 +472,8 @@ extern void omap_set_dma_dest_index(int lch, int eidx, int fidx);
+ extern void omap_set_dma_dest_data_pack(int lch, int enable);
+ extern void omap_set_dma_dest_burst_mode(int lch,
+                                        enum omap_dma_burst_mode burst_mode);
++extern void omap_set_dma_dest_addr_size(int lch, unsigned int addr,
++                                      int elem_count);
+ extern void omap_set_dma_params(int lch,
+                               struct omap_dma_channel_params *params);
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch b/recipes-bsp/linux/linux-omap-2.6.37rc/0029-usrp-embedded-Add-driver-for-USRP-Embedded-FPGA-inte.patch
new file mode 100644 (file)
index 0000000..9a7133f
--- /dev/null
@@ -0,0 +1,1889 @@
+From 511a2c7822e68d081de3cefa8a2a82815da6ce78 Mon Sep 17 00:00:00 2001
+From: Philip Balister <balister@moose.(none)>
+Date: Wed, 13 Jan 2010 14:35:39 -0500
+Subject: [PATCH 29/29] usrp-embedded : Add driver for USRP Embedded FPGA interface.
+
+---
+ arch/arm/mach-omap2/board-overo.c |  176 +++++-
+ drivers/misc/Kconfig              |    9 +
+ drivers/misc/Makefile             |    1 +
+ drivers/misc/usrp_e.c             | 1481 +++++++++++++++++++++++++++++++++++++
+ include/linux/usrp_e.h            |   87 +++
+ 5 files changed, 1750 insertions(+), 4 deletions(-)
+ create mode 100644 drivers/misc/usrp_e.c
+ create mode 100644 include/linux/usrp_e.h
+
+diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
+index 8a44c17..8686015 100644
+--- a/arch/arm/mach-omap2/board-overo.c
++++ b/arch/arm/mach-omap2/board-overo.c
+@@ -35,6 +35,8 @@
+ #include <linux/mtd/partitions.h>
+ #include <linux/mmc/host.h>
++#include <linux/spi/spi.h>
++
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/flash.h>
+@@ -63,6 +65,8 @@
+ #define OVERO_GPIO_USBH_NRESET        183
+ #define NAND_BLOCK_SIZE SZ_128K
++#define GPMC_CS0_BASE  0x60
++#define GPMC_CS_SIZE   0x30
+ #define OVERO_SMSC911X_CS      5
+ #define OVERO_SMSC911X_GPIO    176
+@@ -164,7 +168,9 @@ static struct platform_device overo_smsc911x2_device = {
+ static struct platform_device *smsc911x_devices[] = {
+       &overo_smsc911x_device,
++#if 0
+       &overo_smsc911x2_device,
++#endif
+ };
+ static inline void __init overo_init_smsc911x(void)
+@@ -194,6 +200,7 @@ static inline void __init overo_init_smsc911x(void)
+       /* set up second smsc911x chip */
++#if 0
+       if (gpmc_cs_request(OVERO_SMSC911X2_CS, SZ_16M, &cs_mem_base2) < 0) {
+               printk(KERN_ERR "Failed request for GPMC mem for smsc911x2\n");
+               return;
+@@ -213,6 +220,7 @@ static inline void __init overo_init_smsc911x(void)
+       overo_smsc911x2_resources[1].start = OMAP_GPIO_IRQ(OVERO_SMSC911X2_GPIO);
+       overo_smsc911x2_resources[1].end   = 0;
++#endif
+       platform_add_devices(smsc911x_devices, ARRAY_SIZE(smsc911x_devices));
+ }
+@@ -353,6 +361,16 @@ static struct regulator_consumer_supply overo_vdda_dac_supply =
+ static struct regulator_consumer_supply overo_vdds_dsi_supply =
+       REGULATOR_SUPPLY("vdds_dsi", "omapdss");
++static struct spi_board_info overo_mcspi_board_info[] = {
++      {
++              .modalias       = "spidev",
++              .max_speed_hz   = 12000000, // 12 MHz
++              .bus_num        = 1,
++              .chip_select    = 0,
++              .mode           = SPI_MODE_1,
++      },
++};
++
+ static struct mtd_partition overo_nand_partitions[] = {
+       {
+               .name           = "xloader",
+@@ -432,8 +450,8 @@ static struct omap2_hsmmc_info mmc[] = {
+               .mmc            = 2,
+               .caps           = MMC_CAP_4_BIT_DATA,
+               .gpio_cd        = -EINVAL,
+-              .gpio_wp        = -EINVAL,
+-              .transceiver    = true,
++              .transceiver    = true,
++              .gpio_wp        = 150,
+               .ocr_mask       = 0x00100000,   /* 3.3V */
+       },
+       {}      /* Terminator */
+@@ -612,6 +630,8 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
+ static struct omap_board_mux board_mux[] __initdata = {
+       { .reg_offset = OMAP_MUX_TERMINATOR },
+ };
++#else
++#define board_mux     NULL
+ #endif
+ static struct omap_musb_board_data musb_board_data = {
+@@ -626,6 +646,148 @@ static struct omap_musb_board_data musb_board_data = {
+       .power                  = 100,
+ };
++static void __init usrp1_e_init(void)
++{
++      unsigned int tmp;
++
++      printk("Setup up gpmc timing.\n");
++
++// Set up CS4, data read/write
++
++#if 1
++      // Signal control parameters per chip select
++      tmp = gpmc_cs_read_reg(4, GPMC_CS_CONFIG1);
++//    tmp |= (GPMC_CONFIG1_MUXADDDATA);
++//    tmp |= (GPMC_CONFIG1_WRITETYPE_SYNC);
++//    tmp |= (GPMC_CONFIG1_READTYPE_SYNC);
++      tmp |= (GPMC_CONFIG1_FCLK_DIV(0));
++      gpmc_cs_write_reg(4, GPMC_CS_CONFIG1, tmp);
++      printk("GPMC_CONFIG1 reg: %x\n", tmp);
++#endif
++
++#if 1 
++      // CS signal timing parameter configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG2_CSONTIME(1);         /*  1 */
++      tmp |= GPMC_CONFIG2_CSWROFFTIME(16);     /* 16 */
++      tmp |= GPMC_CONFIG2_CSRDOFFTIME(16);     /* 16 */
++      printk("GPMC_CONFIG2 reg: %x\n", tmp);
++      gpmc_cs_write_reg(4, GPMC_CS_CONFIG2, tmp);
++#endif 
++
++#if 0
++      // nADV signal timing parameter configuration
++        tmp = 0;
++        tmp |= GPMC_CONFIG3_ADVONTIME(1);
++        tmp |= GPMC_CONFIG3_ADVRDOFFTIME(2);
++        tmp |= GPMC_CONFIG3_ADVWROFFTIME(2);
++        printk("GPMC_CONFIG3 reg: %x\n", tmp);
++        gpmc_cs_write_reg(4, GPMC_CS_CONFIG3, tmp);
++#endif
++
++#if 1
++      // nWE and nOE signals timing parameter configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG4_WEONTIME(3);      /*  3 */
++      tmp |= GPMC_CONFIG4_WEOFFTIME(16);     /* 16 */
++      tmp |= GPMC_CONFIG4_OEONTIME(3);      /*  3 */
++      tmp |= GPMC_CONFIG4_OEOFFTIME(16);     /* 16 */
++      printk("GPMC_CONFIG4 reg: %x\n", tmp);
++      gpmc_cs_write_reg(4, GPMC_CS_CONFIG4, tmp);
++#endif
++
++#if 1
++      // RdAccess time and Cycle time timing parameters configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG5_PAGEBURSTACCESSTIME(1);
++      tmp |= GPMC_CONFIG5_RDACCESSTIME(15);           /* 15 */
++      tmp |= GPMC_CONFIG5_WRCYCLETIME(17);           /* 17 */
++      tmp |= GPMC_CONFIG5_RDCYCLETIME(17);           /* 17 */
++      printk("GPMC_CONFIG5 reg: %x\n", tmp);
++
++      gpmc_cs_write_reg(4, GPMC_CS_CONFIG5, tmp);
++#endif
++
++#if 1
++      // WrAccessTime WrDataOnADmuxBus, Cycle2Cycle, and BusTurnAround params
++      tmp = (1<<31);
++      tmp |= GPMC_CONFIG6_WRACCESSTIME(15);          /* 15 */
++      tmp |= GPMC_CONFIG6_WRDATAONADMUXBUS(3);
++      tmp |= GPMC_CONFIG6_CYCLE2CYCLEDELAY(0);
++      tmp |= GPMC_CONFIG6_BUSTURNAROUND(0);
++      printk("GPMC_CONFIG6 reg: %x\n", tmp);
++      gpmc_cs_write_reg(4, GPMC_CS_CONFIG6, tmp);
++#endif
++
++// Configure timing for CS6, wishbone access
++
++#if 1
++      // Signal control parameters per chip select
++      tmp = gpmc_cs_read_reg(6, GPMC_CS_CONFIG1);
++//    tmp |= (GPMC_CONFIG1_MUXADDDATA);
++      tmp |= (GPMC_CONFIG1_WRITETYPE_SYNC);
++      tmp |= (GPMC_CONFIG1_READTYPE_SYNC);
++      tmp |= (GPMC_CONFIG1_FCLK_DIV(0));
++      gpmc_cs_write_reg(6, GPMC_CS_CONFIG1, tmp);
++      printk("GPMC_CONFIG1 reg: %x\n", tmp);
++#endif
++
++#if 1 
++      // CS signal timing parameter configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG2_CSONTIME(1);
++      tmp |= GPMC_CONFIG2_CSWROFFTIME(17);
++      tmp |= GPMC_CONFIG2_CSRDOFFTIME(17);
++      printk("GPMC_CONFIG2 reg: %x\n", tmp);
++      gpmc_cs_write_reg(6, GPMC_CS_CONFIG2, tmp);
++#endif 
++
++#if 0
++      // nADV signal timing parameter configuration
++        tmp = 0;
++        tmp |= GPMC_CONFIG3_ADVONTIME(1);
++        tmp |= GPMC_CONFIG3_ADVRDOFFTIME(2);
++        tmp |= GPMC_CONFIG3_ADVWROFFTIME(2);
++        printk("GPMC_CONFIG3 reg: %x\n", tmp);
++        gpmc_cs_write_reg(6, GPMC_CS_CONFIG3, tmp);
++#endif
++
++#if 0
++      // nWE and nOE signals timing parameter configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG4_WEONTIME(3);
++      tmp |= GPMC_CONFIG4_WEOFFTIME(4);
++      tmp |= GPMC_CONFIG4_OEONTIME(3);
++      tmp |= GPMC_CONFIG4_OEOFFTIME(4);
++      printk("GPMC_CONFIG4 reg: %x\n", tmp);
++      gpmc_cs_write_reg(6, GPMC_CS_CONFIG4, tmp);
++#endif
++
++#if 0
++      // RdAccess time and Cycle time timing paraters configuration
++      tmp = 0;
++      tmp |= GPMC_CONFIG5_PAGEBURSTACCESSTIME(1);
++      tmp |= GPMC_CONFIG5_RDACCESSTIME(4);
++      tmp |= GPMC_CONFIG5_WRCYCLETIME(5);
++      tmp |= GPMC_CONFIG5_RDCYCLETIME(5);
++      printk("GPMC_CONFIG5 reg: %x\n", tmp);
++      gpmc_cs_write_reg(6, GPMC_CS_CONFIG5, tmp);
++#endif
++
++#if 1
++      // WrAccessTime WrDataOnADmuxBus, Cycle2Cycle, and BusTurnAround params
++      tmp = 0;
++      tmp |= GPMC_CONFIG6_WRACCESSTIME(15);
++      tmp |= GPMC_CONFIG6_WRDATAONADMUXBUS(3);
++      tmp |= GPMC_CONFIG6_CYCLE2CYCLEDELAY(3);
++      tmp |= GPMC_CONFIG6_CYCLE2CYCLESAMECSEN;
++      tmp |= GPMC_CONFIG6_BUSTURNAROUND(0);
++      printk("GPMC_CONFIG6 reg: %x\n", tmp);
++      gpmc_cs_write_reg(6, GPMC_CS_CONFIG6, tmp);
++#endif
++
++}
++
+ static void __init overo_init(void)
+ {
+       omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+@@ -637,8 +799,14 @@ static void __init overo_init(void)
+       usb_ehci_init(&ehci_pdata);
+       overo_spi_init();
+       overo_init_smsc911x();
++#if 0
+       overo_display_init();
+-
++#endif
++      usrp1_e_init();
++#if 1
++      spi_register_board_info(overo_mcspi_board_info,
++              ARRAY_SIZE(overo_mcspi_board_info));
++#endif
+       /* Ensure SDRC pins are mux'd for self-refresh */
+       omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
+       omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
+@@ -680,7 +848,7 @@ static void __init overo_init(void)
+                                       "OVERO_GPIO_USBH_CPEN\n");
+ }
+-MACHINE_START(OVERO, "Gumstsix Overo")
++MACHINE_START(OVERO, "Gumstix Overo")
+       .boot_params    = 0x80000100,
+       .map_io         = omap3_map_io,
+       .reserve        = omap_reserve,
+diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
+index 4d073f1..8bd6dfb 100644
+--- a/drivers/misc/Kconfig
++++ b/drivers/misc/Kconfig
+@@ -452,6 +452,15 @@ config PCH_PHUB
+         To compile this driver as a module, choose M here: the module will
+         be called pch_phub.
++config USRP_E
++      tristate "USRP-E FPGA interface driver"
++      default n
++      help
++       This driver is for the Ettus Research USRP Embedded Software
++       Defined Radio platform.
++
++       If you do not plan to run this kernel on that hardware choose N.
++
+ source "drivers/misc/c2port/Kconfig"
+ source "drivers/misc/eeprom/Kconfig"
+ source "drivers/misc/cb710/Kconfig"
+diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
+index 98009cc..f43483e 100644
+--- a/drivers/misc/Makefile
++++ b/drivers/misc/Makefile
+@@ -35,6 +35,7 @@ obj-$(CONFIG_TI_DAC7512)     += ti_dac7512.o
+ obj-$(CONFIG_C2PORT)          += c2port/
+ obj-$(CONFIG_IWMC3200TOP)      += iwmc3200top/
+ obj-$(CONFIG_HMC6352)         += hmc6352.o
++obj-$(CONFIG_USRP_E)          += usrp_e.o
+ obj-y                         += eeprom/
+ obj-y                         += cb710/
+ obj-$(CONFIG_VMWARE_BALLOON)  += vmw_balloon.o
+diff --git a/drivers/misc/usrp_e.c b/drivers/misc/usrp_e.c
+new file mode 100644
+index 0000000..2923b14
+--- /dev/null
++++ b/drivers/misc/usrp_e.c
+@@ -0,0 +1,1481 @@
++/*
++ * -*- linux-c -*-
++ * Interface for USRP Embedded from Ettus Research, LLC.
++ * This driver uses the GPMC interface on the OMAP3 to pass data
++ * to/from a Spartan 3 FPGA.
++ *
++ * Copyright (C) Ettus Research, LLC
++ *
++ * Written by Philip Balister <philip@opensdr.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include "linux/fs.h"
++#include "linux/module.h"
++#include "linux/cdev.h"
++#include "linux/device.h"
++#include "linux/spinlock.h"
++#include "linux/errno.h"
++#include "linux/irq.h"
++#include "linux/interrupt.h"
++#include "linux/wait.h"
++#include "linux/sched.h"
++#include "linux/dma-mapping.h"
++#include "linux/semaphore.h"
++#include "linux/kthread.h"
++#include "linux/poll.h"
++#include "linux/slab.h"
++
++#include "plat/gpmc.h"
++#include "plat/gpio.h"
++#include "plat/dma.h"
++
++#include "asm/uaccess.h"
++#include "asm/io.h"
++#include "asm/atomic.h"
++
++#include "linux/usrp_e.h"
++
++#define TX_SPACE_AVAILABLE_GPIO       144
++#define RX_DATA_READY_GPIO    146
++
++static atomic_t use_count = ATOMIC_INIT(0);
++static atomic_t mapped = ATOMIC_INIT(0);
++static int shutting_down;
++
++struct spi_regs_wb;
++struct i2c_regs_wb;
++
++struct usrp_e_dev {
++      struct cdev cdev;
++      unsigned long mem_base;
++      unsigned long control_mem_base;
++      u32 *ioaddr;
++      u8 *ctl_addr;
++      struct spi_regs_wb *ctl_spi;
++      struct i2c_regs_wb *ctl_i2c;
++      spinlock_t fpga_lock;
++
++      atomic_t n_overruns;
++      atomic_t n_underruns;
++
++} *usrp_e_devp;
++
++struct dma_data {
++      int ch;
++      struct omap_dma_channel_params params;
++
++      unsigned long virt_from;
++      unsigned long virt_to;
++      unsigned long phys_from;
++      unsigned long phys_to;
++};
++
++#define MISC_REGS_BASE 0x0
++
++#define UE_REG_MISC_LED (MISC_REGS_BASE + 0)
++
++#define UE_REG_MISC_RX_LEN (MISC_REGS_BASE + 10)
++#define UE_REG_MISC_TX_LEN (MISC_REGS_BASE + 12)
++
++#define UE_REG_SLAVE(n) ((n)<<7)
++#define UE_REG_SR_ADDR(n) ((UE_REG_SLAVE(5)) + (4*(n)))
++
++#define UE_REG_CTRL_TX_CLEAR_UNDERRUN UE_REG_SR_ADDR(25)
++#define UE_SR_CLEAR_FIFO UE_REG_SR_ADDR(6)
++
++#define CTL_SPI_BASE 0x100
++
++struct spi_regs_wb {
++      u32 txrx0;
++      u32 txrx1;
++      u32 txrx2;
++      u32 txrx3;
++      u32 ctrl;
++      u32 div;
++      u32 ss;
++};
++
++/* Defines for spi ctrl register */
++#define UE_SPI_CTRL_ASS               (BIT(13))
++#define UE_SPI_CTRL_IE                (BIT(12))
++#define UE_SPI_CTRL_LSB               (BIT(11))
++/* defines for TXNEG and RXNEG in usrp_e.h so user can pass them to driver. */
++#define UE_SPI_CTRL_GO_BSY    (BIT(8))
++#define UE_SPI_CTRL_CHAR_LEN_MASK     0x7f
++
++
++#define CTL_I2C_BASE 0x180
++#if 1
++struct i2c_regs_wb {
++      u8 prescalar_lo;
++      u8 dummy;
++      u8 dummy1;
++      u8 dummy2;
++      u8 prescalar_hi;
++      u8 dummy3;
++      u8 dummy4;
++      u8 dummy5;
++      u8 ctrl;
++      u8 dummy6;
++      u8 dummy7;
++      u8 dummy8;
++      u8 data;
++      u8 dummy9;
++      u8 dummy10;
++      u8 dummy11;
++      u8 cmd_status;
++};
++#else
++struct i2c_regs_wb {
++      u16 prescalar_lo;
++      u16 dummy2;
++      u16 prescalar_hi;
++      u16 dummy3;
++      u16 ctrl;
++      u16 dummy6;
++      u16 data;
++      u16 dummy9;
++      u16 cmd_status;
++};
++#endif
++
++#define I2C_CTRL_EN   (BIT(7))                /* core enable */
++#define I2C_CTRL_IE   (BIT(6))                /* interrupt enable */
++
++/* STA, STO, RD, WR, and IACK bits are cleared automatically */
++
++#define I2C_CMD_START (BIT(7))
++#define I2C_CMD_STOP  (BIT(6))
++#define I2C_CMD_RD    (BIT(5))
++#define I2C_CMD_WR    (BIT(4))
++#define I2C_CMD_NACK  (BIT(3))
++#define I2C_CMD_RSVD_2        (BIT(2))
++#define I2C_CMD_RSVD_1        (BIT(1))
++#define I2C_CMD_IACK  (BIT(0))
++
++#define I2C_ST_RXACK  (BIT(7))
++#define I2C_ST_BUSY   (BIT(6))
++#define I2C_ST_AL     (BIT(5))
++#define I2C_RSVD_4    (BIT(4))
++#define I2C_RSVD_3    (BIT(3))
++#define I2C_RSVD_2    (BIT(2))
++#define I2C_ST_TIP    (BIT(1))
++#define I2C_ST_IP     (BIT(0))
++
++#define MAX_WB_DIV 4
++#define MASTER_CLK_RATE 64000000
++#define PRESCALAR(wb_div) (((MASTER_CLK_RATE/(wb_div)) / (5 * 100000)) - 1)
++
++static __u16 prescalar_values[MAX_WB_DIV+1] = {
++      0xffff,
++      PRESCALAR(1),
++      PRESCALAR(2),
++      PRESCALAR(3),
++      PRESCALAR(4),
++};
++
++static struct dma_data *rx_dma;
++static struct dma_data *tx_dma;
++
++struct ring_buffer_entry {
++      unsigned long dma_addr;
++      __u8 *frame_addr;
++};
++
++struct ring_buffer {
++      struct ring_buffer_info (*rbi)[];
++      struct ring_buffer_entry (*rbe)[];
++      int num_pages;
++      unsigned long (*pages)[];
++};
++
++static struct ring_buffer tx_rb;
++static struct ring_buffer rx_rb;
++
++static struct usrp_e_ring_buffer_size_t rb_size;
++
++#define NUM_PAGES_RX_FLAGS 1
++#define NUM_RX_FRAMES 100
++#define NUM_PAGES_TX_FLAGS 1
++#define NUM_TX_FRAMES 100
++
++static int tx_rb_write;
++static int tx_rb_read;
++static int rx_rb_write;
++static int rx_rb_read;
++
++static int alloc_ring_buffer(struct ring_buffer *rb,
++                      unsigned int num_bufs, enum dma_data_direction direction);
++static void delete_ring_buffer(struct ring_buffer *rb,
++                      unsigned int num_bufs, enum dma_data_direction direction);
++static int alloc_ring_buffers(void);
++static void init_ring_buffer(struct ring_buffer *rb, int num_bufs,
++                      int init_flags, enum dma_data_direction direction);
++
++static dev_t usrp_e_dev_number;
++static struct class *usrp_e_class;
++
++#define DEVICE_NAME   "usrp_e"
++
++static const struct file_operations usrp_e_fops;
++
++static irqreturn_t space_available_irqhandler(int irq, void *dev_id);
++static irqreturn_t data_ready_irqhandler(int irq, void *dev_id);
++static void usrp_rx_dma_irq(int ch, u16 stat, void *data);
++static void usrp_tx_dma_irq(int ch, u16 stat, void *data);
++
++static DECLARE_WAIT_QUEUE_HEAD(data_received_queue);
++static DECLARE_WAIT_QUEUE_HEAD(space_available_queue);
++static DECLARE_WAIT_QUEUE_HEAD(received_data_from_user);
++static DECLARE_WAIT_QUEUE_HEAD(tx_rb_space_available);
++
++static int tx_dma_waiting_for_data;
++static int waiting_for_space_in_tx_rb;
++
++#define DEBUG_RX 1
++
++static DEFINE_SEMAPHORE(dma_lock);
++
++static void usrp_e_spi_init(void);
++static void usrp_e_i2c_init(void);
++
++static int init_dma_controller(void);
++static void release_dma_controller(void);
++static int get_frame_from_fpga_start(void);
++static int get_frame_from_fpga_finish(void);
++static int send_frame_to_fpga_start(void);
++static int send_frame_to_fpga_finish(void);
++
++static int rx_dma_active;
++static int tx_dma_active;
++
++static int  __init
++usrp_e_init(void)
++{
++      int ret;
++      struct usrp_e_dev *p;
++
++      printk(KERN_DEBUG "usrp_e entering driver initialization\n");
++
++      if (alloc_chrdev_region(&usrp_e_dev_number, 0, 1, DEVICE_NAME) < 0) {
++              printk(KERN_DEBUG "Can't register device\n");
++              return -1;
++      }
++
++      usrp_e_class = class_create(THIS_MODULE, DEVICE_NAME);
++
++      usrp_e_devp = kzalloc(sizeof(struct usrp_e_dev), GFP_KERNEL);
++      if (!usrp_e_devp) {
++              printk(KERN_ERR "Bad kmalloc\n");
++              return -ENOMEM;
++      }
++
++      p = usrp_e_devp; /* Shorten var name so I stay sane. */
++
++      printk(KERN_DEBUG "usrp_e data struct malloc'd.\n");
++
++      atomic_set(&p->n_underruns, 0);
++      atomic_set(&p->n_overruns, 0);
++
++      printk(KERN_DEBUG "usrp_e Data initialized..\n");
++
++      cdev_init(&p->cdev, &usrp_e_fops);
++      p->cdev.owner = THIS_MODULE;
++
++      ret = cdev_add(&p->cdev, MKDEV(MAJOR(usrp_e_dev_number), 0), 1);
++      if (ret) {
++              printk(KERN_ERR "Bad cdev\n");
++              return ret;
++      }
++
++      printk(KERN_DEBUG "usrp_e major number : %d\n",
++              MAJOR(usrp_e_dev_number));
++      device_create(usrp_e_class, NULL, MKDEV(MAJOR(usrp_e_dev_number), 0),
++                    NULL, "usrp_e%d", 0);
++
++      printk(KERN_DEBUG "Getting Chip Select\n");
++
++      if (gpmc_cs_request(4, SZ_2K, &p->mem_base) < 0) {
++              printk(KERN_ERR "Failed request for GPMC mem for usrp_e\n");
++              return -1;
++      }
++      printk(KERN_DEBUG "Got CS4, address = %lx\n", p->mem_base);
++
++      if (!request_mem_region(p->mem_base, SZ_2K, "usrp_e")) {
++              printk(KERN_ERR "Request_mem_region failed.\n");
++              gpmc_cs_free(4);
++              return -1;
++      }
++
++      p->ioaddr = ioremap(p->mem_base, SZ_2K);
++      spin_lock_init(&p->fpga_lock);
++
++      if (gpmc_cs_request(6, SZ_2K, &p->control_mem_base) < 0) {
++              printk(KERN_ERR "Failed request for GPMC control mem for usrp_e\n");
++              return -1;
++      }
++      printk(KERN_DEBUG "Got CS6, address = %lx\n", p->control_mem_base);
++
++      if (!request_mem_region(p->control_mem_base, SZ_2K, "usrp_e_c")) {
++              printk(KERN_ERR "Request_mem_region failed.\n");
++              gpmc_cs_free(6);
++              return -1;
++      }
++
++      p->ctl_addr = ioremap_nocache(p->control_mem_base, SZ_2K);
++
++      /* Initialize wishbone SPI and I2C interfaces */
++
++      usrp_e_spi_init();
++      usrp_e_i2c_init();
++
++      /* Configure GPIO's */
++
++      if (!(((gpio_request(TX_SPACE_AVAILABLE_GPIO,
++                                  "TX_SPACE_AVAILABLE_GPIO") == 0) &&
++              (gpio_direction_input(TX_SPACE_AVAILABLE_GPIO) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for TX_SPACE_AVAILABLE_GPIO\n");
++              return -1;
++      }
++
++      if (!(((gpio_request(RX_DATA_READY_GPIO, "RX_DATA_READY_GPIO") == 0) &&
++              (gpio_direction_input(RX_DATA_READY_GPIO) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for RX_DATA_READY_GPIO\n");
++              return -1;
++      }
++
++      /* Debug gpios */
++      if (!(((gpio_request(14, "Debug0") == 0) &&
++                              (gpio_direction_output(14, 0) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for Debug0\n");
++              return -1;
++      }
++
++      if (!(((gpio_request(21, "Debug1") == 0) &&
++                              (gpio_direction_output(21, 0) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for Debug1\n");
++              return -1;
++      }
++
++      if (!(((gpio_request(22, "Debug2") == 0) &&
++                              (gpio_direction_output(22, 0) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for Debug2\n");
++              return -1;
++      }
++
++      if (!(((gpio_request(23, "Debug3") == 0) &&
++                              (gpio_direction_output(23, 0) == 0)))) {
++              printk(KERN_ERR "Could not claim GPIO for Debug3\n");
++              return -1;
++      }
++
++
++      rb_size.num_pages_rx_flags = NUM_PAGES_RX_FLAGS;
++      rb_size.num_rx_frames = NUM_RX_FRAMES;
++      rb_size.num_pages_tx_flags = NUM_PAGES_TX_FLAGS;
++      rb_size.num_tx_frames = NUM_TX_FRAMES;
++
++      ret = alloc_ring_buffers();
++      if (ret < 0)
++              return ret;
++
++      /* Initialize various DMA related flags */
++      rx_dma_active = 0;
++      tx_dma_active = 0;
++      shutting_down = 0;
++
++      printk(KERN_DEBUG "usrp_e Driver Initialized.\n");
++
++      return 0;
++}
++
++static void __exit
++usrp_e_cleanup(void)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++
++      unregister_chrdev_region(usrp_e_dev_number, 1);
++
++      release_mem_region(p->mem_base, SZ_2K);
++      release_mem_region(p->control_mem_base, SZ_2K);
++
++      device_destroy(usrp_e_class, MKDEV(MAJOR(usrp_e_dev_number), 0));
++      cdev_del(&p->cdev);
++
++      class_destroy(usrp_e_class);
++
++      iounmap(p->ioaddr);
++      iounmap(p->ctl_addr);
++
++      gpmc_cs_free(4);
++      gpmc_cs_free(6);
++
++      printk(KERN_DEBUG "Freeing gpios\n");
++
++      gpio_free(TX_SPACE_AVAILABLE_GPIO);
++      gpio_free(RX_DATA_READY_GPIO);
++
++      /* debug */
++      gpio_free(14);
++      gpio_free(21);
++      gpio_free(22);
++      gpio_free(23);
++
++      delete_ring_buffer(&tx_rb, rb_size.num_tx_frames, DMA_TO_DEVICE);
++      delete_ring_buffer(&rx_rb, rb_size.num_rx_frames, DMA_FROM_DEVICE);
++
++      kfree(p);
++
++      printk(KERN_DEBUG "Leaving cleanup\n");
++}
++
++static int
++usrp_e_open(struct inode *inode, struct file *file)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      int ret;
++
++      printk(KERN_DEBUG "usrp_e open called, use_count = %d\n",
++              atomic_read(&use_count));
++      if (atomic_add_return(1, &use_count) != 1) {
++              printk(KERN_ERR "use_count = %d\n", atomic_read(&use_count));
++              atomic_dec(&use_count);
++              return -EBUSY;
++      }
++
++      /* Clear rx and tx fifos in the fpga */
++      writel(1, p->ctl_addr + UE_SR_CLEAR_FIFO);
++      writel(2, p->ctl_addr + UE_SR_CLEAR_FIFO);
++
++#if 0
++      usrp_e_devp = container_of(inode->i_cdev, struct usrp_e_dev, cdev);
++
++      file->private_data = usrp_e_devp;
++#endif
++
++      ret = init_dma_controller();
++      if (ret < 0)
++              return ret;
++
++      tx_rb_write = 0;
++      tx_rb_read = 0;
++
++      rx_rb_write = 0;
++      rx_rb_read = 0;
++
++      tx_dma_active = 0;
++      rx_dma_active = 0;
++      shutting_down = 0;
++
++      init_ring_buffer(&rx_rb, rb_size.num_rx_frames, RB_KERNEL, DMA_FROM_DEVICE);
++      init_ring_buffer(&tx_rb, rb_size.num_tx_frames, RB_KERNEL, DMA_TO_DEVICE);
++
++      /* Configure interrupts for GPIO pins */
++
++      ret = request_irq(gpio_to_irq(TX_SPACE_AVAILABLE_GPIO),
++                      space_available_irqhandler,
++              IRQF_TRIGGER_RISING, "usrp_e_space_available", NULL);
++
++      ret = request_irq(gpio_to_irq(RX_DATA_READY_GPIO),
++                      data_ready_irqhandler,
++                      IRQF_TRIGGER_RISING, "usrp_e_data_ready", NULL);
++
++      printk(KERN_DEBUG "usrp: leaving open\n");
++      return 0;
++}
++
++static int
++usrp_e_release(struct inode *inode, struct file *file)
++{
++      struct usrp_e_dev *usrp_e_devp = file->private_data;
++
++      printk(KERN_DEBUG "usrp_e release called\n");
++
++      if (atomic_read(&use_count) != 1) {
++              printk(KERN_ERR "Attempt to close usrp_e driver that is not open");
++              return -ENOENT;
++      }
++
++      printk(KERN_DEBUG "Waiting for DMA to become inactive\n");
++      shutting_down = 0;
++      while (tx_dma_active || rx_dma_active)
++              cpu_relax();
++
++      /* Freeing gpio irq's */
++      printk(KERN_DEBUG "Freeing gpio irq's\n");
++
++      free_irq(gpio_to_irq(TX_SPACE_AVAILABLE_GPIO), NULL);
++      free_irq(gpio_to_irq(RX_DATA_READY_GPIO), NULL);
++
++      printk(KERN_DEBUG "Freeing DMA channels\n");
++
++      release_dma_controller();
++
++      usrp_e_devp = 0;
++
++      atomic_dec(&use_count);
++
++      return 0;
++}
++
++static ssize_t
++usrp_e_read(struct file *file, char *buf, size_t count, loff_t *ppos)
++{
++      size_t ret;
++      int rx_pkt_len;
++
++      if (count > SZ_2K)
++              return -EMSGSIZE;
++
++      if (!((*rx_rb.rbi)[rx_rb_read].flags & RB_USER)) {
++              if (wait_event_interruptible(data_received_queue,
++                            (((*rx_rb.rbi)[rx_rb_read].flags & RB_USER))))
++                      return -EINTR;
++      }
++
++      rx_pkt_len = (*rx_rb.rbi)[rx_rb_read].len;
++      ret = copy_to_user(buf, (*rx_rb.rbe)[rx_rb_read].frame_addr, rx_pkt_len);
++
++      (*rx_rb.rbi)[rx_rb_read].flags = RB_KERNEL;
++
++      rx_rb_read++;
++      if (rx_rb_read == rb_size.num_rx_frames)
++              rx_rb_read = 0;
++
++      get_frame_from_fpga_start();
++
++      return ((ret == 0) ?  rx_pkt_len : -ret);
++}
++
++static ssize_t
++usrp_e_write(struct file *file, const char *buf, size_t count, loff_t *ppos)
++{
++      size_t ret;
++
++#if 0
++//    printk("In write.\n");
++
++      /* Trigger a DMA transfer. Used to start transmit after writing */
++      /* data into the transmit ring buffer from user space */
++      if (count < 0) {
++              send_frame_to_fpga_start();
++              return 0;
++      }
++
++      if (count > SZ_2K)
++              return -EMSGSIZE;
++
++//    printk("Write flags: %d\n", (*tx_rb.rbe)[tx_rb_write].flags);
++      if (!((*tx_rb.rbi)[tx_rb_write].flags & RB_KERNEL)) {
++              waiting_for_space_in_tx_rb = 1;
++//            printk("Sleeping\n");
++              if (wait_event_interruptible(tx_rb_space_available,
++                             ((*tx_rb.rbi)[tx_rb_write].flags & RB_KERNEL)))
++                      return -EINTR;
++//            printk("Waking\n");
++      }
++
++      ret = copy_from_user((*tx_rb.rbe)[tx_rb_write].frame_addr, buf, count);
++      if (ret)
++              return -ret;
++
++      (*tx_rb.rbi)[tx_rb_write].len = count;
++      (*tx_rb.rbi)[tx_rb_write].flags = RB_USER;
++
++      tx_rb_write++;
++      if (tx_rb_write == rb_size.num_tx_frames)
++              tx_rb_write = 0;
++
++//    printk("Calling send_to_fpga_start from write\n");
++#endif
++      send_frame_to_fpga_start();
++
++      return count;
++}
++
++static loff_t
++usrp_e_llseek(struct file *file, loff_t offest, int orig)
++{
++      printk(KERN_DEBUG "usrp_e llseek called\n");
++
++      return 0;
++}
++
++static int usrp_e_ctl16(unsigned long arg, int direction)
++{
++      struct usrp_e_ctl16 __user *argp = (struct usrp_e_ctl16 __user *) arg;
++      int i;
++      struct usrp_e_ctl16 ctl;
++
++      if (copy_from_user(&ctl, argp, sizeof(struct usrp_e_ctl16)))
++              return -EFAULT;
++
++      if (ctl.count > 10)
++              return -EINVAL;
++
++      if (direction == 0) {
++              for (i = 0; i < ctl.count; i++)
++                      writew(ctl.buf[i], &usrp_e_devp->ctl_addr \
++                              [i + ctl.offset]);
++      } else if (direction == 1) {
++              for (i = 0; i < ctl.count; i++)
++                      ctl.buf[i] = readw(&usrp_e_devp->ctl_addr \
++                              [i + ctl.offset]);
++
++              if (copy_to_user(argp, &ctl, sizeof(struct usrp_e_ctl16)))
++                      return -EFAULT;
++      } else
++              return -EFAULT;
++
++      return 0;
++}
++
++static int usrp_e_ctl32(unsigned long arg, int direction)
++{
++      struct usrp_e_ctl32 __user *argp = (struct usrp_e_ctl32 __user *) arg;
++      int i;
++      struct usrp_e_ctl32 ctl;
++
++      if (copy_from_user(&ctl, argp, sizeof(struct usrp_e_ctl32)))
++              return -EFAULT;
++
++      if (ctl.count > 20)
++              return -EINVAL;
++
++      if (direction == 0) {
++              for (i = 0; i < ctl.count; i++)
++                      writel(ctl.buf[i], &usrp_e_devp->ctl_addr \
++                              [i + ctl.offset]);
++      } else if (direction == 1) {
++              for (i = 0; i < ctl.count; i++)
++                      ctl.buf[i] = readl(&usrp_e_devp->ctl_addr \
++                              [i + ctl.offset]);
++
++              if (copy_to_user(argp, &ctl, sizeof(struct usrp_e_ctl16)))
++                      return -EFAULT;
++
++      } else
++              return -EFAULT;
++
++      return 0;
++}
++
++static int usrp_e_get_rb_info(unsigned long arg)
++{
++      struct usrp_e_ring_buffer_size_t __user *argp = (struct usrp_e_ring_buffer_size_t __user *) arg;
++      int i;
++
++      if (copy_to_user(argp, &rb_size, sizeof(rb_size)))
++              return -EFAULT;
++
++      return 0;
++}
++
++static void usrp_e_spi_init()
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++
++      p->ctl_spi = (struct spi_regs_wb *)(p->ctl_addr + CTL_SPI_BASE);
++      p->ctl_spi->div = 64; /* 1 = Div by 4 (12.5 MHz) */
++}
++
++static int usrp_e_spi_wait(void)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++
++      while (p->ctl_spi->ctrl & UE_SPI_CTRL_GO_BSY) {
++              if (signal_pending(current)) {
++                      printk(KERN_DEBUG "Signal received.\n");
++                      set_current_state(TASK_RUNNING);
++                      return -EINTR;
++              }
++              schedule();
++      }
++
++      return 0;
++}
++
++static int usrp_e_spi(unsigned long __user arg)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      struct usrp_e_spi __user *argp = (struct usrp_e_spi __user *) arg;
++      struct usrp_e_spi spi_cmd;
++      int ctrl, ret;
++
++      if (copy_from_user(&spi_cmd, argp, sizeof(struct usrp_e_spi)))
++              return -EFAULT;
++
++      spi_cmd.flags &= (UE_SPI_CTRL_TXNEG | UE_SPI_CTRL_RXNEG);
++      ctrl = UE_SPI_CTRL_ASS | (UE_SPI_CTRL_CHAR_LEN_MASK & spi_cmd.length) \
++              | spi_cmd.flags;
++
++      ret = usrp_e_spi_wait();
++      if (ret < 0)
++              return ret;
++
++      p->ctl_spi->ss = spi_cmd.slave & 0xff;
++
++      p->ctl_spi->txrx0 = spi_cmd.data;
++
++      p->ctl_spi->ctrl = ctrl;
++      p->ctl_spi->ctrl = ctrl | UE_SPI_CTRL_GO_BSY;
++
++      if (spi_cmd.readback) {
++              usrp_e_spi_wait();
++              if (copy_to_user(&argp->data, &p->ctl_spi->txrx0,
++                                      sizeof(__u32)))
++                      return -EFAULT;
++              else
++                      return 0;
++      } else
++              return 0;
++
++}
++
++static void usrp_e_i2c_init()
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      int wb_div;
++
++      p->ctl_i2c = (struct i2c_regs_wb *)(p->ctl_addr + CTL_I2C_BASE);
++
++      writeb(0, &p->ctl_i2c->ctrl);   /* disable core */
++
++      /* Assume wb_div is 4, deal with this later */
++      wb_div = 4;
++      if (wb_div > MAX_WB_DIV)
++              wb_div = MAX_WB_DIV;
++
++      writeb((prescalar_values[wb_div] & 0xff), &p->ctl_i2c->prescalar_lo);
++      writeb(((prescalar_values[wb_div] >> 8) & 0xff),
++              &p->ctl_i2c->prescalar_hi);
++      writeb(I2C_CTRL_EN, &p->ctl_i2c->ctrl); /* enable core */
++}
++
++static int usrp_e_i2c_wait(__u32 mask, int chk_ack)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++
++      while (readb(&p->ctl_i2c->cmd_status) & mask) {
++              if (signal_pending(current)) {
++                      printk(KERN_DEBUG "Signal received.\n");
++                      set_current_state(TASK_RUNNING);
++                      return -EINTR;
++              }
++              schedule();
++      }
++
++      if (chk_ack) {
++              if ((readb(&p->ctl_i2c->cmd_status) & I2C_ST_RXACK) == 0)
++                      return 1;
++              else
++                      return 0;
++      }
++
++      return 0;
++}
++
++static int usrp_e_i2c(unsigned long arg, int direction)
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      struct usrp_e_i2c __user *argp = (struct usrp_e_i2c __user *) arg;
++      struct usrp_e_i2c tmp;
++      struct usrp_e_i2c *i2c_msg;
++      int ret, len, i;
++
++      if (copy_from_user(&tmp, argp, sizeof(struct usrp_e_i2c)))
++              return -EFAULT;
++
++      i2c_msg = kmalloc(sizeof(struct usrp_e_i2c) + tmp.len, GFP_KERNEL);
++      if (!i2c_msg)
++              return -ENOMEM;
++
++      if (copy_from_user(i2c_msg, argp,
++                              (sizeof(struct usrp_e_i2c) + tmp.len)))
++              return -EFAULT;
++
++      if (direction) {
++              /* read */
++              if (i2c_msg->len == 0)
++                      return 1;
++
++              usrp_e_i2c_wait(I2C_ST_BUSY, 0);
++
++              writeb(((i2c_msg->addr << 1) | 1), &p->ctl_i2c->data);
++              writeb((I2C_CMD_WR | I2C_CMD_START), &p->ctl_i2c->cmd_status);
++              ret = usrp_e_i2c_wait(I2C_ST_TIP, 1);
++              if (ret < 0) {
++                      return ret;
++              } else if (ret == 0) {
++                      writeb(I2C_CMD_STOP, &p->ctl_i2c->cmd_status);
++                      return 2;
++              }
++
++              for (len = i2c_msg->len, i = 0; len > 0; i++, len--) {
++                      writeb((I2C_CMD_RD | ((len == 1) ?
++                              (I2C_CMD_NACK | I2C_CMD_STOP) : 0)),
++                              &p->ctl_i2c->cmd_status);
++                      usrp_e_i2c_wait(I2C_ST_TIP, 0);
++                      i2c_msg->data[i] = readb(&p->ctl_i2c->data);
++              }
++              if (copy_to_user(argp, i2c_msg, (sizeof(struct usrp_e_i2c) +
++                              tmp.len)))
++                      return -EFAULT;
++      } else {
++              /* write */
++              usrp_e_i2c_wait(I2C_ST_BUSY, 0);
++              writeb(((i2c_msg->addr << 1) | 0), &p->ctl_i2c->data);
++              writeb((I2C_CMD_WR | I2C_CMD_START |
++                              (i2c_msg->len == 0 ? I2C_CMD_STOP : 0)),
++                              &p->ctl_i2c->cmd_status);
++              ret = usrp_e_i2c_wait(I2C_ST_TIP, 1);
++              if (ret < 0) {
++                      return ret;
++              } else if (ret == 0) {
++                      writeb(I2C_CMD_STOP, &p->ctl_i2c->cmd_status);
++                      return 2;
++              }
++              for (len = i2c_msg->len, i = 0; len > 0; i++, len--) {
++                      writeb(i2c_msg->data[i], &p->ctl_i2c->data);
++                      writeb((I2C_CMD_WR | (len == 1 ? I2C_CMD_STOP : 0)),
++                              &p->ctl_i2c->cmd_status);
++                      ret = usrp_e_i2c_wait(I2C_ST_TIP, 1);
++                      if (ret < 0) {
++                              return ret;
++                      } else if (ret == 0) {
++                              writeb(I2C_CMD_STOP, &p->ctl_i2c->cmd_status);
++                              return 2;
++                      }
++              }
++
++      }
++
++
++      return 1;
++}
++
++static int usrp_e_ioctl(struct file *file,
++                      unsigned int cmd, unsigned long arg)
++{
++
++      switch (cmd) {
++      case USRP_E_WRITE_CTL16:
++              return usrp_e_ctl16(arg, 0);
++
++      case USRP_E_READ_CTL16:
++              return usrp_e_ctl16(arg, 1);
++
++      case USRP_E_WRITE_CTL32:
++              return usrp_e_ctl32(arg, 0);
++
++      case USRP_E_READ_CTL32:
++              return usrp_e_ctl32(arg, 1);
++
++      case USRP_E_SPI:
++              return usrp_e_spi(arg);
++
++      case USRP_E_I2C_WRITE:
++              return usrp_e_i2c(arg, 0);
++
++      case USRP_E_I2C_READ:
++              return usrp_e_i2c(arg, 1);
++
++      case USRP_E_GET_RB_INFO:
++              return usrp_e_get_rb_info(arg);
++
++      default:
++              return -ENOTTY;
++      }
++
++      return 0;
++}
++
++static unsigned int usrp_e_poll(struct file *filp, poll_table *wait)
++{
++      unsigned int mask = 0;
++
++      poll_wait(filp, &data_received_queue, wait);
++      poll_wait(filp, &tx_rb_space_available, wait);
++
++      // Make sure write is active before sleeping
++      send_frame_to_fpga_start();
++
++      /* Make sure to read in case the rx ring buffer is full */
++      get_frame_from_fpga_start();
++
++      // This likely needs some locking. The pointer is incremented
++      // before the flag state is updated.
++
++      if (rx_rb_write == 0) {
++              if ((*rx_rb.rbi)[rb_size.num_rx_frames - 1].flags & RB_USER)
++                      mask |= POLLIN | POLLRDNORM;
++      } else {
++              if ((*rx_rb.rbi)[rx_rb_write - 1].flags & RB_USER)
++                      mask |= POLLIN | POLLRDNORM;
++      }
++
++      if (tx_rb_read == 0) {
++              if ((*tx_rb.rbi)[rb_size.num_tx_frames - 1].flags & RB_KERNEL)
++                      mask |= POLLOUT | POLLWRNORM;
++      } else {
++              if ((*tx_rb.rbi)[tx_rb_read - 1].flags & RB_KERNEL)
++                      mask |= POLLOUT | POLLWRNORM;
++      }
++
++      return mask;
++
++}
++
++/* The mmap code is based on code in af_packet.c */
++
++static void usrp_e_mm_open(struct vm_area_struct *vma)
++{
++
++      atomic_inc(&mapped);
++}
++
++static void usrp_e_mm_close(struct vm_area_struct *vma)
++{
++
++      atomic_dec(&mapped);
++}
++
++static const struct vm_operations_struct usrp_e_mmap_ops = {
++      .open   = usrp_e_mm_open,
++      .close  = usrp_e_mm_close,
++};
++
++static int usrp_e_mmap(struct file *filp, struct vm_area_struct *vma)
++{
++      unsigned long size, expected_size;
++      unsigned int i;
++      unsigned long start;
++      int err;
++      struct page *page;
++
++      printk("In mmap\n");
++
++      if (vma->vm_pgoff)
++              return -EINVAL;
++
++      /* Verify the user will map the entire tx and rx ring buffer space */
++      expected_size = (rb_size.num_rx_frames + rb_size.num_tx_frames) * (PAGE_SIZE >> 1)
++              + (rb_size.num_pages_rx_flags + rb_size.num_pages_tx_flags) * PAGE_SIZE;
++
++      size = vma->vm_end - vma->vm_start;
++      printk(KERN_DEBUG "Size = %d, expected sixe = %d\n", size, expected_size);
++
++      if (size != expected_size)
++              return -EINVAL;
++
++      start = vma->vm_start;
++
++      page = virt_to_page(rx_rb.rbi);
++      err = vm_insert_page(vma, start, page);
++      if (err)
++              return -EINVAL;
++      
++      start += PAGE_SIZE;
++      
++      for (i = 0; i < rx_rb.num_pages; ++i) {
++              struct page *page = virt_to_page((*rx_rb.pages)[i]);
++              err = vm_insert_page(vma, start, page);
++              if (err)
++                      return -EINVAL;
++
++              start += PAGE_SIZE;
++      }
++
++      page = virt_to_page(tx_rb.rbi);
++      err = vm_insert_page(vma, start, page);
++      if (err)
++              return -EINVAL;
++      
++      start += PAGE_SIZE;
++      
++      for (i = 0; i < tx_rb.num_pages; ++i) {
++              struct page *page = virt_to_page((*tx_rb.pages)[i]);
++
++              err = vm_insert_page(vma, start, page);
++              if (err)
++                      return err;
++
++              start += PAGE_SIZE;
++      }
++
++      vma->vm_ops = &usrp_e_mmap_ops;
++
++      return 0;
++}
++
++static const struct file_operations usrp_e_fops = {
++      .owner          =       THIS_MODULE,
++      .open           =       usrp_e_open,
++      .release        =       usrp_e_release,
++      .read           =       usrp_e_read,
++      .write          =       usrp_e_write,
++      .llseek         =       usrp_e_llseek,
++      .unlocked_ioctl         =       usrp_e_ioctl,
++      .poll           =       usrp_e_poll,
++      .mmap           =       usrp_e_mmap,
++};
++
++MODULE_VERSION("0.1");
++MODULE_ALIAS(DEVICE_NAME);
++MODULE_DESCRIPTION(DEVICE_NAME);
++MODULE_AUTHOR("Philip Balister <philip@opensdr.com>");
++MODULE_LICENSE("GPL v2");
++
++module_init(usrp_e_init);
++module_exit(usrp_e_cleanup);
++
++static irqreturn_t space_available_irqhandler(int irq, void *dev_id)
++{
++      int serviced = IRQ_NONE;
++
++#ifdef DEBUG_TX
++      gpio_set_value(22, 1);
++#endif
++
++//    printk("Calling send_to_fpga_start from space_available irq\n");
++      send_frame_to_fpga_start();
++
++      serviced = IRQ_HANDLED;
++
++#ifdef DEBUG_TX
++      gpio_set_value(22, 0);
++#endif
++
++      return serviced;
++}
++
++static void usrp_rx_dma_irq(int ch, u16 stat, void *data)
++{
++
++#ifdef DEBUG_RX
++      gpio_set_value(23, 1);
++#endif
++
++      rx_dma_active = 0;
++
++      get_frame_from_fpga_finish();
++
++#ifdef DEBUG_RX
++      gpio_set_value(23, 0);
++#endif
++}
++
++static void usrp_tx_dma_irq(int ch, u16 stat, void *data)
++{
++
++#ifdef DEBUG_TX
++      gpio_set_value(23, 1);
++#endif
++      tx_dma_active = 0;
++
++      send_frame_to_fpga_finish();
++
++#ifdef DEBUG_TX
++      gpio_set_value(23, 0);
++#endif
++
++/* Save
++      gpio_set_value(21, 1);
++      gpio_set_value(21, 0);
++*/
++
++}
++
++static irqreturn_t data_ready_irqhandler(int irq, void *dev_id)
++{
++      int serviced = IRQ_NONE;
++
++#ifdef DEBUG_RX
++      gpio_set_value(22, 1);
++#endif
++
++      get_frame_from_fpga_start();
++
++      serviced = IRQ_HANDLED;
++
++#ifdef DEBUG_RX
++      gpio_set_value(22, 0);
++#endif
++      return serviced;
++}
++
++static int init_dma_controller()
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++
++      rx_dma = kzalloc(sizeof(struct dma_data), GFP_KERNEL);
++      if (!rx_dma) {
++              printk(KERN_ERR "Failed to allocate memory for rx_dma struct.");
++              return -ENOMEM;
++      }
++
++      if (omap_request_dma(OMAP_DMA_NO_DEVICE, "usrp-e-rx",
++                      usrp_rx_dma_irq, (void *) rx_dma, &rx_dma->ch)) {
++              printk(KERN_ERR "Could not get rx DMA channel for usrp_e\n");
++              return -ENOMEM;
++      }
++      printk(KERN_DEBUG "rx_dma->ch %d\n", rx_dma->ch);
++
++      rx_dma->phys_from = p->mem_base;
++
++      memset(&rx_dma->params, 0, sizeof(rx_dma->params));
++      rx_dma->params.data_type        = OMAP_DMA_DATA_TYPE_S16;
++
++      rx_dma->params.src_amode        = OMAP_DMA_AMODE_CONSTANT;
++      rx_dma->params.dst_amode        = OMAP_DMA_AMODE_POST_INC;
++
++      rx_dma->params.src_start        = p->mem_base;
++      rx_dma->params.dst_start        = rx_dma->phys_to;
++
++      rx_dma->params.src_ei           = 1;
++      rx_dma->params.src_fi           = 1;
++      rx_dma->params.dst_ei           = 1;
++      rx_dma->params.dst_fi           = 1;
++
++      rx_dma->params.elem_count       = 1024;
++      rx_dma->params.frame_count      = 1;
++
++      rx_dma->params.read_prio        = DMA_CH_PRIO_HIGH;
++      rx_dma->params.write_prio       = DMA_CH_PRIO_LOW;
++
++      omap_set_dma_params(rx_dma->ch, &rx_dma->params);
++
++// Play with these with a real application
++//G   omap_set_dma_src_burst_mode(rx_dma->ch, OMAP_DMA_DATA_BURST_16);
++//    omap_set_dma_dest_burst_mode(rx_dma->ch, OMAP_DMA_DATA_BURST_16);
++
++#if 0 // Need to find implentations of the endian calls
++      omap_set_dma_src_endian_type(rx_dma->ch, OMAP_DMA_BIG_ENDIAN);
++      omap_set_dma_dst_endian_type(rx_dma->ch, OMAP_DMA_LITTLE_ENDIAN);
++#endif
++
++      tx_dma = kzalloc(sizeof(struct dma_data), GFP_KERNEL);
++      if (!tx_dma) {
++              printk(KERN_ERR "Failed to allocate memory for tx_dma struct.");
++              return -ENOMEM;
++      }
++
++      if (omap_request_dma(OMAP_DMA_NO_DEVICE, "usrp-e-tx",
++                      usrp_tx_dma_irq, (void *) tx_dma, &tx_dma->ch)) {
++              printk(KERN_ERR "Could not get tx DMA channel for usrp_e\n");
++              return -ENOMEM;
++      }
++
++      printk(KERN_DEBUG "tx_dma->ch %d\n", tx_dma->ch);
++
++      tx_dma->phys_from = p->mem_base;
++
++      memset(&tx_dma->params, 0, sizeof(tx_dma->params));
++      tx_dma->params.data_type        = OMAP_DMA_DATA_TYPE_S16;
++
++      tx_dma->params.src_amode        = OMAP_DMA_AMODE_POST_INC;
++      tx_dma->params.dst_amode        = OMAP_DMA_AMODE_CONSTANT;
++
++      tx_dma->params.src_start        = tx_dma->phys_from;
++      tx_dma->params.dst_start        = p->mem_base;
++
++      tx_dma->params.src_ei           = 1;
++      tx_dma->params.src_fi           = 1;
++      tx_dma->params.dst_ei           = 1;
++      tx_dma->params.dst_fi           = 1;
++
++      tx_dma->params.elem_count       = 1024;
++      tx_dma->params.frame_count      = 1;
++
++      tx_dma->params.read_prio        = DMA_CH_PRIO_LOW;
++      tx_dma->params.write_prio       = DMA_CH_PRIO_HIGH;
++
++      omap_set_dma_params(tx_dma->ch, &tx_dma->params);
++
++// Play with these with a real application
++//G   omap_set_dma_src_burst_mode(tx_dma->ch, OMAP_DMA_DATA_BURST_16);
++//    omap_set_dma_dest_burst_mode(tx_dma->ch, OMAP_DMA_DATA_BURST_16);
++
++      return 0;
++}
++
++static void release_dma_controller()
++{
++
++      omap_free_dma(rx_dma->ch);
++      omap_free_dma(tx_dma->ch);
++
++      kfree(rx_dma);
++      kfree(tx_dma);
++}
++
++static int get_frame_from_fpga_start()
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      struct ring_buffer_info *rbi = &(*rx_rb.rbi)[rx_rb_write];
++      struct ring_buffer_entry *rbe = &(*rx_rb.rbe)[rx_rb_write];
++      u16 elements_to_read;
++
++      /* Check for space available in the ring buffer */
++      /* If no space, drop data. A read call will restart dma transfers. */
++      if (((*rx_rb.rbi)[rx_rb_write].flags & RB_KERNEL) && (gpio_get_value(RX_DATA_READY_GPIO)) && !rx_dma_active  && !shutting_down) {
++
++              rx_dma_active = 1;
++#ifdef DEBUG_RX
++              gpio_set_value(14, 1);
++#endif
++
++              elements_to_read = readw(p->ctl_addr + UE_REG_MISC_RX_LEN);
++              
++              rbi->flags = RB_DMA_ACTIVE;
++              
++              rbi->len = elements_to_read << 1;
++              
++              omap_set_dma_dest_addr_size(rx_dma->ch, rbe->dma_addr,
++                                      elements_to_read);
++              
++              dma_sync_single_for_device(NULL, rbe->dma_addr, SZ_2K, DMA_FROM_DEVICE);
++              
++              omap_start_dma(rx_dma->ch);
++      }
++
++      return 0;
++}
++
++
++static int get_frame_from_fpga_finish()
++{
++      dma_sync_single_for_cpu(NULL, (*rx_rb.rbe)[rx_rb_write].dma_addr, SZ_2K, DMA_FROM_DEVICE);
++
++      (*rx_rb.rbi)[rx_rb_write].flags = RB_USER;
++      rx_rb_write++;
++      if (rx_rb_write == rb_size.num_rx_frames)
++              rx_rb_write = 0;
++
++      wake_up_interruptible(&data_received_queue);
++
++      rx_dma_active = 0;
++
++      get_frame_from_fpga_start();
++
++#ifdef DEBUG_RX
++      gpio_set_value(14, 0);
++#endif
++
++      return 0;
++}
++
++static int send_frame_to_fpga_start()
++{
++      struct usrp_e_dev *p = usrp_e_devp;
++      struct ring_buffer_info *rbi = &(*tx_rb.rbi)[tx_rb_read];
++      struct ring_buffer_entry *rbe = &(*tx_rb.rbe)[tx_rb_read];
++      u16 elements_to_write;
++
++//    printk("In send_frame_to_fpga_start.\n");
++
++      /* Check if there is data to write to the FPGA, if so send it */
++      /* Otherwise, do nothing. Process is restarted by calls to write */
++      if (((*tx_rb.rbi)[tx_rb_read].flags & RB_USER) && !tx_dma_active && (gpio_get_value(TX_SPACE_AVAILABLE_GPIO)) && !shutting_down) {
++//            printk("In send_frame_to_fpga_start, past if.\n");
++              tx_dma_active = 1;
++#ifdef DEBUG_TX
++              gpio_set_value(14, 1);
++#endif
++
++              elements_to_write = ((rbi->len) >> 1);
++              
++              writew(elements_to_write, p->ctl_addr + UE_REG_MISC_TX_LEN);
++              
++              rbi->flags = RB_DMA_ACTIVE;
++              
++              omap_set_dma_src_addr_size(tx_dma->ch, rbe->dma_addr,
++                                      elements_to_write);
++              
++              dma_sync_single_for_device(NULL, rbe->dma_addr, SZ_2K, DMA_TO_DEVICE);
++              
++              omap_start_dma(tx_dma->ch);
++      }
++
++      return 0;
++}
++
++static int send_frame_to_fpga_finish()
++{
++
++      dma_sync_single_for_cpu(NULL, (*tx_rb.rbe)[tx_rb_read].dma_addr, SZ_2K, DMA_TO_DEVICE);
++      
++      (*tx_rb.rbi)[tx_rb_read].flags = RB_KERNEL;
++      
++      tx_rb_read++;
++      if (tx_rb_read == rb_size.num_tx_frames)
++              tx_rb_read = 0;
++      
++      wake_up_interruptible(&tx_rb_space_available);
++
++      tx_dma_active = 0;
++
++      send_frame_to_fpga_start();
++
++#ifdef DEBUG_TX
++      gpio_set_value(14, 0);
++#endif
++
++      return 0;
++}
++
++static int alloc_ring_buffer(struct ring_buffer *rb,
++                      unsigned int num_bufs, enum dma_data_direction direction)
++{
++      int i;
++
++      rb->rbi = __get_free_page(GFP_KERNEL | __GFP_COMP | __GFP_ZERO | __GFP_NOWARN);
++
++      rb->rbe = kzalloc(sizeof(struct ring_buffer_entry) * num_bufs, GFP_KERNEL);
++      if (!rb) {
++              printk(KERN_ERR "Failed to allocate memory for rb entries\n");
++              return -ENOMEM;
++      }
++
++      rb->num_pages = (num_bufs & 1) ? ((num_bufs + 1) / 2) : (num_bufs / 2);
++
++      rb->pages = kzalloc(sizeof(unsigned long) * rb->num_pages, GFP_KERNEL);
++      if (!(rb->pages)) {
++              printk(KERN_ERR "Failed to allocate memory for rb page entries\n");
++              return -ENOMEM;
++      }
++
++      for (i = 0; i < rb->num_pages; i++) {
++              (*rb->pages)[i] = __get_free_page(GFP_KERNEL | __GFP_DMA | __GFP_COMP | __GFP_ZERO | __GFP_NOWARN);
++
++              (*(rb->rbe))[i*2].frame_addr =
++                      (*(rb->pages))[i];
++              (*(rb->rbe))[i*2 + 1].frame_addr =
++                      ((*(rb->pages))[i] + SZ_2K);
++              if (!(*(rb->rbe))[i*2].frame_addr || !(*(rb->rbe))[i*2 + 1].frame_addr) {
++                      printk(KERN_ERR "Failed to allocate memory dma buf\n");
++                      return -ENOMEM;
++              }
++
++              (*(rb->rbe))[i*2].dma_addr = dma_map_single(NULL, (*(rb->rbe))[i*2].frame_addr, SZ_2K, direction);
++              (*(rb->rbe))[i*2 + 1].dma_addr = dma_map_single(NULL, (*(rb->rbe))[i*2 + 1].frame_addr, SZ_2K, direction);
++              if (!(*(rb->rbe))[i*2].dma_addr || !(*(rb->rbe))[i*2 + 1].dma_addr) {
++                      printk(KERN_ERR "Failed to get physical address for dma buf\n");
++                      return -ENOMEM;
++              }
++      }
++
++      return 0;
++}
++
++static void delete_ring_buffer(struct ring_buffer *rb,
++                      unsigned int num_bufs, enum dma_data_direction direction)
++{
++      unsigned int i;
++      unsigned int num_pages;
++
++      printk(KERN_DEBUG "Entering delete_ring_buffer\n");
++
++      num_pages = (num_bufs & 1) ? ((num_bufs + 1) / 2) : (num_bufs / 2);
++
++      for (i = 0; i < num_pages; i++) {
++              dma_unmap_single(NULL, (*rb->rbe)[i*2].dma_addr, SZ_2K, direction);
++              dma_unmap_single(NULL, (*rb->rbe)[i*2 + 1].dma_addr, SZ_2K, direction);
++              free_page((*rb->pages)[i]);
++      }
++
++      free_page(rb->rbi);
++
++      kfree(rb->pages);
++      kfree(rb->rbe);
++
++      printk(KERN_DEBUG "Leaving delete_ring_buffer\n");
++}
++
++static int alloc_ring_buffers()
++{
++
++      if (alloc_ring_buffer(&tx_rb, rb_size.num_rx_frames, DMA_TO_DEVICE) < 0)
++              return -ENOMEM;
++      if (alloc_ring_buffer(&rx_rb, rb_size.num_tx_frames, DMA_FROM_DEVICE) < 0)
++              return -ENOMEM;
++
++      return 0;
++}
++
++static void init_ring_buffer(struct ring_buffer *rb, int num_bufs,
++                      int initial_flags, enum dma_data_direction direction)
++{
++      int i;
++
++      for (i = 0; i < num_bufs; i++) {
++              dma_sync_single_for_device(NULL, (*rb->rbe)[i].dma_addr,
++                                      SZ_2K, direction);
++              dma_sync_single_for_cpu(NULL, (*rb->rbe)[i].dma_addr,
++                                      SZ_2K, direction);
++              (*rb->rbi)[i].flags = initial_flags;
++      }
++
++}
++
++#if 0
++static int tx_dma_func(void *data)
++{
++      int ret;
++      struct sched_param s = { .sched_priority = 1};
++
++      printk(KERN_DEBUG "In tx_dma_func\n");
++
++      allow_signal(SIGSTOP);
++
++      sched_setscheduler(current, SCHED_FIFO, &s);
++
++      while (!kthread_should_stop() && !closing_driver) {
++
++              if (!((*tx_rb.rbe)[tx_rb_read].flags & RB_USER)) {
++                      tx_dma_waiting_for_data = 1;
++                      ret = wait_event_interruptible(received_data_from_user,
++                                   (*tx_rb.rbe)[tx_rb_read].flags & RB_USER);
++                      if (ret) {
++                              printk(KERN_DEBUG
++                                      "tx_dma_func received signal %d\n",
++                                      ret);
++                              if (closing_driver)
++                                      break;
++
++                      }
++                      tx_dma_waiting_for_data = 0;
++              }
++
++              if (wait_event_interruptible(space_available_queue,
++                              gpio_get_value(TX_SPACE_AVAILABLE_GPIO))) {
++                      printk(KERN_DEBUG "tx_dma received signal waiting for space.\n");
++                      if (closing_driver)
++                              break;
++              }
++
++              if (send_frame_to_fpga(&(*tx_rb.rbe)[tx_rb_read]) != 0) {
++                      printk(KERN_DEBUG "send_frame received signal.\n");
++                      if (closing_driver)
++                              break;
++              }
++
++              (*tx_rb.rbe)[tx_rb_read].flags = RB_KERNEL;
++
++              tx_rb_read++;
++              if (tx_rb_read == RB_SIZE)
++                      tx_rb_read = 0;
++
++#if 0
++              if (waiting_for_space_in_tx_rb)
++#endif
++                      wake_up_interruptible(&tx_rb_space_queue);
++
++      }
++      return 0;
++}
++#endif
+diff --git a/include/linux/usrp_e.h b/include/linux/usrp_e.h
+new file mode 100644
+index 0000000..e52f709
+--- /dev/null
++++ b/include/linux/usrp_e.h
+@@ -0,0 +1,87 @@
++
++/*
++ *  Copyright (C) 2010 Ettus Research, LLC
++ *
++ *  Written by Philip Balister <philip@opensdr.com>
++ *
++ *  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 2 of the License, or
++ *  (at your option) any later version.
++ */
++
++#ifndef __USRP_E_H
++#define __USRP_E_H
++
++#include <linux/types.h>
++#include <linux/ioctl.h>
++
++struct usrp_e_ctl16 {
++      __u32 offset;
++      __u32 count;
++      __u16 buf[20];
++};
++
++struct usrp_e_ctl32 {
++      __u32 offset;
++      __u32 count;
++      __u32 buf[10];
++};
++
++/* SPI interface */
++
++#define UE_SPI_TXONLY 0
++#define UE_SPI_TXRX   1
++
++/* Defines for spi ctrl register */
++#define UE_SPI_CTRL_TXNEG     (BIT(10))
++#define UE_SPI_CTRL_RXNEG     (BIT(9))
++
++#define UE_SPI_PUSH_RISE      0
++#define UE_SPI_PUSH_FALL      UE_SPI_CTRL_TXNEG
++#define UE_SPI_LATCH_RISE     0
++#define UE_SPI_LATCH_FALL     UE_SPI_CTRL_RXNEG
++
++struct usrp_e_spi {
++      __u8 readback;
++      __u32 slave;
++      __u32 data;
++      __u32 length;
++      __u32 flags;
++};
++
++struct usrp_e_i2c {
++      __u8 addr;
++      __u32 len;
++      __u8 data[];
++};
++
++#define USRP_E_IOC_MAGIC      'u'
++#define USRP_E_WRITE_CTL16    _IOW(USRP_E_IOC_MAGIC, 0x20, struct usrp_e_ctl16)
++#define USRP_E_READ_CTL16     _IOWR(USRP_E_IOC_MAGIC, 0x21, struct usrp_e_ctl16)
++#define USRP_E_WRITE_CTL32    _IOW(USRP_E_IOC_MAGIC, 0x22, struct usrp_e_ctl32)
++#define USRP_E_READ_CTL32     _IOWR(USRP_E_IOC_MAGIC, 0x23, struct usrp_e_ctl32)
++#define USRP_E_SPI            _IOWR(USRP_E_IOC_MAGIC, 0x24, struct usrp_e_spi)
++#define USRP_E_I2C_READ               _IOWR(USRP_E_IOC_MAGIC, 0x25, struct usrp_e_i2c)
++#define USRP_E_I2C_WRITE      _IOW(USRP_E_IOC_MAGIC, 0x26, struct usrp_e_i2c)
++#define USRP_E_GET_RB_INFO      _IOR(USRP_E_IOC_MAGIC, 0x27, struct usrp_e_ring_buffer_size_t)
++
++/* Flag defines */
++#define RB_USER (BIT(0))
++#define RB_KERNEL (BIT(1))
++#define RB_OVERRUN (BIT(2))
++#define RB_DMA_ACTIVE (BIT(3))
++
++struct ring_buffer_info {
++      int flags;
++      int len;
++};
++
++struct usrp_e_ring_buffer_size_t {
++      int num_pages_rx_flags;
++      int num_rx_frames;
++      int num_pages_tx_flags;
++      int num_tx_frames;
++};
++
++#endif
+-- 
+1.6.6.1
+
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/defconfig b/recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/defconfig
new file mode 100644 (file)
index 0000000..d6d7cb8
--- /dev/null
@@ -0,0 +1,3373 @@
+#
+# Automatically generated make config: don't edit
+# Linux/arm 2.6.37-rc7 Kernel Configuration
+# Wed Dec 29 11:57:49 2010
+#
+CONFIG_ARM=y
+CONFIG_HAVE_PWM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_HAVE_PROC_CPU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_ARM_L1_CACHE_SHIFT_6=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+CONFIG_HAVE_IRQ_WORK=y
+CONFIG_IRQ_WORK=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+# CONFIG_AUDIT is not set
+# CONFIG_HAVE_GENERIC_HARDIRQS is not set
+# CONFIG_SPARSE_IRQ is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_PREEMPT_RCU=y
+# CONFIG_TINY_RCU is not set
+# CONFIG_TINY_PREEMPT_RCU is not set
+CONFIG_PREEMPT_RCU=y
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=16
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_NS=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CPUSETS=y
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_RESOURCE_COUNTERS=y
+CONFIG_CGROUP_MEM_RES_CTLR=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y
+CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_RT_GROUP_SCHED=y
+# CONFIG_BLK_CGROUP is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_MM_OWNER=y
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_RD_LZO=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_PERF_EVENTS=y
+# CONFIG_PERF_COUNTERS is not set
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+CONFIG_OPROFILE=y
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_FORCE_LOAD=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+CONFIG_BLK_DEV_BSG=y
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_VEXPRESS is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CNS3XXX is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_LPC32XX is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5P64X0 is not set
+# CONFIG_ARCH_S5P6442 is not set
+# CONFIG_ARCH_S5PC100 is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_S5PV310 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_TCC_926 is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_PLAT_SPEAR is not set
+
+#
+# TI OMAP Common Features
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+CONFIG_ARCH_OMAP2PLUS=y
+
+#
+# OMAP Feature Selections
+#
+CONFIG_OMAP_SMARTREFLEX=y
+CONFIG_OMAP_SMARTREFLEX_CLASS3=y
+CONFIG_OMAP_RESET_CLOCKS=y
+# CONFIG_OMAP_MUX is not set
+CONFIG_OMAP_MCBSP=y
+CONFIG_OMAP_MBOX_FWK=m
+CONFIG_OMAP_MBOX_KFIFO_SIZE=256
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_PM_NONE is not set
+CONFIG_OMAP_PM_NOOP=y
+
+#
+# TI OMAP2/3/4 Specific Features
+#
+CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+# CONFIG_ARCH_OMAP4 is not set
+CONFIG_ARCH_OMAP3430=y
+CONFIG_OMAP_PACKAGE_CBB=y
+
+#
+# OMAP Board Type
+#
+CONFIG_MACH_OMAP3_BEAGLE=y
+# CONFIG_MACH_DEVKIT8000 is not set
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OMAP3530_LV_SOM is not set
+# CONFIG_MACH_OMAP3_TORPEDO is not set
+CONFIG_MACH_OVERO=y
+CONFIG_MACH_OMAP3EVM=y
+# CONFIG_MACH_OMAP3517EVM is not set
+# CONFIG_MACH_CRANEBOARD is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
+CONFIG_MACH_OMAP3_TOUCHBOOK=y
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_NOKIA_RM680 is not set
+# CONFIG_MACH_NOKIA_RX51 is not set
+CONFIG_MACH_OMAP_ZOOM2=y
+# CONFIG_MACH_OMAP_ZOOM3 is not set
+# CONFIG_MACH_CM_T35 is not set
+# CONFIG_MACH_CM_T3517 is not set
+# CONFIG_MACH_IGEP0020 is not set
+# CONFIG_MACH_IGEP0030 is not set
+# CONFIG_MACH_SBC3530 is not set
+# CONFIG_MACH_OMAP_3630SDP is not set
+# CONFIG_OMAP3_EMU is not set
+# CONFIG_OMAP3_SDRC_AC_TIMING is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_ARM_THUMBEE=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=6
+CONFIG_ARM_DMA_MEM_BUFFERABLE=y
+CONFIG_ARM_ERRATA_430973=y
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+# CONFIG_ARM_ERRATA_743622 is not set
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_NEED_PER_CPU_KM=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+CONFIG_LEDS=y
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+# CONFIG_SECCOMP is not set
+# CONFIG_CC_STACKPROTECTOR is not set
+# CONFIG_DEPRECATED_PARAM_STRUCT is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" debug "
+# CONFIG_CMDLINE_FORCE is not set
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+# CONFIG_AUTO_ZRELADDR is not set
+
+#
+# CPU Power Management
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+CONFIG_BINFMT_AOUT=m
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+# CONFIG_PM_ADVANCED_DEBUG is not set
+# CONFIG_PM_VERBOSE is not set
+CONFIG_CAN_PM_TRACE=y
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_NVS=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+CONFIG_PM_RUNTIME=y
+CONFIG_PM_OPS=y
+CONFIG_ARCH_HAS_OPP=y
+CONFIG_PM_OPP=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_XFRM_IPCOMP=m
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE_DEMUX=m
+CONFIG_NET_IPGRE=m
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+CONFIG_INET_LRO=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=m
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=m
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_VENO=m
+CONFIG_TCP_CONG_YEAH=m
+CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_DEFAULT_CUBIC=y
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_SIT_6RD is not set
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
+# CONFIG_IPV6_PIMSM_V2 is not set
+# CONFIG_NETWORK_SECMARK is not set
+CONFIG_NETWORK_PHY_TIMESTAMPING=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_ZONES=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_DCCP=m
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=m
+
+#
+# Xtables combined modules
+#
+CONFIG_NETFILTER_XT_MARK=m
+CONFIG_NETFILTER_XT_CONNMARK=m
+
+#
+# Xtables targets
+#
+CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_CT=m
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+CONFIG_NETFILTER_XT_TARGET_HL=m
+CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
+CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+CONFIG_NETFILTER_XT_TARGET_TEE=m
+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+
+#
+# Xtables matches
+#
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_CPU=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+CONFIG_NETFILTER_XT_MATCH_IPVS=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+CONFIG_NETFILTER_XT_MATCH_OWNER=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_RECENT=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_IP_VS=m
+CONFIG_IP_VS_IPV6=y
+CONFIG_IP_VS_DEBUG=y
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_AH_ESP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+# CONFIG_IP_VS_PROTO_SCTP is not set
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_NFCT=y
+CONFIG_IP_VS_PE_SIP=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=m
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_DCCP=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_PROTO_UDPLITE=m
+CONFIG_NF_NAT_PROTO_SCTP=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV6=m
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_RAW=m
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+CONFIG_IP_DCCP=m
+CONFIG_INET_DCCP_DIAG=m
+
+#
+# DCCP CCIDs Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+CONFIG_IP_DCCP_CCID3=y
+# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+CONFIG_IP_DCCP_TFRC_LIB=y
+
+#
+# DCCP Kernel Hacking
+#
+# CONFIG_IP_DCCP_DEBUG is not set
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+# CONFIG_RDS is not set
+CONFIG_TIPC=m
+# CONFIG_TIPC_ADVANCED is not set
+# CONFIG_TIPC_DEBUG is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_L2TP=m
+CONFIG_L2TP_DEBUGFS=m
+CONFIG_L2TP_V3=y
+CONFIG_L2TP_IP=m
+CONFIG_L2TP_ETH=m
+CONFIG_STP=m
+CONFIG_GARP=m
+CONFIG_BRIDGE=m
+CONFIG_BRIDGE_IGMP_SNOOPING=y
+# CONFIG_NET_DSA is not set
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+CONFIG_WAN_ROUTER=m
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_MULTIQ=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_DRR=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_CLS_FLOW=m
+CONFIG_NET_CLS_CGROUP=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+# CONFIG_DCB is not set
+CONFIG_DNS_RESOLVER=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_CAN=m
+CONFIG_CAN_RAW=m
+CONFIG_CAN_BCM=m
+
+#
+# CAN Device Drivers
+#
+CONFIG_CAN_VCAN=m
+# CONFIG_CAN_DEV is not set
+# CONFIG_CAN_DEBUG_DEVICES is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+# CONFIG_ACT200L_DONGLE is not set
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+CONFIG_BT_ATH3K=m
+CONFIG_AF_RXRPC=m
+# CONFIG_AF_RXRPC_DEBUG is not set
+# CONFIG_RXKAD is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_SPY=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=m
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_REG_DEBUG is not set
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=y
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_LIB80211_DEBUG is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+CONFIG_MAC80211_RC_DEFAULT="pid"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_WIMAX=m
+CONFIG_WIMAX_DEBUG_LEVEL=8
+CONFIG_RFKILL=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_NET_9P=m
+# CONFIG_NET_9P_DEBUG is not set
+# CONFIG_CAIF is not set
+CONFIG_CEPH_LIB=m
+# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+CONFIG_SM_FTL=m
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_PLATFORM=y
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+# CONFIG_BLK_DEV_RBD is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_APDS9802ALS is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_ISL29020 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+CONFIG_SENSORS_BH1780=m
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+CONFIG_HMC6352=m
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+CONFIG_BMP085=m
+CONFIG_USRP_E=m
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=m
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+CONFIG_EEPROM_93CX6=y
+CONFIG_IWMC3200TOP=m
+# CONFIG_IWMC3200TOP_DEBUG is not set
+# CONFIG_IWMC3200TOP_DEBUGFS is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+CONFIG_TI_ST=m
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_CHR_DEV_SCH=m
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_ISCSI_BOOT_SYSFS=m
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+CONFIG_MD_RAID10=m
+CONFIG_MD_RAID456=m
+CONFIG_MD_MULTIPATH=m
+CONFIG_MD_FAULTY=m
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+CONFIG_DM_MIRROR=m
+# CONFIG_DM_LOG_USERSPACE is not set
+CONFIG_DM_ZERO=m
+CONFIG_DM_MULTIPATH=m
+# CONFIG_DM_MULTIPATH_QL is not set
+# CONFIG_DM_MULTIPATH_ST is not set
+CONFIG_DM_DELAY=m
+# CONFIG_DM_UEVENT is not set
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=m
+CONFIG_BONDING=m
+CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+CONFIG_MII=y
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+CONFIG_BCM63XX_PHY=m
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+CONFIG_MICREL_PHY=m
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_AX88796 is not set
+CONFIG_SMC91X=y
+# CONFIG_TI_DAVINCI_EMAC is not set
+CONFIG_TI_DAVINCI_MDIO=m
+CONFIG_TI_DAVINCI_CPDMA=m
+# CONFIG_DM9000 is not set
+CONFIG_ENC28J60=y
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+# CONFIG_ETHOC is not set
+CONFIG_SMC911X=y
+CONFIG_SMSC911X=y
+# CONFIG_SMSC911X_ARCH_HOOKS is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+CONFIG_KS8851=y
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_LIBERTAS_THINFIRM is not set
+CONFIG_AT76C50X_USB=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=m
+CONFIG_RTL8187_LEDS=y
+# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_ATH_COMMON is not set
+CONFIG_B43=m
+# CONFIG_B43_SDIO is not set
+CONFIG_B43_PIO=y
+CONFIG_B43_PHY_LP=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_HWRNG=y
+# CONFIG_B43_DEBUG is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+# CONFIG_IWM is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_LIBERTAS_MESH is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+# CONFIG_RT2800USB is not set
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+CONFIG_WL12XX=m
+CONFIG_WL1271=m
+CONFIG_WL1271_SPI=m
+CONFIG_WL1271_SDIO=m
+CONFIG_WL12XX_PLATFORM_DATA=y
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# WiMAX Wireless Broadband devices
+#
+CONFIG_WIMAX_I2400M=m
+CONFIG_WIMAX_I2400M_USB=m
+CONFIG_WIMAX_I2400M_SDIO=m
+CONFIG_WIMAX_IWMC3200_SDIO=y
+CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=y
+CONFIG_USB_KAWETH=y
+CONFIG_USB_PEGASUS=y
+CONFIG_USB_RTL8150=y
+CONFIG_USB_USBNET=y
+CONFIG_USB_NET_AX8817X=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_DM9601=y
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=y
+CONFIG_USB_NET_GL620A=y
+CONFIG_USB_NET_NET1080=y
+CONFIG_USB_NET_PLUSB=y
+CONFIG_USB_NET_MCS7830=y
+CONFIG_USB_NET_RNDIS_HOST=y
+CONFIG_USB_NET_CDC_SUBSET=y
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=y
+CONFIG_USB_NET_CX82310_ETH=m
+CONFIG_USB_HSO=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_USB_IPHETH=m
+CONFIG_USB_SIERRA_NET=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+# CONFIG_ATM_DUMMY is not set
+# CONFIG_ATM_TCP is not set
+
+#
+# CAIF transport drivers
+#
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPTP=m
+# CONFIG_PPPOATM is not set
+CONFIG_PPPOL2TP=m
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+CONFIG_NETPOLL=y
+CONFIG_NETPOLL_TRAP=y
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
+CONFIG_INPUT_POLLDEV=y
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_QT2160=m
+# CONFIG_KEYBOARD_LKKBD is not set
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_GPIO_POLLED is not set
+# CONFIG_KEYBOARD_TCA6416 is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+CONFIG_KEYBOARD_MCS=m
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_TWL4030 is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_ELANTECH is not set
+# CONFIG_MOUSE_PS2_SENTELIC is not set
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_APPLETOUCH is not set
+# CONFIG_MOUSE_BCM5974 is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_AD714X=m
+CONFIG_INPUT_AD714X_I2C=m
+CONFIG_INPUT_AD714X_SPI=m
+# CONFIG_INPUT_ATI_REMOTE is not set
+# CONFIG_INPUT_ATI_REMOTE2 is not set
+# CONFIG_INPUT_KEYSPAN_REMOTE is not set
+# CONFIG_INPUT_POWERMATE is not set
+# CONFIG_INPUT_YEALINK is not set
+# CONFIG_INPUT_CM109 is not set
+CONFIG_INPUT_TWL4030_PWRBUTTON=y
+CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_UINPUT=y
+CONFIG_INPUT_PCF8574=m
+CONFIG_INPUT_PWM_BEEPER=m
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
+CONFIG_INPUT_ADXL34X=m
+CONFIG_INPUT_ADXL34X_I2C=m
+CONFIG_INPUT_ADXL34X_SPI=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_SERIO_ALTERA_PS2 is not set
+# CONFIG_SERIO_PS2MULT is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_N_GSM=m
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX3107 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_OMAP=y
+CONFIG_SERIAL_OMAP_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_TTY_PRINTK=y
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_RAMOOPS is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_MUX=m
+
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_MUX_PCA9541 is not set
+# CONFIG_I2C_MUX_PCA954x is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=m
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_OMAP24XX=y
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=y
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_MAX730X=m
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_BASIC_MMIO is not set
+# CONFIG_GPIO_IT8761E is not set
+# CONFIG_GPIO_VX855 is not set
+
+#
+# I2C GPIO expanders:
+#
+CONFIG_GPIO_MAX7300=m
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_SX150X is not set
+CONFIG_GPIO_TWL4030=y
+CONFIG_GPIO_ADP5588=m
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_74X164 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_W1 is not set
+CONFIG_POWER_SUPPLY=m
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+# CONFIG_PDA_POWER is not set
+CONFIG_TEST_POWER=m
+# CONFIG_BATTERY_DS2782 is not set
+# CONFIG_BATTERY_BQ20Z75 is not set
+# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
+CONFIG_CHARGER_ISP1704=m
+CONFIG_CHARGER_TWL4030=m
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_AD7414 is not set
+# CONFIG_SENSORS_AD7418 is not set
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1029 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+CONFIG_SENSORS_ADT7411=m
+# CONFIG_SENSORS_ADT7462 is not set
+# CONFIG_SENSORS_ADT7470 is not set
+# CONFIG_SENSORS_ADT7475 is not set
+CONFIG_SENSORS_ASC7621=m
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_F75375S is not set
+# CONFIG_SENSORS_G760A is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+CONFIG_SENSORS_GPIO_FAN=m
+# CONFIG_SENSORS_IT87 is not set
+CONFIG_SENSORS_JC42=m
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM70 is not set
+# CONFIG_SENSORS_LM73 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LTC4261 is not set
+# CONFIG_SENSORS_LM95241 is not set
+# CONFIG_SENSORS_MAX1111 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_MAX6650 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_SHT15 is not set
+CONFIG_SENSORS_SMM665=m
+# CONFIG_SENSORS_DME1737 is not set
+CONFIG_SENSORS_EMC1403=m
+CONFIG_SENSORS_EMC2103=m
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47M192 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_ADS7828 is not set
+CONFIG_SENSORS_ADS7871=m
+CONFIG_SENSORS_AMC6821=m
+# CONFIG_SENSORS_THMC50 is not set
+CONFIG_SENSORS_TMP102=m
+# CONFIG_SENSORS_TMP401 is not set
+# CONFIG_SENSORS_TMP421 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83791D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83793 is not set
+# CONFIG_SENSORS_W83795 is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83L786NG is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_HWMON=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_TWL4030_WATCHDOG is not set
+# CONFIG_MAX63XX_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_MFD_SUPPORT=y
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TPS6507X=m
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL4030_POWER=y
+CONFIG_TWL4030_CODEC=y
+CONFIG_TWL6030_PWM=m
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_TC35892 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13XXX is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_EZX_PCAP is not set
+CONFIG_MFD_TPS6586X=y
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+CONFIG_REGULATOR_DUMMY=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_AD5398 is not set
+CONFIG_REGULATOR_TPS6586X=m
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+CONFIG_VIDEO_DEV=y
+CONFIG_VIDEO_V4L2_COMMON=y
+CONFIG_VIDEO_ALLOW_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_DVB_CORE=m
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_IR_CORE=m
+CONFIG_VIDEO_IR=m
+CONFIG_LIRC=m
+CONFIG_RC_MAP=m
+CONFIG_IR_NEC_DECODER=m
+CONFIG_IR_RC5_DECODER=m
+CONFIG_IR_RC6_DECODER=m
+CONFIG_IR_JVC_DECODER=m
+CONFIG_IR_SONY_DECODER=m
+CONFIG_IR_RC5_SZ_DECODER=m
+CONFIG_IR_LIRC_CODEC=m
+# CONFIG_IR_IMON is not set
+# CONFIG_IR_MCEUSB is not set
+# CONFIG_IR_STREAMZAP is not set
+CONFIG_MEDIA_ATTACH=y
+CONFIG_MEDIA_TUNER=m
+CONFIG_MEDIA_TUNER_CUSTOMISE=y
+
+#
+# Customize TV tuners
+#
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_MEDIA_TUNER_MAX2165=m
+CONFIG_MEDIA_TUNER_TDA18218=m
+CONFIG_VIDEO_V4L2=y
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEOBUF_GEN=y
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEOBUF_DMA_CONTIG=y
+CONFIG_VIDEOBUF_DVB=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_V4L2_MEM2MEM_DEV=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
+CONFIG_VIDEO_IR_I2C=m
+
+#
+# Encoders/decoders and other helper chips
+#
+
+#
+# Audio decoders
+#
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TDA9875 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+CONFIG_VIDEO_MSP3400=m
+# CONFIG_VIDEO_CS5345 is not set
+CONFIG_VIDEO_CS53L32A=m
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+CONFIG_VIDEO_WM8775=m
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+
+#
+# RDS decoders
+#
+# CONFIG_VIDEO_SAA6588 is not set
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_ADV7180 is not set
+# CONFIG_VIDEO_BT819 is not set
+# CONFIG_VIDEO_BT856 is not set
+# CONFIG_VIDEO_BT866 is not set
+# CONFIG_VIDEO_KS0127 is not set
+# CONFIG_VIDEO_OV7670 is not set
+CONFIG_VIDEO_MT9V011=m
+# CONFIG_VIDEO_TCM825X is not set
+# CONFIG_VIDEO_SAA7110 is not set
+CONFIG_VIDEO_SAA711X=m
+# CONFIG_VIDEO_SAA717X is not set
+# CONFIG_VIDEO_SAA7191 is not set
+# CONFIG_VIDEO_TVP514X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_TVP7002 is not set
+# CONFIG_VIDEO_VPX3220 is not set
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_SAA7185 is not set
+# CONFIG_VIDEO_ADV7170 is not set
+# CONFIG_VIDEO_ADV7175 is not set
+# CONFIG_VIDEO_THS7303 is not set
+# CONFIG_VIDEO_ADV7343 is not set
+# CONFIG_VIDEO_AK881X is not set
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+CONFIG_VIDEO_VIVI=m
+CONFIG_VIDEO_VPFE_CAPTURE=y
+# CONFIG_VIDEO_DM6446_CCDC is not set
+CONFIG_VIDEO_OMAP2_VOUT=y
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_AU0828 is not set
+CONFIG_VIDEO_SR030PC30=m
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_USB_M5602=m
+CONFIG_USB_STV06XX=m
+# CONFIG_USB_GL860 is not set
+CONFIG_USB_GSPCA_BENQ=m
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_CPIA1=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+# CONFIG_USB_GSPCA_JEILINJ is not set
+CONFIG_USB_GSPCA_KONICA=m
+CONFIG_USB_GSPCA_MARS=m
+# CONFIG_USB_GSPCA_MR97310A is not set
+CONFIG_USB_GSPCA_OV519=m
+CONFIG_USB_GSPCA_OV534=m
+CONFIG_USB_GSPCA_OV534_9=m
+CONFIG_USB_GSPCA_PAC207=m
+# CONFIG_USB_GSPCA_PAC7302 is not set
+CONFIG_USB_GSPCA_PAC7311=m
+CONFIG_USB_GSPCA_SN9C2028=m
+# CONFIG_USB_GSPCA_SN9C20X is not set
+CONFIG_USB_GSPCA_SONIXB=m
+CONFIG_USB_GSPCA_SONIXJ=m
+CONFIG_USB_GSPCA_SPCA500=m
+CONFIG_USB_GSPCA_SPCA501=m
+CONFIG_USB_GSPCA_SPCA505=m
+CONFIG_USB_GSPCA_SPCA506=m
+CONFIG_USB_GSPCA_SPCA508=m
+CONFIG_USB_GSPCA_SPCA561=m
+CONFIG_USB_GSPCA_SPCA1528=m
+# CONFIG_USB_GSPCA_SQ905 is not set
+# CONFIG_USB_GSPCA_SQ905C is not set
+CONFIG_USB_GSPCA_SQ930X=m
+CONFIG_USB_GSPCA_STK014=m
+# CONFIG_USB_GSPCA_STV0680 is not set
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TV8532=m
+CONFIG_USB_GSPCA_VC032X=m
+CONFIG_USB_GSPCA_XIRLINK_CIT=m
+CONFIG_USB_GSPCA_ZC3XX=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_HDPVR=m
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+CONFIG_VIDEO_TLG2300=m
+CONFIG_VIDEO_CX231XX=m
+# CONFIG_VIDEO_CX231XX_ALSA is not set
+CONFIG_VIDEO_CX231XX_DVB=m
+CONFIG_VIDEO_USBVISION=m
+CONFIG_VIDEO_USBVIDEO=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_ET61X251=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_PWC_INPUT_EVDEV=y
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_VIDEO_MEM2MEM_TESTDEV=m
+CONFIG_RADIO_ADAPTERS=y
+# CONFIG_I2C_SI4713 is not set
+# CONFIG_RADIO_SI4713 is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_RADIO_SI470X is not set
+# CONFIG_USB_MR800 is not set
+# CONFIG_RADIO_TEA5764 is not set
+CONFIG_RADIO_SAA7706H=m
+# CONFIG_RADIO_TEF6862 is not set
+CONFIG_DVB_MAX_ADAPTERS=8
+CONFIG_DVB_DYNAMIC_MINORS=y
+CONFIG_DVB_CAPTURE_DRIVERS=y
+# CONFIG_TTPCI_EEPROM is not set
+
+#
+# Supported USB Adapters
+#
+CONFIG_DVB_USB=m
+# CONFIG_DVB_USB_DEBUG is not set
+CONFIG_DVB_USB_A800=m
+CONFIG_DVB_USB_DIBUSB_MB=m
+# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+CONFIG_DVB_USB_DIBUSB_MC=m
+CONFIG_DVB_USB_DIB0700=m
+CONFIG_DVB_USB_UMT_010=m
+CONFIG_DVB_USB_CXUSB=m
+CONFIG_DVB_USB_M920X=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_DIGITV=m
+CONFIG_DVB_USB_VP7045=m
+CONFIG_DVB_USB_VP702X=m
+CONFIG_DVB_USB_GP8PSK=m
+CONFIG_DVB_USB_NOVA_T_USB2=m
+CONFIG_DVB_USB_TTUSB2=m
+CONFIG_DVB_USB_DTT200U=m
+CONFIG_DVB_USB_OPERA1=m
+CONFIG_DVB_USB_AF9005=m
+CONFIG_DVB_USB_AF9005_REMOTE=m
+CONFIG_DVB_USB_DW2102=m
+CONFIG_DVB_USB_CINERGY_T2=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_DTV5100=m
+CONFIG_DVB_USB_AF9015=m
+# CONFIG_DVB_USB_CE6230 is not set
+# CONFIG_DVB_USB_FRIIO is not set
+# CONFIG_DVB_USB_EC168 is not set
+CONFIG_DVB_USB_AZ6027=m
+CONFIG_DVB_USB_LME2510=m
+# CONFIG_SMS_SIANO_MDTV is not set
+
+#
+# Supported FlexCopII (B2C2) Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+
+#
+# Supported DVB Frontends
+#
+# CONFIG_DVB_FE_CUSTOMISE is not set
+
+#
+# Multistandard (satellite) frontends
+#
+CONFIG_DVB_STB0899=m
+CONFIG_DVB_STB6100=m
+# CONFIG_DVB_STV090x is not set
+# CONFIG_DVB_STV6110x is not set
+
+#
+# DVB-S (satellite) frontends
+#
+# CONFIG_DVB_CX24110 is not set
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_MT312=m
+# CONFIG_DVB_ZL10036 is not set
+CONFIG_DVB_ZL10039=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_STV0288=m
+CONFIG_DVB_STB6000=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_STV6110=m
+CONFIG_DVB_STV0900=m
+# CONFIG_DVB_TDA8083 is not set
+CONFIG_DVB_TDA10086=m
+# CONFIG_DVB_TDA8261 is not set
+# CONFIG_DVB_VES1X93 is not set
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_TUNER_CX24113=m
+CONFIG_DVB_TDA826X=m
+# CONFIG_DVB_TUA6100 is not set
+CONFIG_DVB_CX24116=m
+CONFIG_DVB_SI21XX=m
+CONFIG_DVB_DS3000=m
+# CONFIG_DVB_MB86A16 is not set
+
+#
+# DVB-T (terrestrial) frontends
+#
+# CONFIG_DVB_SP8870 is not set
+# CONFIG_DVB_SP887X is not set
+# CONFIG_DVB_CX22700 is not set
+CONFIG_DVB_CX22702=m
+# CONFIG_DVB_S5H1432 is not set
+# CONFIG_DVB_DRX397XD is not set
+# CONFIG_DVB_L64781 is not set
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_AF9013=m
+# CONFIG_DVB_EC100 is not set
+
+#
+# DVB-C (cable) frontends
+#
+# CONFIG_DVB_VES1820 is not set
+# CONFIG_DVB_TDA10021 is not set
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_STV0297=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_NXT200X=m
+# CONFIG_DVB_OR51211 is not set
+# CONFIG_DVB_OR51132 is not set
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_S5H1409=m
+# CONFIG_DVB_AU8522 is not set
+CONFIG_DVB_S5H1411=m
+
+#
+# ISDB-T (terrestrial) frontends
+#
+# CONFIG_DVB_S921 is not set
+CONFIG_DVB_DIB8000=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+CONFIG_DVB_TUNER_DIB0090=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_LNBP21=m
+# CONFIG_DVB_ISL6405 is not set
+CONFIG_DVB_ISL6421=m
+# CONFIG_DVB_ISL6423 is not set
+# CONFIG_DVB_LGS8GL5 is not set
+CONFIG_DVB_LGS8GXX=m
+CONFIG_DVB_ATBM8830=m
+# CONFIG_DVB_TDA665x is not set
+CONFIG_DVB_IX2505V=m
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+CONFIG_DRM=m
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+CONFIG_FB_SYS_FILLRECT=m
+CONFIG_FB_SYS_COPYAREA=m
+CONFIG_FB_SYS_IMAGEBLIT=m
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYS_FOPS=m
+CONFIG_FB_DEFERRED_IO=y
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_TMIO is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=14
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set
+CONFIG_OMAP2_DSS_DPI=y
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+CONFIG_OMAP2_DSS_DSI=y
+CONFIG_OMAP2_DSS_USE_DSI_PLL=y
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
+CONFIG_FB_OMAP2_NUM_FBS=2
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+CONFIG_PANEL_SHARP_LS037V7DW01=y
+# CONFIG_PANEL_SHARP_LQ043T1DG01 is not set
+# CONFIG_PANEL_TAAL is not set
+CONFIG_PANEL_TOPPOLY_TDO35S=m
+CONFIG_PANEL_TPO_TD043MTEA1=m
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=y
+
+#
+# Display hardware drivers
+#
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_SOUND=y
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=y
+CONFIG_SND_RAWMIDI=y
+CONFIG_SND_JACK=y
+CONFIG_SND_SEQUENCER=m
+# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_HRTIMER=m
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_RAWMIDI_SEQ=m
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
+CONFIG_SND_DRIVERS=y
+# CONFIG_SND_DUMMY is not set
+CONFIG_SND_ALOOP=m
+# CONFIG_SND_VIRMIDI is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+# CONFIG_SND_ARM is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_USB_UA101=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_SOC=y
+CONFIG_SND_OMAP_SOC=y
+CONFIG_SND_OMAP_SOC_MCBSP=y
+CONFIG_SND_OMAP_SOC_OVERO=y
+CONFIG_SND_OMAP_SOC_OMAP3EVM=y
+CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=y
+CONFIG_SND_OMAP_SOC_ZOOM2=y
+CONFIG_SND_SOC_I2C_AND_SPI=y
+# CONFIG_SND_SOC_ALL_CODECS is not set
+CONFIG_SND_SOC_TWL4030=y
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_3M_PCT is not set
+CONFIG_HID_A4TECH=y
+# CONFIG_HID_ACRUX_FF is not set
+CONFIG_HID_APPLE=y
+CONFIG_HID_BELKIN=y
+# CONFIG_HID_CANDO is not set
+CONFIG_HID_CHERRY=y
+CONFIG_HID_CHICONY=y
+# CONFIG_HID_PRODIKEYS is not set
+CONFIG_HID_CYPRESS=y
+# CONFIG_HID_DRAGONRISE is not set
+CONFIG_HID_EGALAX=m
+# CONFIG_HID_ELECOM is not set
+CONFIG_HID_EZKEY=y
+# CONFIG_HID_KYE is not set
+CONFIG_HID_UCLOGIC=m
+CONFIG_HID_WALTOP=m
+CONFIG_HID_GYRATION=y
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+CONFIG_HID_LOGITECH=y
+# CONFIG_LOGITECH_FF is not set
+# CONFIG_LOGIRUMBLEPAD2_FF is not set
+# CONFIG_LOGIG940_FF is not set
+# CONFIG_LOGIWII_FF is not set
+CONFIG_HID_MAGICMOUSE=m
+CONFIG_HID_MICROSOFT=y
+# CONFIG_HID_MOSART is not set
+CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
+# CONFIG_HID_ORTEK is not set
+CONFIG_HID_PANTHERLORD=y
+# CONFIG_PANTHERLORD_FF is not set
+CONFIG_HID_PETALYNX=y
+CONFIG_HID_PICOLCD=m
+CONFIG_HID_PICOLCD_FB=y
+CONFIG_HID_PICOLCD_BACKLIGHT=y
+CONFIG_HID_PICOLCD_LEDS=y
+CONFIG_HID_QUANTA=m
+CONFIG_HID_ROCCAT=m
+CONFIG_HID_ROCCAT_KONE=m
+# CONFIG_HID_ROCCAT_PYRA is not set
+CONFIG_HID_SAMSUNG=y
+CONFIG_HID_SONY=y
+CONFIG_HID_STANTUM=m
+CONFIG_HID_SUNPLUS=y
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+CONFIG_HID_TOPSEED=y
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_WACOM is not set
+# CONFIG_HID_ZEROPLUS is not set
+# CONFIG_HID_ZYDACRON is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_U132_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_AM35X is not set
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+CONFIG_USB_TMC=m
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+CONFIG_USB_UAS=m
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+# CONFIG_USB_SERIAL_CP210X is not set
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_QCAUX=m
+# CONFIG_USB_SERIAL_QUALCOMM is not set
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SAMBA=m
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+# CONFIG_USB_SERIAL_SYMBOL is not set
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+# CONFIG_USB_SERIAL_OPTION is not set
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
+CONFIG_USB_SERIAL_ZIO=m
+CONFIG_USB_SERIAL_SSU100=m
+CONFIG_USB_SERIAL_DEBUG=m
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=m
+# CONFIG_USB_ISIGHTFW is not set
+CONFIG_USB_YUREX=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_DEBUG_FS=y
+CONFIG_USB_GADGET_VBUS_DRAW=480
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+CONFIG_USB_FUNCTIONFS=m
+# CONFIG_USB_FUNCTIONFS_ETH is not set
+CONFIG_USB_FUNCTIONFS_RNDIS=y
+# CONFIG_USB_FUNCTIONFS_GENERIC is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_MASS_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_MULTI is not set
+CONFIG_USB_G_HID=m
+CONFIG_USB_G_DBGP=m
+# CONFIG_USB_G_DBGP_PRINTK is not set
+CONFIG_USB_G_DBGP_SERIAL=y
+CONFIG_USB_G_WEBCAM=m
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+CONFIG_USB_GPIO_VBUS=y
+# CONFIG_ISP1301_OMAP is not set
+# CONFIG_USB_ULPI is not set
+CONFIG_TWL4030_USB=y
+CONFIG_NOP_USB_XCEIV=y
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_BLOCK_BOUNCE=y
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_OMAP is not set
+CONFIG_MMC_OMAP_HS=y
+CONFIG_MMC_SPI=m
+CONFIG_MMC_USHC=m
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+CONFIG_LEDS_LP5521=m
+CONFIG_LEDS_LP5523=m
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+CONFIG_LEDS_PWM=m
+CONFIG_LEDS_REGULATOR=m
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=m
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS1307=m
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_BQ32K=m
+CONFIG_RTC_DRV_TWL4030=m
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+CONFIG_UIO=m
+CONFIG_UIO_PDRV=m
+CONFIG_UIO_PDRV_GENIRQ=m
+CONFIG_STAGING=y
+# CONFIG_STAGING_EXCLUDE_BUILD is not set
+# CONFIG_VIDEO_TM6000 is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_USB_IP_COMMON is not set
+CONFIG_W35UND=m
+CONFIG_PRISM2_USB=m
+CONFIG_ECHO=m
+CONFIG_BRCM80211=m
+CONFIG_BRCMFMAC=y
+CONFIG_RT2870=m
+# CONFIG_COMEDI is not set
+# CONFIG_ASUS_OLED is not set
+CONFIG_R8712U=m
+CONFIG_R8712_AP=y
+# CONFIG_TRANZPORT is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_USB_SERIAL_QUATECH2 is not set
+# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
+# CONFIG_VT6656 is not set
+CONFIG_FB_UDL=m
+# CONFIG_IIO is not set
+CONFIG_ZRAM=m
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_FB_SM7XX is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+CONFIG_ST_BT=m
+CONFIG_ADIS16255=m
+# CONFIG_LIRC_STAGING is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_EASYCAP is not set
+# CONFIG_TIDSPBRIDGE is not set
+# CONFIG_MACH_OMAP3_WESTBRIDGE_AST_PNAND_HAL is not set
+CONFIG_MACH_NO_WESTBRIDGE=y
+# CONFIG_ATH6K_LEGACY is not set
+CONFIG_USB_ENESTORAGE=m
+CONFIG_BCM_WIMAX=m
+CONFIG_FT1000=m
+CONFIG_FT1000_USB=m
+
+#
+# Speakup console speech
+#
+# CONFIG_SPEAKUP is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+# CONFIG_REISERFS_FS_POSIX_ACL is not set
+# CONFIG_REISERFS_FS_SECURITY is not set
+CONFIG_JFS_FS=m
+# CONFIG_JFS_POSIX_ACL is not set
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_XFS_DEBUG is not set
+CONFIG_GFS2_FS=m
+# CONFIG_GFS2_FS_LOCKING_DLM is not set
+CONFIG_OCFS2_FS=m
+CONFIG_OCFS2_FS_O2CB=m
+CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+CONFIG_OCFS2_FS_STATS=y
+CONFIG_OCFS2_DEBUG_MASKLOG=y
+# CONFIG_OCFS2_DEBUG_FS is not set
+CONFIG_BTRFS_FS=m
+# CONFIG_BTRFS_FS_POSIX_ACL is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_EXPORTFS=m
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_FANOTIFY=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QUOTA_DEBUG is not set
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+# CONFIG_CUSE is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+CONFIG_MISC_FILESYSTEMS=y
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+# CONFIG_ECRYPT_FS is not set
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+# CONFIG_JFFS2_CMODE_PRIORITY is not set
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_JFFS2_CMODE_FAVOURLZO=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_XATTR=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+CONFIG_LOGFS=m
+CONFIG_CRAMFS=m
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_XATTR is not set
+CONFIG_SQUASHFS_LZO=y
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+CONFIG_VXFS_FS=m
+CONFIG_MINIX_FS=m
+CONFIG_OMFS_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_ROMFS_BACKED_BY_BLOCK=y
+# CONFIG_ROMFS_BACKED_BY_MTD is not set
+# CONFIG_ROMFS_BACKED_BY_BOTH is not set
+CONFIG_ROMFS_ON_BLOCK=y
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+CONFIG_NFS_USE_KERNEL_DNS=y
+# CONFIG_NFS_USE_NEW_IDMAPPER is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_DEPRECATED=y
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+CONFIG_CEPH_FS=m
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS=y
+CONFIG_CIFS_STATS2=y
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+# CONFIG_CIFS_UPCALL is not set
+# CONFIG_CIFS_XATTR is not set
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_DFS_UPCALL is not set
+CONFIG_CIFS_EXPERIMENTAL=y
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
+CONFIG_CODA_FS=m
+CONFIG_AFS_FS=m
+# CONFIG_AFS_DEBUG is not set
+CONFIG_9P_FS=m
+# CONFIG_9P_FS_POSIX_ACL is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+CONFIG_MAC_PARTITION=y
+CONFIG_MSDOS_PARTITION=y
+CONFIG_BSD_DISKLABEL=y
+CONFIG_MINIX_SUBPARTITION=y
+CONFIG_SOLARIS_X86_PARTITION=y
+# CONFIG_UNIXWARE_DISKLABEL is not set
+CONFIG_LDM_PARTITION=y
+CONFIG_LDM_DEBUG=y
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+CONFIG_EFI_PARTITION=y
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+
+#
+# Kernel hacking
+#
+CONFIG_PRINTK_TIME=y
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_LOCKUP_DETECTOR is not set
+# CONFIG_HARDLOCKUP_DETECTOR is not set
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHEDSTATS=y
+CONFIG_TIMER_STATS=y
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+CONFIG_BKL=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_LKDTM is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_RING_BUFFER=y
+CONFIG_RING_BUFFER_ALLOW_SWAP=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_ASYNC_RAID6_TEST is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_STRICT_DEVMEM is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+# CONFIG_DEBUG_LL is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_XOR_BLOCKS=m
+CONFIG_ASYNC_CORE=m
+CONFIG_ASYNC_MEMCPY=m
+CONFIG_ASYNC_XOR=m
+CONFIG_ASYNC_PQ=m
+CONFIG_ASYNC_RAID6_RECOV=m
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Authenticated Encryption with Associated Data
+#
+CONFIG_CRYPTO_CCM=m
+CONFIG_CRYPTO_GCM=m
+CONFIG_CRYPTO_SEQIV=m
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=m
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
+
+#
+# Hash modes
+#
+CONFIG_CRYPTO_HMAC=m
+CONFIG_CRYPTO_XCBC=m
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_GHASH=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_RMD128=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_RMD256=m
+CONFIG_CRYPTO_RMD320=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_WP512=m
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_OMAP_SHAM=m
+CONFIG_CRYPTO_DEV_OMAP_AES=m
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_RAID6_PQ=m
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_BTREE=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/logo_linux_clut224.ppm b/recipes-bsp/linux/linux-omap-2.6.37rc/beagleboard/logo_linux_clut224.ppm
new file mode 100644 (file)
index 0000000..d29fc1c
--- /dev/null
@@ -0,0 +1,73147 @@
+P3
+# CREATOR: GIMP PNM Filter Version 1.1
+387 63
+255
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246
+97
+3
+246